你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure Key Vault 与 Azure 事件网格的集成可在密钥保管库中存储的机密的状态发生更改时向用户通知。 有关该功能的概述,请参阅通过事件网格监视 Key Vault。
本指南介绍如何通过事件网格接收 Key Vault 通知,以及如何通过 Azure 自动化响应状态更改。
先决条件
- 一份 Azure 订阅。 如果没有 Azure 订阅,请在开始之前创建一个免费帐户。
- Azure 订阅中的密钥保管库。 可以按照 “设置”中的步骤,使用 Azure CLI 从 Azure Key Vault 检索机密,快速创建新的密钥保管库。
概念
事件网格是云的事件服务。 通过按照本指南中的步骤操作,你将订阅 Key Vault 事件,并将事件路由到自动化。 当密钥保管库中的其中一个机密即将过期(定义为过期日期之前的 30 天)时,事件网格会通知状态更改,并向终结点发出 HTTP POST。 然后,Web 挂钩会触发 PowerShell 脚本的自动化执行。
创建自动化帐户
通过 Azure 门户创建自动化帐户:
转到 portal.azure.com 并登录到订阅。
在搜索框中,输入 自动化帐户。
在搜索栏上下拉列表的 “服务 ”部分下,选择“ 自动化帐户”。
选择 并添加。
在 “添加自动化帐户 ”窗格中输入所需信息,然后选择“ 创建”。
创建 runbook
自动化帐户准备就绪后,创建 runbook。
选择创建的自动化帐户。
在“过程自动化”下,选择“Runbook”。
选择“创建 Runbook”。
将 Runbook 命名,然后选择 PowerShell 作为 Runbook 类型。
单击创建的 Runbook,然后选择“编辑”按钮。
输入以下代码(用于测试目的),然后选择“ 发布 ”按钮。 该操作将返回收到的 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."
}
创建 Webhook
创建 Webhook 来触发新创建的 runbook。
从您发布的运行手册的资源部分选择Webhooks。
选择 “添加 Webhook”。
选择“ 创建新 Webhook”。
为 Webhook 命名,设置过期日期,并复制 URL。
重要
创建 URL 后无法查看该 URL。 请确保将副本保存在安全位置,可在其中访问本指南的其余部分。
选择 “参数”并运行设置 ,然后选择“ 确定”。 不要输入任何参数。 将启用 “创建 ”按钮。
选择 “确定 ”,然后选择“ 创建”。
创建事件网格订阅
通过 Azure 门户创建事件网格订阅。
转到密钥保管库,然后选择“ 事件 ”选项卡。
选择 “事件订阅 ”按钮。
为订阅创建描述性名称。
选择 事件网格架构。
“主题资源”应是要监视其状态更改的 Key Vault。
对于 “筛选到事件类型”,请保留选中的所有选项(已选择 9 个)。
对于“终结点类型” ,选择 Webhook。
选择“选择终结点”。 在新上下文窗格中,将 “创建 Webhook”步骤中的 Webhook URL 粘贴到 “订阅服务器终结点 ”字段中。
在上下文窗格中选择 “确认选择 ”。
选择 创建。
测试和验证
验证是否已正确配置事件网格订阅。 此测试假定你已订阅“ 创建事件网格”订阅中的“机密新版本”通知,并且你有权在密钥保管库中创建新版本的机密。
在 Azure 门户中转到 Key Vault。
创建新机密。 出于测试目的,请将到期日期设置为第二天。
在密钥保管库中的“ 事件 ”选项卡上,选择创建的事件网格订阅。
在“指标”下,查看是否捕获了事件。 预期会发生两个事件:SecretNewVersion 和 SecretNearExpiry。 这些事件验证事件网格是否已成功捕获密钥保管库中机密的状态更改。
返回到自动化帐户。
选择“Runbook”选项卡,然后选择已创建的 runbook。
选择 “Webhook” 选项卡,并确认创建新机密的“上次触发时间”时间戳在 60 秒内。 此结果确认事件网格向 Webhook 发出 POST,其中包含密钥保管库中状态更改的事件详细信息,并触发了 Webhook。
返回到 Runbook,然后选择“ 概述 ”选项卡。
查看“最近的作业”列表。 应会看到已创建作业且状态为“已完成”。 这可确认 Webhook 触发了 Runbook 来开始执行其脚本。
选择最近的作业并查看从事件网格发送到 Webhook 的 POST 请求。 请检查 JSON 并确保您的密钥库和事件类型参数正确。 如果 JSON 对象中的“事件类型”参数与密钥保管库中发生的事件匹配(在此示例中,Microsoft.KeyVault.SecretNearExpiry),则测试成功。
故障排除
无法创建事件订阅
在 Azure 订阅资源提供程序中重新注册事件网格和 Key Vault 提供程序。 请参阅 Azure 资源提供程序和类型。
后续步骤
祝贺! 如果已正确执行所有这些步骤,现在可以以编程方式响应密钥保管库中存储的机密的状态更改。
如果你一直在使用基于轮询系统来检索密钥库中密钥的状态变更,那么现在可以开始使用此通知功能。 还可以将 Runbook 中的测试脚本替换为代码,以便在机密即将过期时以编程方式续订机密。
了解详细信息: