【问题标题】:kubernetes external secrets on GKE , Permission errorGKE 上的 kubernetes 外部机密,权限错误
【发布时间】: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 中的服务帐户显示正确的服务帐户

https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity#enable_workload_identity_on_a_new_cluster

在集群中创建一个 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

以前有没有人遇到过类似的问题? 谢谢

整个命令

  1. 使用工作负载池创建集群。

$ gcloud container clusters create cluster --region asia-northeast1 --node-locations asia-northeast1-a --num-nodes 1 --preemptible --workload-pool=my-project.svc.id.goog

  1. 创建 Kubernetes 服务帐户。

$ kubectl create serviceaccount --namespace default ksa

  1. 绑定 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`

  1. 添加注释

$ kubectl 注释服务帐户
--namespace 默认
克萨
iam.gke.io/gcp-service-account=my-secrets-sa@my-project.iam.gserviceaccount.com

  1. 使用 helm 安装

$ helm install my-release external-secrets/kubernetes-external-secrets

  1. 创建外部机密
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


【解决方案1】:

我注意到我使用了不同的 Kubernetes 服务帐户。

安装 helm 时,创建了新的 kubernetes 服务帐户my-release-kubernetes-external-secrets,并且 service/pods 必须在此服务帐户上工作。

所以我应该绑定my-release-kubernetes-external-secrets & google 服务帐号。

现在,它运行良好。

谢谢@matt_j @norbjd

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    相关资源
    最近更新 更多