Azure ロールの定義について

Azure ロールのしくみを理解しようとしている場合、または独自の Azure カスタム ロールを作成している場合は、ロールの定義方法を理解すると便利です。 この記事では、ロール定義の詳細について説明し、いくつかの例を示します。

ロール定義

ロール定義は、アクセス許可のコレクションです。 単にロールと呼ばれることもあります。 ロール定義には、実行できるアクション (読み取り、書き込み、削除など) が登録されています。 また、許可されるアクション、あるいは基となるデータに関連するアクションから除外されるアクションを一覧表示することもできます。

次に示すのは、Azure PowerShell を使用して表示される場合のロールの定義のプロパティの例です。

Name
Id
IsCustom
Description
Actions []
NotActions []
DataActions []
NotDataActions []
AssignableScopes []
Condition
ConditionVersion

次に示すのは、Azure CLI または REST API を使用して表示される場合のロール定義のプロパティの例です。

roleName
name
id
roleType
type
description
actions []
notActions []
dataActions []
notDataActions []
assignableScopes []
condition
conditionVersion
createdOn
updatedOn
createdBy
updatedBy

次の表で、ロールのプロパティについて説明します。

プロパティ 説明
Name
roleName
ロールの表示名です。
Id
name
ロールを表す一意の ID です。 組み込みロールは、クラウド全体で同じロール ID を持ちます。
id ロールの完全修飾一意 ID。
IsCustom
roleType
このロールがカスタム ロールであるかどうかを示します。 カスタム ロールの場合は true または CustomRole に設定します。 組み込みロールの場合は false または BuiltInRole に設定します。
type オブジェクトの種類。 Microsoft.Authorization/roleDefinitions に設定します。
Description
description
ロールの説明。
Actions
actions
ロールで実行できるコントロール プレーン アクションを指定する文字列の配列。
NotActions
notActions
許可される Actions から除外される、コントロール プレーン アクションを指定する文字列の配列。
DataActions
dataActions
対象のオブジェクト内のデータに対して、ロールで実行できるコントロール プレーン アクションを指定する文字列の配列。
NotDataActions
notDataActions
許可される DataActions から除外される、データ プレーン アクションを指定する文字列の配列。
AssignableScopes
assignableScopes
割り当てにロールを使用できるスコープを指定する文字列の配列。
Condition
condition
組み込みロールの場合、ロール定義の 1 つ以上のアクションに基づく条件ステートメント。
ConditionVersion
conditionVersion
条件バージョン番号。 既定値は 2.0 で、サポートされている唯一のバージョンです。
createdOn ロールが作成された日付と時刻。
updatedOn ロールが最後に更新された日付と時刻。
createdBy カスタム ロールの場合は、ロールを作成したプリンシパル。
updatedBy カスタム ロールの場合、ロールを更新したプリンシパル。

アクションの形式

アクションは、次の形式の文字列で指定されます。

  • {Company}.{ProviderName}/{resourceType}/{action}

アクション文字列の {action} 部分では、リソースの種類に対して実行できるアクションの種類を指定します。 たとえば、{action} には次の部分文字列が表示されます。

アクションの部分文字列 説明
* ワイルドカード文字では、文字列と一致するすべてのアクションに対するアクセスを許可します。
read 読み取りアクション (GET) を有効にします。
write 書き込みアクション (PUT または PATCH) を有効にします。
action 仮想マシンの再起動 (POST) などのカスタムアクションを有効にします。
delete 削除アクション (DELETE) を有効にします。

ロールの定義の例

Azure PowerShell と Azure CLI に表示される共同作成者ロールの定義を次に示します。 Actions 以下のワイルドカード (*) アクションは、このロールに割り当てられたプリンシパルがすべてのアクションを実行できること、つまり、すべてを管理できることを示します。 これには、今後、Azure が新しいリソースの種類を追加するときに定義されるアクションも含まれます。 NotActions 以下のアクションは、Actions から取り除かれます。 共同作成者ロールの場合、NotActions は、リソースに対するアクセスを管理するこのロールの機能を削除し、Azure Blueprints の割り当ても管理します。

