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