次の方法で共有


Azure にホストされた JavaScript アプリを、システム割り当てマネージド ID を使用して Azure のリソースに対して認証します。

他のAzure リソースに対してAzureホスト型アプリを認証するには、管理 ID を使用することをお勧めします。 このアプローチはAzure App Service、Azure Container Apps、Azure 仮想マシンでホストされているアプリなど、ほとんどのAzure サービスでサポートされています。 認証の 概要 ページで、さまざまな認証手法と方法について詳しく説明します。 前のセクションでは、次の内容について説明します。

  • マネージド ID の基本的な概念
  • アプリのシステム割り当てマネージド ID を作成する方法
  • システム割り当てマネージド ID にロールを割り当てる方法
  • アプリ コードからシステム割り当てマネージド ID を使用して認証する方法

マネージド ID の基本的な概念

マネージド ID を使用すると、シークレット キーやその他のアプリケーション シークレットを使用せずに、アプリから他のAzure リソースに安全に接続できます。 内部的には、Azureは ID と接続先のリソースを追跡します。 Azureは、この情報を使用して、アプリが他のAzure リソースに接続できるように、アプリのMicrosoft Entra トークンを自動的に取得します。

ホストされているアプリを構成する際に考慮すべきマネージド ID には、次の 2 種類があります。

  • System-assigned マネージド ID は、Azure リソースで直接有効になり、そのライフ サイクルに関連付けられます。 リソースが削除されると、Azureは自動的に ID を削除します。 システム割り当て ID は、マネージド ID を使用するための最小限のアプローチを提供します。
  • ユーザー割り当てマネージド ID はスタンドアロン Azure リソースとして作成され、柔軟性と機能が向上します。 同じ ID とアクセス許可を共有する必要がある複数のAzure リソースを含むソリューションに最適です。 たとえば、複数の仮想マシンが同じ一連のAzure リソースにアクセスする必要がある場合、ユーザー割り当てマネージド ID は再利用性と最適化された管理を提供します。

ヒント

システム割り当てマネージド ID とユーザー割り当てマネージド ID の選択と管理の詳細については、 マネージド ID のベスト プラクティスに関する推奨事項 の記事を参照してください。

次のセクションでは、Azureホスト型アプリに対してシステム割り当てマネージド ID を有効にして使用する手順について説明します。 ユーザー割り当てマネージド ID を使用する必要がある場合は、 ユーザー割り当てマネージド ID に関する記事で詳細を確認してください。

Azure ホスティング リソースでシステム割り当てマネージド ID を有効にする

アプリでシステム割り当てマネージド ID の使用を開始するには、アプリをホストしているAzure リソース (Azure App Service、Azure Container Apps、Azure 仮想マシン インスタンスなど) で ID を有効にします。

Azure ポータルまたはAzure CLIを使用して、Azure リソースのシステム割り当てマネージド ID を有効にすることができます。

  1. Azure ポータルで、Azure App ServiceやAzure Container Apps インスタンスなど、アプリケーション コードをホストするリソースに移動します。

  2. リソースの [概要 ] ページで 、[設定] を 展開し、ナビゲーションから [ID] を 選択します。

  3. [ ID ] ページで、[ 状態 ] スライダーを [オン] に切り替えます。

  4. [保存] を選択して変更を保存します。

    コンテナー アプリでシステム割り当てマネージド ID を有効にする方法を示すスクリーンショット。

マネージド ID にロールを割り当てる

次に、アプリで必要なロールを決定し、それらのロールをマネージド ID に割り当てます。 次のスコープで、マネージド ID にロールを割り当てることができます。

  • リソース: 割り当てられたロールは、その特定のリソースにのみ適用されます。
  • リソース グループ: 割り当てられたロールは、リソース グループに含まれるすべてのリソースに適用されます。
  • サブスクリプション: 割り当てられたロールは、サブスクリプションに含まれるすべてのリソースに適用されます。

次の例は、多くのアプリが 1 つのリソース グループを使用して関連するすべてのAzure リソースを管理するため、リソース グループ スコープでロールを割り当てる方法を示しています。

  1. システム割り当てマネージド ID を持つアプリを含むリソース グループの [概要 ] ページに移動します。

  2. 左側のナビゲーションで [アクセス制御 (IAM)] を選択します。

  3. [ アクセス制御 (IAM)] ページで、上部メニューの [+ 追加 ] を選択し、[ ロールの割り当ての追加] を選択して [ ロールの割り当ての追加] ページに移動します。

    ID ロールの割り当てページにアクセスする方法を示すスクリーンショット。

  4. [ ロールの割り当ての追加] ページには、ID にロールを割り当てるためのタブ付きのマルチステップ ワークフローが表示されます。 最初の [ロール ] タブで、上部にある検索ボックスを使用して、ID に割り当てるロールを見つけます。

  5. 結果からロールを選択し、[ 次へ ] を選択して [ メンバー ] タブに移動します。

  6. [アクセス権の 割り当て] オプションで 、[ マネージド ID] を選択します。

  7. [メンバー] オプションで 、[+ メンバーの選択] を選択し、[マネージド ID の選択] パネルを開きます。

  8. [ マネージド ID の選択 ] パネルで、 サブスクリプション と マネージド ID のドロップダウンを使用して、ID の検索結果をフィルター処理します。 Select 検索ボックスを使用して、アプリをホストしているAzure リソースに対して有効にしたシステム ID を見つけます。

    マネージド ID の割り当てプロセスを示すスクリーンショット。

  9. ID を選択し、パネルの下部にある [選択 ] を選択して続行します。

  10. ページの下部にある [ 確認と割り当て ] を選択します。

  11. 最後の [ 校閲と割り当て ] タブで、[ 確認と割り当て ] を選択してワークフローを完了します。

