マネージド ID を使用して App Configuration にアクセスする

Microsoft Entra マネージド ID は、クラウド アプリケーションのシークレット管理を簡素化します。 マネージド ID を使用すると、コードでは、それが実行される Azure サービス用に作成されたサービス プリンシパルを使用できます。 Azure Key Vault またはローカル接続文字列に格納された別の資格情報の代わりに、マネージド ID を使用します。

Azure App Configuration とその .NET、.NET Framework、および Java Spring のクライアント ライブラリには、マネージド ID サポートが組み込まれています。 これの使用は必須ではありませんが、マネージド ID によって、シークレットが含まれるアクセス トークンが不要になります。 コードはサービス エンドポイントのみを使用して App Configuration ストアにアクセスできます。 シークレットの流出させることなく、この URL をコードに直接埋め込むことができます。

この記事では、マネージド ID を活用して App Configuration にアクセスする方法について説明します。 これは、クイック スタートで紹介されている Web アプリに基づいています。 先に進む前に、App Configuration を使用して ASP.NET Core アプリを作成します

この記事では、マネージド ID を活用して App Configuration にアクセスする方法について説明します。 これは、クイック スタートで紹介されている Web アプリに基づいています。 先に進む前に、Azure App Configuration を使用した Java Spring アプリの作成を済ませておいてください。

重要

マネージド ID を使用して、ローカルで実行されているアプリケーションを認証することはできません。 アプリケーションは、マネージド ID をサポートする Azure サービスにデプロイする必要があります。 この記事では、例として Azure App Service を使用します。 ただし、マネージド ID をサポートする他の Azure サービスにも同じ概念が適用されます。 たとえば、Azure Kubernetes ServiceAzure Virtual MachineAzure Container Instances などです。 ワークロードがこれらのサービスのいずれかでホストされている場合は、そのサービスのマネージド ID サポートも利用できます。

このチュートリアルの手順は、任意のコード エディターを使用して実行できます。 推奨のエディターは Visual Studio Code です (Windows、macOS、および Linux プラットフォームで使用できます)。

この記事では、次の方法について説明します。

  • App Configuration へのマネージド ID アクセスを許可する。
  • App Configuration に接続する際にマネージド ID を使用するようにアプリを構成する。

前提条件

このチュートリアルを完了するには、以下が必要です。

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

マネージド ID の追加

ポータルでマネージド ID を設定するには、最初にアプリケーションを作成した後、フィーチャーを有効にします。

  1. Microsoft Azure portalで App Services リソースに移動します。 使用する既存の App Services リソースがない場合は、作成してください。

  2. 左側のウィンドウで [設定] グループまで下へスクロールして、 [ID] を選択します。

  3. [システム割り当て済み] タブで、 [状態][オン] に切り替えて、 [保存] を選択します。

  4. メッセージが表示されたら、[はい] を指定して、システム割り当てマネージド ID を有効にします。

    Screenshot of how to add a managed identity in App Service.

App Configuration へのアクセスの許可

次の手順は、App Configuration データ閲覧者ロールを App Service に割り当てる方法を示したものです。 詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。

  1. Azure portal で、ご利用の App Configuration ストアを選択します。

  2. [アクセス制御 (IAM)] を選択します。

  3. [追加]>[ロール割り当ての追加] の順に選択します。

    Screenshot that shows the Access control (IAM) page with Add role assignment menu open.

    ロールを割り当てるためのアクセス許可がない場合は、[ロール割り当ての追加] オプションは無効になります。 詳細については、Azure の組み込みロールに関するページを参照してください。

  4. [ロール] タブで [App Configuration データ閲覧者] ロールを選択し、[次へ] を選択します。

    Screenshot that shows the Add role assignment page with Role tab selected.

  5. [メンバー] タブで、[マネージド ID] を選択し、[メンバーの選択] を選択します。

    Screenshot that shows the Add role assignment page with Members tab selected.

  6. Azure サブスクリプションを選択して、[マネージド ID] で [App Service] を選択し、App Service 名を選択します。

    Screenshot that shows the select managed identities page.

  7. [確認と 割り当て] タブで、 [確認と割り当て] を選択して ロールを割り当てます。

