はじめに
Azure上の仮想マシンで、Azureリソースに対するスクリプトやシェルを動かす場合、 コード中にサブスクリプションへのログインが必要です。
ログインするということはそのための資格情報が必要となりますが、コード中に資格情報もセットで記述するようなことは避けたいと思います。
マネージドIDを使用することで、コード中にログインアカウントやパスワードを記述せずともサブスクリプションへのログインが可能になります。
今回はマネージドIDの概要と使い方、注意点について紹介します。
目次
マネージドIDについて
概要
マネージドIDとは、Azureサービスに対してAzure ADのIDを与え、仮想マシンやその他対応したサービス上でそのアカウントを使用して認証を行うことができる、という機能です。このIDはAzure AD上で表示されません。
マネージドIDには、以下の2種類があります。
システム割り当てマネージドID 対応したAzureサービス(VMやApp Serviceなど)毎に、専用のIDを作成する方式です。 設定を有効にすることで、そのサービス専用のマネージドIDがAzureADに作成され、サービス上でそれを利用することが可能になります。 Azureサービスを削除する際に、マネージドIDも一緒に削除されます。
ユーザー割り当てマネージドID マネージドIDを、Azureリソースとして作成し、複数のサービスで共用する方式です。 IDを作成後、各Azureサービスに割り当てることでサービス上での利用が可能になります。 Azureサービスを削除しても、マネージドIDは別リソースのため削除されません。
マネージドIDの有効化
システム割り当て済みマネージドIDの有効化
対応したサービスにて、マネージドID設定画面を開き、[システムマネージドID]タブの状態を[オン]にします。 ※今回はVMを利用しているので[ID]画面を開きます。
確認画面が表示されるため、[はい]を選択すると、そのサービス専用のマネージドIDがAzureADに作成されます。これで有効化は完了です。、
ユーザー割り当てマネージドIDの有効化
最初に割り当てるためのリソースを作成します。 全てのサービスから[マネージドID]を選択し、[追加]を行います。
名前、リソースグループ、リージョンを選んで作成します。
先ほどと同様[ID]画面を開き、[ユーザー割り当て済み]タブの[追加]を行います。
作成したIDリソースの割り当てを行います。
これで有効化は完了です。
マネージドIDへの権限付与
マネージドIDの有効化は上記でOKですが、各種Azureサービス用のIDであるため、ユーザーIDにするのと同様に、権限の割当てが必要です。
具体的にはマネージドIDに対して、サブスクリプションやリソースグループへのロール割り当て(所有者、閲覧者など)を行います。
例としてリソースグループへの閲覧者権限を追加します。 リソースグループの[アクセス制御]から[追加]、[ロールの割り当て]を選択します。
[アクセスの割り当て先]としてマネージドIDを指定することができます。 保存を押して権限割り当ては完了です。
マネージドIDの利用
実際に仮想マシン上でマネージドIDを使用し、アカウント情報なしでAzure CLI/PowerShellにログインしてみます。 ログインしたことになるため、az logout やLogout-AzAccountの実行も可能になります。
Azure CLIへのログイン
マネージドIDを用いてAzure CLIにログインするには、以下のコマンドを使用します。 実行することでログインが完了し、通常通りコマンドを使用できるようになります。
az login --identity
Azure PowerShellへのログイン
マネージドIDを用いてAzure PowerShellにログインするには、以下のコマンドを使用します。
Add-AzAccount -identity
注意点
マネージドIDを用いることで、仮想マシン上にアカウント情報を保持せずに資格情報を持たせることが可能ですが、仕組み上注意すべきと思う点があります。 それは、マネージドIDに付与する権限の強さです。
マネージドIDとは、Azureサービス/リソースそのものにAzure環境の操作権限を与えていることになります。
今回のようにVMにマネージドIDを付与した場合、OSにログインしCLI/PowerShellを実行可能なユーザーであれば誰でも、本来はAzureサブスクリプションの権限がないユーザーでも、VMの持つ権限を借りてAzure環境を操作するコマンドの実行が可能になります。
そのため、本来権限を持たないユーザーがリソースの作成や削除を実行可能な、抜け穴のような状況を作らないよう、マネージドIDに与える権限はよく検討した方が良いと思います。
おわりに
マネージドIDについて前々から存在は知っていたものの、使う機会がなく、たまたま試す機会があったので今回まとめてみました。
記載したようなVMで直接リソースの操作権限を持つようなことはあまりなく、読み取りでストレージのキーを取得したりアプリとAzureリソースの連携で使ったりの方が多いのかなぁと思いつつ。。。
権限の振り方に気を付けて使えば便利な機能だと思うので、そんなものもあるんだ、と知ってもらえればいいなと思います。