アプリからAzure サービスに対する認証

Azure ID ライブラリには、さまざまなシナリオとMicrosoft Entra認証フローのサポートに適合した の実装TokenCredential が用意されています。 マネージド ID はローカルで実行するときに使用できないため、次の手順では、どのシナリオで使用する資格情報を示します。

  • ローカル開発環境: ローカル開発時にのみ、 DefaultAzureCredential という名前のクラスを、構成済みの資格情報チェーンに使用します。 DefaultAzureCredential は、Azure CLIやVisual Studio Codeなどのローカル ツールまたは IDE からユーザー資格情報を検出します。 また、再試行の柔軟性と利便性、応答の待機時間、複数の認証オプションのサポートも提供します。 詳細については、ローカル開発中に Azure サービスに認証する方法の記事を参照してください。
  • Azure ホスト型アプリ: アプリがAzureで実行されている場合は、ManagedIdentityCredential を使用して、アプリ用に構成されたマネージド ID を安全に検出します。 この正確な種類の資格情報を指定すると、他の使用可能な資格情報が予期せず取得されなくなります。

コードを実装する

JavaScript プロジェクトで、 @azure/ID パッケージを 追加します。 選択したターミナルで、アプリケーション プロジェクト ディレクトリに移動し、次のコマンドを実行します。

npm install @azure/identity

Azure サービスには、さまざまなAzure SDK クライアント ライブラリの特殊なクライアント クラスを使用してアクセスします。 で、次の手順を実行してトークン ベースの認証を構成します。

  1. パッケージをインポートします。

  2. 適切な インスタンスをクライアントに渡します。

    • アプリがローカルで実行されているときに を使用する
    • アプリが Azure で実行されている場合は、ManagedIdentityCredential を使用します。
    import { BlobServiceClient } from '@azure/storage-blob';
    import { ManagedIdentityCredential, DefaultAzureCredential } from '@azure/identity';
    
    function createBlobServiceClient() {
        const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
        if (!accountName) throw Error('Azure Storage accountName not found');
    
        const url = `https://${accountName}.blob.core.windows.net`;
    
        if (process.env.NODE_ENV === "production") {
            return new BlobServiceClient(url, new ManagedIdentityCredential());
        } else {
            return new BlobServiceClient(url, new DefaultAzureCredential());
        }
    }
    
    async function main() {
        try {
            const blobServiceClient = createBlobServiceClient();
            const containerClient = blobServiceClient.getContainerClient(process.env.AZURE_STORAGE_CONTAINER_NAME);
            const properties = await containerClient.getProperties();
    
            console.log(properties);
        } catch (err) {
            console.error("Error retrieving container properties:", err.message);
            throw err;
        }
    }
    
    main().catch((err) => {
        console.error("Error running sample:", err.message);
        process.exit(1);
    });
    

コードを実装する

JavaScript プロジェクトで、 @azure/ID パッケージを 追加します。 選択したターミナルで、アプリケーション プロジェクト ディレクトリに移動し、次のコマンドを実行します。

npm install @azure/identity @types/node

Azure サービスには、さまざまなAzure SDK クライアント ライブラリの特殊なクライアント クラスを使用してアクセスします。 で、次の手順を実行してトークン ベースの認証を構成します。

  1. パッケージをインポートします。

  2. 適切な インスタンスをクライアントに渡します。

    • アプリがローカルで実行されているときに を使用する
    • アプリが Azure で実行されている場合は、ManagedIdentityCredential を使用します。
    import { BlobServiceClient } from '@azure/storage-blob';
    import { ManagedIdentityCredential, DefaultAzureCredential } from '@azure/identity';
    
    function createBlobServiceClient(): BlobServiceClient {
        const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
        if (!accountName) throw Error('Azure Storage accountName not found');
        const url = `https://${accountName}.blob.core.windows.net`;
    
        if (process.env.NODE_ENV === "production") {
            return new BlobServiceClient(url, new ManagedIdentityCredential());
        } else {
            return new BlobServiceClient(url, new DefaultAzureCredential());
        }
    }
    
    async function main(): Promise<void> {
        try {
            const blobServiceClient = createBlobServiceClient();
            const containerClient = blobServiceClient.getContainerClient(process.env.AZURE_STORAGE_CONTAINER_NAME!);
            const properties = await containerClient.getProperties();
    
            console.log(properties);
        } catch (err: any) {
            console.error("Error retrieving container properties:", err.message);
            throw err;
        }
    }
    
    main().catch((err: Error) => {
        console.error("Error running sample:", err.message);
        process.exit(1);
    });
    

上記のコードは、実行されている環境によって動作が異なります。

  • ローカル開発ワークステーションでは、DefaultAzureCredential は、アプリケーション サービス プリンシパルの環境変数、またはローカルにインストールされた開発者ツール (Visual Studio Code など) で開発者資格情報のセットを検索します。
  • Azureにデプロイすると、ManagedIdentityCredential は、他のサービスに対して自動的に認証するマネージド ID 構成を検出します。