チュートリアル:ASP.NET Core アプリで Key Vault 参照を使用する

このチュートリアルでは、Azure App Configuration サービスを Azure Key Vault と共に使用する方法について説明します。 App Configuration と Key Vault は補完的なサービスであり、ほとんどのアプリケーションのデプロイで併用されます。

これらをまとめて使用できるように、App Configuration では、Key Vault に格納されている値を参照するキーを作成できます。 App Configuration でこのようなキーを作成すると、App Configuration には、その値そのものではなく、Key Vault の値の URI が格納されます。

App Configuration に格納されているその他のキーの場合と同様、お使いのアプリケーションは App Configuration クライアント プロバイダーを使用して Key Vault 参照を取得します。 この場合、App Configuration に格納された値は、Key Vault の値を参照する URI です。 これらは、Key Vault の値でも資格情報でもありません。 クライアント プロバイダーはキーを Key Vault 参照として認識し、Key Vault を使用して値を取得します。

アプリケーションの役割は、App Configuration と Key Vault の両方に正しく認証されることです。 この 2 つのサービスが直接通信することはありません。

このチュートリアルでは、自分のコードに Key Vault 参照を実装する方法について説明します。 これは、クイック スタートで紹介されている Web アプリに基づいています。 先に進む前に、App Configuration を使用した ASP.NET Core アプリの作成を完了しておいてください。

このチュートリアルの手順は、任意のコード エディターを使用して実行できます。 たとえば、Visual Studio Code は、Windows、macOS、および Linux の各オペレーティング システムで使用できるクロスプラットフォーム コード エディターです。

このチュートリアルでは、以下の内容を学習します。

  • Key Vault に格納されている値を参照する App Configuration キーを作成する。
  • ASP.NET Core Web アプリケーションからこのキーの値にアクセスする。

前提条件

このチュートリアルを開始する前に、.NET SDK 6.0 以降をインストールしてください。

Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。

コンテナーの作成

  1. Azure Portal の左上隅にある [リソースの作成] オプションを選択します。

    Azure portal の [リソースの作成] オプションを示すスクリーンショット。

  2. 検索ボックスに「Key Vault」と入力し、ドロップダウンから Key Vault を選択します。

  3. 結果リストで、左側の [キー コンテナー] を選択します。

  4. [キー コンテナー] で、 [追加] を選択します。

  5. [キー コンテナーの作成] の右側に、次の情報を入力します。

    • [サブスクリプション] を選択してサブスクリプションを選択します。
    • [リソース グループ] で、既存のリソース グループ名を入力するか、 [新規作成] を選択してリソース グループ名を入力します。
    • [キー コンテナー名] では、一意の名前が必要です。
    • [リージョン] ドロップダウン リストで、場所を選択します。
  6. [キー コンテナーの作成] オプションは既定値のままにしておきます。

  7. [確認および作成] をクリックします。

  8. システムによって、入力したデータが検証されて表示されます。 [作成] をクリックします。

この時点で、お使いの Azure アカウントが、この新しいコンテナーへのアクセスが承認されている唯一のアカウントになります。

Key Vault にシークレットを追加する

シークレットをコンテナーに追加するには、いくつかの追加の手順を行う必要があります。 この場合、Key Vault の取得をテストするために使用できるメッセージを追加します。 このメッセージは Message という名前で、それには "Hello from Key Vault" という値が格納されます。

  1. Key Vault のプロパティ ページで、 [シークレット] を選択します。
  2. [Generate/Import](生成/インポート) を選択します。
  3. [シークレットの作成] ウィンドウで、次の値を入力します。
    • [アップロード オプション] :「Manual」と入力します。
    • Name:「Message」と入力します。
    • : 「Hello from Key Vault」と入力します。
  4. [シークレットの作成] の他のプロパティは既定値のままにしておきます。
  5. [作成] を選択します

App Configuration に Key Vault 参照を追加する

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

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

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

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

新しいキー コンテナー参照の作成フォームのスクリーンショット

