在GCP上,我需要使用2个GCP项目;一个用于web应用程序,另一个用于存储web应用程序的秘密(其结构来自google的存储库
)如README中所写,我将使用GCP秘密管理器存储秘密该项目分配给GCP秘密管理器,用于组织共享的秘密。
程序我计划
- prj-secret:在secrets-manager 中创建秘密
- prj-application:使用kubernetes-external-secrets读取secret
prj-application我想使用工作负载标识,因为我不想使用as serviceaccountkey文档说
我做了什么
创建cluser与
-workload-pool=project-id.svc.id.goog
选项helm install kubernetes-external-secrets
[skip] kubectl创建命名空间k8s-namespace(因为我在
default
命名空间上安装了kubernetes-external-secrets)[skip] kubectl create serviceaccount——namespace k8s-namespace ksa-name(因为我在创建GKE时默认使用
default
serviceaccount with exist)用
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"]。
- 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 problemERROR, 7 PERMISSION_DENIED: Permission 'secretmanager.versions. ERROR。资源'projects/project-id/secrets/external-key-test/versions/latest'的访问被拒绝(或者它可能不存在)。
我已经检查过了,如果我prj-secret和prj-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"]。
不清楚。
external-secrets-kubernetes@my-project-id.iam.gserviceaccount.com,
是在哪个项目上创建的?我猜在prj应用程序中,但不清楚。
- 我假设(使用名称和与集群的链接)服务帐户是在prj应用程序中创建的。您在哪个资源上授予角色
"roles/secretmanager.admin","roles/secretmanager.secretAccessor"
?
- 在prj-application?
- 在prj-secret?
- 在prj-secret?
如果你做了第一个,它是错误的绑定,服务帐户只能访问prj应用程序的secret,而不能访问prj-secret的这些。
注意,如果您只需要访问secret,不要授予admin角色,只需要访问器