Ограничить учетную запись службы gcloud определенным сегментом
У меня есть 2 ведра, prod и staging, и у меня есть служебный аккаунт. Я хочу ограничить эту учетную запись, чтобы иметь доступ только к промежуточной корзине. Теперь я увидел на https://cloud.google.com/iam/docs/conditions-overview что это должно быть возможно. Я создал policy.json
как это
{
"bindings": [
{
"role": "roles/storage.objectCreator",
"members": "serviceAccount:staging-service-account@lalala-co.iam.gserviceaccount.com",
"condition": {
"title": "staging bucket only",
"expression": "resource.name.startsWith(\"projects/_/buckets/uploads-staging\")"
}
}
]
}
Но когда я стреляю gcloud projects set-iam-policy lalala policy.json
я получил:
The specified policy does not contain an "etag" field identifying a
specific version to replace. Changing a policy without an "etag" can
overwrite concurrent policy changes.
Replace existing policy (Y/n)?
ERROR: (gcloud.projects.set-iam-policy) INVALID_ARGUMENT: Can't set conditional policy on policy type: resourcemanager_projects and id: /lalala
Мне кажется, что я неправильно понял, как связаны роли, политики и учетные записи служб. Но в любом случае: можно ли таким образом ограничить учетную запись службы?
1 ответ
После комментариев я смог решить свою проблему. Очевидно, что права доступа к корзине являются чем-то особенным, но я смог установить политику для корзины, которая разрешает доступ для моего пользователя, используя gsutil:
gsutils iam ch serviceAccount:staging-service-account@lalala.iam.gserviceaccount.com:objectCreator gs://lalala-uploads-staging
После запуска этого доступа, как и ожидалось. Мне показалось немного странным, что это не отражено в политике учетной записи службы:
% gcloud iam service-accounts get-iam-policy staging-service-account@lalala.iam.gserviceaccount.com
etag: ACAB
Спасибо всем