Azure PowerShell に表示される共同作成者ロール:

{
  "Name": "Contributor",
  "Id": "b24988ac-6180-42a0-ab88-20f7382dd24c",
  "IsCustom": false,
  "Description": "Grants full access to manage all resources, but does not allow you to assign roles in Azure RBAC, manage assignments in Azure Blueprints, or share image galleries.",
  "Actions": [
    "*"
  ],
  "NotActions": [
    "Microsoft.Authorization/*/Delete",
    "Microsoft.Authorization/*/Write",
    "Microsoft.Authorization/elevateAccess/Action",
    "Microsoft.Blueprint/blueprintAssignments/write",
    "Microsoft.Blueprint/blueprintAssignments/delete",
    "Microsoft.Compute/galleries/share/action",
    "Microsoft.Purview/consents/write",
    "Microsoft.Purview/consents/delete"
  ],
  "DataActions": [],
  "NotDataActions": [],
  "AssignableScopes": [
    "/"
  ],
  "Condition": null,
  "ConditionVersion": null
}

Azure CLI に表示される共同作成者ロール:

[
  {
    "assignableScopes": [
      "/"
    ],
    "createdBy": null,
    "createdOn": "2015-02-02T21:55:09.880642+00:00",
    "description": "Grants full access to manage all resources, but does not allow you to assign roles in Azure RBAC, manage assignments in Azure Blueprints, or share image galleries.",
    "id": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c",
    "name": "b24988ac-6180-42a0-ab88-20f7382dd24c",
    "permissions": [
      {
        "actions": [
          "*"
        ],
        "condition": null,
        "conditionVersion": null,
        "dataActions": [],
        "notActions": [
          "Microsoft.Authorization/*/Delete",
          "Microsoft.Authorization/*/Write",
          "Microsoft.Authorization/elevateAccess/Action",
          "Microsoft.Blueprint/blueprintAssignments/write",
          "Microsoft.Blueprint/blueprintAssignments/delete",
          "Microsoft.Compute/galleries/share/action",
          "Microsoft.Purview/consents/write",
          "Microsoft.Purview/consents/delete"
        ],
        "notDataActions": []
      }
    ],
    "roleName": "Contributor",
    "roleType": "BuiltInRole",
    "type": "Microsoft.Authorization/roleDefinitions",
    "updatedBy": null,
    "updatedOn": "2023-07-10T15:10:53.947865+00:00"
  }
]

コントロールおよびデータ アクション

コントロール プレーン アクションのロールベースのアクセス制御は、ロール定義の Actions および NotActions プロパティで指定されます。 Azure でのコントロール プレーン アクションの例をいくつか以下に示します。

  • ストレージ アカウントに対するアクセスを管理する
  • BLOB コンテナーの作成、更新、または削除
  • リソース グループとそのすべてのリソースを削除する

コンテナーの認証方法が、[アクセス キー] ではなく [Azure AD のユーザー アカウント] に設定されている場合、コントロール プレーン アクセスはデータ プレーンに継承されません。 この分離により、ワイルドカード (*) を使用したロールはデータに無制限にアクセスできなくなります。 たとえば、ユーザーがサブスクリプションで閲覧者ロールを持っている場合、ストレージ アカウントは表示できますが、既定では基になるデータを表示することはできません。

以前は、ロールベースのアクセス制御はデータ アクションには使用されませんでした。 データ アクションの承認は、リソース プロバイダーによって異なります。 コントロール プレーン アクションで使用されるのと同じロールベースのアクセス制御承認モデルは、データ プレーン アクションに拡張されました。

