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。 ロールの名前が変更される場合でも、ロールの 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 コンテナーの作成、更新、または削除
- リソース グループとそのすべてのリソースを削除する
コンテナーの認証方法が、アクセス キーではなく Microsoft Entra ユーザー アカウントに設定されている場合、コントロール プレーン アクセスはデータ プレーンに継承されません。 この分離により、ワイルドカード (*
) を使用したロールはデータに無制限にアクセスできなくなります。 たとえば、ユーザーがサブスクリプションで閲覧者ロールを持っている場合、ストレージ アカウントは表示できますが、既定では基になるデータを表示することはできません。
以前は、ロールベースのアクセス制御はデータ アクションには使用されませんでした。 データ アクションの承認は、リソース プロバイダーによって異なります。 コントロール プレーン アクションで使用されるのと同じロールベースのアクセス制御承認モデルは、データ プレーン アクションに拡張されました。
データ プレーン アクションをサポートするために、新しいデータ プロパティがロール定義に追加されました。 データ プレーン アクションは 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
に設定します。 isDataAction
が true
であるアクションの一覧を表示する場合は、リソース プロバイダーの操作に関するページを参照してください。 データ アクションがないロールの場合、ロール定義内に DataActions
および NotDataActions
プロパティを含める必要はありません。
すべてのコントロール プレーン API 呼び出しの承認は、Azure Resource Manager によって処理されます。 データ プレーン API 呼び出しの承認は、リソース プロバイダーまたは Azure Resource Manager のいずれかによって処理されます。
データ アクションの例
コントロール プレーンおよびデータ プレーン アクションの動作の理解を深めるために、具体例を考えてみましょう。 Alice はサブスクリプション スコープで所有者ロールに割り当てられています。 Bob はストレージ アカウント スコープでストレージ BLOB データ共同作成者ロールに割り当てられています。 この例を次の図に示します。
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 |
指定されたアクセス許可と割り当て可能なスコープで、カスタムのロール定義を作成または更新します。 |