google-cloud-platform - 如何授予服务帐户访问特定 key 的权限?

标签 google-cloud-platform terraform google-secret-manager

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

可以像这样访问 secret :

gcloud beta secrets versions access 1 --secret="thesecret" --project="myproject"

但是当我的服务帐户尝试相同的命令时,gcloud 会发出此错误:

ERROR: (gcloud.beta.secrets.versions.access) PERMISSION_DENIED: Request had insufficient authentication scopes.



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

我已在 Terraform 中授予该服务帐户“roles/secretmanager.secretAccessor”,如下所示:
resource google_project_iam_binding the-binding {
  project = myproject
  role = "roles/secretmanager.secretAccessor"
  members = [
    "serviceAccount:theserviceaccount@someotherproject.iam.gserviceaccount.com",
  ]
}


我可以验证它在 gcp 控制台中是否具有该角色,如下所示:
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

但是这个概念来自 docs :

If a member only needs to access a single secret's value, don't grant that member the ability to access all secrets. For example, you can grant a service account the Secret Accessor role (roles/secretmanager.secretAccessor) on a single secret.



因此,就像 iam-policy-binding 可以对特定 secret 具有亲和力,但我不确定我可以使用哪些 gcloud 命令或 terraform 资源来创建这种亲和力。

最佳答案

第一个问题是我弄错了我的环境配置为使用哪个服务帐户。因此,我已授予对服务帐户的访问权限,但毕竟我没有使用它(显然在我的情况下它们的初始化不一致)。我通过在尝试访问 secret 之前运行此命令来解决此问题:

gcloud config set account theserviceaccount@someotherproject.iam.gserviceaccount.com

另外,我没有意识到有不止一个顶级 gcloud 命令可以让您修改 iam 策略绑定(bind)。我一直在探索gcloud iam ...当我需要的是:
gcloud beta secrets add-iam-policy-binding projects/myproject/secrets/mysecret --member serviceAccount:theserviceaccount@someotherproject.iam.gserviceaccount.com --role roles/secretmanager.secretAccessor

关于google-cloud-platform - 如何授予服务帐户访问特定 key 的权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61875761/

相关文章:

sql-server - Google Composer - 如何在环境中安装 Microsoft SQL Server ODBC 驱动程序

docker - Kubernetes 集群中 Docker 镜像中的环境变量

azure - Terraform 如何定义变量以让用户选择现有资源或创建新资源

terraform - API 网关日志未显示为 terraform

continuous-integration - 从 Google Cloud Build 访问存储在 Google Secret Manager 中的环境变量

google-cloud-functions - 将 Google Secret Manager 与 Firebase Functions 和 Stripe 结合使用(顶级)

python - 在 Google Cloud Platform 中读取存储桶中 Keras ML 训练的批量数据的理想方法是什么?

google-cloud-platform - 404 错误 GCP API 网关多个云运行后端

terraform - 遍历对象映射

google-cloud-platform - Google Cloud - 如何按标签或名称授予对 secret 组的访问权限?