# 在 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、密碼、憑證),能確保安全與集中管理
社交