データ プレーン アクションをサポートするために、新しいデータ プロパティがロール定義に追加されました。 データ プレーン アクションは DataActions および NotDataActions プロパティで指定されます。 これらのデータ プロパティを追加することによって、コントロール プレーンとデータ プレーンの分離が維持されます。 この結果、ワイルドカード (*) を使用した現在のロールの割り当てによって、データに思いがけなくアクセスする動作が防止されます。 DataActions および NotDataActions で指定できるデータ プレーン アクションをいくつか以下に示します。

  • コンテナーの BLOB の一覧の読み取り
  • コンテナーのストレージ BLOB の書き込み
  • キュー内のメッセージの削除

以下はストレージ BLOB データ閲覧者ロール定義であり、Actions および DataActions プロパティの両方のアクションが含まれています。 このロールでは、BLOB コンテナーおよび基になる BLOB データを読み取ることができます。

Azure PowerShell に表示される Storage BLOB データ リーダー ロール:

{
  "Name": "Storage Blob Data Reader",
  "Id": "2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
  "IsCustom": false,
  "Description": "Allows for read access to Azure Storage blob containers and data",
  "Actions": [
    "Microsoft.Storage/storageAccounts/blobServices/containers/read",
    "Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey/action"
  ],
  "NotActions": [],
  "DataActions": [
    "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read"
  ],
  "NotDataActions": [],
  "AssignableScopes": [
    "/"
  ],
  "Condition": null,
  "ConditionVersion": null
}

Azure CLI に表示される Storage BLOB データ リーダー ロール:

[
  {
    "assignableScopes": [
      "/"
    ],
    "createdBy": null,
    "createdOn": "2017-12-21T00:01:24.797231+00:00",
    "description": "Allows for read access to Azure Storage blob containers and data",
    "id": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
    "name": "2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
    "permissions": [
      {
        "actions": [
          "Microsoft.Storage/storageAccounts/blobServices/containers/read",
          "Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey/action"
        ],
        "condition": null,
        "conditionVersion": null,
        "dataActions": [
          "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read"
        ],
        "notActions": [],
        "notDataActions": []
      }
    ],
    "roleName": "Storage Blob Data Reader",
    "roleType": "BuiltInRole",
    "type": "Microsoft.Authorization/roleDefinitions",
    "updatedBy": null,
    "updatedOn": "2021-11-11T20:13:55.297507+00:00"
  }
]

DataActions および NotDataActions プロパティに追加できるのは、データ プレーン アクションのみです。 リソース プロバイダーはどのアクションがデータ アクションかを特定します。そのためには isDataAction プロパティを true に設定します。 isDataActiontrue であるアクションの一覧を表示する場合は、リソース プロバイダーの操作に関するページを参照してください。 データ アクションがないロールの場合、ロール定義内に DataActions および NotDataActions プロパティを含める必要はありません。

すべてのコントロール プレーン API 呼び出しの承認は、Azure Resource Manager によって処理されます。 データ プレーン API 呼び出しの承認は、リソース プロバイダーまたは Azure Resource Manager のいずれかによって処理されます。

データ アクションの例

コントロール プレーンおよびデータ プレーン アクションの動作の理解を深めるために、具体例を考えてみましょう。 Alice はサブスクリプション スコープで所有者ロールに割り当てられています。 Bob はストレージ アカウント スコープでストレージ BLOB データ共同作成者ロールに割り当てられています。 この例を次の図に示します。

Role-based access control has been extended to support both control plane and data plane actions

Alice の所有者ロールおよび Bob のストレージ BLOB データ共同作成者ロールは次のアクションを実行できます。

Owner

    アクション
    *

ストレージ BLOB データ共同作成者

    アクション
    Microsoft.Storage/storageAccounts/blobServices/containers/delete
    Microsoft.Storage/storageAccounts/blobServices/containers/read
    Microsoft.Storage/storageAccounts/blobServices/containers/write
    Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey/action
    DataActions
    Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete
    Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
    Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
    Microsoft.Storage/storageAccounts/blobServices/containers/blobs/move/action
    Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action

