しばやん雑記

ASP.NET Core とメイドさんが大好きなフリーランスのプログラマーのブログ

Azure CLI を使って Managed Identity に割り当て済みのロールを確認する

Managed Identity が非常に便利なのでいろいろと使ってしまうわけですが、Azure Portal 上だとリソースに対して割り当てたロールは見れるのに、特定の Managed Identity やユーザーに割り当てたロールが見れないので不便です。権限管理という点では望ましくないですね。

何かいい方法がないかと探していると、Azure CLI を使うと簡単に確認できるようだったので試しました。

az role assignment list には特定のリソースに対してのロール以外に、--assignee でのフィルタが仕えるようになってます。ここに Managed Identity の Object ID を指定すれば取れます。

System Assigned Managed Identity の場合は Portal から Object ID を拾ってこれます。

f:id:shiba-yan:20190910020625p:plain

今回は特定のリソースグループなどではなく、サブスクリプション全体で割り当て済みのロールを確認したかったので、オプションとして --all も指定しました。

後は見やすいように JMESPath でロール名とスコープだけフィルタリングしています。

# assignee には Object ID (guid) を指定する
az role assignment list --assignee 00000000-0000-0000-0000-000000000000 --all --query "[].[roleDefinitionName,scope]"

Cloud Shell から実行すると、Managed Identity に割り当てられているロールとスコープが返って来ます。

f:id:shiba-yan:20190910020639p:plain

Azure CLI を使うとロールが取れるので便利です。API レベルでは GUID しか返って来ません。

User Assigned Managed Identity の場合も System Assigned とほぼ同じです。Azure Portal から該当のリソースを開くと、Object ID を拾えるので同じように扱えます。

f:id:shiba-yan:20190910020632p:plain

適当にロールを割り当てた後に Azure CLI を叩くと、ロール情報が返って来ます。

f:id:shiba-yan:20190910021048p:plain

実際のところ IAM が反映されるより先に Azure CLI では情報が取れるようなので、ここでロール割り当てが返ってきたと言っても、アクセスが可能になっているとは限らないです。

反映されるまで 30 分ぐらいかかるケースもあるので、新規に割り当てた場合は注意しましょう。

アプリケーションから使いたい場合は、REST API を叩くか NuGet からクライアントをインストールします。

REST API を直接使う場合は Durable Functions v2 の Durable HTTP を使うと楽です。

ロールの割り当ての監査としては Activity Log を使った方が良いと思いますが、不要な権限が付いてないかのチェックを行うには便利です。Azure CLI でも az role assignment list-changelog を使うと変更ログを取れそうですが、試すとエラーで動かなかったです。