Я использовал 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
работать с выбранной учетной записью службы?
Я не уверен. Как бы я это проверил? Команда, которую я делаю, — это просто необработанная команда терминала bash gcloud: gcloud services list --available
Вы можете исключить это (это основная причина), попробовав список сервисов из облачной оболочки: console.cloud.google.com/home/dashboard?cloudshell=true . Контекст проекта относится к документам: cloud.google.com/sdk/gcloud/reference/config/set
О, интересно. Облачная оболочка ДЕЙСТВИТЕЛЬНО работала. Сначала это заставило меня щелкнуть авторизацию во всплывающем окне, в котором говорилось: «Авторизовать Cloud Shell Cloud Shell требуется разрешение на использование ваших учетных данных для облачной команды. Нажмите «Авторизовать», чтобы предоставить разрешение на этот и будущие вызовы». Затем он перечислил кучу вещей в формате NAME:, TITLE:
.
Да, сейчас у меня нет локальной среды, но когда я это сделал, поток аутентификации был аналогичен, был URL-адрес, сгенерированный во время аутентификации с локального терминала, и тогда вы могли выполнить вход в систему из браузера.
О, мне нужно войти с терминала? Что такое команда?
Да, смотрите здесь cloud.google.com/sdk/gcloud/reference/auth/login и не забудьте сделать набор проектов.
Простое 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 ...
Извините, вы делаете список услуг для учетной записи службы, похоже, что ваше существующее разрешение IAM не предоставлено для этого. Для учетной записи службы требуется область действия oauth: googleapis.com/auth/cloud-platform.read-only для выполнения этого действия: ref docs: cloud.google.com/service-usage/docs/reference/rest/v1 /servicees/…
Я не думаю, что какая-либо ссылка показывает, как установить область действия oauth для служебной учетной записи. Как мне на самом деле настроить мою учетную запись службы так, чтобы она имела область действия https://www.googleapis.com/auth/cloud-platform.read-only
?
Да, проще, как вы сами и ответили, найти роль с этой областью действия и добавить роль :)
Эта проблема, похоже, была связана с тем, что мне нужно было настроить учетную запись службы на роль 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
. Эта команда сработала на этот раз.
Вы устанавливаете ожидаемый контекст проекта для своего клиента cli gcp?