Managed Identity が非常に便利なのでいろいろと使ってしまうわけですが、Azure Portal 上だとリソースに対して割り当てたロールは見れるのに、特定の Managed Identity やユーザーに割り当てたロールが見れないので不便です。権限管理という点では望ましくないですね。
何かいい方法がないかと探していると、Azure CLI を使うと簡単に確認できるようだったので試しました。
az role assignment list
には特定のリソースに対してのロール以外に、--assignee
でのフィルタが仕えるようになってます。ここに Managed Identity の Object ID を指定すれば取れます。
System Assigned Managed Identity の場合は Portal から Object ID を拾ってこれます。
今回は特定のリソースグループなどではなく、サブスクリプション全体で割り当て済みのロールを確認したかったので、オプションとして --all
も指定しました。
後は見やすいように JMESPath でロール名とスコープだけフィルタリングしています。
# assignee には Object ID (guid) を指定する az role assignment list --assignee 00000000-0000-0000-0000-000000000000 --all --query "[].[roleDefinitionName,scope]"
Cloud Shell から実行すると、Managed Identity に割り当てられているロールとスコープが返って来ます。
Azure CLI を使うとロールが取れるので便利です。API レベルでは GUID しか返って来ません。
User Assigned Managed Identity の場合も System Assigned とほぼ同じです。Azure Portal から該当のリソースを開くと、Object ID を拾えるので同じように扱えます。
適当にロールを割り当てた後に Azure CLI を叩くと、ロール情報が返って来ます。
実際のところ IAM が反映されるより先に Azure CLI では情報が取れるようなので、ここでロール割り当てが返ってきたと言っても、アクセスが可能になっているとは限らないです。
反映されるまで 30 分ぐらいかかるケースもあるので、新規に割り当てた場合は注意しましょう。
アプリケーションから使いたい場合は、REST API を叩くか NuGet からクライアントをインストールします。
REST API を直接使う場合は Durable Functions v2 の Durable HTTP を使うと楽です。
ロールの割り当ての監査としては Activity Log を使った方が良いと思いますが、不要な権限が付いてないかのチェックを行うには便利です。Azure CLI でも az role assignment list-changelog
を使うと変更ログを取れそうですが、試すとエラーで動かなかったです。