如何授予服务帐户访问特定机密的权限?
How can I give a service account access to a particular secret?
我想授予服务帐户访问 Google Secrets Manager 中的秘密的权限。
我可以像这样访问秘密:
gcloud beta secrets versions access 1 --secret="thesecret" --project="myproject"
但是当我的服务帐户尝试相同的命令时,gcloud 发出此错误:
ERROR: (gcloud.beta.secrets.versions.access) PERMISSION_DENIED: Request had insufficient authentication scopes.
主要问题是:我还需要做什么来确保服务帐户可以访问秘密?
我已在 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 可以对特定的秘密具有亲和力,但我不确定我可以使用哪些 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
我想授予服务帐户访问 Google Secrets Manager 中的秘密的权限。
我可以像这样访问秘密:
gcloud beta secrets versions access 1 --secret="thesecret" --project="myproject"
但是当我的服务帐户尝试相同的命令时,gcloud 发出此错误:
ERROR: (gcloud.beta.secrets.versions.access) PERMISSION_DENIED: Request had insufficient authentication scopes.
主要问题是:我还需要做什么来确保服务帐户可以访问秘密?
我已在 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 可以对特定的秘密具有亲和力,但我不确定我可以使用哪些 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