工作负载身份可以工作2个不同的GCP项目?



在GCP上,我需要使用2个GCP项目;一个用于web应用程序,另一个用于存储web应用程序的秘密(其结构来自google的存储库

)如README中所写,我将使用GCP秘密管理器存储秘密

该项目分配给GCP秘密管理器,用于组织共享的秘密。

程序我计划

  1. prj-secret:在secrets-manager
  2. 中创建秘密
  3. prj-application:使用kubernetes-external-secrets读取secret

prj-application我想使用工作负载标识,因为我不想使用as serviceaccountkey文档说

我做了什么

  1. 创建cluser与-workload-pool=project-id.svc.id.goog选项

  2. helm install kubernetes-external-secrets

  3. [skip] kubectl创建命名空间k8s-namespace(因为我在default命名空间上安装了kubernetes-external-secrets)

  4. [skip] kubectl create serviceaccount——namespace k8s-namespace ksa-name(因为我在创建GKE时默认使用defaultserviceaccount with exist)

  5. module "workload-identity创建google-service-account

module "workload-identity" {
source               = "github.com/terraform-google-modules/terraform-google-kubernetes-engine//modules/workload-identity"
use_existing_k8s_sa  = true
cluster_name         = var.cluster_name
location             = var.cluter_locaton
k8s_sa_name          = "external-secrets-kubernetes-external-secrets"
name                 = "external-secrets-kubernetes"
roles                = ["roles/secretmanager.admin","roles/secretmanager.secretAccessor"]
project_id           = var.project_id  #it is prj-aplication's project_id
}
  • kubernetes_serviceaccount名为external-secrets-kubernetes-external-secrets,在安装kubernetes-external-secrets和helm时已经创建。并绑定k8s_sa_name &' external-secrets-kubernetes@my-project-id.iam.gserviceaccount.com,其中包含["roles/secretmanager.admin","roles/secretmanager.secretAccessor"]。
  1. create externalsecret and apply
apiVersion: kubernetes-client.io/v1
kind: ExternalSecret
metadata:
name: external-key-test
spec:
backendType: gcpSecretsManager
projectId: my-domain
data:
- key: key-test
name: password

result

I got permission problem

ERROR, 7 PERMISSION_DENIED: Permission 'secretmanager.versions. ERROR。资源'projects/project-id/secrets/external-key-test/versions/latest'的访问被拒绝(或者它可能不存在)。

我已经检查过了,如果我prj-secretprj-application同样的项目,它成功了。

所以我想的是,kubernetes serviceaccount (inprj-secret)),google serviceaccount (inprj-application)不能正确绑定。

我想知道是否有人知道

  • 工作负载标识仅在同一项目中工作或不工作
  • 如果是,我如何从不同的项目获得秘密数据

谢谢。

我认为你的角色绑定有问题。当你说:

名为external-secrets-kubernetes-external-secrets的kubernetes_serviceaccount已经在使用helm安装kubernetes-external-secrets时创建。并绑定k8s_sa_name &' external-secrets-kubernetes@my-project-id.iam.gserviceaccount.com,其中包含["roles/secretmanager.admin","roles/secretmanager.secretAccessor"]。

不清楚。

  1. external-secrets-kubernetes@my-project-id.iam.gserviceaccount.com,是在哪个项目上创建的?我猜在prj应用程序中,但不清楚。

  1. 我假设(使用名称和与集群的链接)服务帐户是在prj应用程序中创建的。您在哪个资源上授予角色"roles/secretmanager.admin","roles/secretmanager.secretAccessor"?
  • 在prj-application?
  • 在prj-secret?
  • 在prj-secret?

如果你做了第一个,它是错误的绑定,服务帐户只能访问prj应用程序的secret,而不能访问prj-secret的这些。

注意,如果您只需要访问secret,不要授予admin角色,只需要访问器

相关内容

  • 没有找到相关文章

最新更新