[Azure] 如何將 Azure Function 使用的 Key 存放在 Key Vault 內使用

使用 Azure Function 時,有時需要進行 SQL 連線或使用機密性金鑰進行驗證。

假如將資訊放入 Azure Function 內可能會有資安洩露上的疑慮,這時即可使用 Azure Key Vault 進行保護保存。

內文將為 Azure Function 如何至 Azure Key Vault 內取得相關資訊。

概述

使用 Azure Function 時,有時需要進行 SQL 連線或使用機密性金鑰進行驗證。

假如將資訊放入 Azure Function 內可能會有資安洩露上的疑慮,這時即可使用 Azure Key Vault 進行保護保存。

下文將為 Azure Function 如何至 Azure Key Vault 內取得相關資訊。

正文

首先,我們先建制 Azure Key Vault 與 Azure Function。

該處將不敘述如何建制服務, Function App 使用 .Net 與不建制 Application Insights。

如有需要可參考下方的官方文件進行建制。

建制完成後, 我們可以在 Function App 內建制簡單的 Http Trigger Function

完成 Function 建制後, 回到 Function App 下的 Identity 開啟 Status, 並且進行 Save

該動作將開啟 Function App 的 Identity 功能,並且供該服務可以被其他 Azure 服務進行授權

完成 Identity 開啟後, 我們將切換畫面至 Key Vault 的 Secret 內,並且建立一個新的 Secret

  • Name : test
  • Value : 1234567890

完後新增 Secret 後,點擊 Access policies, 並且點擊 + Add Access Policy

點擊後, Secret Permissions 勾選 Get, 並且 Select Principal 選擇建立的 Function App,並且 Add

如完成設定將會看到如下畫面

確認後切記記得點擊上方的 Save, 否則將會無效新增

完成 Save 後,回到 Secret 點擊剛剛建制的 Secret  test 內, 並且點擊第一個 Version (Secret 可以進行版本控管, 專案上可以進行 Secret 版本管理或期限管理)

點開後, 將 Secret Identifier 下方鏈接進行複製

複製完成後, 回到 Function App 下的 Configuration 新增 New application setting :

  • Name : secretFromKeyVault
  • Value : @@Microsoft.KeyVault(SecretUri={複製好的Secret Identifier})

完成後記得點擊上方的 Save, 並且點擊 Refresh。 Refresh 後我們即可點擊設定好的 secretFromKeyVault 確認是否有生效。 如下方顯示 :

確認後, 我們即可回到我們創建的 Function HttpTrigger1 (預設名稱) 內, 並且點擊 Code + Test 加入下方程式碼 : 

	// 利用環境變數取得 Secret
    // Use Environment Value to get Secret
    var test = Environment.GetEnvironmentVariable("secretFromKeyVault", EnvironmentVariableTarget.Process);

    // 取得 Secret 後顯示在 Log 資訊內
    // After get secret, and display on log information
    log.LogInformation($"Secret : {test}");

新增後, 點擊上方的 Save 和 Test / Run, (Test / Run 前建議先點開下方的 Log), 然後點擊右側的 Run, 我們即可從 Log 內看到我們設定好 Secret 的值

以上即完成, 完成測試後即可將整個 Resource Group 進行刪除避免產生額外的費用

參考

分級: 入門是認識, 基本是運用, 進階是混合結合
範本是已可下載或可使用的範例, 至於教程當然是學習的結晶