Azure 密鑰保管庫用於存儲敏感信息,例如連接字符串,密碼,API 密鑰等。咱們沒法直接從Azure 密鑰庫中訪問機密!那麼咱們如何才能訪問應用程序中的機密信息?好比,在咱們的實際項目中,對於數據庫連接字符串或者一些加密用的Key配置在 AppSettings.json 文件中,可是這個作的話,仍是有很大的風險的,這些機密信息都有可能會暴露出去。就拿我本身來講,我以前分享博客內容裏面涉及到的一些機密配置,都直接放在了配置文件中。git
以此爲戒啊,就算是私有的代碼倉庫也是不行的,因此今天決定介紹一個新的 Azure 資源-----Azure Key Vault(密鑰保管庫),咱們將機密信息存儲在密鑰保管庫中,並嘗試經過.NET Console 訪問(獲取)它。github
轉到 portal.azure.com 登錄到咱們本身的帳戶。點擊 Azure Active Directory 進行註冊 「App registrations」,咱們將可以看到 「新註冊應用程序」 選項卡打開。web
Name 輸入:」Azure.KeyVault「。以下圖所示,將其選擇使用單個租戶選項,點擊 」Register「 進行註冊操做。數據庫
接下來,咱們須要給當前註冊的客戶端應用註冊 client secret(客戶端密鑰)json
點擊 "Manage=》Certificates & secrets"編碼
Description 輸入:「Azure.KeyVault.ClientSecret」,過時時間選擇默認 」In 1 year「,點擊 」Add「 進行添加操做加密
接下來咱們能夠看到建立好的客戶端機密信息,同時,咱們點擊圖中箭頭的位置,點擊進行復制 機密信息到咱們工做的記事本中,稍後會用到此機密信息。spa
(注意,必定要在建立好的時候複製此機密信息,一旦咱們離開此頁面,從新進入的話,咱們將沒法進行復制操做).net
搜索關鍵詞 」Key Vault「,3d
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.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
版權:轉載請在文章明顯位置註明做者及出處。如發現錯誤,歡迎批評指正。