この記事は更新から24ヶ月以上経過しているため、最新の情報を別途確認することを推奨いたします。
マネージド ID とは、Azure AD の認証をサポートするサービスに対してAzure リソース自身で認証を行うことのできる、Azure AD で管理される ID です。
マネージド ID は、システム割り当てマネージド ID とユーザー割り当てマネージド ID の2種類存在します。
システム割り当てマネージド ID は、Azure リソースに対して設定される ID で、Azure リソースのライフサイクルと合致します (当該 Azure リソースが削除されるとシステム割り当てマネージド ID も自動的に削除されます)。
ユーザー割り当てマネージド ID は、ユーザーがマネージド ID を作成し、その ID に対して複数のサービスを割り当てし管理することが可能です。ID と割り当てられているサービスのライフサイクルは別となります。
例えば、Azure Functions から仮想マシンを停止するシナリオを考えてみます。
1.Azure Functions のシステム割り当てマネージド ID を有効にします。
※有効にすると、Azure AD 上に Azure Functions 名と同様の サービスプリンシパル (SPN) が作成されます。
2.当該仮想マシン (またはリソースグループ等のスコープ) のアクセス制御 (IAM) を開き、 1.の SPN に対し仮想マシン管理者権限を有効にします。
3.Azure Functions のコード (PowerShell Core) では、当該仮想マシンの停止コマンドのみを記述します。この時、Connect-AzAccount 等の認証コマンドは不要です。
※マネージド ID を利用すると、Azure リソース自身が認証されるため、コード等から認証情報を排除できます。
※その他、AppService から SQL Database への認証をマネージド ID にすることで接続情報をコードから排除することなども可能です。
※マネージド ID を使用しない場合、接続文字列を自前で管理したり、アプリの登録で登録したクライアント ID とシークレットを使用したり 、KeyVault から認証情報を取得したりといった、「認証のための処理」が必要になります。
現在はすべてのサービスがサポートされているわけではなく、また違うテナント内のリソースへアクセスができない、ユーザー割り当てマネージド ID では異なるリソース グループ/サブスクリプションへ移動すると使用できなくなるなどの問題もありますが、上手く使用すると利便性の高いサービスです。
■ 参考URL
[Azure リソースのマネージド ID とは]
https://docs.microsoft.com/ja-jp/azure/active-directory/managed-identities-azure-resources/overview
[App Service と Azure Functions でマネージド ID を使用する方法]
https://docs.microsoft.com/ja-jp/azure/app-service/overview-managed-identity?tabs=dotnet
[チュートリアル:マネージド ID を使用した App Service からの Azure SQL Database 接続のセキュリティ保護]
https://docs.microsoft.com/ja-jp/azure/app-service/app-service-web-tutorial-connect-msi
[Azure リソースのマネージド ID をサポートするサービス]
https://docs.microsoft.com/ja-jp/azure/active-directory/managed-identities-azure-resources/services-support-managed-identities
[Azure リソースのマネージド ID に関する FAQ と既知の問題]
https://docs.microsoft.com/ja-jp/azure/active-directory/managed-identities-azure-resources/known-issues