Key Vault 参照を使用するようコードを更新する

  1. 次のコマンドを実行して、必要な NuGet パッケージへの参照を追加します。

    dotnet add package Azure.Identity
    
  2. Program.cs を開き、次の必須パッケージへの参照を追加します。

    using Azure.Identity;
    
  3. AddAzureAppConfiguration メソッドを呼び出して App Configuration を使用します。 ConfigureKeyVault オプションを追加し、SetCredential メソッドを使用してご利用の Key Vault に正しい資格情報を渡します。

    var builder = WebApplication.CreateBuilder(args);
    
    // Retrieve the connection string
    string connectionString = builder.Configuration.GetConnectionString("AppConfig");
    
    // Load configuration from Azure App Configuration
    builder.Configuration.AddAzureAppConfiguration(options =>
    {
        options.Connect(connectionString);
    
        options.ConfigureKeyVault(keyVaultOptions =>
        {
            keyVaultOptions.SetCredential(new DefaultAzureCredential());
        });
    });
    

    ヒント

    複数の Key Vault がある場合は、それらのすべてに同じ資格情報が使用されます。 Key Vault で異なる資格情報が必要な場合は、AzureAppConfigurationKeyVaultOptions クラスの Register または SetSecretResolver メソッドを使用して設定できます。

  4. App Configuration への接続を初期化するときは、ConfigureKeyVault メソッドを呼び出して、Key Vault への接続を設定します。 初期化後、通常の App Configuration キーの値にアクセスする場合と同じ方法で、Key Vault 参照の値にアクセスできます。

    このプロセスの動作を確認するには、Views>Home フォルダーにある Index.cshtml を開きます。 その内容を次のコードに置き換えます。

    @page
    @using Microsoft.Extensions.Configuration
    @inject IConfiguration Configuration
    
    <style>
        body {
            background-color: @Configuration["TestApp:Settings:BackgroundColor"]
        }
        h1 {
            color: @Configuration["TestApp:Settings:FontColor"];
            font-size: @Configuration["TestApp:Settings:FontSize"]px;
        }
    </style>
    
    <h1>@Configuration["TestApp:Settings:Message"]
        and @Configuration["TestApp:Settings:KeyVaultMessage"]</h1>
    

    Key Vault 参照の値 TestApp:Settings:KeyVaultMessage には、構成値 TestApp:Settings:Message と同様にアクセスできます。

Key Vault へのアクセス許可をアプリに付与する

Azure App Configuration がキー コンテナーにアクセスすることはありません。 アプリは Key Vault から直接読み取るため、キー コンテナー内のシークレットに対するアクセス権をアプリに付与する必要があります。 これにより、シークレットは常にアプリに保持されます。 アクセス権を付与するには、Key Vault アクセス ポリシーまたは Azure のロールベースのアクセス制御を使用します。

上のコードでは DefaultAzureCredential を使用しています。 これは、EnvironmentCredentialManagedIdentityCredentialSharedTokenCacheCredentialVisualStudioCredential など、さまざまな資格情報の種類が自動的に試される、集約されたトークン資格情報です。 詳細については、「DefaultAzureCredential クラス」を参照してください。 DefaultAzureCredential は、任意の資格情報の種類に明示的に置き換えることができます。 ただし、DefaultAzureCredential を使用すると、ローカル環境と Azure 環境の両方で同じコードを実行できます。 たとえば、自分の資格情報にキー コンテナーへのアクセス権を付与します。 ローカル開発に Visual Studio を使用すると、DefaultAzureCredential は自動的に SharedTokenCacheCredential または VisualStudioCredential に戻ります。

または、AZURE_TENANT_ID、AZURE_CLIENT_ID、AZURE_CLIENT_SECRET の各環境変数を設定することもでき、DefaultAzureCredential により EnvironmentCredential に設定されているクライアント シークレットを使用してキー コンテナーでの認証が行われます。 マネージド ID を有効にして、Azure App Service、Azure Kubernetes Service、Azure Container Instance などの Azure サービスにアプリをデプロイした後、Azure サービスのマネージド ID に、キー コンテナーにアクセスするためのアクセス許可を付与します。 アプリが Azure で実行されているときは、DefaultAzureCredential により ManagedIdentityCredential が自動的に使用されます。 同じマネージド ID を使用して、App Configuration と Key Vault 両方での認証を行うことができます。 詳細については、マネージド ID を使用して App Configuration にアクセスする方法に関する記事を参照してください。

アプリをビルドしてローカルで実行する

  1. .NET CLI を使用してアプリケーションをビルドするには、コマンド シェルで次のコマンドを実行します。

    dotnet build
    
  2. ビルドが完了したら、次のコマンドを実行して、Web アプリをローカルで実行します。

    dotnet run
    
  3. ブラウザー ウィンドウを開いて、http://localhost:5000 (ローカルでホストされた Web アプリの既定の URL) に移動します。

    クイック スタートのアプリ (ローカルで起動)

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

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

重要

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

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

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

次のステップ

このチュートリアルでは、Key Vault に格納されているシークレットを参照するキーを App Configuration で作成しました。 Key Vault からシークレットと証明書を自動的に再度読み込む方法については、次のチュートリアルに進んでください。

マネージド ID を使用して App Configuration と Key Vault へのアクセスを効率化する方法については、次のチュートリアルを参照してください。