Alice のサブスクリプション スコープにはワイルドカード (*) アクションがあるため、そのアクセス許可が継承され、すべてのコントロール プレーン アクションを実行できます。 Alice は、コンテナーの読み取り、書き込み、および削除を行うことができます。 しかし、Alice は追加の手順を行わずにデータ プレーン アクションを実行することはできません。 たとえば、既定では、Alice はコンテナー内の BLOB を読み取ることができません。 BLOB を読み取るには、Alice はストレージ アクセス キーを取得し、それを使用して BLOB にアクセスする必要があります。

Bob のアクセス許可はストレージ BLOB データ共同作成者ロールで指定された Actions および DataActions のみに制限されます。 Bob は、ロールに基づいて、コントロール プレーンおよびデータ プレーン アクションの両方を実行できます。 たとえば、Bob は指定されたストレージ アカウントのコンテナーを読み取り、書き込み、および削除でき、また BLOB も読み取り、書き込み、および削除できます。

ストレージのコントロールおよびデータ プレーン セキュリティの詳細については、Azure Storage のセキュリティ ガイドを参照してください。

データ アクションのために Azure ロールの使用がサポートされているツール

データ アクションを表示して操作するには、正しいバージョンのツールまたは SDK が必要です。

ツール バージョン
Azure PowerShell 1.1.0 以降
Azure CLI 2.0.30 以降
Azure for .NET 2.8.0 プレビュー以降
Azure SDK for Go 15.0.0 以降
Java 向け Azure 1.9.0 以降
Azure for Python 0.40.0 以降
Azure SDK for Ruby 0.17.1 以降

REST API でデータ アクションを表示して使用するには、次のバージョン以降に api-version パラメーターを設定する必要があります。

  • 2018-07-01

アクション

Actions アクセス許可では、ロールで実行できるコントロール プレーン アクションを指定します。 これは、Azure リソース プロバイダーのセキュリティ保護可能なアクションを特定する文字列のコレクションです。 Actions で使用できるコントロール プレーン アクションの例をいくつか以下に示します。

