如何以编程方式将 Webhook 事件添加到 KeyVaults?

How to add webhook events to KeyVaults, programmatically?

我正在尝试为我们环境中的各种共享机密实施机密更新服务。我的计划是为每个 keyvault(有很多)添加一个针对“Secret expires soon”的 webhook 事件,指向一个知道如何处理它的服务。

我可以手动执行此操作,但我无法确定哪个 Azure SDK 模块允许我将事件添加到密钥保管库。在 keyvault 模块中没有提到它。 eventgrid 模块要我先创建一个 eventgrid 域,我知道我不需要,因为 Portal 不会那样做。

管理这些事件订阅的是什么?

从 Azure 门户,您可以转到 Key Vault 并使用 events 选项。 key vault events

它将允许您为您的 Vault 的许多事件设置触发器,例如: Event types

select 触发事件后,选择一个端点。如果有您想要定位的网络挂钩,select 网络挂钩并输入它的地址:

endpoint types

请注意,您可以为消息使用 3 种不同的架构: schema types

您可以使用事件网格模块创建事件订阅而无需先创建事件网格域。这是一个简单的例子:

from azure.identity import DefaultAzureCredential
from azure.mgmt.eventgrid import EventGridManagementClient
from azure.mgmt.eventgrid.models import EventSubscriptionFilter, WebHookEventSubscriptionDestination, EventSubscription

    # webhook URL should respond to the eventgrid validation query as usual and have valid HTTPS config
    webhook_url = "https://kv-listener.my-app.com/kv-events"

    subscription_id = "12345678-1234-1234-1234-1234567890"
    kv_resource_id = "/subscriptions/12345678-1234-1234-1234-1234567890/resourceGroups/vault-test/providers/Microsoft.KeyVault/vaults/testvault42"

    credential = DefaultAzureCredential()
    event_client = EventGridManagementClient(credential, subscription_id=subscription_id)

    subscription_name = "expiry-event-hook"
    destination = WebHookEventSubscriptionDestination(endpoint_url=webhook_url)
    event_filter = EventSubscriptionFilter(
        included_event_types=['Microsoft.KeyVault.SecretNearExpiry', 'Microsoft.KeyVault.SecretExpired']
    )
    the_sub = EventSubscription(
        destination=destination,
        filter=event_filter
    )
    scope = kv_resource_id
    poller = event_client.event_subscriptions.begin_create_or_update(scope, subscription_name, the_sub)
    print("Requested. Waiting on job to finish")
    poller.wait()
    print(f"Finished: {poller.status()}")