因為工作關係,遇到有個 App Services 需要從 Azure Key Vault 上取得連線字串與秘密 (Secrets) 需求。實作的方式相當多種,這次是以角色為基礎的存取控制 (Role-Based-Access-Control) 方式來存取 Azure Key Vault,達到可以不需要儲存任何 秘密資訊 web.config 、 appsetting.json 寫死程式裡,只有該授權的角色可以取得秘密資訊的效果。本篇文章若有錯誤或任何建議,請各位前輩不吝提出。






若你比較喜歡看影片介紹,下面是完整影片:






Azure Key Vault 設定

1. 在建立 Azure Key Vault 過程中,在 存取原則 內選擇 Azure 角色型存取控制。若您已經建立 Azure Key Vault,你可以在存取原則內重新設定。





2. 首先先點選 存取控制(IAM) > 新增角色指派, 將自己的帳戶加入 Key Vault Administrator 權限,如下圖所示: 





3. 接下來,我們要在 Azure Key Vault 內建立兩個秘密,分別是 連線字串 與 呼叫其他服務時所需要的APIKey。選擇秘密 > 建立秘密。





3. 開始建立連線字串,上傳選項選擇 手動 ,名稱輸入連線字串名稱與值,並且選擇啟用。其餘部分依據需要設定,這次我們不額外設定。





4. 開始APIKey,上傳選項選擇 手動 ,名稱輸入連線字串名稱與值,並且選擇啟用。其餘部分依據需要設定,這次我們不額外設定。



注意: 連線字串的名稱需要與 Web.config 內的名稱相同;另一組應用程式設定的名稱也要與Web.config內名稱相同




5. 建立完成後,到 Azure Key Vault > 秘密 > 詳細內容,分別複製 連線字串APIKey 秘密識別碼。這些資訊晚些會在 App Service 組態設定階段會用到。






Copy it,  we will use this later





Azure App Services 設定

1. 切換到 App Service > 身分識別 > 系統識別 > 狀態,確認為開啟。點選下方 Azure 角色指派





2. 點選上方 新增角色指派





3. 範圍選擇 Key Vault;選擇定用帳戶與選擇剛剛設定的 Azure Key Vault;角色選擇 Key Vault Secrets User 後,點選儲存。





4. 在 App Services > 組態 > 應用程式設定 > 新增連線字串,輸入內容如下:

名稱:與 eeb.config 內的 connection string 名稱相同

值:@Microsoft.KeyVault(SecretUri=連線字串的秘密識別碼)

類型:依據您的情況選擇





5. 依此類推,在 App Services > 組態 > 應用程式設定 > 新增應用程式設定,輸入內容如下:

名稱:與 web.config 內的 app setting key名稱相同

值:@Microsoft.KeyVault(SecretUri=APIKey的秘密識別資訊)

類型:依據您的情況選擇





6. 設定完成後,應該會看見 來源欄位出現:金庫保存參考








驗證結果

1. 回到程式內,找到 web.config 或 app.config ,將連線字串 與 APIKey 設定為空白。重新上傳程式至 App Services。約略過2-5分鐘,即可成功連線。



注意:透過 Visual Studio 發佈至 App Services 過程中會遇到連線字串不能為空的情況,請考慮使用 Azure DevOps 或其他方式發佈,或直接在 App Service > 編輯程式內修改。




2. 我自己簡單做了一個驗證,將連線字串與組態設定給列印出來,結果如下。