マネージド ID の使用

  1. Azure.Identity パッケージへの参照を追加します。

    dotnet add package Azure.Identity
    
  2. App Configuration ストアのエンドポイントを検索します。 この URL は、Azure portal 内のストアの [アクセスキー] タブにリストされます。

  3. appsettings.json ファイルを開き、次のスクリプトを追加します。 <service_endpoint> を、角かっこも含めて、ご利用の App Configuration ストアへの URL に置き換えます。

    "AppConfig": {
        "Endpoint": "<service_endpoint>"
    }
    
  4. Program.cs ファイルを開き、Azure.Identity および Microsoft.Azure.Services.AppAuthentication の名前空間への参照を追加します。

    using Azure.Identity;
    
  5. App Configuration に保存されている値にアクセスするには、AddAzureAppConfiguration() メソッドを使用するように Builder 構成を更新します。

    var builder = WebApplication.CreateBuilder(args);
    
    builder.Configuration.AddAzureAppConfiguration(options =>
        options.Connect(
            new Uri(builder.Configuration["AppConfig:Endpoint"]),
            new ManagedIdentityCredential()));
    

    Note

    ユーザー割り当てマネージド ID を使用する場合、ManagedIdentityCredential の作成時に必ず clientId を指定してください。

    new ManagedIdentityCredential("<your_clientId>")
    

    Azure リソースのマネージド ID に関する FAQ で説明したように、使用されるマネージド ID を解決する既定の方法があります。 この場合、将来起こりうるランタイムの問題を回避する目的で、望ましい ID を指定するように Azure ID ライブラリから強制されます。 たとえば、新しいユーザー割り当てマネージド ID が追加された場合や、システム割り当てマネージド ID が有効になっている場合などです。 そのため、ユーザー割り当てマネージド ID が 1 つだけ定義されており、システム割り当てマネージド ID がない場合であっても、clientId を指定する必要があります。

  1. App Configuration ストアのエンドポイントを検索します。 この URL は、Azure portal 内のストアの [概要] タブにリストされます。

  2. bootstrap.properties を開き、connection-string プロパティを削除してシステム割り当て ID のエンドポイントに置き換えます。

spring.cloud.azure.appconfiguration.stores[0].endpoint=<service_endpoint>

ユーザー割り当て ID の場合:

spring.cloud.azure.appconfiguration.stores[0].endpoint=<service_endpoint>
spring.cloud.azure.credential.managed-identity-enabled= true
spring.cloud.azure.credential.client-id= <client_id>

Note

詳細については、「Spring Cloud Azure 認証」を参照してください。

アプリケーションをデプロイする

マネージド ID を使用する場合は、アプリを Azure サービスにデプロイする必要があります。 マネージド ID は、ローカルで実行されているアプリの認証には使用できません。 「Create an ASP.NET Core app with App Configuration (App Configuration を使用して ASP.NET Core アプリを作成する)」クイックスタートで作成し、マネージド ID を使用するように修正した .NET Core アプリを展開するには、「Publish your web app (Web アプリを発行する)」ガイダンスに従います。

マネージド ID を使用するには、アプリを Azure サービスにデプロイする必要があります。 マネージド ID は、ローカルで実行されているアプリの認証には使用できません。 「Azure App Configuration を使用して Java Spring アプリを作成する」クイックスタートで作成し、マネージド ID を使用するように修正した Spring アプリを展開するには、「Web アプリを発行する」ガイダンスに従います。

App Service の他にも、多くの Azure サービスがマネージド ID をサポートしています。 詳細については、「Azure リソースのマネージド ID をサポートするサービス」を参照してください。

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

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

重要

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

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

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

次のステップ

このチュートリアルでは、Azure マネージド ID を追加して、App Configuration へのアクセスを効率化し、アプリの資格情報管理を改善しました。 App Configuration の使用方法の詳細については、Azure CLI のサンプルに進んでください。