Google cloud platform 如何授予服务帐户访问特定机密的权限?

Google cloud platform 如何授予服务帐户访问特定机密的权限?,google-cloud-platform,terraform,google-secret-manager,Google Cloud Platform,Terraform,Google Secret Manager,我想授予服务帐户访问Google Secrets Manager中的秘密的权限 我可以像这样访问秘密: gcloud beta secrets versions access 1 --secret="thesecret" --project="myproject" resource google_project_iam_binding the-binding { project = myproject role = "roles/secretmanager.secretAccessor

我想授予服务帐户访问Google Secrets Manager中的秘密的权限

我可以像这样访问秘密:

gcloud beta secrets versions access 1 --secret="thesecret" --project="myproject"
resource google_project_iam_binding the-binding {
  project = myproject
  role = "roles/secretmanager.secretAccessor"
  members = [
    "serviceAccount:theserviceaccount@someotherproject.iam.gserviceaccount.com",
  ]
}

gcloud projects get-iam-policy myproject  \
--flatten="bindings[].members" \                         
--format='table(bindings.role)' \
--filter="bindings.members:theserviceaccount@someotherproject.iam.gserviceaccount.com"

    ROLE
    roles/secretmanager.secretAccessor
但当我的服务帐户尝试相同的命令时,gcloud会发出以下错误:

错误:(gcloud.beta.secrets.versions.access)权限被拒绝:请求的身份验证作用域不足

主要问题是:我还需要做些什么来确保服务帐户可以访问机密?


我已授予该服务帐户“roles/secretmanager.secretAccessor”,其地形如下:

gcloud beta secrets versions access 1 --secret="thesecret" --project="myproject"
resource google_project_iam_binding the-binding {
  project = myproject
  role = "roles/secretmanager.secretAccessor"
  members = [
    "serviceAccount:theserviceaccount@someotherproject.iam.gserviceaccount.com",
  ]
}

gcloud projects get-iam-policy myproject  \
--flatten="bindings[].members" \                         
--format='table(bindings.role)' \
--filter="bindings.members:theserviceaccount@someotherproject.iam.gserviceaccount.com"

    ROLE
    roles/secretmanager.secretAccessor
我可以验证它在gcp控制台中是否具有该角色,如下所示:

gcloud beta secrets versions access 1 --secret="thesecret" --project="myproject"
resource google_project_iam_binding the-binding {
  project = myproject
  role = "roles/secretmanager.secretAccessor"
  members = [
    "serviceAccount:theserviceaccount@someotherproject.iam.gserviceaccount.com",
  ]
}

gcloud projects get-iam-policy myproject  \
--flatten="bindings[].members" \                         
--format='table(bindings.role)' \
--filter="bindings.members:theserviceaccount@someotherproject.iam.gserviceaccount.com"

    ROLE
    roles/secretmanager.secretAccessor
但有一个概念来自:

如果成员只需要访问单个机密的值,则不要授予该成员访问所有机密的权限。例如,您可以对单个机密授予服务帐户机密访问者角色(roles/secretmanager.secretAccessor)


因此,这就像iam策略绑定可以与特定的机密关联一样,但我不确定我可以使用哪些gcloud命令或terraform资源来创建这种关联。

第一个问题是,我对环境配置为使用的服务帐户有误。因此,我已经授予了对服务帐户的访问权,但我毕竟没有使用它(显然,在我的例子中,它们的初始化不一致)。我通过在尝试访问机密之前运行此命令修复了此问题:

gcloud config set account theserviceaccount@someotherproject.iam.gserviceaccount.com
另外,我没有意识到有多个顶级gcloud命令允许您修改iam策略绑定。我一直在探索
gcloud iam…
,当时我需要的是:

gcloud beta secrets add-iam-policy-binding projects/myproject/secrets/mysecret --member serviceAccount:theserviceaccount@someotherproject.iam.gserviceaccount.com --role roles/secretmanager.secretAccessor

但是当我的服务帐户尝试相同的命令时
-您如何指定要使用的服务帐户?服务帐户具有正确的角色,您可能错误地尝试使用该服务帐户。对于最后一个问题,请使用命令
gcloud beta secrets add iam policy[SECRET-ID]--member=[SERVICE\u ACCOUNT]--role={ROLE]
@JohnHanley你是一个非常乐于助人的人。我遇到一个Jenkins代理正在使用所需的服务帐户,但后来的代理没有。明确设置我需要的帐户让我成功了一半,而你共享的命令让我成功了。谢谢。如果你给出答案,我会回答接受它。如果没有,我会发布一个。谢谢。我很高兴你解决了这个问题,并发布了一个对大家都有利的答案。