Azure Key Vault と Azure Event Grid の統合により、キー コンテナーに格納されているシークレットの状態が変更されたときにユーザー通知が有効になります。 この機能の概要については、「 Event Grid を使用した Key Vault の監視」を参照してください。
このガイドでは、Event Grid を介して Key Vault の通知を受信する方法と、Azure Automation を介して状態の変化に対応する方法について説明します。
前提条件
- Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
- ご自身の Azure サブスクリプションのキー コンテナー。 「Azure CLI を使用して Azure Key Vault からシークレットを設定して取得する」の手順に従って、新しいキー コンテナーをすばやく作成できます。
概念
Event Grid は、クラウド用のイベント サービスです。 このガイドの手順に従って、Key Vault のイベントをサブスクライブし、Automation にイベントをルーティングします。 キー コンテナー内のいずれかのシークレットの有効期限が切れる (有効期限の 30 日前と定義) と、Event Grid に状態の変更が通知され、エンドポイントに HTTP POST が送信されます。 Web フックは、PowerShell スクリプトの Automation 実行をトリガーします。
Automation アカウントを作成する
Azure portal を使用して Automation アカウントを作成します。
portal.azure.com に移動し、サブスクリプションにログインします。
検索ボックスに「 Automation アカウント」と入力します。
検索バーのドロップダウン リストの [ サービス ] セクションで、[ Automation アカウント] を選択します。
[] を選択し、[] を追加します。
[ Automation アカウントの追加 ] ウィンドウに必要な情報を入力し、[ 作成] を選択します。
Runbook を作成する
Automation アカウントの準備ができたら、Runbook を作成します。
作成した Automation アカウントを選択します。
プロセス自動化 の下にある Runbooks を選択します。
[Runbook の作成] を選択します。
Runbook に名前を付け、Runbook の種類として PowerShell を選択します。
作成した 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 をトリガーします。
発行した Runbook の [リソース] セクションで [Webhook] を選択します。
[ Webhook の追加] を選択します。
[ 新しい Webhook の作成] を選択します。
webhook に名前を付け、有効期限を設定して、URL をコピーします。
重要
作成後に URL を表示することはできません。 このガイドの残りの部分でアクセスできる安全な場所にコピーを保存してください。
[ パラメーター] を選択して設定を実行 し、[ OK] を選択します。 パラメーターを入力しないでください。 [ 作成 ] ボタンが有効になります。
[ OK] を 選択し、[ 作成] を選択します。
Event Grid のサブスクリプションを作成する
Azure portal を使用して Event Grid サブスクリプションを作成します。
キー コンテナーに移動し、[ イベント ] タブを選択します。
[ イベント サブスクリプション ] ボタンを選択します。
サブスクリプションのわかりやすい名前を作成します。
[Event Grid スキーマ] を選択します。
[トピックのリソース] は、状態の変化を監視するキー コンテナーにします。
イベントタイプへのフィルターでは、すべてのオプションが選択された状態にしておきます (9 が選択されています)。
[エンドポイントの種類] で [Webhook] を選択します。
[エンドポイントの選択] を選択します。 新しいコンテキスト ウィンドウで、[Webhook の作成] ステップの webhook URL を [サブスクライバー エンドポイント ] フィールドに貼り付けます。
コンテキスト ペインで 選択を確認 を選択します。
を選択してを作成します。
テストして検証する
Event Grid サブスクリプションが正しく構成されていることを確認します。 このテストでは、 Event Grid サブスクリプションの作成で "作成されたシークレットの新しいバージョン" 通知をサブスクライブしていること、およびキー コンテナーにシークレットの新しいバージョンを作成するために必要なアクセス許可があることを前提としています。
Azure portal で、ご自身のキー コンテナーに移動します。
新しいシークレットを作成します。 テストの目的で、有効期限を次の日に設定します。
キー コンテナーの [ イベント ] タブで、作成した Event Grid サブスクリプションを選択します。
[ メトリック] で、イベントがキャプチャされたかどうかを確認します。 SecretNewVersion と SecretNearExpiry の 2 つのイベントが必要です。 これらのイベントは、Event Grid がキー コンテナー内のシークレットの状態変更を正常にキャプチャしたことを検証します。
Automation アカウントに移動します。
[Runbook] タブを選択し、作成した Runbook を選択します。
[Webhook] タブを選択し、"最後にトリガーされた" タイム スタンプが新しいシークレットを作成してから 60 秒以内であることを確認します。 この結果は、Event Grid が Webhook に POST を送信し、キー ボールトで状態変更があったことのイベントの詳細を送信したこと、および Webhook がトリガーされたことを確認します。
Runbook に戻り、[ 概要 ] タブを選択します。
最近のジョブの一覧を見てください。 ジョブが作成され、状態が "完了" になっていることがわかります。 これにより、Webhook が Runbook をトリガーしてスクリプトの実行を開始したことを確認します。
最近使用したジョブを選択し、Event Grid から Webhook に送信された POST 要求を確認します。 JSON を確認し、キー保管庫とイベントタイプのパラメーターが正しいことを確認してください。 JSON オブジェクトの "イベントの種類" パラメーターが、キー コンテナー (この例では Microsoft.KeyVault.SecretNearExpiry) で発生したイベントと一致する場合、テストは成功しました。
トラブルシューティング
イベント サブスクリプションを作成できない
Azure サブスクリプション リソース プロバイダーで Event Grid とキー コンテナー プロバイダーを再登録します。 「Azure リソース プロバイダーと種類」を参照してください。
次のステップ
おめでとうございます! これらの手順をすべて正しく実行した場合は、キー コンテナーに格納されているシークレットの状態の変更にプログラムで対応する準備が整いました。
ポーリング ベースのシステムを使用して、キー コンテナー内のシークレットの状態変更を探す場合は、ここでこの通知機能の使用を開始できます。 また、Runbook のテスト スクリプトをコードに置き換えて、シークレットの有効期限が近づいているときにプログラムで更新することもできます。
詳細情報: