使用 Azure 事件方格來接收和回應金鑰保存庫通知

Azure Key Vault 與 Azure 事件方格的整合可讓使用者在金鑰保存庫中儲存的祕密變更狀態時收到通知。 如需此功能的概觀,請參閱使用事件方格監視 Key Vault

本指南說明如何透過事件方格接收 Key Vault 通知,以及如何透過 Azure 自動化回應狀態變更。

必要條件

概念

事件方格是一項雲端事件服務。 藉由遵循本指南中的步驟,您將訂閱 Key Vault 的事件,並將事件路由傳送至 Azure 自動化。 當金鑰保存庫中的其中一個祕密即將過期時 (定義為到期日前 30 天),事件方格會收到狀態變更通知,並向端點發出 HTTP POST。 然後,Webhook 會觸發 PowerShell 指令碼的自動化執行。

HTTP POST flowchart

建立自動化帳戶

透過 Azure 入口網站建立自動化帳戶。

  1. 移至 portal.azure.com 並登入您的訂用帳戶。

  2. 在搜尋方塊中,輸入自動化帳戶

  3. 在搜尋列下拉式清單的 [服務] 區段底下,選取 [自動化帳戶]

  4. 選取 [新增]。

    Automation accounts pane

  5. 在 [新增自動化帳戶] 窗格中輸入必要資訊,然後選取 [建立]

建立 Runbook

自動化帳戶準備就緒之後,建立 Runbook。

Create a runbook UI

  1. 選取您建立的自動化帳戶。

  2. 在 [程序自動化] 下方,選取 [Runbook]

  3. 選取 [建立 Runbook]

  4. 為 Runbook 命名,然後選取 [PowerShell] 做為 Runbook 類型。

  5. 選取您所建立的 Runbook,然後選取 [編輯] 按鈕。

  6. 輸入下列程式碼 (用於測試目的),然後選取 [發佈] 按鈕。 這個動作會傳回所接收 POST 要求的結果。

param
(
[Parameter (Mandatory = $false)]
[object] $WebhookData
)

#If runbook was called from Webhook, WebhookData will not be null.
if ($WebhookData) {

#rotate secret:
#generate new secret version in key vault
#update db/service with generated secret

#Write-Output "WebhookData <$WebhookData>"
Write-Output $WebhookData.RequestBody
}
else
{
# Error
write-Error "No input data found." 
}

Publish runbook UI

建立 Webhook

建立 Webhook,以觸發新建立的 Runbook。

  1. 從您發佈 Runbook 的 [資源] 區段中選取 [Webhook]

  2. 選取 [新增 Webhook]

    Add Webhook button

  3. 選取 [建立新的 Webhook]

  4. 為 Webhook 命名、設定到期日,然後複製 URL。

    重要

    建立 URL 之後,您就無法加以檢視。 務必將複本儲存在您可存取的安全位置,以供本指南的其餘部分使用。

  5. 選取 [參數與回合設定],然後選取 [確定]。 請勿輸入任何參數。 將會啟用 [建立] 按鈕。

  6. 選取 [確定],然後選取 [建立]

    Create new Webhook UI

建立事件方格訂閱

透過 Azure 入口網站建立事件方格訂用帳戶。

  1. 移至您的金鑰保存庫,然後選取 [事件] 索引標籤。

    Events tab in Azure portal

  2. 選取 [事件訂閱] 按鈕。

  3. 建立訂用帳戶的描述性名稱。

  4. 選擇 [事件方格結構描述]

  5. 主題資源應該是您要監視其狀態變更的金鑰保存庫。

  6. 針對 [篩選至事件類型],讓所有選項保持選取 (已選取 9 項)。

  7. 針對 [端點類型],選取 [Webhook]

  8. 選擇 [選取端點]。 在新的內容窗格中,將建立 Webhook 步驟中的 Webhook URL 貼到 [訂閱者端點] 欄位中。

  9. 在內容窗格中選取 [確認選取項目]

  10. 選取 建立

    Create event subscription

測試和驗證

確認您的事件方格訂用帳戶已設定屬性。 這項測試假設您已在建立事件方格訂用帳戶中訂閱「已建立新版的秘密」通知,而且您有必要權限可在金鑰保存庫中建立新版的秘密。

Test config of Event Grid subscription

Create-a-secret pane

  1. 移至 Azure 入口網站上您的金鑰保存庫。

  2. 建立新的祕密。 基於測試目的,請將到期日設定為後一天。

  3. 在金鑰保存庫中的 [事件] 索引標籤上,選取您建立的事件方格訂用帳戶。

  4. 在 [計量] 底下,檢查是否已擷取事件。 預期會有兩個事件:SecretNewVersion 和 SecretNearExpiry。 這些事件會驗證事件方格是否成功擷取到金鑰保存庫中祕密的狀態變更。

    Metrics pane: check for captured events

  5. 移至自動化帳戶。

  6. 選取 [Runbook] 索引標籤,然後選取您建立的 Runbook。

  7. 選取 [Webhook] 索引標籤,然後確認「上次觸發」時間戳記是在您建立新祕密時的 60 秒內。 這個結果可確認事件方格已使用金鑰保存庫中狀態變更的事件詳細資料對 Webhook 進行 POST,然後觸發 Webhook。

    Webhooks tab, Last Triggered time stamp

  8. 返回您的 Runbook,然後選取 [概觀] 索引標籤。

  9. 查看 [最近的作業] 清單。 您應會看到已建立一項作業,且狀態為 [完成]。 這會確認 Webhook 觸發了 Runbook 來開始執行其指令碼。

    Webhook Recent Jobs list

  10. 選取最近的作業,然後查看從事件方格傳送到 Webhook 的 POST 要求。 檢查 JSON,並確定您金鑰保存庫和事件類型的參數均正確無誤。 如果 JSON 物件中的「事件類型」參數符合金鑰保存庫中發生的事件 (在此範例中是 Microsoft.KeyVault.SecretNearExpiry),則測試成功。

疑難排解

您無法建立事件訂閱。

在您的 Azure 訂用帳戶資源提供者中重新註冊事件方格和金鑰保存庫提供者。 請參閱 Azure 資源提供者和類型

下一步

恭喜! 如果您已正確遵循所有步驟,您現在已準備好以程式設計方式回應金鑰保存庫中所儲存祕密的狀態變更。

如果您已使用輪詢型系統來搜尋金鑰保存庫中祕密的狀態變更,現在可以開始使用此通知功能。 您也可以將 Runbook 中的測試指令碼取代為程式碼,在祕密即將到期時以程式設計方式進行更新。

深入了解: