我们正在尝试解决将工作秘密替换为机密的问题。下面是更多详细信息。
我们正在从部署在Google kubernetes引擎中的点网核心网络api访问firestore和pubsub。我们正在为具有所有服务帐户密钥的appsettings json使用一个秘密,此秘密被安装到路径中的部署容器上,并且在代码中,我们通过使用秘密json的卷安装路径注入appsettings来访问配置作为配置提供者。我们使用json服务帐户密钥来创建firestore生成器和pubsub通道凭据,如下所示。
使用服务帐户json键的API代码如下所示:
Pubsub :
_chanelCreds = GoogleCredential.FromJson(_pubSubSAJsoKey).ToChannelCredentials();
Firestore :
_firestoreDb =新的FirestoreDbBuilder { ProjectId = projectId, JsonCredentials = fireStoreServiceAccountJsonKey } .Build();
访问Program.cs中的秘密配置:
公共静态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密钥,以便确定如何从工作负载身份中检索密钥。 / p>
提前谢谢!
答案 0 :(得分:2)
我绝对不是.Net开发人员,但我可以提供有关工作负载身份的帮助。
首先,一些概念。 GKE上的工作负载标识创建一个拦截器。当客户端库(Google Auth,PubSub或其他)尝试访问metadata server以获取凭据时,请求将被拦截,并根据定义的服务帐户生成凭据。
因此,您必须使用ADC mechanism (Application Default Credential)。不要指定任何服务帐户密钥文件,而是让库根据环境上下文自动查找正确的凭据。
如果您查看.Net PubSub client library documentation,就永远不会看到带有服务帐户密钥文件的身份验证,它使用ADC。 Firestore
也是如此那是为了验证您的代码。现在,如何处理几个服务帐户。
在Workload identity documentation上,您将看到如何在名称空间上创建KSA,以及如何将此KSA与GSA绑定。因此,您只需要在名称空间上定义多个KSA,然后add the correct KSA name in your deployment configuration。