Azure PortalでIAMの画面を開くと、「不明」という名のついたユーザがたまに存在します。
これなんで起きるかって言うと、Azure側のRBACのロールを削除する前にユーザーとかマネージドIDが付与されたリソースを削除しちゃうからなんですよね...
そして「不明」になると、Azure Portalの画面からは誰がいつ作ったユーザーなのかを調べることができません...
RBACのロールを削除してからリソースを削除すればこんなことは起きないのですが、
「不明」なユーザを特定してロール削除する場合の方法が一応ありました。
(私が作り出してしまった不明なユーザを頑張って探したので忘れないうちに備忘録)
前提条件
-
探したい不明なユーザの種類によって、探せる時期が異なります。
- ユーザーID:Entra IDから完全削除されるまで
- マネージドID:直近(アクティビティログに残る範囲)で何かしらの作業を実施していること
-
ロールを削除したいスコープ(サブスクリプション、リソースグループなど)に対して「所有者」権限が付与されている必要があります。
-
Entra IDからオブジェクトIDを検索する場合は、Entra IDに対しての参照権限も必要です。
1. 不明なユーザのオブジェクトIDを抽出する
とりあえず候補になる容疑者を探します(笑)
-
Azure PortalでCloud Shell を起動する or 端末からPowerShellを起動して以下のコマンドを実行します。
Get-AzRoleAssignment | Export-Csv -path UserRoleAssignment.csv
-
CSVファイルが作成されるので開きます。
(Cloud Shellから実行した場合は、「ダウンロード」をクリックしてファイルをダウンロードします。)
-
CSVファイルの
scope
列を対象範囲に絞り込みます。例)
- 不明なユーザがサブスクリプションに対してRBACを付与されている場合:
/subscriptions/<サブスクリプションID>
- リソースグループに対してRBACを付与されている場合:
/subscriptions/<サブスクリプションID>/resourceGroups/<リソースグループ名>/
- 不明なユーザがサブスクリプションに対してRBACを付与されている場合:
-
CSVファイルの
ObjectType
列がUnknown
になっている行を抽出し、Object IDをメモします。
2.オブジェクトIDから対象ユーザを探す
容疑者は絞りこめたので、犯人を特定します(笑)
探したい不明なユーザがユーザIDの場合
Entra IDの画面から探します。
Entra IDに一度作成したユーザは削除後も30日間は「削除済みのユーザー」画面に残ります。
なので、削除したかったユーザとオブジェクトIDが一致すれば、そのオブジェクトIDが削除対象です。
探したい不明なユーザがマネージドIDの場合
こちらはリソースに付与されるIDなので、Entra IDには残りません。
なので、アクティビティログから対象リソースの直近の挙動を検索しました。
オブジェクトIDで検索して、該当する挙動を直近で行っていたオブジェクトIDが削除対象です。
3. 特定した不明なユーザ(オブジェクトID)からロールを削除する
犯人(削除対象の不明なユーザ)が特定できたとしても、Azure PortalからではオブジェクトIDは特定できません。
そのため、Cloud Shell or PowerShellから以下コマンドで削除します。
PS C:\> Remove-AzRoleAssignment -ObjectId <削除対象のオブジェクトID> -RoleDefinitionId <ロールのID> -Scope <ロールが付与されているスコープ>
ObjectId
もRoleDefinitionId
もScope
も最初に出力したCSVに記載されているので、コピペすれば良いです。
コマンド実行後、削除できたか気になる場合は、もう一度CSVを出力してみて、削除したオブジェクトIDが存在してなければOKです。
以上です。
不明なユーザ全部消そうかと思ったけど、無事特定できました。
(実は残りの不明なユーザを私が知らない間に作ってしまったのかもしれない...w)