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

GKE工作负载身份许可被拒绝

傅翰池
2023-03-14

我正在尝试使用谷歌首选的“工作负载身份”方法,使我的GKE应用程序能够安全地访问谷歌机密中的机密。

我已经完成了设置,甚至检查了故障排除部分的所有步骤(https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity?hl=sr-ba#故障排除)但我的日志中仍然出现以下错误:

未处理的异常。Grpc。果心RpcException:Status(StatusCode=PermissionDenied,Detail=“Permission”secretmanager.secrets.list”拒绝资源“项目/我的项目”(或者它可能不存在)。)

我认为问题是由于节点池没有使用正确的服务帐户,所以我重新创建了它,这次指定了正确的服务帐户。

服务帐户添加了以下角色:

    云构建服务
  • 帐户库伯内特斯引擎开发者
  • 容器注册服务代理
  • 秘密管理员秘密访问器
  • 秘密经理查看器

我用来进行身份验证的软件包的相关源代码如下:

var data = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);

var request = new ListSecretsRequest
{
    ParentAsProjectName = ProjectName.FromProject(projectName),
};

var secrets = secretManagerServiceClient.ListSecrets(request);
foreach(var secret in secrets)
{
    var value = secretManagerServiceClient.AccessSecretVersion($"{secret.Name}/versions/latest");
    string secretVal = this.manager.Load(value.Payload);
    string configKey = this.manager.GetKey(secret.SecretName);
    data.Add(configKey, secretVal);
}
Data = data;

裁判。https://github.com/jsukhabut/googledotnet

我是否错过了这个过程中的一个步骤?

你知道为什么谷歌仍然说“权限secretmanager.secrets.list”拒绝资源“项目/我的项目”(或者它可能不存在)?"

共有1个答案

边健
2023-03-14

就像评论中提到的@sethvargo一样,您需要将服务号映射到您的Pod,因为工作负载标识不使用基础节点标识,而是将库伯内特斯服务号映射到GCP服务号。在工作负载标识中,一切都发生在每个Pod级别。

为应用程序分配一个库伯内特斯服务号,并将其配置为Google服务号。

1.创建具有所需权限的GCP服务帐户。

2.创建Kubernetes服务帐户。

3.分配Kubernetes服务帐户权限以模拟GCP服务帐户。

4.以Kubernetes服务帐户的身份运行您的工作负载。

希望您在项目或秘密中使用项目ID而不是项目名称。

无法更新已创建pod的服务帐户。

请参阅将服务号添加到Pod的链接。

 类似资料:
  • 我正在尝试编写一个简单的后端来访问我的Google Cloud Firestore,它位于Google Kubernetes引擎中。在我的本地计算机上,我使用以下代码对Firestore进行身份验证,详细内容见谷歌文档。 这将拉取GOOGLE_APPLICATION_CREDENTIALS环境变量,并用我的填充它,这是我通过使用角色创建服务号获得的。 所以,在本地,我的代码运行良好。我可以到达我的

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

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

  • 我有一个问题。我有操作系统CentOS 5.8。我已经在httpd.conf文件中编写了这个配置: 听 85 在文件末尾: selinux是许可的。 以下是apache使用的目录和文件: 当我打电话的时候 '服务器ip':85/wsgi 从浏览器,有我的服务器的ip而不是'服务器ip ',我得到消息:(403)禁止:你没有权限访问/wsgi在这个服务器上。 和/var/log/httpd/erro

  • 我最近一直在使用GKE工作负载标识特性。我想更详细地了解组件的工作原理。 GCP客户端代码(或其他语言SDK)适用于GCE元数据方法 我想现在对我来说主要的难题是验证呼叫舱的身份。最初我认为这将使用令牌评论API,但现在我不确定谷歌客户端工具如何知道使用安装到pod中的服务号令牌... 编辑后续问题: 问题1:在第2步和第3步之间,是对通过节点池上的设置GKE_metadata_服务器路由到GKE

  • 我们已经为一个基于Java/Tomcat的应用程序设置了一个CloudSQL代理作为侧车容器。 下面是我们如何设置工作负载标识,以使我们的应用程序能够通过CloudSQL代理连接到CloudSQL: > 创建了云IAM服务帐户并授予其SQL客户端权限: 设置策略绑定如下: 向GKE服务帐户添加注释: 但当我们使用以下方法进行测试时: 尽管按照本页所述正确执行了所有操作,但仍然会导致: