Azure Event Grid でキー コンテナー通知を受信して応答する

Azure Key Vault と Azure Event Grid の統合により、キー コンテナーに格納されているシークレットの状態が変更されたときにユーザーに通知することができます。 この機能の概要については、Event Grid による Key Vault の監視に関するページをご覧ください。

このガイドでは、Event Grid によって Key Vault の通知を受信する方法、および Azure Automation によって状態の変更に応答する方法について説明します。

前提条件

概念

Event Grid は、クラウドのイベント処理サービスです。 このガイドの手順に従って、Key Vault のイベントをサブスクライブして、イベントを Automation にルーティングします。 キー コンテナーのいずれかのシークレットの有効期限 (30 日に設定されます) が近づくと、Event Grid に状態の変化の通知が送られ、それに応じて HTTP POST がエンドポイントに送信されます。 その後、Web hook によって PowerShell スクリプトの Automation 実行がトリガーされます。

HTTP POST フローチャート

Automation アカウントを作成する

Azure portal で、Automation アカウントを作成します。

  1. portal.azure.com にアクセスして、ご自身のサブスクリプションにログインします。

  2. 検索ボックスに、「Automation Accounts」と入力します。

  3. 検索バーのドロップダウン リストの [サービス] セクションで、 [Automation アカウント] を選択します。

  4. [追加] を選択します。

    [Automation アカウント] ウィンドウ

  5. [Automation アカウントの追加] ウィンドウに必要な情報を入力し、 [作成] を選択します。

Runbook を作成する

ご自身の Automation アカウントの準備ができたら、Runbook を作成します。

Runbook UI を作成する

  1. 作成した Automation アカウントを選択します。

  2. [プロセス オートメーション][Runbook] を選択します。

  3. [Runbook の作成] を選択します。

  4. Runbook に名前を付けて、Runbook の種類として [PowerShell] を選択します。

  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 を作成する

新しく作成された Runbook をトリガーする Webhook を作成します。

  1. 発行した Runbook の [リソース] セクションで [Webhook] を選択します。

  2. [Webhook の追加] を選択します。

    [Webhook の追加] ボタン

  3. [新しい Webhook を作成します] を選択します。

  4. Webhook に名前を付けて、有効期限を設定し、URL をコピーします。

    重要

    Webhook の作成後に URL を表示することはできません。 このガイドの残りの部分で使用できるように、アクセスできる安全な場所にコピーを保管しておいてください。

  5. [パラメーターと実行設定] を選択し、 [OK] を選択します。 パラメーターは入力しないでください。 [作成] ボタンが有効になります。

  6. [OK] を選択し、 [作成] を選択します。

    新しい Webhook UI の作成

Event Grid のサブスクリプションを作成する

Azure portal を使用して Event Grid サブスクリプションを作成します。

  1. ご自身のキー コンテナーにアクセスし、[イベント] タブを選択します。

    Azure portal の [イベント] タブ

  2. [+ イベント サブスクリプション] ボタンを選択します。

  3. サブスクリプションのわかりやすい名前を作成します。

  4. [イベント グリッド スキーマ] を選択します。

  5. [トピックのリソース] は、状態の変化を監視するキー コンテナーにします。

  6. [イベントの種類のフィルター] については、すべてのオプションをオンのままにします (9 個が選択済み)。

  7. [エンドポイントの種類][Webhook] を選択します。

  8. [エンドポイントの選択] を選択します。 新しいコンテキスト ウィンドウの [サブスクライバー エンドポイント] フィールドに、「Webhook を作成する」手順からの Webhook URL を貼り付けます。

  9. コンテキスト ウィンドウで [選択内容の確認] を選択します。

  10. [作成] を選択します

    イベント サブスクリプションの作成

テストして検証する

Event Grid サブスクリプションが適切に構成されていることを確認します。 このテストは、「Event Grid のサブスクリプションを作成する」で "シークレットの新しいバージョンが作成されました" という通知をサブスクライブしたこと、およびシークレットの新しいバージョンをキー コンテナーに作成するのに必要な権限を持っていることを前提としています。

Event Grid サブスクリプションの構成のテスト

[シークレットの作成] ウィンドウ

  1. Azure portal で、ご自身のキー コンテナーに移動します

  2. 新しいシークレットを作成します。 テストの目的で、有効期限を翌日に設定します。

  3. ご自身のキー コンテナーの [イベント] タブで、作成した Event Grid サブスクリプションを選択します。

  4. [メトリック] で、イベントがキャプチャされたかどうかを確認します。 2 つのイベントが想定されます。1 つは SecretNewVersion で、もう 1 つは SecretNearExpiry です。 これらのイベントにより、キー コンテナーにあるシークレットの状態の変更が、Event Grid によって正常にキャプチャされたことが検証されます。

    [メトリック] ウィンドウ: キャプチャしたイベントの確認

  5. Automation アカウントに移動します。

  6. [Runbook] タブを選択し、作成した Runbook を選択します。

  7. [Webhook] タブを選択し、"最終トリガー" のタイム スタンプが、新しいシークレット作成から 60 秒以内であることを確認します。 この結果により、キー コンテナーの状態変更イベントの詳細を含む POST が Event Grid によって Webhook に対して実行され、Webhook がトリガーされたことが確認されます。

    [Webhook] タブ、最終トリガー タイムスタンプ

  8. ご自身の Runbook に戻り、 [概要] タブを選択します。

  9. [最近のジョブ] の一覧を確認します。 ジョブが作成され、状態が "完了" になっていることがわかります。 これにより、Webhook によって Runbook がトリガーされ、そのスクリプトの実行が開始されたことが確認されます。

    Webhook 最近のジョブの一覧

  10. 最近のジョブを選択し、Event Grid から Webhook に送信された POST 要求を確認します。 JSON を調べ、キー コンテナーとイベントの種類のパラメーターが正しいことを確認します。 JSON オブジェクトの "イベントの種類" パラメーターが、キー コンテナーで発生したイベント (この例では Microsoft.KeyVault.SecretNearExpiry) と一致する場合、テストは成功しました。

トラブルシューティング

イベント サブスクリプションを作成できない

お使いの Azure サブスクリプションのリソース プロバイダーで、Event Grid およびキー コンテナー プロバイダーを再登録します。 「Azure リソース プロバイダーと種類」を参照してください。

次のステップ

お疲れさまでした。 これらのすべての手順を正しく実行したら、お使いのキー コンテナーに格納されているシークレットの状態変更にプログラムで応答する準備ができています。

ポーリング ベースのシステムを使用して、キー コンテナー内のシークレットの状態変更を探す場合は、ここでこの通知機能の使用を開始できます。 また、ご自身の Runbook のテスト スクリプトをコードに置き換えて、まもなく有効期限が切れるシークレットをプログラムによって更新することもできます。

詳細情報: