При предоставлении ролей моей учетной записи службы эти роли не дают мне тех разрешений, которые, как они утверждают, предоставляют.
Я использую Terraform. Я создал новую учетную запись службы, например:
gcloud iam service-accounts create terraform \
--display-name "Terraform admin account"
Я создал новые учетные данные JSON для этой учетной записи:
gcloud iam service-accounts keys create service account.json \
--iam-account terraform@PROJECT_ID.iam.gserviceaccount.com
Я предоставил Compute Instance Admin
роль в этой учетной записи службы, как описано здесь: https://cloud.google.com/iam/docs/understanding-roles#role_types
gcloud projects add-iam-policy-binding PROJECT_ID \
--member serviceAccount:terraform@PROJECT_ID.iam.gserviceaccount.com \
--role roles/compute.instanceAdmin
Я вижу, что у учетной записи службы есть необходимые разрешения:
gcloud projects get-iam-policy PROJECT_ID \
--flatten="bindings[].members" \
--format='table(bindings.role)' \
--filter="bindings.members:terraform"
ROLE
roles/compute.instanceAdmin
И я все еще получаю следующие ошибки снова и снова, даже когда даю owner
или editor
роли.
Error: Error reading ComputeNetwork "network-2pal-network": googleapi: Error 403: Required 'compute.networks.get' permission for 'projects/PROJECT_ID/global/networks/mars-production-network-2pal-network', forbidden
Error: Error reading ComputeGlobalAddress "mars-production-lb-ip": googleapi: Error 403: Required 'compute.globalAddresses.get' permission for 'projects/PROJECT_ID/global/addresses/production-lb-ip', forbidden
Я полностью застрял. Кто-нибудь знает, как это пройти. Как будто GCP даже не проверяет учетные данные. Это безумие.
Спасибо
Вы случайно не удалили учетную запись службы terraform раньше, чтобы просто заново создать ее позже? Воссозданные учетные записи служб с тем же именем демонстрируют неожиданное поведение. Это известная проблема в GCP IAM - deleting_and_recreating_service_accounts
В документации по ссылке выше -
To avoid confusion, we suggest using unique service account names. If this is not possible, you can grant a role to the new service account by: 1. Explicitly removing all bindings granting that role to the old service account. 2. Re-granting those roles to the new service account.
Если пользователь будет управлять экземплярами виртуальных машин, которые настроены для работы в качестве учетной записи службы, вы также должны предоставить роль role / iam.serviceAccountUser. Пользователи, которым назначена роль пользователя учетной записи службы для учетной записи службы, могут использовать ее для косвенного доступа ко всем ресурсам, к которым у учетной записи службы есть доступ.
Например, если учетной записи службы была предоставлена роль администратора вычислений (role / compute.admin), пользователь, которому была предоставлена роль пользователей учетной записи службы. (роли / iam.serviceAccountUser) в этой учетной записи службы может действовать как учетная запись службы для запуска экземпляра Compute Engine. В этом потоке пользователь олицетворяет учетную запись службы для выполнения любых задач, используя предоставленные ему роли и разрешения.