1. 程式人生 > >Azure Kay Vault(一).NET Core Console App 獲取金鑰保管庫中的機密資訊

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“ 許可權,大家可以自行在自己的環境中配置不同許可權進行操作。

 *★,°*:.☆( ̄▽ ̄)/$:*.°★* 。