オンプレミスの JavaScript アプリから Azure リソースへの認証
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
を読み取ります。