簡體   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