Azureのリソースプロバイダーは、対象のリソースプロバイダーが登録済みであればリソース作成可能と思っていましたが、必ずしもそうではないようです。
ぶつかった問題
以下のカスタムロールを付与したユーザーでAzure CDNを有効にしたApp Serviceを作成しようとすると、「このサブスクリプションのCDNリソースプロバイダーを登録できません。」とエラーが表示され、作成できない。
付与したカスタムロール
- ロール:共同作成者
- スコープ:リソースグループ
なお、対象のサブスクリプションのリソースプロバイダー「Microsoft.cdn」は登録済み。
解決方法
以下のカスタムロールを作成し、操作対象のユーザーに権限を付与する。
- 許可するアクション:CDNのリソースプロバイダーの登録
- スコープ:サブスクリプション
CDNのリソースプロバイダーの登録のみを許可したカスタムロール
{
"properties": {
"roleName": "CDN_register",
"description": "CDNのリソースプロバイダー登録のみ許可するロール",
"assignableScopes": [
"/subscriptions/<サブスクリプションのID>"
],
"permissions": [
{
"actions": [
"Microsoft.Cdn/register/action"
],
"notActions": [],
"dataActions": [],
"notDataActions": []
}
]
}
}
付与後、改めて作成してみると、先ほどのエラーが消えて作成できるようになりました。
まとめ
リソースプロバイダーはサブスクリプション単位で設定が行われるため、リソースグループがスコープの権限をユーザーに与えても、リソースプロバイダーの操作には関与できない。
そのため、ユーザーにサブスクリプションをスコープにした「Microsoft.cdn」の登録権限を付与する必要がある。
とはいえ、登録だけしておけば権限を与えなくても使えるリソースプロバイダーもあるし「Microsoft.cdn」は例外??リソースプロバイダの現在の登録状態に関わらず、一度状態を確認しに行く仕様なのかしら??
難しいですね。