Azure の外部 (オンプレミスやサードパーティのデータ センターなど) でホストされているアプリは、Azure リソースにアクセスするときに、アプリケーション サービス プリンシパルを使用して Azure に対する認証を行う必要があります。 アプリケーション サービス プリンシパル オブジェクトは、Azure のアプリ登録プロセスを使用して作成されます。 アプリケーション サービス プリンシパルが作成されると、アプリのクライアント ID とクライアント シークレットが生成されます。 クライアント ID、クライアント シークレット、テナント ID を環境変数に保存して、Azure SDK for JavaScript が環境変数を使用して実行時に Azure に対してアプリを認証できるようにします。
アプリが実行されている環境 (テスト、ステージ、運用環境など) ごとに異なるアプリ登録を作成する必要があります。 これにより、各サービス プリンシパルに対して環境固有のリソースのアクセス許可を構成し、ある環境にデプロイされたアプリが別の環境の一部である Azure リソースと通信しないようにすることができます。
1 - Azure にアプリケーションを登録する
アプリは、Azure portal または Azure CLI を使用して Azure に登録できます。
Azure portal にサインインして、次の手順を実行します。
2 - アプリケーション サービス プリンシパルにロールを割り当てる
次に、アプリがどのリソースでどのロール (アクセス許可) を必要としているかを決定し、それらのロールをアプリに割り当てる必要があります。 ロールは、リソース、リソース グループ、またはサブスクリプション スコープで割り当てることができます。 ほとんどのアプリケーションではすべての Azure リソースを 1 つのリソース グループにグループ化するため、この例では、リソース グループのスコープでサービス プリンシパルのロールを割り当てる方法を示します。
3 - アプリケーションの環境変数を構成する
JavaScript アプリを実行するプロセスのAZURE_CLIENT_ID、AZURE_TENANT_ID、AZURE_CLIENT_SECRET 環境変数を設定して、実行時にアプリでアプリケーション サービス プリンシパルの資格情報を使用できるようにする必要があります。 DefaultAzureCredential オブジェクトでは、これらの環境変数でサービス プリンシパル情報を検索します。
AZURE_CLIENT_ID=<value>
AZURE_TENANT_ID=<value>
AZURE_CLIENT_SECRET=<value>
4 - アプリケーションに DefaultAzureCredential を実装する
Azure SDK クライアント オブジェクトを Azure に対して認証するには、アプリケーションで @azure/identity パッケージの DefaultAzureCredential クラスを使用する必要があります。
まず、 @azure/identity パッケージをアプリケーションに追加します。
npm install @azure/identity
次に、アプリで Azure SDK クライアント オブジェクトを作成する JavaScript コードの場合、次のことが必要になります。
DefaultAzureCredentialモジュールから@azure/identityクラスをインポートします。DefaultAzureCredentialオブジェクトを作成します。- Azure SDK クライアント オブジェクト コンストラクターに
DefaultAzureCredentialオブジェクトを渡します。
この例を次のコード セグメントに示します。
// connect-with-default-azure-credential.js
import { BlobServiceClient } from '@azure/storage-blob';
import { DefaultAzureCredential } from '@azure/identity';
import 'dotenv/config'
const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
if (!accountName) throw Error('Azure Storage accountName not found');
const blobServiceClient = new BlobServiceClient(
`https://${accountName}.blob.core.windows.net`,
new DefaultAzureCredential()
);
上記のコードで DefaultAzureCredential オブジェクトがインスタンス化されると、DefaultAzureCredential では、Azure に接続するためのアプリケーション サービス プリンシパル情報の環境変数 AZURE_SUBSCRIPTION_ID、AZURE_TENANT_ID、AZURE_CLIENT_ID、AZURE_CLIENT_SECRET を読み取ります。
![Azure portal の上部の検索バーを使用して、[アプリの登録] ページを検索してそこに移動する方法を示すスクリーンショット。](../../../includes/media/sdk-auth-passwordless/on-premises-app-registration-azure-portal-1-240px.png)
![[アプリの登録] ページの [新規登録] ボタンの場所を示すスクリーンショット。](../../../includes/media/sdk-auth-passwordless/on-premises-app-registration-azure-portal-2-240px.png)







![[ロールの割り当て] タブへの移動方法と、ロールの割り当てをリソース グループに追加するボタンの場所を示すスクリーンショット。](../../../includes/media/sdk-auth-passwordless/assign-service-principal-to-role-azure-portal-3-240px.png)



![完了した [ロールの割り当ての追加] ページと、プロセスを完了するために使用する [レビューと割り当て] ボタンの場所を示すスクリーンショット。](../../../includes/media/sdk-auth-passwordless/assign-service-principal-to-role-azure-portal-7-240px.png)