どのようにAzureアプリの設定とキーVaultを設定するには.ネットコアプロジェクト

9304 ワード

これは基本的な“ハウツードキュメント”ブログAzureアプリの設定とキーVaultを構成する上で.NETコアプロジェクト.
トピック
  • Azureアプリケーションの設定
  • AzureキーVaultの設定
  • 設定.サンプルコードを使用した
  • キーVaultにおけるアクセスポリシーの設定
  • キーコードから秘密を取得するアプリケーションコードの認証
  • 免責事項:おそらく、あなたは、MSFT公式ドキュメンテーションでこれに関する情報を見ることができました.しかし、このブログは、すべての混乱を削除するキュレーションステップを与える.

    必要条件


    あなたがAzureで以下をするためにアクセスをすることを確認してください.
  • アプリケーションの設定
  • Azureキーボールトの作成
  • 新しく作成されたキーVaultのアクセスポリシーを編集
  • Azureでホストされているアプリケーションのシステム割り当てマネージIDを有効にする
  • Azureアクティブディレクトリにアプリケーションを登録する(オプション)
  • と言われるAzure


    Azure App Configuration あなたのアプリは、任意の環境依存性のないことができるようにazureであなたのアプリケーションの設定の詳細を維持することができます.これは、単一の設定プロパティの異なる環境の値を維持するために使用できるラベルがあります.
    Key Vault Azureのリソースは、マネージアイデンティティまたはサービスプリンシパル認証を介してアプリケーションによってアクセスできる秘密情報を格納することです.
    Managed Identities は、資格情報を管理する必要性を排除するアイデンティティを通してAzureリソースを横切って認証するのに使用されます.このブログではSystem-assigned managed identity 我々はそれがキーVaultの秘密にアクセスできるようになりますAzureアプリサービスの.

    アプリケーションの設定


    フォローthis 新しいAzureアプリケーション構成リソースを作成し、設定プロパティをストアに追加します.Configuration ExplorerOperations , Configプロパティを見て編集することができます.
    すべてのキーは、さまざまな環境に使用することができます別のラベルでより多くの値を追加するオプションがあります.ここでは、1つのキーに2つの値を表示する設定エクスプローラのスクリーンショットを示します.

    これらの値をアプリケーションで取得するにはConnection String それはユニークに下で生成されますAccess Keys が必要です.アプリケーションの設定ストアに接続するために我々のアプリケーションで使用されるこのページから接続文字列を取得します.

    Azureキーボールトの作成


    フォローthis 新しいAzureキーVaultリソースを作成します.このブログのために、私たちはパスワード/クライアントの秘密を格納するために一人で秘密を見ていきます.チェックthis キーVaultの秘密を作成する方法について.
    キーVaultから秘密の値を取得するにはAzure.Identity パッケージ.しかし、もしあなたが秘密をロードしたいConfigurationSection , そこには道があるConfigurationBuilder 両方のアプリケーション構成キー値とキーVaultの秘密を含める.
    これを行うには、秘密は、新しいキー値としてアプリケーションの構成で参照することです.チェックthis アプリの設定でKVリファレンスを追加する方法に関する記事.
    アプリケーション構成は、キーVaultの秘密にアクセスするためにそれ自体をロードするのに用いられるアイデンティティを使用します.これは次のステップで設定するものです.今のところ、アプリケーションの設定は、以下のスクリーンショットのようになります.

    設定.サンプルコードを使用した


    ここではgithubのサンプルアプリです.
    https://github.com/venbacodes/AppConfigKVSample
    Azureアプリ構成に接続するには、パッケージが必要になりますMicrosoft.Extensions.Configuration.AzureAppConfiguration 拡張メソッドAddAzureAppConfiguration のためにConfigurationBuilder . この拡張メソッドは、アプリケーション構成の接続文字列を取得し、また、キーVaultをConfigureKeyVault オプションのメソッド.
    builder.Host.ConfigureAppConfiguration((webHostBuilderContext, config) =>
    {
        var isDevelopment = webHostBuilderContext.HostingEnvironment.IsDevelopment();
        var environment = webHostBuilderContext.HostingEnvironment.EnvironmentName.ToLower();
    
        config
        .AddJsonFile("appsettings.json", false, true)
        .AddJsonFile($"appsettings.{webHostBuilderContext.HostingEnvironment.EnvironmentName}.json", true, true);
    
        var settings = config.Build();
    
        var appConfigConnectionString = settings.GetSection(AppConfigConnectionStringSection);
    
        if (appConfigConnectionString != null && !string.IsNullOrWhiteSpace(appConfigConnectionString.Value))
        {
            config.AddAzureAppConfiguration(options =>
            {
                options
                .Connect(appConfigConnectionString.Value)
                .ConfigureKeyVault(kv =>
                {
                    if (isDevelopment)
                    {
                                        ///You WON'T need this if you are logged into Visual Studio and your account has been setup 
                                        ///with access policy in the Key Vault you are trying to connect. You can just use the DefaultAzureCredential
                                        ///that is set in the else part.
                                        var cred = new ClientSecretCredential(
                            settings.GetSection("DevCredential:TenantId").Value,
                            settings.GetSection("DevCredential:ClientId").Value,
                            settings.GetSection("DevCredential:ClientSecret").Value);
    
                        kv.SetCredential(cred);
                    }
                    else
                    {
                        kv.SetCredential(new DefaultAzureCredential());
                    }
                })
                .Select(KeyFilter.Any, LabelFilter.Null)
                .Select(KeyFilter.Any, environment ?? LabelFilter.Null);
            });
        }
    });
    
    ここで、上記のコードについて説明します.
    これは、app - config接続文字列を読み込みます.JSONファイル
    var appConfigConnectionString = settings.GetSection(AppConfigConnectionStringSection);
    
    この接続文字列をaddAzureAppConfigurationメソッドで使用します.
    options
    .Connect(appConfigConnectionString.Value)
    
    さて、Config BuilderのキーVaultを設定し、その秘密をアプリケーションの設定に設定します.
    .ConfigureKeyVault(kv => {
      ///Code removed for simplicity
    })
    
    私たちは開発において開発されていないとき、開発のためにADで我々の登録されたアイデンティティを使用しているキー保管庫とデフォルト資格証明書に接続しようとしています.次のセクションでこれについて詳しく見ていきます.
    アプリケーションの設定からデータを取得しながら、我々は実際にキーと値を環境に基づいてフィルタリングされます.
    .Select(KeyFilter.Any, LabelFilter.Null)
    .Select(KeyFilter.Any, environment ?? LabelFilter.Null)
    
    上記のコードは、ラベルフィルターに基づいて値をフィルター処理しようとします.実際には、任意のラベルと、指定されたラベルを持つすべてのキーなしですべてのキーが含まれ、最終的に最初のフィルタの値を上書きします.ここでフィルタの順序が重要です.

    キーヴォルトにおけるアクセスポリシー


    キーVaultのアクセスポリシーセクションは、Azure Active Directoryから作成されたマネージIDを使用してアプリケーションとユーザーのアクセス許可を割り当てる場所です.
    ここでは、このセクションのスクリーンショットです.

    Azure広告アイデンティティ


    Azure App Servicesのシステム割り当てマネージIDまたはAzureアカウントのIDをキーVaultに接続するために使用できます.私はあなた自身のAzureアカウントを認証するために使用し、Visual Studioにログインして使用してキーVaultに接続することをお勧めしますkv.SetCredential(new DefaultAzureCredential());あなたのAzureアカウントを使用したくない場合は、Azure広告でアプリを登録し、このアクセスポリシーでそのアイデンティティを使用する別の可能性があります.

    Azure広告のアプリ登録


    フォローthis KAPLを構成している間、アプリケーションをAzure広告に登録して、資格情報をセットするためにそれから以下の詳細を得てください.
    TenantId - This will be the common id for your azure tenant
    ClientId - This will be the unique id for the registered app
    ClientSecret - You have to create this secret after registering the app. This is covered in the below link
    
    https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app#add-a-client-secret

    Azureアプリサービスシステム


    Azure App Servicesのアイデンティティを使用するには、以下のように有効にする必要があります.

    これが完了したらkv.SetCredential(new DefaultAzureCredential()); 自動的にアプリケーションのIDを使用して認証し、KVから値を取得してください.
    成功した認証を完了するには、校長としてKVの下にアクセスポリシーセクションで、この新しく登録されたアプリを追加し、秘密を読むにアクセスできます.

    最後に、アプリケーションの設定から値を見て


    上記の手順を完了したら、現在の設定でアクセスできますkey 名称ACDemo 私はアプリの設定で使用します.このデモのために、私はスタートアップの間、キーを読んで、彼らがすべての場所で注入されることができるように、シングルトンサービスにそれを加えました.
    var acDemo = new ACDemo();
    builder.Configuration.Bind("ACDemo", acDemo);
    
    builder.Services.AddSingleton(acDemo);