![](/img/trans.png)
[英]Cannot connect to Cloud SQL Proxy through GKE with Workload Identity
[英]Access Service Account key json using workload identity in GKE
我们正在尝试解决用工作负载身份替换机密的问题。以下是更多详细信息。
我们正在从部署在 google kube.netes 引擎中的 dot.net 核心 web api 访问 firestore 和 pubsub。 我们正在为 appsettings json 使用一个秘密,它具有所有服务帐户密钥,这个秘密被安装到路径中的部署 pod,在代码中,我们通过使用秘密 json 的卷安装路径注入 appsettings 来访问配置作为配置提供者。 我们使用 json 服务帐户密钥来创建 firestore 构建器和 pubsub 通道凭证,如下所示。
API代码使用服务账号json密钥如下图所示:
发布订阅:
_chanelCreds = GoogleCredential.FromJson(_pubSubSAJsoKey).ToChannelCredentials();
消防站:
_firestoreDb = new FirestoreDbBuilder { ProjectId = projectId, JsonCredentials = fireStoreServiceAccountJsonKey }.Build();
访问 Program.cs 中的秘密配置:
公共 static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder => { webBuilder.ConfigureAppConfiguration((hostingContext, config) => { config.AddJsonFile("**/secrets/api.secrets.json**").Build(); }); webBuilder.UseStartup<Startup>(); });
部署的一部分 Yaml
volumeMounts: - name: appsettingssecret mountPath: /secrets readOnly: true volumes: - name: appsettingssecret secret: secretName: appsettingssecret
现在我们必须切换到工作负载身份,但我们不确定如何在工作负载身份中处理多个服务帐户,而且在代码中我们需要服务帐户的 json 密钥,因此如何从工作负载身份中检索密钥。
提前致谢!!
我绝对不是 .Net 开发人员,但我可以在工作负载标识方面提供帮助。
首先,一些概念。 GKE 上的 Workload Identity 创建一个拦截器。 当客户端库(Google Auth、PubSub 或其他)尝试访问元数据服务器以获取凭据时,请求将被拦截并根据定义的服务帐户生成凭据。
因此,你不得不使用ADC机制(Application Default Credential) 。 不要指定任何服务帐户密钥文件,让库根据环境上下文自动查找正确的凭据。
如果您查看.Net PubSub 客户端库文档,您永远不会看到使用服务帐户密钥文件的身份验证,它使用 ADC。 Firestore 也一样
那是为了在您的代码中进行身份验证。 现在,如何处理几个服务帐户。
在工作负载身份文档中,您可以了解如何在命名空间上创建 KSA 以及如何将此 KSA 与 GSA 绑定。 因此,您只需在命名空间上定义多个 KSA,然后在部署配置中添加正确的 KSA 名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.