Azure Kay Vault(一).NET Core Console App 獲取金鑰保管庫中的機密資訊
一,引言
Azure 金鑰保管庫用於儲存敏感資訊,例如連結字串,密碼,API 金鑰等。我們無法直接從Azure 金鑰庫中訪問機密!那麼我們如何才能訪問應用程式中的機密資訊?比如,在我們的實際專案中,對於資料庫連結字串或者一些加密用的Key配置在 AppSettings.json 檔案中,但是這個做的話,還是有很大的風險的,這些機密資訊都有可能會暴露出去。就拿我自己來說,我之前分享部落格內容裡面涉及到的一些機密配置,都直接放在了配置檔案中。
以此為戒啊,就算是私有的程式碼倉庫也是不行的,所以今天決定介紹一個新的 Azure 資源-----Azure Key Vault(金鑰保管庫),我們將機密資訊儲存在金鑰保管庫中,並嘗試通過.NET Console 訪問(獲取)它。
二,正文
1,註冊應用程式
轉到 portal.azure.com 登陸到我們自己的賬戶。點選 Azure Active Directory 進行註冊 “App registrations”,我們將能夠看到 “新註冊應用程式” 選項卡開啟。
Name 輸入:”Azure.KeyVault“。如下圖所示,將其選擇使用單個租戶選項,點選 ”Register“ 進行註冊操作。
接下來,我們需要給當前註冊的客戶端應用註冊 client secret(客戶端金鑰)
點選 "Manage=》Certificates & secrets"
Description 輸入:“Azure.KeyVault.ClientSecret”,過期時間選擇預設 ”In 1 year“,點選 ”Add“ 進行新增操作
接下來我們可以看到建立好的客戶端機密資訊,同時,我們點選圖中箭頭的位置,點選進行復制 機密資訊到我們工作的記事本中,稍後會用到此機密資訊。
(注意,一定要在建立好的時候複製此機密資訊,一旦我們離開此頁面,重新進入的話,我們將無法進行復制操作)
2,建立金鑰保管庫
搜尋關鍵詞 ”Key Vault“,
Resource group 選擇建立一個新的:”Web_Test_KV_RG“
Key vault name:”CNBATEBLOGWEB-KeyVault“
Region:”East Asia“
Pricing tier:”Standard“
點選 ”Review + create“ 進行建立預覽校驗。
檢驗完成後,點選 ”Create“ 進行建立
建立完成後,點選轉到該資源進行配置訪問策略,”Settings=》Access policies“,點選 ”Add Access Policy“ 建立新的訪問策略。
首先選擇配置模板 Configure from template(optional):"Secret Management"
Secret permissions(機密許可權):”Get“ (只執行獲取機密資訊)
點選 ”Nono select“ 進行先選擇服務主體,輸入 "Azure.KeyVault"進行選擇,點選 ”Select“
點選 ”Add“ 進行新增操作
點選 ”Save“,儲存一下
接下來就可以將我們應用程式專案中使用的一些機密資訊 ”生成/匯入“ 在金鑰保管庫中。點選 ”Setting=》Secrets“,點選 ”+ Generate/Import“ 我們嘗試
Upload options 選擇:”手動“
Name:”CNBATEBLOGWEB-DB-CONNECTIONSTRING“
Value 可以輸入機密資訊,我這邊輸入的是 ”SUCCESS“
可以看到 我們可以設定當前機密資訊的 "啟用日期",”到期日期“ ”是否啟用“
點選 ”Create“ 進行建立操作。
可以看到,當前的機密資訊已經建立好了。
3,通過控制檯程式碼程式獲取機密資訊
3.1 建立新的NET Core 控制檯程式,新增 KeyVault.Secrets 和 Identity Nuget 程式包
使用程式包管理器控制檯進行安裝。
Install-Package Azure.Security.KeyVault.Secrets -Version 4.1.0
Install-Package Azure.Identity -Version 1.2.3
程式碼部分
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 string vaultUri = "https://cnbateblogweb-keyvault.vault.azure.net/"; 6 7 var client = new SecretClient(vaultUri: new Uri(vaultUri), credential: new DefaultAzureCredential()); 8 9 // Create a new secret using the secret client. 10 var secretResult = client.GetSecretAsync("CNBATEBLOGWEB-DB-CONNECTIONSTRING"); 11 12 // Retrieve a secret using the secret client. 13 Console.WriteLine("azure key vault name of "+ secretResult.Result.Value.Name+ " is "+ secretResult.Result.Value.Value); 14 15 Console.ReadLine(); 16 } 17 }
注意 這裡需要配置金鑰保管庫的連結引數 vaultUri,複製圖中的連結
接下來,需要將之前在Azure上註冊的服務主體的 AZURE_CLIENT_ID(應用程式ID),AZURE_CLIENT_SECRET(客戶端密碼),AZURE_TENANT_ID(租戶ID)配置到系統的環境變數中去,或者是VS執行環境中,大家可以自行進行選擇,我這裡是直接配置在系統的環境變數中。
Azure Client ID 和 Azure Tenant ID 可以在Azure AD 註冊的應用程式中可以找到,Client Secret 就是上面建立的客戶端密碼
接下來通過配置,將這些資訊配置在系統環境變數中
接下來,我們直接執行程式碼,可以看到驗證通過,並且將機密資訊加載出來了。
OK,成功。這裡我就不在演示機密資訊的,新增,刪除等操作了,因為在剛開始在給服務主體配置訪問許可權的時候,只配置了 ”Get“ 許可權,大家可以自行在自己的環境中配置不同許可權進行操作。
*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。