KeyVaultの「アクティブ化する日を設定する」と「有効期限を設定する」の設定について勘違いしていた

2022年11月6日

Key Vaultの設定手順については以下を参照してください。

今回は、Key Vaultの「アクティブ化する日を設定する」と「有効期限を設定する」の設定について勘違いしていた、という内容になります。以下の部分です。

想定していた動きは、設定した日付が到来したらKey Vaultの値が自動的に切り替わるというものでした。

しかし、実際は設定によってKey Vaultの値は影響を受けません。

これら日付は、Key Vaultを使用するユーザーが、有効な期間を知るための情報として設定するだけ。
つまり、値には影響しないメモ的な役割でしかないということです。

公式の説明を確認します。

https://learn.microsoft.com/ja-jp/azure/key-vault/secrets/about-secrets

上記で述べた内容は、「ユーザーに通知するための情報提供のみを目的としています。」という部分が根拠となります。

  • exp:IntDate、省略可能、既定値は無期限exp (expiration time: 有効期限) 属性は、特定の条件の場合を除き、それを過ぎたらシークレット データを取得してはならない日時を示します。 このフィールドは、特定のシークレットで使用できないキー コンテナー サービスをユーザーに通知するための情報提供のみを目的としています。 その値は、IntDate 値を含む数値でなければなりません。
  • nbf:IntDate、省略可能、既定値は現在。 nbf (not before: 有効期間開始日時) 属性は、特定の条件の場合を除き、それより前はシークレット データを取得してはならない日時を示します。 このフィールドは情報提供のみを目的としています。 その値は、IntDate 値を含む数値でなければなりません。

また以下の部分からも分かる通り、期限を過ぎたKeyVaultの設定値が使えなくなるわけではないということがわかります。

日付と時刻で制御される操作
シークレットの取得操作は、nbf / exp ウィンドウの外側の、有効期間前および期限切れ後のシークレットでも動作します。 有効期間前のシークレットの取得操作は、テスト目的に使用できます。 期限切れのシークレットの取得は、復旧操作に使用できます。

動作確認してみる

「アクティブ化する日を設定する」と「有効期限を設定する」を有効にして実際に値の反映を確認していきます。

前提として、実験した日時ですが11/5となります。
この時点でのKey Vaultの設定値はhellow keyvaultです。

以下のようにシークレットの新しいバージョンを追加します。

アクティブ化する日を未来に設定します。ここでは11/7をアクティブ化する日付とします。

もし仮にこの日付を基準に動的にKey Vaultの値が切り替わるのであれば、ブラウザで表示される値も変化するはずです。(今回はTEST1としました。)

ここでKey Vaultの値を保存するだけでは即時反映されません。反映するためには、Key Vaultを設定したリソースの構成情報を何かしら変更する必要があります。以下では、Azure Functionsのダミーで作った構成情報を変更してKey Vaultの値の更新が反映されるようにしています。この仕組みについては、最後に書きます。(ここでもTESTとしてるのでわかりにくいかも。実際は更新が走ればいいので任意の値でよい。)

Key Vaultの値はアクティブ化する日に影響を受けることなく最新の値が使われていることがわかりました。

Key Vaultのキャッシュについて

公式で書かれてます。回転というよくわからない見出しですが、そこに記述されてます。

https://learn.microsoft.com/ja-jp/azure/app-service/app-service-key-vault-references?tabs=azure-cli

以下部分でわかりますが、Key Vaultの更新は

・Key Vaultを設定してから最大24時間で自動更新

・構成情報を変更する。

以上のにパターンあることがわかります。

Key Vault 参照の値がキャッシュされ、24 時間ごとに再フェッチされるためです。 アプリの構成を変更すると、参照されているシークレットがすべて直ちに再フェッチされます。

今回の実験では、構成情報を変更したのでKey Vaultの変更がすぐに反映されました。しかし、構成情報を変更しないでアクセスすると、Key Vaultの値はhellow keyvaultのままとなります。

Azure

Posted by takumioda