当前位置: 首页 > 知识库问答 >
问题:

工作负载标识可用于2个不同的GCP项目?

党权
2023-03-14

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

如自述文件中所述,我将使用GCP Secret Manager存储机密

该项目分配给GCP Secret Manager,用于组织共享的机密。

  1. prj机密:在机密管理器中创建机密

在prj应用程序中,我想使用工作负载标识,因为我不想使用serviceFactkey doc说

>

  • 使用-workload pool=project-id.svc创建cluser。id.goog选项

    头盔安装kubernetes-外部-秘密

    [跳过]kubectl创建名称空间k8s名称空间(因为我在defaultname space上安装了kubernetes external secrets)

    [skip]kubectl create serviceaccount——名称空间k8s名称空间ksa名称(因为我在创建GKE时使用defaultserviceaccount和默认存在)

    使用模块“工作负载标识”创建谷歌服务帐户

    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_服务帐户名为外部机密kubernetes external secrets,在使用helm安装kubernetes external secrets时已创建。它绑定了k8s_sa_的名字
    apiVersion: kubernetes-client.io/v1
    kind: ExternalSecret
    metadata:
      name: external-key-test
    spec:
      backendType: gcpSecretsManager
      projectId: my-domain
      data:
        - key: key-test
          name: password
    

    错误,7权限被拒绝:权限“secretmanager”。版本。“资源”项目/项目id/机密/外部密钥测试/版本/最新版本的访问被拒绝”(或者它可能不存在)。

    我已经检查过了,如果我的prj秘密和prj申请是同一个项目,它是有效的。

    所以我想的是,kubernetes serviceaccount(prj秘密)

    我想知道是否有人知道

    • 工作负载标识是否仅适用于同一项目

    非常感谢。


  • 共有2个答案

    曾嘉福
    2023-03-14

    @纪尧姆·布拉奎尔

    非常感谢您的友好回复。

    我做了service帐户external-secrets-kubernetes@my-project-id.iam.gserviceaccount.commy-project id是prj-Application

    更新:(v1):删除,因为没有正确的

    <罢工> 关于secret_id,它的 prj-秘密现在。

    更新:(v1)补充结论

    我明白。

    外部秘密-kubernetes@prj-申请。国际机械师协会。gserviceaccount。com

    • 必须在prj秘密项目的IAM中

    再次感谢您@guillaume blaquiere

    更新:(v1):删除,因为没有正确的

    但后来我遇到了问题;IAM绑定看起来不起作用。

    在目前的结构中,我需要在

    • prj应用程序中的k8s服务帐户(外部机密kubernetes外部机密)

    不是吗?

    但我无法约束它。

    $gCloud iam service-帐户添加-iam-策略-绑定-角色角色/iam.workload标识用户-成员"service帐户:prj-application.svc.id.goog[默认/外部-秘密-kubernetes-outter-秘密]"external-secrets-kubernetes@prj-secret.iam.gserviceaccount.com

    错误:(gcloud.iam.service accounts.add iam policy binding)未找到:服务帐户项目/prj应用程序/serviceAccounts/external secrets-kubernetes@prj-秘密。国际机械师协会。gserviceaccount。com不存在。

    基于错误,在prj应用程序中,我没有serviceaccount外部机密-kubernetes@prj-秘密。国际机械师协会。gserviceaccount。com,(我知道,因为我改变了现状)

    所以绑定prj应用程序的k8s serviceaccount

    汪和悌
    2023-03-14

    我想你的角色约束有问题。当你这么说的时候:

    kubernetes_服务帐户名为external secrets kubernetes external secrets,是在安装kubernetes external secrets和helm时创建的。它绑定了k8s_sa_的名字

    还不清楚。

    1. 外部秘密-kubernetes@my-project-id.iam。gserviceaccount。com,是在哪个项目上创建的?我猜是在prj申请中,但不清楚
    • 在prj申请的IAM页面上
    • 在prj秘密的IAM页面上
    • 关于prj秘密中秘密的秘密

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

    请注意,如果您只需要访问机密,则不要授予管理员角色,只需要访问器。

     类似资料:
    • 我试图在Composer 2环境中运行GKEStartPodOperator/KubernetesPodOperator任务,该环境在自动驾驶模式下使用GKE集群。我们有一个现有的Composer 1环境,GKE集群不处于自动驾驶模式。我们使用谷歌云平台服务(BigQuery、GCS等)进行身份验证的任务在Composer 2环境中失败,但在Composer 1环境中成功。 在日志文件中,我可以看

    • Google docu表示,工作负载标识可以用来授权GKE POD使用Google API提供的服务(而且效果很好)。它还表示,将有一个自动创建的标识池,名为PROJECT\u ID.svc。id.goog。 关于工作负载标识联合的Docu说:“您可以使用工作负载标识池来组织和管理外部标识。” 在我按照这里所述配置了工作负载标识(并且工作正常)之后,我正在尝试检索项目中现有的工作负载标识池,我希望

    • 我使用Cloud Composer在Kubernetes中运行任务来安排作业。我在与composer相同的GKE中设置了一个新的节点池,并使用它来运行Kubernetes任务。在该节点池中,我使用默认服务帐户,但将该帐户绑定到与Composer节点池相同的服务帐户,使用IAM策略绑定,并启用工作负载标识。 然而,我可以从错误中看到kubernetes服务号缺少作曲家服务号可以访问的一些东西的权限。

    • 我目前正在使用GKE Workload Identity从GKE内部访问谷歌云平台资源。这对谷歌云存储和其他平台资源非常有效。 然而,当我试图使用GKE Workload Identity访问Google工作表时,我遇到了一个“身份验证范围不足”的问题。 当我为服务帐户生成密钥文件并在代码中使用它时,我可以手动将作用域设置为。它的工作原理与预期一样,我可以访问该表。如果我将范围更改为,我得到了与G

    • 有人知道如果有任何其他方式的认证/授权访问谷歌云存储除了服务帐户密钥,当我使用@谷歌云/存储Node.js模块从这里?我读过关于“工作负载标识联合”的文章,但是在我看来,当我使用@google-Cloud/存储库时,我不能使用这种方法。我找不到任何合适的构造函数,只有这两个: 有什么建议吗?谢谢你们

    • 试图找出如何从GKE集群中使用存储API进行身份验证。 代码: 被记录为使用以下方法通过API进行身份验证: {@code GOOGLE_APPLICATION_Credentials}环境变量指向的凭据文件 应用程序正在使用GCP工作负载标识功能,因此应用程序(群集内)服务号注释为: 现在,调用存储帐户失败,出现以下错误: 这让我觉得工作负载标识工作不正常。我希望收到带注释的服务帐户的错误消息,