【发布时间】:2021-05-03 05:43:38
【问题描述】:
我在 GKE 上使用 helm 安装 kubernetes external secrets。
- GKE: asia-northeast1 上的 1.16.15-gke.6000
- helm 应用版本 6.2.0
- 使用工作负载标识as document written
对于工作负载身份,我按以下命令绑定的服务帐户 (my-secrets-sa@$PROJECT.iam.gserviceaccount.com) 具有 SecretManager.admin 角色,这对于使用 google 来说似乎是必要的秘密经理
gcloud iam service-accounts add-iam-policy-binding --role roles/iam.workloadIdentityUser --member "serviceAccount:$CLUSTER_PROJECT.svc.id.goog[$SECRETS_NAMESPACE/kubernetes-external-secrets]" my- secrets-sa@$PROJECT.iam.gserviceaccount.com
工作负载身份看起来设置正确,因为在 GKE 上检查 pod 中的服务帐户显示正确的服务帐户
在集群中创建一个 pod 并在其中检查 auth。它显示my-secrets-sa@$PROJECT.iam.gserviceaccount.com
$ kubectl run -it --image google/cloud-sdk:slim --serviceaccount ksa-name --namespace k8s-namespace workflow-identity-test
$ gcloud 授权列表
但是即使创建externalsecret,externalsecret也会报错
错误,7 PERMISSION_DENIED:资源“projects/project-id/secrets/my-gsm-secret-name/versions/latest”的权限“secretmanager.versions.access”被拒绝(或者它可能不存在)。
secret my-gsm-secret-name 本身存在于secretmanager 中,所以它不应该“不存在”。
此外,工作负载身份必须正确设置权限。
这是我定义的externalsecret。
apiVersion: kubernetes-client.io/v1
kind: ExternalSecret
metadata:
name: gcp-secrets-manager-example # name of the k8s external secret and the k8s secret
spec:
backendType: gcpSecretsManager
projectId: my-gsm-secret-project
data:
- key: my-gsm-secret-name # name of the GCP secret
name: my-kubernetes-secret-name # key name in the k8s secret
version: latest # version of the GCP secret
property: value # name of the field in the GCP secret
以前有没有人遇到过类似的问题? 谢谢
整个命令
- 使用工作负载池创建集群。
$ gcloud container clusters create cluster --region asia-northeast1 --node-locations asia-northeast1-a --num-nodes 1 --preemptible --workload-pool=my-project.svc.id.goog
- 创建 Kubernetes 服务帐户。
$ kubectl create serviceaccount --namespace default ksa
- 绑定 Kubernetes 服务帐号和服务帐号
$ gcloud iam service-accounts add-iam-policy-binding
--role 角色/iam.workloadIdentityUser
--member "serviceAccount:my-project.svc.id.goog[default/ksa]"
my-secrets-sa@my-project.iam.gserviceaccount.com`
- 添加注释
$ kubectl 注释服务帐户
--namespace 默认
克萨
iam.gke.io/gcp-service-account=my-secrets-sa@my-project.iam.gserviceaccount.com
- 使用 helm 安装
$ helm install my-release external-secrets/kubernetes-external-secrets
- 创建外部机密
apiVersion: kubernetes-client.io/v1
kind: ExternalSecret
metadata:
name: gcp-secrets-manager-example # name of the k8s external secret and the k8s secret
spec:
backendType: gcpSecretsManager
projectId: my-gsm-secret-project
data:
- key: my-gsm-secret-name # name of the GCP secret
name: my-kubernetes-secret-name # key name in the k8s secret
version: latest # version of the GCP secret
property: value # name of the field in the GCP secret
$ kubectl apply -f excternal-secret.yaml
【问题讨论】:
-
my-secrets-sa@$PROJECT.iam.gserviceaccount.com在您的项目中是否具有 Secret Manager Secret Accessor 角色? -
norbjd 可能是对的。您可以将
IAM & Admin中的Secret Manager Secret Accessor角色添加到您的Service Account吗? -
是的,我将 Secret Manager Secret Accessor 角色添加到
my-secrets-sa@$PROJECT.iam.gserviceaccount.com,但仍然是同样的错误。 -
我更新了问题;添加我为安装执行的所有命令
标签: kubernetes google-cloud-platform secretsmanager