# 在 Azure Web App 使用 Key Vault 管理應用程式設定

## 前言
在開發應用程式時,我們經常需要一些 **Key/Value 設定**,例如:資料庫連線字串、API 金鑰、密碼。  

最簡單的方式,就是直接在 **Azure Web App 的應用程式設定 (Application Settings)** 裡新增 Key/Value。這樣程式可以透過環境變數直接讀取,設定也跟著部署環境走。  

不過,當設定涉及敏感資訊(像是密碼或金鑰),或需要在多個環境中共享時,這種方式就會有風險與不便。  

---

## 方法一:傳統的 Key/Value 設定
這是最基本的方式:  
1. 打開 **Web App → 設定 (Configuration)**  
2. 在 **應用程式設定** 新增一組 Key 與 Value,例如:  
   - `DbPassword = P@ssw0rd123`  
3. 儲存並重新啟動 Web App,程式即可讀取。  

👉 優點:快速、簡單  
👉 缺點:安全性不足、不易集中管理  

---

## 方法二:使用 Azure Key Vault 管理設定

### 什麼是 Key Vault?
Azure Key Vault 是一個專門儲存敏感資訊(Secrets、金鑰、憑證)的服務。  
透過 **Web App 與 Key Vault 整合**,你可以:  
- 把敏感資訊安全地存放在 Key Vault  
- Web App 啟動時自動讀取,不需要把密碼硬寫在設定裡  
- Secret 更新時,不用重新部署,只要在 Key Vault 建立新版本即可  

換句話說,**應用程式不再直接保存敏感值,而是透過引用 (Reference) 的方式,由系統自動拉取 Key Vault 的內容**。  

---

### 設定流程
1. **建立 Key Vault 並新增 Secret**  
   - 在 Key Vault → Secrets → 新增一個 Secret  
   - 例如:`DbPassword = P@ssw0rd123`  

2. **啟用 Web App 的 Managed Identity**  
   - 到 Web App → **身分識別 (Identity)** → 開啟系統指派  
   - 這會讓 Web App 在 Azure AD 有一個身分  

3. **授權 Web App 存取 Key Vault**  
   - 到 Key Vault → **存取控制 (IAM)**  
   - 新增角色指派 → 選擇 **Key Vault Secrets User**  
   - 指定 Web App 的 Managed Identity  

4. **在 Web App 新增 Key Vault Reference**  
   - 到 Web App → **設定 (Configuration)**  
   - 新增一筆設定:  
     - Name:`DbPassword`  
     - Value:  
       ```
       @Microsoft.KeyVault(SecretUri=https://<你的Vault名稱>.vault.azure.net/secrets/DbPassword)
       ```
   - 儲存並重新啟動 Web App  

完成後,Web App 讀取環境變數 `DbPassword` 時,就會自動得到 Key Vault 裡的值,而不是原本的 URI。  

---

## 常見錯誤與排查
- **看到的值還是 URI,而不是 Secret**  
  - 檢查 Web App 是否已開啟 **Managed Identity**  
  - 確認 Key Vault IAM 是否已指派 **Key Vault Secrets User** 給 Web App  
  - 重新啟動 Web App 讓設定生效  

- **授權錯誤或 Access Denied**  
  - 可能只給了 **Reader** 角色,這角色只能讀 metadata,不能讀 Secret  
  - 請改成 **Key Vault Secrets User**  

- **Secret 沒更新**  
  - 如果設定值的 URI 帶了「版本號」,就會固定讀該版本  
  - 如果想自動使用最新版本,請使用不含版本號的 URI  

---

## 總結
- **傳統方式 (App Settings Key/Value)**:適合非敏感、單一環境的設定  
- **Key Vault 方式**:適合敏感資訊(API Key、密碼、憑證),能確保安全與集中管理  
 

文章標籤
全站熱搜
創作者介紹
創作者 魚魚 的頭像
魚魚

夏‧獵

魚魚 發表在 痞客邦 留言(0) 人氣(2)