繁体   English   中英

使用 GKE 中的工作负载身份访问服务帐户密钥 json

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM