GCP - Пользователь ... не имеет разрешения на доступ к экземпляру проекта

Я использовал gcloud с служебной учетной записью, чтобы попытаться выяснить, почему моя конечная точка шлюза API не работает, когда столкнулся с другой проблемой. Сначала я запустил это export GOOGLE_APPLICATION_CREDENTIALS=/path/to/credential/fils/PROJECTNAME-hash.json. Затем я запустил gcloud services list --available и получил это в своем терминале:

ERROR: (gcloud.services.list) User [<SERVICE ACCOUNT NAME>@<MY PROJECT NAME>.iam.gserviceaccount.com] does not have permission to access projects instance [<MY PROJECT NAME>] (or it may not exist): Permission denied to list services for consumer container [projects/<MY PROJECT ID>]
Help Token: <WHAT LOOKS LIKE AN API KEY>
- '@type': type.googleapis.com/google.rpc.PreconditionFailure
  violations:
  - subject: ?error_code=110002&service=cloudresourcemanager.googleapis.com&permission=serviceusage.services.list&resource=projects/<MY PROJECT NAME>
    type: googleapis.com
- '@type': type.googleapis.com/google.rpc.ErrorInfo
  domain: serviceusage.googleapis.com
  metadata:
    permission: serviceusage.services.list
    resource: projects/<MY PROJECT NAME>
    service: cloudresourcemanager.googleapis.com
  reason: AUTH_PERMISSION_DENIED

Я считаю, что в моей служебной учетной записи включены правильные разрешения:

Итак, почему я получаю эту ошибку и как заставить gcloud services list --available работать с выбранной учетной записью службы?

Вы устанавливаете ожидаемый контекст проекта для своего клиента cli gcp?

Wey Gu 16.01.2023 04:33

Я не уверен. Как бы я это проверил? Команда, которую я делаю, — это просто необработанная команда терминала bash gcloud: gcloud services list --available

ChristianOConnor 16.01.2023 05:00

Вы можете исключить это (это основная причина), попробовав список сервисов из облачной оболочки: console.cloud.google.com/home/dashboard?cloudshell=true . Контекст проекта относится к документам: cloud.google.com/sdk/gcloud/reference/config/set

Wey Gu 16.01.2023 05:51

О, интересно. Облачная оболочка ДЕЙСТВИТЕЛЬНО работала. Сначала это заставило меня щелкнуть авторизацию во всплывающем окне, в котором говорилось: «Авторизовать Cloud Shell Cloud Shell требуется разрешение на использование ваших учетных данных для облачной команды. Нажмите «Авторизовать», чтобы предоставить разрешение на этот и будущие вызовы». Затем он перечислил кучу вещей в формате NAME:, TITLE:.

ChristianOConnor 16.01.2023 06:22

Да, сейчас у меня нет локальной среды, но когда я это сделал, поток аутентификации был аналогичен, был URL-адрес, сгенерированный во время аутентификации с локального терминала, и тогда вы могли выполнить вход в систему из браузера.

Wey Gu 16.01.2023 06:29

О, мне нужно войти с терминала? Что такое команда?

ChristianOConnor 16.01.2023 06:32

Да, смотрите здесь cloud.google.com/sdk/gcloud/reference/auth/login и не забудьте сделать набор проектов.

Wey Gu 16.01.2023 09:41

Простое gcloud auth login исправило это, но... Я заметил, что когда я делаю gcloud config list, account больше не является моей служебной учетной записью, а скорее моей общей учетной записью Google. Я повторно активировал свою учетную запись службы с помощью gcloud auth enable-service-account <ИМЯ УЧЕТНОЙ ЗАПИСИ СЛУЖБЫ>@<ИМЯ МОЕГО ПРОЕКТА>.iam.gserviceaccount.com --key-file =... И теперь я все еще получаю то же самое ERROR: (gcloud.services.list) User ... does not have permission to access projects instance ...

ChristianOConnor 16.01.2023 10:47

Извините, вы делаете список услуг для учетной записи службы, похоже, что ваше существующее разрешение IAM не предоставлено для этого. Для учетной записи службы требуется область действия oauth: googleapis.com/auth/cloud-platform.read-only для выполнения этого действия: ref docs: cloud.google.com/service-usage/docs/reference/rest/v1 /service‌​es/…

Wey Gu 16.01.2023 11:21

Я не думаю, что какая-либо ссылка показывает, как установить область действия oauth для служебной учетной записи. Как мне на самом деле настроить мою учетную запись службы так, чтобы она имела область действия https://www.googleapis.com/auth/cloud-platform.read-only?

ChristianOConnor 16.01.2023 11:32

Да, проще, как вы сами и ответили, найти роль с этой областью действия и добавить роль :)

Wey Gu 17.01.2023 04:15
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
1
11
198
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Эта проблема, похоже, была связана с тем, что мне нужно было настроить учетную запись службы на роль serviceusage.serviceUsageViewer. Для этого мне нужно запустить команду add-iam-policy-binding, но эту команду нужно запустить с учетной записью, имеющей права владельца/редактора учетной записи.

Шаг 1 заключался в том, чтобы переключить учетную запись в gcloud на основную учетную запись gmail, с которой я подписался на услуги GCP.

Я установил свою «учетную запись» gcloud на свою основную учетную запись Gmail с помощью gcloud config set account <MASTER GMAIL ACCOUNT>. Затем я побежал:

gcloud projects add-iam-policy-binding <PROJECT ID> \
    --member "serviceAccount:<SERVICE ACCOUNT>@<PROJECT ID>.iam.gserviceaccount.com" \
    --role "roles/serviceusage.serviceUsageViewer"

Эта команда увенчалась успехом. Я установил учетную запись gcloud обратно в учетную запись службы с помощью gcloud config set account <SERVICE ACCOUNT EMAIL>, а затем запустил gcloud services list --available. Эта команда сработала на этот раз.

Другие вопросы по теме