我正在尝试使用 Google 的首选“工作负载身份”方法来使我的 GKE 应用程序能够安全地访问来自 Google Secrets 的秘密。
我已经完成了设置,甚至检查了故障排除部分(https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity?hl=sr-ba#troubleshooting)中的所有步骤,但我我的日志中仍然出现以下错误:
未处理的异常。Grpc.Core.RpcException: Status(StatusCode=PermissionDenied, Detail="Permission 'secretmanager.secrets.list' 拒绝资源 'projects/my-project' (或者它可能不存在)。")
我认为问题是由于节点池没有使用正确的服务帐户,所以我重新创建了它,这次指定了正确的服务帐户。
服务帐号添加了以下角色:
- 云构建服务
- 帐户 Kubernetes Engine 开发人员
- 容器注册服务代理
- 秘密经理秘密访问者
- 秘密经理查看器
我用来认证的包的相关源码如下:
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
我错过了这个过程中的一步吗?
知道为什么 Google 仍然说“资源 'projects/my-project' 的权限 'secretmanager.secrets.list' 被拒绝(或者它可能不存在)吗?”