Azure 仮想マシンでのマネージド ID の使用
あなたは、自分の在庫追跡アプリケーションを割り当てマネージド ID を持つ VM 内で実行することにしました。 このセットアップにより、ユーザー名とパスワードをコードに格納することなく、アプリで Azure Key Vault を使用して認証できるようになります。
これであなたの会社はオンプレミスから Azure に VM を移行したので、ハード コーディングされた認証の詳細情報をアプリケーション コードから削除することができます。 あなたは、Azure リソースにアクセスするために、より安全なマネージド ID トークンを使用したいと考えています。
このユニットでは、Azure VM 内で ID がどのように管理されるかについて学習します。 また、Azure Resource Manager とやりとりして、アプリケーションにとってより安全な環境を形成する方法についても学習します。
Azure 仮想マシン内のマネージド ID
VM では、アプリケーションのコードで資格情報を指定しなくても、マネージド ID を使用して複数の Azure リソースにアクセスできます。 マネージド ID を使用すると、バックグラウンドで自動認証を行うことができます。 アプリケーションは、可能な限り使いやすく、安全な状態で維持されます。
VM へのマネージド ID の割り当ては、そのビルドを作成する時かそれ以降の任意のタイミングで行えます。 Azure portal、Azure CLI、または PowerShell を使用することで、マネージド ID を既存の VM に割り当てることができます。
前のユニットでは、"システム割り当てマネージド ID" と "ユーザー割り当てマネージド ID" について学習しました。 システム割り当てマネージド ID は、VM の設定の [ID] セクションから有効にできます。 実行すると、次の処理が行われます。
- この VM は、マネージド ID の要求を送信します。
- Microsoft Entra ID では、サブスクリプションが信頼するテナント内の VM に対してサービス プリンシパルが作成されます。
- Azure Resource Manager では、サービス プリンシパルのクライアント ID と証明書を使用して、Azure Instance Metadata Service ID エンドポイントが更新されます。
- 新しいサービス プリンシパル情報は、Azure リソースへの VM のアクセスを許可するために使用されます。 キー コンテナーへのアクセス権をアプリに付与するには、Microsoft Entra ID でロールベースのアクセス制御 (RBAC) を使用します。 必要なロールを VM のサービス プリンシパルに割り当てます。 たとえば、閲覧者ロールまたは共同作成者ロールを割り当てることができます。
- アクセス トークンを要求するために、クライアント ID と証明書を使用して Microsoft Entra ID への呼び出しが行われます。
- Microsoft Entra ID によって、JSON Web Token アクセス トークンが返されます。
構成が完了したら、Microsoft Entra 認証をサポートする Azure でホストされている他のリソースにアクセスするために、他の資格情報を作成する必要はありません。
アクセスの制御と認証
RBAC は Azure Resource Manager 上に構築された承認システムです。 これを使用して、Azure のリソースに対するきめ細かなアクセス権を付与します。
アクセス許可は、ロールベースのアクセスによって形成されます。 ロールベースのアクセスは、セキュリティ プリンシパル、ロール定義、スコープの 3 つの要素で構成されます。
アプリケーションでマネージド ID を使用する
Azure リソースで実行されるアプリケーション (VM や関数アプリなど) は、マネージド ID を使用して、他のリソースの認証とアクセスを行います。
認証とアクセスのプロセスには、Azure Instance Metadata Service に対する一連の要求が含まれます。
- このサービスによって、アプリに関連付けられている ID が検証されます。
- リソース アクセス トークンが生成されます。
- アプリにより、アクセスする必要があるリソースにトークンが送信されます。
- トークンが認証されます。
- トークンが有効な場合、リソースによって、要求に対して適切な承認権限を持つ ID であることを検証されます。
- このテストに合格すると、アプリケーションがリソースにアクセスできるようになります。
複雑さの多くを回避するには、コードで AzureServiceTokenProvider
API を使用します。 AzureServiceTokenProvider
オブジェクトによって、アプリのプリンシパル ID が取得され、リソースのアクセス トークンが生成されます。 GetAccessTokenAsync
メソッドを使用して、アクセス トークンを生成する必要があるリソースを指定します。 リソースをホストするサービスの URI を指定します。
次の C# の例では、Azure Storage のトークンを生成します。
AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
var token = await azureServiceTokenProvider.GetAccessTokenAsync("https://storage.azure.com/");
その他の Azure Storage API では、このトークンを使用してアクセスを認証および承認することができます。