Azure ロールの定義について
Azure ロールのしくみを理解しようとしている場合、または独自の Azure カスタム ロールを作成している場合は、ロールの定義方法を理解すると便利です。 この記事では、ロール定義の詳細について説明し、いくつかの例を示します。
ロール定義
ロール定義はアクセス許可のコレクションです。 単にロールと呼ばれることもあります。 ロール定義では、実行できるアクション (読み取り、書き込み、削除など) が一覧表示されます。 また、許可されるアクション、あるいは基となるデータに関連するアクションから除外されるアクションを一覧表示することもできます。
次に示すのは、Azure PowerShell を使用して表示される場合のロールの定義のプロパティの例です。
Name
Id
IsCustom
Description
Actions []
NotActions []
DataActions []
NotDataActions []
AssignableScopes []
次に示すのは、Azure portal、Azure CLI、または REST API を使用して表示される場合のロールの定義のプロパティの例です。
roleName
name
type
description
actions []
notActions []
dataActions []
notDataActions []
assignableScopes []
次の表で、ロールのプロパティについて説明します。
プロパティ | 説明 |
---|---|
Name roleName |
ロールの表示名です。 |
Id name |
ロールの一意の ID です。 組み込みロールは、クラウド全体で同じロール ID を持ちます。 |
IsCustom roleType |
これがカスタム ロールであるかどうかを示します。 カスタム ロールの場合は true または CustomRole に設定します。 組み込みロールの場合は false または BuiltInRole に設定します。 |
Description description |
ロールの説明です。 |
Actions actions |
ロールで実行できるコントロール プレーン アクションを指定する文字列の配列。 |
NotActions notActions |
許可される Actions から除外されるコントロール プレーン アクションを指定する文字列の配列。 |
DataActions dataActions |
対象のオブジェクト内のデータに対して、ロールで実行できるコントロール プレーン アクションを指定する文字列の配列。 |
NotDataActions notDataActions |
許可される DataActions から除外されるデータ プレーン アクションを指定する文字列の配列。 |
AssignableScopes assignableScopes |
割り当てにロールを使用できるスコープを指定する文字列の配列。 |
アクションの形式
アクションは、次の形式の文字列で指定されます。
{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": "Lets you manage everything except access to resources.",
"Actions": [
"*"
],
"NotActions": [
"Microsoft.Authorization/*/Delete",
"Microsoft.Authorization/*/Write",
"Microsoft.Authorization/elevateAccess/Action",
"Microsoft.Blueprint/blueprintAssignments/write",
"Microsoft.Blueprint/blueprintAssignments/delete"
],
"DataActions": [],
"NotDataActions": [],
"AssignableScopes": [
"/"
]
}
Azure CLI に表示される共同作成者ロール:
{
"assignableScopes": [
"/"
],
"description": "Lets you manage everything except access to resources.",
"id": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c",
"name": "b24988ac-6180-42a0-ab88-20f7382dd24c",
"permissions": [
{
"actions": [
"*"
],
"notActions": [
"Microsoft.Authorization/*/Delete",
"Microsoft.Authorization/*/Write",
"Microsoft.Authorization/elevateAccess/Action",
"Microsoft.Blueprint/blueprintAssignments/write",
"Microsoft.Blueprint/blueprintAssignments/delete"
],
"dataActions": [],
"notDataActions": []
}
],
"roleName": "Contributor",
"roleType": "BuiltInRole",
"type": "Microsoft.Authorization/roleDefinitions"
}
コントロールおよびデータ アクション
コントロール プレーン アクションのロールベースのアクセス制御は、ロール定義の 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": [
"/"
]
}
Azure CLI に表示される Storage BLOB データ リーダー ロール:
{
"assignableScopes": [
"/"
],
"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"
],
"notActions": [],
"dataActions": [
"Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read"
],
"notDataActions": []
}
],
"roleName": "Storage Blob Data Reader",
"roleType": "BuiltInRole",
"type": "Microsoft.Authorization/roleDefinitions"
}
DataActions
および NotDataActions
プロパティに追加できるのは、データ プレーン アクションのみです。 リソース プロバイダーはどのアクションがデータ アクションかを特定します。そのためには isDataAction
プロパティを true
に設定します。 isDataAction
が true
であるアクションの一覧を表示する場合は、リソース プロバイダーの操作に関するページを参照してください。 データ アクションがないロールの場合、ロール定義内に DataActions
および NotDataActions
プロパティを含める必要はありません。
すべてのコントロール プレーン API 呼び出しの承認は、Azure Resource Manager によって処理されます。 データ プレーン API 呼び出しの承認は、リソース プロバイダーまたは Azure Resource Manager のいずれかによって処理されます。
データ アクションの例
コントロール プレーンおよびデータ プレーン アクションの動作の理解を深めるために、具体例を考えてみましょう。 Alice はサブスクリプション スコープで所有者ロールに割り当てられています。 Bob はストレージ アカウント スコープでストレージ BLOB データ共同作成者ロールに割り当てられています。 この例を次の図に示します。
Alice の所有者ロールおよび Bob のストレージ BLOB データ共同作成者ロールは次のアクションを実行できます。
所有者
アクション
*
ストレージ 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/move/action
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
Alice のサブスクリプション スコープにはワイルドカード (*
) アクションがあるため、そのアクセス許可が継承され、すべてのコントロール プレーン アクションを実行できます。 Alice は、コンテナーの読み取り、書き込み、および削除を行うことができます。 しかし、Alice は追加の手順を行わずにデータ プレーン アクションを実行することはできません。 たとえば、既定では、Alice はコンテナー内の BLOB を読み取ることができません。 BLOB を読み取るには、Alice はストレージ アクセス キーを取得し、それを使用して BLOB にアクセスする必要があります。
Bob のアクセス許可はストレージ BLOB データ共同作成者ロールで指定された Actions
および DataActions
のみに制限されます。 Bob は、ロールに基づいて、コントロール プレーンおよびデータ プレーン アクションの両方を実行できます。 たとえば、Bob は指定されたストレージ アカウントのコンテナーを読み取り、書き込み、および削除でき、また BLOB も読み取り、書き込み、および削除できます。
ストレージのコントロールおよびデータ プレーン セキュリティの詳細については、Azure Storage のセキュリティ ガイドを参照してください。
データ アクションのために Azure ロールの使用がサポートされているツール
データ アクションを表示して操作するには、正しいバージョンのツールまたは SDK が必要です。
ツール | Version |
---|---|
Azure PowerShell | 1.1.0 以降 |
Azure CLI | 2.0.30 以降 |
Azure for .NET | 2.8.0 プレビュー以降 |
Azure SDK for Go | 15.0.0 以降 |
Azure for Java | 1.9.0 以降 |
Azure for Python | 0.40.0 以降 |
Azure SDK for Ruby | 0.17.1 以降 |
REST API でデータ アクションを表示して使用するには、次のバージョン以降に api-version パラメーターを設定する必要があります。
- 2018-07-01
Actions
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 つ示します。
Actions | 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 |
注意
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 |
注意
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
のリソース インスタンスでカスタム ロールを作成することはできますが、お勧めしません。 各テナントでは、最大 5000 個のカスタム ロールがサポートされています。 この戦略を使用すると、使用可能なカスタム ロールが使い果たされる可能性があります。 最終的には、アクセス レベルはカスタム ロールに記載されている AssignableScopes
ではなく、カスタム ロールの割り当て (スコープ + ロールのアクセス許可 + セキュリティ プリンシパル) によって決まります。 そのため、管理グループ、サブスクリプション、またはリソース グループの AssignableScopes
を使用してカスタム ロールを作成しますが、リソースやリソース グループなどの狭いスコープでカスタム ロールを割り当てます。
カスタム ロールの AssignableScopes
の詳細については、「 Azure カスタム ロール」を参照してください。