🗂

AzureリソースのIAMでカスタムロールが表示されない!?

2023/03/19に公開

はじめに

ご無沙汰になりました。
今回はタイトル通り、AzureリソースのIAMでカスタムロールが表示されなくて困ったということがあったので、サポートに問い合わせて得た知見を共有したいと思います。

起きた事象

あるマネージドIDに対して、SQL Serverをスコープとしたリソースロック担当者というカスタムロールを割り当てようとしました。
リソースロック担当者の権限は以下です。

{
    "properties": {
        "roleName": "リソースロック担当者",
        "description": "",
        "assignableScopes": [
            "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
        ],
        "permissions": [
            {
                "actions": [
                    "Microsoft.Authorization/locks/read",
                    "Microsoft.Authorization/locks/write",
                    "Microsoft.Authorization/locks/delete"
                ],
                "notActions": [],
                "dataActions": [],
                "notDataActions": []
            }
        ]
    }
}

ロール名でお分かりのように、リソースロックの付与・削除ができるロールになっています。
これをSQL ServerのIAMからマネージドIDに対して割り当てようしたのですが・・・ない!?!?
※個人環境でSQL Serverを作成するのが面倒だったので、↓はFunctionsとなってますがご了承くださいw(事象は同じです)


FunctionsのIAMでカスタムロールが表示されない

そしてこれがまた私を混乱させたのですが、リソースグループのIAMからはリソースロック担当者が見えたのです。


リソースグループのIAMでは表示される

assignableScopesもサブスクにしてるので、そこは問題なさそう。じゃあ問題がありそうなのは権限の中身ぐらい?
対象リソースのread権限が必要?と思いつつ答え合わせのためにサポートに問い合わせました。

サポートの回答

サポートからの回答をまとめるとこんな感じです。

  • カスタムロールをロールの一覧として表示するには、参照しているリソースに関連する権限が付与されたロールである必要がある
  • 今回の場合はリソースロック担当者が持つ権限がSQL Serverリソースに関連する権限である必要がある(例えばreadなど)
  • 例えばVNETの書き込み権限のみ付与したカスタムロールはSQL ServerのIAMで表示されないが、VNETの書き込み + */Readといった権限であれば、SQL Serverのread権限も保持していることになるので、SQL ServerのIAMで表示される

言われてみればその通りすぎてぐうの音も出ませんでした。。
今回はリソースロックという、どのリソースにも存在するがそのリソースに対しての操作・権限ではない、というところが事をややこしくしてしまいました。

ということで念のため確認。リソースロック担当者にFunctionsホストキーを一覧表示する権限microsoft.web/sites/host/listkeys/actionを追加してみたところ、無事にFunctionsのIAMでも表示されました。


FunctionsのIAMでも表示された

あ、Azureの細かい権限の情報を見たいときはこのドキュメントが役にたちます。私もちょくちょく見ます。
https://learn.microsoft.com/ja-jp/azure/role-based-access-control/resource-provider-operations

ちなみに、リソースグループのIAMではリソースロック担当者が表示されたのはなぜかということも聞いてみました。
リソースグループのスコープでつけた権限はリソースグループ配下のリソースに継承されるため、リソースグループに対しての権限を持ち合わせていないロールであっても表示される、とのことです。

まとめると

  • サブスクやリソースグループといった上位スコープ
    →下位スコープに継承されるため、そのスコープに対しての権限を持っていないロールでも表示される
  • スコープの末端である個別リソース
    →継承がないため、そのリソースに対する何らかの権限がなければ表示されない

ということです。

おわりに

今回はAzureリソースにカスタムロールを割り当てられなかった事象とその原因について書きました。
また重箱の隅をつつくようなテーマで書きやがって・・・という感じですが、一人にでもお役に立てれば幸いです!

Discussion