マネージドID で Azure を自動化する — パスワード不要・証明書不要の認証
この記事の内容
- マネージドIDを使えば、パスワードも証明書も使わずにAzureリソースへの認証が可能です
- 仮想マシンにマネージドIDを割り当て、RBACで権限を付与するだけで、PowerShellから即座に操作できます
- Azure Arc を使えば、Azure外のリソースにもマネージドIDを活用できます
- マネージドIDだけでは対応できないマルチテナントシナリオについても解説します
- このシリーズ(全7回)の第5回目の内容です
マネージドIDによる認証の概要
このシリーズは「Azureの処理を自動化したい」「ユーザーによる対話的な認証を省きたい」「でもパスワードをスクリプトに書いたりせずに安全にしたい」という方に向けたシリーズです。
第5回となる今回は、マネージドID(Managed Identity) を使ってトークンを取得し、Azureリソースを操作するパターンを紹介します。
マネージドIDの仕組みはシンプルです。
- AzureリソースにマネージドIDが存在する
- そのリソースに対してRBACで権限を付与する
- 対象のAzure APIを叩くためのトークンを即座に取得できる
パスワードは不要です。証明書も不要です。これだけで認証が完結します。
実際にやってみる
仮想マシンのマネージドIDを確認する
まず、仮想マシンのAzureポータルを開き、「ID」の項目を確認します。システム割り当てマネージドIDが「オン」になっていれば、そのVMにはすでにサービスプリンシパルが生成されています。
RBACでロールを割り当てる
次に、このマネージドIDに対してAzure上で必要な権限を付与します。
今回はサブスクリプションスコープに対して「共同作成者」ロールを割り当てます。ポータルの操作としては以下のとおりです。
- 対象サブスクリプションの「アクセス制御(IAM)」を開く
- 「ロールの割り当ての追加」を選択
- ロールとして「共同作成者」を選択
- メンバーとして「マネージドID」を選択し、該当のVMを指定する
- 割り当てを保存する
これにより、そのVMはサブスクリプション全体に対して共同作成者の権限を持つことになります。
PowerShellで認証してリソースを操作する
仮想マシンにログインしてPowerShellを起動すると、以下のコマンド一行でマネージドIDとして認証できます。
Connect-AzAccount -Identity
これだけです。アカウント名もパスワードも不要で、マネージドIDとして認証が完了します。
# トークンの取得確認
Get-AzContext
コンテキストが正しく設定されていれば、権限が付与されているスコープ内で自由にAzureリソースを操作できます。たとえば、リソースグループの作成も以下のように実行できます。
New-AzResourceGroup -Name "example-rg" -Location "japaneast"
認証のコードはこの1行だけです。非常にシンプルです。
Azure Arcを使ったAzure外リソースへの拡張
マネージドIDはAzureの仮想マシンだけでなく、Azure Arc という仕組みを使えばAzure外のリソースにも適用できます。
Azure Arcのエージェントをオンプレミスや他クラウドのマシンにインストールすることで、そのマシンをAzureのリソースとして管理できるようになります。結果として、マネージドIDを使った同様の認証パターンが適用可能になります。
マネージドIDだけでは対応できないシナリオ
マネージドIDは非常に強力ですが、すべてのシナリオに対応できるわけではありません。
単一テナント構成であれば問題なし
Azureのテナントが1つだけであれば、マネージドIDだけで全ての自動化が実現できます。シンプルで安全なので、まずこの構成を目指すべきです。
マルチテナント構成では課題が発生する
複数のAzure ADテナントが絡む場合、マネージドIDだけではうまくいかないケースがあります。
理由は、Azureで権限を付与する際に選択できる対象が「同じAzure ADテナント内のもの」に限られるためです。
たとえば以下のような状況です。
- 組織内に複数のテナントが乱立していて、サブスクリプションがあちこちに散らばっている
- 自社が開発したサービスを顧客のテナント環境で利用してもらいたい(クロステナントのシナリオ)
このような場合、マネージドIDのみで完結させることは難しくなります。
マルチテナントアプリケーションという選択肢
このシリーズで紹介してきた手法は、Azure ADの権限を持つ担当者が事前にマネージドIDの設定やサービスプリンシパルの準備を行うことが前提になっています。
クロステナントのシナリオをよりスムーズに扱うためには、マルチテナントアプリケーションという仕組みがあります。サービスプリンシパルを作成する際のオプションとして選択でき、ユーザーに権限を委任してもらいながらマルチテナント環境を扱えるようになります。この内容については別の動画で解説予定とのことです。
Key VaultとマネージドIDの組み合わせ
Key VaultとマネージドIDの組み合わせについては、アプリケーション開発者向けの切り口で別途動画が公開されています。特にコードを書くデベロッパーの方は、そちらも参照することで理解をさらに深められます。
まとめ
マネージドIDを使った認証は、以下の点で非常に優れています。
- パスワード不要・証明書不要 でAzureリソースへの認証が可能
Connect-AzAccount -Identityの 1行だけ で認証が完結する- RBACで適切な権限を付与するだけで、そのスコープ内のリソースを自由に操作できる
- Azure Arc を活用すればAzure外のリソースにも適用できる
一方で、マルチテナント構成 では考慮が必要なシナリオがあり、その場合はマルチテナントアプリケーションという仕組みの活用も検討する必要があります。
Azureの自動化を行う場合は、まずマネージドIDの利用を検討することを強くおすすめします。