Azure Id ライブラリを使用して Azure サービスに対して JavaScript アプリを認証する方法
アプリケーションがストレージ、Key Vault、Cognitive Services などの Azure リソースにアクセスする必要がある場合は、アプリケーションを Azure に対して認証する必要があります。 これは、Azure にデプロイされているか、オンプレミスにデプロイされているか、ローカルの開発者ワークステーションで開発中であるかに関係なく、すべてのアプリケーションに当てはまります。 この記事では、Azure SDK for JavaScript を使用するときに Azure に対してアプリを認証するための推奨される方法について説明します。
推奨されるアプリ認証方法
推奨される方法は、Azure リソースに対する認証時に、接続文字列やキーではなく、トークンベースの認証をアプリで使用することです。 Azure Identity ライブラリはトークンベースの認証を提供し、アプリがローカル開発中か、Azure にデプロイされているか、オンプレミス サーバーにデプロイされているかに関係なく、アプリが Azure リソースに対してシームレスに認証できるようにします。
アプリが Azure リソースに対する認証に使用するトークン ベースの認証の特定の種類は、アプリが実行されている場所によって異なり、次の図に示します。
トークン ベースの認証の利点
Azure 用のアプリを構築する場合は、シークレット (接続文字列またはキー) よりもトークンベースの認証を強くお勧めします。 トークン ベースの認証は、DefaultAzureCredential
トークン ベースの認証 | シークレット (接続文字列とキー) |
---|---|
最小特権の原則 |
接続文字列またはキーは、Azure リソースに対する完全な権限を付与します。 |
保存するアプリケーション シークレットはありません。 | アプリ設定または環境変数にシークレットを格納してローテーションする必要があります。 |
Azure ID ライブラリは、バックグラウンドでトークンを管理します。 これにより、トークンベースの認証を接続文字列と同じくらい簡単に使用できます。 | シークレットは管理されません。 |
接続文字列の使用は、運用環境や機密データにアクセスしない概念実証アプリまたは開発プロトタイプに限定する必要があります。 それ以外の場合は、Azure リソースに対する認証時に、Azure ID ライブラリで使用できるトークン ベースの認証クラスを常に優先する必要があります。
次のライブラリを使用します。
DefaultAzureCredential
Azure Identity ライブラリによって提供される DefaultAzureCredential クラスを使用すると、アプリは実行環境に応じて異なる認証方法を使用できます。 この動作により、アプリをローカル開発からテスト環境に昇格し、コードを変更せずに運用環境に昇格できます。 環境ごとに適切な認証方法を構成すると、DefaultAzureCredential
はその認証方法を自動的に検出して使用します。 異なる環境で異なる認証方法を使用するには、条件付きロジックまたは機能フラグを手動でコーディングするよりも、DefaultAzureCredential
を使用することをお勧めします。
サーバー環境での認証
サーバー環境でホストする場合、各アプリケーションには、環境ごとに一意の アプリケーション ID 割り当てる必要があります。 Azure では、アプリ ID は、サービス プリンシパル(Azure に対するアプリの識別と認証を目的とした特殊な種類の セキュリティ プリンシパル によって表されます。 アプリに使用するサービス プリンシパルの種類は、アプリが実行されている場所によって異なります。
ローカル開発時の認証
ローカル開発中に開発者のワークステーションでアプリケーションを実行する場合、ローカル環境は、アプリで使用されるすべての Azure サービスに対して認証を行う必要があります。
アプリケーションで DefaultAzureCredential を使用する
DefaultAzureCredential は、Microsoft Entra ID に対する認証のための、堅牢な順序付けられた一連のメカニズムです。 各認証メカニズムは、TokenCredential クラスから派生したクラスであり、資格情報と呼ばれます。 実行時に、DefaultAzureCredential
は最初の資格情報を使用して認証を試みます。 その資格情報がアクセス トークンの取得に失敗した場合は、アクセス トークンが正常に取得されるまで、シーケンス内の次の資格情報が試行されます。 これにより、アプリは環境固有のコードを記述することなく、異なる環境で異なる資格情報を使用できます。
DefaultAzureCredential を使用するには、@azure/identity パッケージをアプリケーションに追加します。
npm install @azure/identity
次に、次の コード サンプル は、DefaultAzureCredential
オブジェクトをインスタンス化し、Azure SDK サービス クライアント クラス (この場合は Azure Blob Storage へのアクセスに使用される BlobServiceClient
) と共に使用する方法を示しています。
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
は、アプリ用に構成された認証メカニズムを自動的に検出し、Azure に対してアプリを認証するために必要なトークンを取得します。 アプリケーションで複数の SDK クライアントを使用する場合は、各 SDK クライアント オブジェクトで同じ資格情報オブジェクトを使用できます。