アクションの文字列 説明
*/read すべての Azure リソース プロバイダーのすべてのリソースの種類を対象に、読み取りアクションのアクセス権を付与します。
Microsoft.Compute/* Microsoft.Compute リソース プロバイダーのすべてのリソースの種類を対象に、すべてのアクションのアクセス権を付与します。
Microsoft.Network/*/read Microsoft.Network リソース プロバイダーのすべてのリソースの種類を対象に、読み取りアクションのアクセス権を付与します。
Microsoft.Compute/virtualMachines/* 仮想マシンとその子リソースの種類を対象に、すべてのアクションのアクセス権を付与します。
microsoft.web/sites/restart/Action Web アプリを再起動するためのアクセス権を付与します。

NotActions

NotActions アクセス許可では、許可される Actions (ワイルドカード (*) を使用) から取り除く (除外する) コントロール プレーン アクションを指定します。 Actions (ワイルドカード (*) を使用) から取り除く方が、許可するアクションのセットを容易に定義できる場合は、NotActions アクセス許可を使用します。 ロール (有効なアクセス許可) によって付与されたアクセス権は、Actions アクションから NotActions アクションを取り除くことによって計算されます。

Actions - NotActions = Effective control plane permissions

次の表に、Microsoft.CostManagement ワイルドカード アクションの有効なコントロール プレーン アクセス許可の例を 2 つ示します。

アクション NotActions 有効なコントロール プレーンのアクセス許可
Microsoft.CostManagement/exports/* なし Microsoft.CostManagement/exports/action
Microsoft.CostManagement/exports/read
Microsoft.CostManagement/exports/write
Microsoft.CostManagement/exports/delete
Microsoft.CostManagement/exports/run/action
Microsoft.CostManagement/exports/* Microsoft.CostManagement/exports/delete Microsoft.CostManagement/exports/action
Microsoft.CostManagement/exports/read
Microsoft.CostManagement/exports/write
Microsoft.CostManagement/exports/run/action

Note

NotActions でアクションを除外するロールをユーザーに割り当てたうえで、同じアクションへのアクセス権を付与する 2 番目のロールを割り当てた場合、ユーザーはそのアクションの実行が許可されます。 NotActions は拒否ルールとは異なり、特定のアクションを除外する必要があるときに、許可されるアクションのセットを作成するのに便利な方法にすぎません。

NotActions と拒否の割り当ての違い

NotActions と拒否の割り当ては同じではなく、別の目的に使用されます。 NotActions は、ワイルドカード (*) アクションから特定のアクションを取り除くための便利な方法です。

拒否割り当てでは、ロールの割り当てでアクセスを許可されている場合であっても、指定したアクションがユーザーによって実行されるのをブロックします。 詳細については、Azure 拒否割り当ての概要に関するページを参照してください。

DataActions

DataActions アクセス許可では、対象のオブジェクト内のデータに対して、ロールで実行できるデータ プレーン アクションを指定します。 たとえば、ユーザーがあるストレージ アカウントへの BLOB データの読み取りアクセス許可を持っている場合、そのユーザーはそのストレージ アカウント内の BLOB を読み取ることができます。 DataActions で使用できるデータ アクションの例をいくつか以下に示します。

データ アクションの文字列 説明
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read BLOB または BLOB の一覧を返します。
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write BLOB の書き込みの結果を返します。
Microsoft.Storage/storageAccounts/queueServices/queues/messages/read メッセージを返します。
Microsoft.Storage/storageAccounts/queueServices/queues/messages/* メッセージまたはメッセージの書き込みまたは削除の結果を返します。

NotDataActions

NotDataActions アクセス許可では、許可される DataActions (ワイルドカード (*) を使用) から取り除かれる (除外される) データ プレーン アクションを指定します。 DataActions (ワイルドカード (*) を使用) から取り除く方が、許可するアクションのセットを容易に定義できる場合は、NotDataActions アクセス許可を使用します。 ロール (有効なアクセス許可) によって付与されたアクセス権は、DataActions アクションから NotDataActions アクションを取り除くことによって計算されます。 各リソース プロバイダーはそれぞれの API セットを提供し、データ アクションを実行します。

DataActions - NotDataActions = Effective data plane permissions

次の表に、Microsoft.Storage ワイルドカード アクションの有効なデータ プレーン アクセス許可の例を 2 つ示します。

DataActions NotDataActions 有効なデータ プレーンのアクセス許可
Microsoft.Storage/storageAccounts/queueServices/queues/messages/* なし Microsoft.Storage/storageAccounts/queueServices/queues/messages/read
Microsoft.Storage/storageAccounts/queueServices/queues/messages/write
Microsoft.Storage/storageAccounts/queueServices/queues/messages/delete
Microsoft.Storage/storageAccounts/queueServices/queues/messages/add/action
Microsoft.Storage/storageAccounts/queueServices/queues/messages/process/action
Microsoft.Storage/storageAccounts/queueServices/queues/messages/* Microsoft.Storage/storageAccounts/queueServices/queues/messages/delete
Microsoft.Storage/storageAccounts/queueServices/queues/messages/read
Microsoft.Storage/storageAccounts/queueServices/queues/messages/write
Microsoft.Storage/storageAccounts/queueServices/queues/messages/add/action
Microsoft.Storage/storageAccounts/queueServices/queues/messages/process/action

Note

NotDataActions でデータ アクションを除外するロールをユーザーに割り当てたうえで、同じデータ アクションへのアクセス権を付与する 2 番目のロールを割り当てた場合、ユーザーはそのデータ アクションの実行が許可されます。 NotDataActions は拒否ルールとは異なり、特定のデータ アクションを除外する必要があるときに、許可されるデータ アクションのセットを作成するのに便利な方法にすぎません。

AssignableScopes

AssignableScopes プロパティでは、ロール定義を割り当てることができるスコープ (ルート、管理グループ、サブスクリプション、またはリソース グループ) を指定します。 カスタム ロールを必要とする管理グループ、サブスクリプション、またはリソース グループのみで、その割り当てを利用できるようにすることができます。 少なくとも 1 つの管理グループ、サブスクリプション、またはリソース グループを使用する必要があります。

たとえば、サブスクリプションに設定されている場合、 AssignableScopes は指定したサブスクリプションのサブスクリプション スコープ、サブスクリプション内の任意のリソース グループのリソース グループ スコープ、またはサブスクリプション内の任意のリソースのリソース スコープで、カスタム ロールを割り当てることができることを意味します。

組み込みロールでは AssignableScopes がルート スコープ ("/") に設定されています。 ルート スコープは、すべてのスコープでそのロールを割り当て可能であることを示します。

有効な AssignableScopes の例を次に示します。

割り当てにロールを使用できる
1 つのサブスクリプション "/subscriptions/{subscriptionId1}"
2 つのサブスクリプション "/subscriptions/{subscriptionId1}", "/subscriptions/{subscriptionId2}"
Network resource group (ネットワーク リソース グループ) "/subscriptions/{subscriptionId1}/resourceGroups/Network"
1 つの管理グループ "/providers/Microsoft.Management/managementGroups/{groupId1}"
管理グループとサブスクリプション "/providers/Microsoft.Management/managementGroups/{groupId1}", "/subscriptions/{subscriptionId1}",
すべてのスコープ (組み込みロールにのみ適用) "/"

カスタム ロールの AssignableScopes に定義できる管理グループは 1 つだけです。

コマンド ラインを使用して AssignableScopes のリソース インスタンスでカスタム ロールを作成することはできますが、お勧めしません。 各テナントでは、最大 5,000 個のカスタム ロールがサポートされています。 この戦略を使用すると、使用可能なカスタム ロールが使い果たされる可能性があります。 最終的には、アクセス レベルはカスタム ロールに記載されている AssignableScopes ではなく、カスタム ロールの割り当て (スコープ + ロールのアクセス許可 + セキュリティ プリンシパル) によって決まります。 そのため、管理グループ、サブスクリプション、またはリソース グループの AssignableScopes を使用してカスタム ロールを作成しますが、リソースやリソース グループなどの狭いスコープでカスタム ロールを割り当てます。

カスタム ロールの AssignableScopes の詳細については、「 Azure カスタム ロール」を参照してください。

特権管理者ロール定義

特権管理者ロールは、Azure リソースを管理したり他のユーザーにロールを割り当てたりする機能など、特権管理者アクセスを付与するロールです。 組み込みまたはカスタム ロールに次のいずれかのアクションが含まれている場合は、特権と見なされます。 詳細については、「特権管理者ロールの割り当てを一覧表示または管理する」を参照してください。

アクションの文字列 説明
* あらゆる種類のリソースの作成と管理。
*/delete すべての種類のリソースを削除します。
*/write すべての種類のリソースを書き込みます。
Microsoft.Authorization/denyAssignments/delete 指定したスコープにおける拒否割り当てを削除します。
Microsoft.Authorization/denyAssignments/write 指定したスコープにおける拒否割り当てを作成します。
Microsoft.Authorization/roleAssignments/delete 指定したスコープにおけるロールの割り当てを削除します。
Microsoft.Authorization/roleAssignments/write 指定されたスコープのロールの割り当てを作成します。
Microsoft.Authorization/roleDefinitions/delete 指定されたカスタムのロール定義を削除します。
Microsoft.Authorization/roleDefinitions/write 指定されたアクセス許可と割り当て可能なスコープで、カスタムのロール定義を作成または更新します。

次のステップ