GKE工作负载标识权限被拒绝



我正在尝试使用谷歌的首选"工作负载标识";方法使我的GKE应用程序能够安全地访问来自谷歌秘密的秘密。

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

未处理的异常。Grpc.Core.Rpc异常:状态(StatusCode=PermissionDenied,Detail="权限"资源的"secretmanager.secrets.list"被拒绝"项目/我的项目"(或者它可能不存在("(

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

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

  • 云构建服务
  • 帐户Kubernetes引擎开发人员
  • 容器注册表服务代理
  • Secret Manager Secret Accessor
  • Secret Manager查看器

我用于验证的包的相关源代码如下:

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

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

知道谷歌为什么还在说";资源"projects/my project"的权限"secretmanager.secrets.list"被拒绝(或者它可能不存在(">

就像评论中提到的@sethvargo一样,您需要将服务帐户映射到您的pod,因为Workload Identity不使用底层节点标识,而是将Kubernetes服务帐户映射为GCP服务帐户。所有事情都发生在Workload标识中的每个pod级别。

为应用程序分配一个Kubernetes服务帐户,并将其配置为充当Google服务帐户。

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

2.创建一个Kubernetes服务帐户。

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

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

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

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

请参阅将服务帐户添加到pod的链接。

相关内容

  • 没有找到相关文章

最新更新