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

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

三,結尾

  ok,今天所演示的就是將一些機密信息添加到Azure Key Vault 中,然后通過在Azure AD 中注冊應用程序,在Key Vault 中給不同的服務主體設置不同的訪問權限,從而達到對機密進行保護的作用,在實際項目中,我們也避免掉把一些重要的機密信息直接配置在系統的配置文件中或者通過硬編碼的方式保留在系統中。

github:https://github.com/yunqian44/Azure.KeyVault.git

作者:Allen 

版權:轉載請在文章明顯位置注明作者及出處。如發現錯誤,歡迎批評指正。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM