你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

通过 Azure 事件网格接收和响应 Key Vault 通知

通过将 Azure Key Vault 与 Azure 事件网格集成,用户可以在 Key Vault 中存储的机密的状态发生更改时收到通知。 有关该功能的概述,请参阅通过事件网格监视 Key Vault

本指南描述如何通过事件网格接收 Key Vault 通知,以及如何通过 Azure 自动化对状态更改做出响应。

先决条件

概念

事件网格是针对云的事件处理服务。 通过按照本指南中的步骤操作,你将订阅 Key Vault 事件,并将事件路由到自动化。 当 Key Vault 中的机密之一即将到期时(有效期定义为到期日期之前的 30 天),事件网格会获得状态更改通知,并对终结点发出 HTTP POST。 然后,Webhook 会触发 PowerShell 脚本的自动化执行。

HTTP POST 流程图

创建自动化帐户

通过 Azure 门户创建自动化帐户:

  1. 转到 portal.azure.com 并登录到你的订阅。

  2. 在搜索框中,键入“自动化帐户” 。

  3. 在搜索栏中的下拉列表的“服务” 部分下,选择“自动化帐户” 。

  4. 选择 添加

    自动化帐户窗格

  5. 在“添加自动化帐户” 窗格中填写所需信息,然后选择“创建” 。

创建 runbook

自动化帐户准备就绪后,创建 runbook。

创建 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." 
}

发布 runbook UI

创建 Webhook

创建 Webhook 来触发新创建的 runbook。

  1. 从发布的 Runbook 的“资源”部分中选择“Webhook”。

  2. 选择“添加 Webhook” 。

    添加 Webhook 按钮

  3. 选择“创建新 Webhook” 。

  4. 为 Webhook 命名,设置过期日期,并复制 URL。

    重要

    创建 URL 后,无法查看它。 至于本指南的剩余部分,请确保将副本保存在可访问的安全位置。

  5. 选择“参数和运行设置” ,然后选择“确定” 。 不要输入任何参数。 将启用“创建”按钮。

  6. 选择“确定”,然后选择“创建” 。

    创建新 Webhook UI

创建事件网格订阅

通过 Azure 门户创建事件网格订阅。

  1. 转到 Key Vault,然后选择“事件”选项卡。

    Azure 门户中的事件选项卡

  2. 选择“事件订阅”按钮 。

  3. 为订阅创建一个描述性名称。

  4. 选择“事件网格架构” 。

  5. “主题资源” 应是要监视其状态更改的 Key Vault。

  6. 对于“筛选事件类型” ,保留所有选中项(“已选中 9 个” )。

  7. 对于“终结点类型” ,选择 Webhook

  8. 选择“选择终结点”。 在新的上下文窗格中,将 Webhook URL 从创建 Webhook 步骤粘贴到“订阅者终结点” 字段中。

  9. 在上下文窗格中选择“确认选择” 。

  10. 选择“创建” 。

    创建事件订阅

测试和验证

验证是否已正确配置事件网格订阅。 此测试假设你已订阅创建事件网格订阅中的“已创建机密新版本”通知,并且你具有在 Key Vault 中创建机密新版本所需的权限。

事件网格订阅的测试配置

创建机密窗格

  1. 在 Azure 门户中转到 Key Vault。

  2. 创建新机密。 出于测试目的,将过期日期设置为“下一天”。

  3. 在 Key Vault 中的“事件” 选项卡上,选择所创建的事件网格订阅。

  4. 在“指标” 下,查看是否捕获了事件。 需要两个事件:SecretNewVersion 和 SecretNearExpiry。 这些事件会验证网格是否已成功捕获 Key Vault 中机密的状态更改。

    “指标”窗格:查看捕获的事件

  5. 返回到自动化帐户。

  6. 选择“Runbook” 选项卡,然后选择已创建的 runbook。

  7. 选择“Webhook” 选项卡,然后确认“上次触发时间”时间戳在创建新机密后的 60 秒内。 该结果可确认事件网格对 Webhook 发出了 POST(其中包含 Key Vault 中状态更改的事件详细信息),并触发了 Webhook。

    Webhook 选项卡,上次触发的时间戳

  8. 返回到 Runbook,然后选择“概述” 选项卡。

  9. 查看“最近的作业” 列表。 应会看到已创建作业且状态为“已完成”。 这可确认 Webhook 触发了 Runbook 来开始执行其脚本。

    Webhook 最近的作业列表

  10. 选择最近的作业并查看从事件网格发送到 Webhook 的 POST 请求。 检查 JSON 并确保 Key Vault 和事件类型的参数正确。 如果 JSON 对象中的“事件类型”参数与 Key Vault 中发生的事件匹配(在本示例中为 Microsoft.KeyVault.SecretNearExpiry),则测试成功。

疑难解答

无法创建事件订阅

在 Azure 订阅资源提供程序中重新注册事件网格和 Key Vault 提供程序。 请参阅 Azure 资源提供程序和类型

后续步骤

祝贺你! 如果正确执行了所有这些步骤,则现已准备好以编程方式响应 Key Vault 中存储的机密的状态更改。

如果已使用基于轮询的系统来搜索 Key Vault 中机密的状态更改,则使用此通知功能开始。 还可以将 runbook 中的测试脚本替换为代码,以编程方式在机密即将过期时进行续订。

了解详细信息: