Key Vault からシークレットと証明書を自動的に再読み込みする

App Configuration と Key Vault は、多くのアプリケーションで並列的に使用される相補的なサービスです。 Key Vault に格納されたシークレットまたは証明書を参照するキーを自分の App Config ストアに作成することで、App Configuration は両サービスを一緒に使用するのに役立ちます。 Key Vault に証明書の公開および秘密キーのペアがシークレットとして格納されるため、アプリケーションは任意の証明書をシークレットとして Key Vault から取得することができます。

セキュリティの観点から、シークレット証明書を定期的にローテーションするのは良い習慣です。 それらが Key Vault でローテーションされたら、最新のシークレットと証明書の値をアプリケーションに取得させることになるでしょう。 これはアプリケーションを再起動しなくても、2 とおりの方法で実現できます。

  • 番兵となるキーと値を更新して構成全体の更新をトリガーし、それによって Key Vault のすべてのシークレットと証明書を再読み込みします。 詳細については、ASP.NET Core アプリで動的な構成を使用する方法に関するページを参照してください。
  • Key Vault から一部またはすべてのシークレットと証明書を定期的に再読み込みする。

1 つ目の方法では、Key Vault 内のシークレットと証明書をローテーションするときには必ず、番兵となるキーと値を App Configuration で更新する必要があります。 このアプローチは、アプリケーションへのシークレットと証明書の即時再読み込みを強制したい場合に効果的です。 ただし、Key Vault でシークレットと証明書が自動的にローテーションされても、番兵となるキーと値が時間内に更新されなければアプリケーションでエラーが発生します。 2 つ目の方法では、このプロセスを完全に自動化できます。 ローテーション後の経過時間として許容できる時間内に、シークレットと証明書を Key Vault から再読み込みするようにアプリケーションを構成することが可能です。 このチュートリアルでは、2 つ目の方法について説明します。

前提条件

自動的にローテーションされる証明書を Key Vault に追加する

チュートリアル: Key Vault における証明書の自動ローテーションを構成する」に従って、ExampleCertificate という自動的にローテーションされる証明書を、前のチュートリアルで作成したキー コンテナーに追加します。

Key Vault の証明書への参照を App Configuration に追加する

  1. Azure portal で [すべてのリソース] を選択し、前のチュートリアルで作成した App Configuration ストア インスタンスを選択します。

  2. [構成エクスプローラー] を選択します。

  3. [+ 作成][キー コンテナー参照] の順に選択し、次の値を指定します。

    • [キー] : TestApp:Settings:KeyVaultCertificate を選択します。
    • ラベル:この値は空白のままにしておきます。
    • [サブスクリプション][リソース グループ][Key Vault] : 前のチュートリアルで作成したキー コンテナーに対応する値を入力します。
    • [シークレット] : 前のセクションで作成した ExampleCertificate という名前のシークレットを選択します。
    • [シークレットのバージョン] : 最新バージョン

Note

特定のバージョンを参照した場合は、Key Vault からシークレットまたは証明書を再読み込みすることで常に同じ値が返されます。

Key Vault のシークレットと証明書を再読み込みするようにコードを更新する

Program.cs ファイルの AddAzureAppConfiguration メソッドを更新します。自分のキー コンテナーの証明書に対する更新間隔を、SetSecretRefreshInterval メソッドを使用して設定します。 この変更によりアプリケーションは、ExampleCertificate の公開および秘密キーのペアを 12 時間おきに再読み込みするようになります。

config.AddAzureAppConfiguration(options =>
{
    options.Connect(settings["ConnectionStrings:AppConfig"])
            .ConfigureKeyVault(kv =>
            {
                kv.SetCredential(new DefaultAzureCredential());
                kv.SetSecretRefreshInterval("TestApp:Settings:KeyVaultCertificate", TimeSpan.FromHours(12));
            });
});

SetSecretRefreshInterval メソッドの第 1 引数は、App Configuration における Key Vault 参照のキーです。 この引数は省略可能です。 このキー パラメーターを省略した場合、個別の更新間隔が設定されていないすべてのシークレットと証明書に更新間隔が適用されます。

シークレットと証明書が Key Vault から再読み込みされる頻度は、更新間隔によって定義されます。Key Vault または App Configuration の値にどのような変更が加えられたかは関係ありません。 シークレットと証明書の値が App Configuration で変化したときにそれらを再読み込みしたい場合は、ConfigureRefresh メソッドを使用してそれらを監視できます。 詳細については、ASP.NET Core アプリで動的な構成を使用する方法に関するページを参照してください。

更新間隔は、シークレットと証明書が Key Vault で更新された後の経過時間として許容できる時間に基づいて選んでください。 スロットルを防ぐために、Key Vault サービスの制限を考慮することも大切です。

リソースをクリーンアップする

この記事で作成したリソースを継続して使用しない場合は、ここで作成したリソース グループを削除して課金されないようにしてください。

重要

リソース グループを削除すると、元に戻すことができません。 リソース グループとそのすべてのリソースは完全に削除されます。 間違ったリソース グループやリソースをうっかり削除しないようにしてください。 この記事のリソースを、保持したい他のリソースを含むリソース グループ内に作成した場合は、リソース グループを削除する代わりに、各リソースをそれぞれのペインから個別に削除します。

  1. Azure portal にサインインし、 [リソース グループ] を選択します。
  2. [名前でフィルター] ボックスにリソース グループの名前を入力します。
  3. 結果一覧でリソース グループ名を選択し、概要を表示します。
  4. [リソース グループの削除] を選択します。
  5. リソース グループの削除の確認を求めるメッセージが表示されます。 確認のためにリソース グループの名前を入力し、 [削除] を選択します。

しばらくすると、リソース グループとそのすべてのリソースが削除されます。

次のステップ

このチュートリアルでは、シークレットと証明書を Key Vault から自動的に再読み込みするようにアプリケーションを設定する方法について説明しました。 App Configuration と Key Vault へのアクセスを効率化するマネージド ID の使用方法については、次のチュートリアルに進んでください。