カスタムロールの作成を許可するAzureロール定義

カスタムロールの作成・変更権限を必要な管理者に限定し、ロール定義と割り当て範囲を併せて確認してください。

説明

Microsoft.Authorization/roleDefinitions/writeは、権限がある範囲でカスタムロールを作成・変更するための操作です。そのロールのすべてのassignableScopesでこの権限が必要です。actions: ['*']も、除外がなければこの権限を含む広範な管理操作を許可します。

ロール定義の作成と主体へのロール割り当ては別の操作です。ただし、割り当て済みロールの権限を拡張すると利用者の権限も増える可能性があるため、ロール管理権限の委任は慎重に行ってください。

想定される影響

  • 不要なロール変更権限を使い、既存ロールに過剰な権限が追加される可能性があります。
  • 広い割り当て可能範囲と過剰なロール割り当てが組み合わさると、影響するリソースが増える可能性があります。

対処方法

  • ロール管理が不要な主体にMicrosoft.Authorization/roleDefinitions/writeを付与せず、*の代わりに必要な操作を列挙してください。
  • actions、notActions、データ操作、ロール割り当てを併せて確認してください。assignableScopesは割り当て可能な範囲であり、それ自体がアクセス権限を付与する設定ではありません。
  • ロールの作成・変更・割り当ては必要な管理者だけに委任し、変更後の実際の権限と必要な業務の動作を確認してください。

例

サブスクリプションスコープでデプロイし、GUID形式のロールIDを使う例です。主体へのロール割り当ては含みません。既存ロールの更新時は実際のIDを維持し、テナント内で一意のロール名を使ってください。

変更前

bicep
targetScope = 'subscription'

resource roleDef 'Microsoft.Authorization/roleDefinitions@2018-01-01-preview' = {
  name: guid(subscription().id, 'my-custom-role')
  properties: {
    roleName: 'my-custom-role'
    description: 'This is a custom role'
    permissions: [
      {
        actions: ['*']
      }
    ]
    assignableScopes: [subscription().id]
  }
}

除外なしですべての管理操作を含みます。このロールを割り当てると、ロール定義の管理など広範な権限が付与されます。

変更後

bicep
targetScope = 'subscription'

resource roleDef 'Microsoft.Authorization/roleDefinitions@2018-01-01-preview' = {
  name: guid(subscription().id, 'my-custom-role')
  properties: {
    roleName: 'my-custom-role'
    description: 'This is a custom role'
    permissions: [
      {
        actions: ['Microsoft.Authorization/roleDefinitions/read']
      }
    ]
    assignableScopes: [subscription().id]
  }
}

ロール定義の読み取りだけを含みます。実際の要件が読み取りだけで満たせる場合の例であり、ほかのロールによる権限を削除するものではありません。

参考資料