AzureリソースのIAMでカスタムロールが表示されない!?
はじめに
ご無沙汰になりました。
今回はタイトル通り、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の細かい権限の情報を見たいときはこのドキュメントが役にたちます。私もちょくちょく見ます。
ちなみに、リソースグループのIAMではリソースロック担当者
が表示されたのはなぜかということも聞いてみました。
リソースグループのスコープでつけた権限はリソースグループ配下のリソースに継承されるため、リソースグループに対しての権限を持ち合わせていないロールであっても表示される、とのことです。
まとめると
- サブスクやリソースグループといった上位スコープ
→下位スコープに継承されるため、そのスコープに対しての権限を持っていないロールでも表示される - スコープの末端である個別リソース
→継承がないため、そのリソースに対する何らかの権限がなければ表示されない
ということです。
おわりに
今回はAzureリソースにカスタムロールを割り当てられなかった事象とその原因について書きました。
また重箱の隅をつつくようなテーマで書きやがって・・・という感じですが、一人にでもお役に立てれば幸いです!
Discussion