# 在 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) 人氣()

 

研究很久的翻譯API總算有了結果

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

 

這算是一篇簡短的筆記.

  1. 在Azure裡面啟用快取服務
  2. 在背景專案中加入背景角色快取服務
  3. 設定webrole的cache
  4. 設定CacheWorkerRole1的cache
  5. 修改web.config,要在裡面加入金鑰和端點

 

參考資料

 

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

這問題在2014跨年後發生的,當時一直覺得很納悶,明明簡單好用的 HtmlAgilityPack 怎麼會取不到值呢? 還拼命跳空值錯誤 整個鬼打牆!

直到過了一個多月才重新開來看當初的錯誤在哪裡,但是語法完全沒有錯誤! 但是就是抓不到,怎麼會呢~~~?

文章標籤

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

這是一個很機車的部分,看了許多文件都搞不清楚為什麼有這問題.

MSDN文件也只教人開 ID_Cap_Map ,但是還是取不到座標.

後來發現解法如下

  1.     方案總管內展開Properties
  2.     進入WMAppManifest.xml添加ID_Cap_Map
  3.     不要猶豫,也打勾ID_CAP_LOCATION。



這樣一來就可以使用座標啦!

 

參考資料

MSDN 座標範例

Windows Phone 8 Emulator – Maps won’t display

Windows phone 8 学习笔记(8) 定位地图导航

 

文章標籤

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