【问题标题】:Restrict gcloud service account to specific bucket将 gcloud 服务帐号限制为特定存储桶
【发布时间】:2019-07-22 11:50:03
【问题描述】:

我有 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

我觉得我误解了角色、策略和服务帐户之间的关系。但无论如何:是否可以以这种方式限制服务帐户?

【问题讨论】:

  • 使用这个命令要非常小心。如果您的命令被允许,您将删除项目的当前 IAM 配置并将其替换为这个单一的有条件的角色绑定。您不想这样做并且被正确地(尽管令人困惑)拒绝。在这种情况下你应该做什么gcloud projects get-iam-policy ... 将结果保存到一个文件中,include 你提出的更改,然后gcloud projects set-iam-policy ...。我没有使用条件,但我认为更好的选择是明确授予您的服务帐户对暂存存储桶的权限。

标签: gcloud bucket google-iam


【解决方案1】:

在 cmets 之后,我能够解决我的问题。显然存储桶权限有点特殊,但我能够使用 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

谢谢大家

【讨论】:

    猜你喜欢
    • 2021-07-29
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 2013-07-10
    相关资源
    最近更新 更多