Azure カスタム ロール
Azure の組み込みロールが組織の特定のニーズを満たさない場合は、独自のカスタム ロールを作成することができます。 組み込みロールと同様に、カスタム ロールは、ユーザー、グループ、サービス プリンシパルに対して、管理グループ、サブスクリプション、およびリソース グループのスコープで割り当てることができます。
カスタム ロールは、同じ Microsoft Entra テナントを信頼するサブスクリプション間で共有できます。 カスタム ロールの数は、テナントあたり 5,000 個という制限があります。 (21Vianet が運営する Microsoft Azure の場合、カスタム ロールの上限数は 2,000 個です。)カスタム ロールは、Azure portal、Azure PowerShell、Azure CLI、または REST API を使用して作成できます。
カスタム ロールの作成手順
カスタム ロールを作成する基本的な手順について説明します。
必要なアクセス許可を決定する。
カスタム ロールを作成する場合、アクセス許可を定義するために使用可能なアクションを把握しておく必要があります。 通常は、まず、既存の組み込みロールを使用し、必要に応じてそれを変更します。 アクションをロール定義の
Actions
またはNotActions
プロパティに追加します。 データ アクションをする場合は、それらをDataActions
またはNotDataActions
プロパティに追加します。詳細については、次のセクション「必要なアクセス許可を特定する方法」をご覧ください。
カスタム ロールを作成する方法を決定する。
カスタム ロールは、Azure portal、Azure PowerShell、Azure CLI、または REST API を使用して作成できます。
カスタム ロールを作成する。
最も簡単な方法は、Azure portal を使用することです。 Azure portal を使用してカスタム ロールを作成する手順については、「Azure portal を使用して Azure カスタム ロールを作成または更新する」を参照してください。
カスタム ロールをテストする。
カスタム ロールを作成したら、それをテストして期待どおりに動作することを確認する必要があります。 後で調整する必要がある場合は、カスタム ロールを更新できます。
必要なアクセス許可を特定する方法
Azure には、カスタム ロールに含めることができる何千ものアクセス許可があります。 カスタム ロールに追加するアクセス許可を決定するのに役立ついくつかの方法を示します。
既存の組み込みロールを確認します。
既存のロールを変更したり、複数のロールで使用されるアクセス許可を結合したりすることができます。
アクセス権を付与する Azure サービスを一覧表示します。
Azure サービスにマップされるリソース プロバイダーを決定します。
Azure サービスでは、リソース プロバイダーによって機能とアクセス許可が公開されます。 たとえば、Microsoft.Compute リソース プロバイダーは、仮想マシンのリソースを提供し、Microsoft.Billing リソース プロバイダーはサブスクリプションと課金のリソースを提供します。 リソース プロバイダーを把握することで、カスタム ロールに必要なアクセス許可を絞り込み特定できます。
Azure portal を使用してカスタム ロールを作成する場合は、キーワードを検索してリソース プロバイダーを特定することもできます。 この検索機能については、「Azure portal を使用して Azure カスタム ロールを作成または更新する」で説明しています。
使用可能なアクセス許可を検索して、含めるアクセス許可を見つけます。
Azure portal を使用してカスタム ロールを作成する場合は、キーワードを使用してアクセス許可を検索できます。 たとえば、"仮想マシン" や "請求" のアクセス許可を検索できます。 すべてのアクセス許可を CSV ファイルとしてダウンロードし、このファイルを検索することもできます。 この検索機能については、「Azure portal を使用して Azure カスタム ロールを作成または更新する」で説明しています。
カスタム ロールの例
Azure PowerShell を使用して JSON 形式で表示されるカスタム ロールの例を次に示します。 このカスタム ロールは、仮想マシンの監視と再起動に使用できます。
{
"Name": "Virtual Machine Operator",
"Id": "88888888-8888-8888-8888-888888888888",
"IsCustom": true,
"Description": "Can monitor and restart virtual machines.",
"Actions": [
"Microsoft.Storage/*/read",
"Microsoft.Network/*/read",
"Microsoft.Compute/*/read",
"Microsoft.Compute/virtualMachines/start/action",
"Microsoft.Compute/virtualMachines/restart/action",
"Microsoft.Authorization/*/read",
"Microsoft.ResourceHealth/availabilityStatuses/read",
"Microsoft.Resources/subscriptions/resourceGroups/read",
"Microsoft.Insights/alertRules/*",
"Microsoft.Insights/diagnosticSettings/*",
"Microsoft.Support/*"
],
"NotActions": [],
"DataActions": [],
"NotDataActions": [],
"AssignableScopes": [
"/subscriptions/{subscriptionId1}",
"/subscriptions/{subscriptionId2}",
"/providers/Microsoft.Management/managementGroups/{groupId1}"
]
}
Azure CLI を使用して表示される同じカスタム ロールを次に示します。
[
{
"assignableScopes": [
"/subscriptions/{subscriptionId1}",
"/subscriptions/{subscriptionId2}",
"/providers/Microsoft.Management/managementGroups/{groupId1}"
],
"description": "Can monitor and restart virtual machines.",
"id": "/subscriptions/{subscriptionId1}/providers/Microsoft.Authorization/roleDefinitions/88888888-8888-8888-8888-888888888888",
"name": "88888888-8888-8888-8888-888888888888",
"permissions": [
{
"actions": [
"Microsoft.Storage/*/read",
"Microsoft.Network/*/read",
"Microsoft.Compute/*/read",
"Microsoft.Compute/virtualMachines/start/action",
"Microsoft.Compute/virtualMachines/restart/action",
"Microsoft.Authorization/*/read",
"Microsoft.ResourceHealth/availabilityStatuses/read",
"Microsoft.Resources/subscriptions/resourceGroups/read",
"Microsoft.Insights/alertRules/*",
"Microsoft.Insights/diagnosticSettings/*",
"Microsoft.Support/*"
],
"dataActions": [],
"notActions": [],
"notDataActions": []
}
],
"roleName": "Virtual Machine Operator",
"roleType": "CustomRole",
"type": "Microsoft.Authorization/roleDefinitions"
}
]
カスタム ロールのプロパティ
次の表で、カスタム ロールのプロパティについて説明します。
プロパティ | 必須 | タイプ | 説明 |
---|---|---|---|
Name roleName |
イエス | String | カスタム ロールの表示名。 ロールの定義は、管理グループまたはサブスクリプション レベルのリソースですが、同じ Microsoft Entra テナントを共有する複数のサブスクリプションで使用できます。 この表示名は、Microsoft Entra テナントのスコープで一意である必要があります。 英字、数字、スペース、特殊文字を含めることができます。 最大文字数は 512 文字です。 |
Id name |
はい | String | カスタム ロールの一意の ID。 Azure PowerShell と Azure CLI では、新しいロールを作成するときに自動的にこの ID が生成されます。 |
IsCustom roleType |
はい | String | これがカスタム ロールであるかどうかを示します。 カスタム ロールの場合は true または CustomRole に設定します。 組み込みロールの場合は false または BuiltInRole に設定します。 |
Description description |
はい | String | カスタム ロールの説明。 英字、数字、スペース、特殊文字を含めることができます。 最大文字数は 2048 文字です。 |
Actions actions |
はい | String[] | ロールで実行できるコントロール プレーン アクションを指定する文字列の配列。 詳細については、アクション を参照してください。 |
NotActions notActions |
いいえ | String[] | 許可される Actions から除外されるコントロール プレーン アクションを指定する文字列の配列。 詳細については、「notActions」を参照してください。 |
DataActions dataActions |
いいえ | String[] | 対象のオブジェクト内のデータに対して、ロールで実行できるコントロール プレーン アクションを指定する文字列の配列。 DataActions を指定したカスタム ロールを作成した場合、そのロールは管理グループのスコープで割り当てることができません。 詳細については、「DataActions」を参照してください。 |
NotDataActions notDataActions |
いいえ | String[] | 許可される DataActions から除外されるデータ プレーン アクションを指定する文字列の配列。 詳細については、「NotDataActions」を参照してください。 |
AssignableScopes assignableScopes |
はい | String[] | 割り当てにカスタム ロールを使用できるスコープを指定する文字列の配列。 AssignableScopes の最大数は 2,000 です。 詳細については、「AssignableScopes」を参照してください。 |
アクセス許可の文字列では大文字と小文字が区別されません。 カスタム ロールを作成する場合は、「Azure リソース プロバイダーの操作」に示されているアクセス許可の大文字と小文字の区別の規則に従ってください。
ワイルドカードのアクセス許可
Actions
、NotActions
、DataActions
、および NotDataActions
では、アクセス許可の定義でワイルドカード (*
) をサポートしています。 ワイルドカード (*
) を使用すると、指定されたアクション文字列に一致するものすべてにアクセス許可が拡張されます。 たとえば、Azure Cost Management とエクスポートに関連するすべてのアクセス許可を追加したいとします。 次のすべてのアクション文字列を追加できます。
Microsoft.CostManagement/exports/action
Microsoft.CostManagement/exports/read
Microsoft.CostManagement/exports/write
Microsoft.CostManagement/exports/delete
Microsoft.CostManagement/exports/run/action
これらの文字列をすべて追加する代わりに、ワイルドカードの文字列を追加するだけで済みます。 たとえば、次のワイルドカードの文字列は、前の 5 つの文字列に相当します。 これには、今後追加される可能性があるエクスポートのアクセス許可も含まれます。
Microsoft.CostManagement/exports/*
Note
ワイルドカード (*
) 文字を使用する代わりに、Actions
と DataActions
を明示的に指定することをお勧めします。 今後の Actions
または DataActions
を通じて付与される追加のアクセスとアクセス許可は、ワイルドカードを使用した望ましくない動作である可能性があります。
カスタム ロールを作成、削除、更新、または表示できるユーザー
組み込みロールと同じように、AssignableScopes
プロパティでは、割り当てにロールを使用できるスコープを指定します。 カスタム ロールの AssignableScopes
プロパティでは、カスタム ロールを作成、削除、更新、または表示できるユーザーも制御されます。
タスク | アクション | 説明 |
---|---|---|
カスタム ロールの作成/削除 | Microsoft.Authorization/ roleDefinitions/write |
カスタム ロールのすべての AssignableScopes に対してこのアクションが許可されているユーザーは、これらのスコープで使用するカスタム ロールを作成 (または削除) できます。 たとえば、管理グループ、サブスクリプション、リソース グループの所有者とユーザー アクセス管理者です。 |
カスタム ロールの更新 | Microsoft.Authorization/ roleDefinitions/write |
カスタム ロールのすべての AssignableScopes に対してこのアクションが許可されているユーザーは、これらのスコープ内のカスタム ロールを更新できます。 たとえば、管理グループ、サブスクリプション、リソース グループの所有者とユーザー アクセス管理者です。 |
カスタム ロールの表示 | Microsoft.Authorization/ roleDefinitions/read |
あるスコープでこのアクションを許可されたユーザーは、そのスコープで割り当て可能なカスタム ロールを表示できます。 すべての組み込みロールを使用すると、カスタム ロールを割り当てに使用できます。 |
Note
ロールの名前が変更される場合でも、ロールの ID は変わりません。 スクリプトまたはオートメーションを使用してロールの割り当てを作成する場合は、ロール名ではなく一意のロール ID を使用するのがベスト プラクティスです。 そうすれば、ロールの名前が変更されても、スクリプトが動作する可能性が高くなります。
カスタム ロールを削除するためにロールの割り当てを見つける
カスタム ロールを削除する前に、そのカスタム ロールを使用するロールの割り当てを削除する必要があります。 ロールの割り当てがあるカスタム ロールを削除しようとすると、There are existing role assignments referencing role (code: RoleDefinitionHasAssignments)
というメッセージが表示されます。
カスタム ロールを削除する前にロールの割り当てを見つける手順を次に示します。
- カスタム ロールの定義を一覧表示します。
- [割り当て可能なスコープ] セクションで、管理グループ、サブスクリプション、リソース グループを取得します。
AssignableScopes
を反復し、ロール アサインメントを一覧表示します。- カスタム ロールを使用するロールの割り当てを削除します。
- Microsoft Entra Privileged Identity Management を使用している場合は、対象となるカスタム ロールの割り当てを削除します。
- カスタム ロールを削除します。
使用されていないカスタム ロールを見つける方法については、「現象 - 追加のロール定義を作成できない」を参照してください。
カスタム ロールの制限事項
次の一覧では、カスタム ロールの制限事項について説明します。
- 各テナントは、最大 5,000 個のカスタム ロールを持つことができます。
- 21Vianet が運営する Microsoft Azure では、テナントごとに最大 2,000 個のカスタム ロールを設定できます。
- ルート スコープ (
"/"
) にはAssignableScopes
を設定できません。 AssignableScopes
にワイルドカード (*
) を使用することはできません。 このワイルドカード制限は、ロール定義を更新することで、ユーザーがスコープにアクセスできないようにするのに役立ちます。- アクション文字列には、ワイルドカードを 1 つだけ含めることができます。
- カスタム ロールの
AssignableScopes
に定義できる管理グループは 1 つだけです。 - ロールの定義の
AssignableScopes
に管理グループが存在するかどうかは、Azure Resource Manager では検証しません。 DataActions
が含まれるカスタム ロールを管理グループのスコープで割り当てることはできません。DataActions
を指定し、かつAssignableScopes
で 1 つの管理グループを指定したカスタム ロールを作成できます。 管理グループ スコープ自体でこのカスタム ロールを割り当てることはできません。ただし、管理グループ内のサブスクリプションのスコープでそのカスタム ロールを割り当てることができます。 これは、サブスクリプションごとに個別のカスタム ロールを作成する代わりに、複数のサブスクリプションに割り当てる必要がある、DataActions
を指定した 1 つのカスタム ロールを作成する必要がある場合に役立ちます。
カスタム役割と管理グループの詳細については、「Azure 管理グループとは」を参照してください。
入力形式と出力形式
コマンド ラインを使用してカスタム ロールを作成するには、通常、JSON を使用してカスタム ロールに対して必要なプロパティを指定します。 使用するツールによっては、入力と出力の形式が若干異なります。 このセクションでは、ツールに応じて入力と出力の形式を示します。
Azure PowerShell
Azure PowerShell を使用してカスタム ロールを作成するには、次の入力を指定する必要があります。
{
"Name": "",
"Description": "",
"Actions": [],
"NotActions": [],
"DataActions": [],
"NotDataActions": [],
"AssignableScopes": []
}
Azure PowerShell を使用してカスタム ロールを更新するには、次の入力を指定する必要があります。 Id
プロパティが追加されていることに注意してください。
{
"Name": "",
"Id": "",
"Description": "",
"Actions": [],
"NotActions": [],
"DataActions": [],
"NotDataActions": [],
"AssignableScopes": []
}
Azure PowerShell と ConvertTo-Json コマンドを使用してカスタム ロールを一覧表示する場合の出力の例を次に示します。
{
"Name": "",
"Id": "",
"IsCustom": true,
"Description": "",
"Actions": [],
"NotActions": [],
"DataActions": [],
"NotDataActions": [],
"AssignableScopes": []
}
Azure CLI
Azure CLI を使用してカスタム ロールを作成または更新するには、次の入力を指定する必要があります。 この形式は、Azure PowerShell を使用してカスタム ロールを作成する場合と同じ形式です。
{
"Name": "",
"Description": "",
"Actions": [],
"NotActions": [],
"DataActions": [],
"NotDataActions": [],
"AssignableScopes": []
}
Azure CLI を使用してカスタム ロールを一覧表示する場合の出力の例を次に示します。
[
{
"assignableScopes": [],
"description": "",
"id": "",
"name": "",
"permissions": [
{
"actions": [],
"dataActions": [],
"notActions": [],
"notDataActions": []
}
],
"roleName": "",
"roleType": "CustomRole",
"type": "Microsoft.Authorization/roleDefinitions"
}
]
REST API
REST API を使用してカスタム ロールを作成または更新するには、次の入力を指定する必要があります。 この形式は、Azure portal を使用してカスタム ロールを作成したときに生成される形式と同じです。
{
"properties": {
"roleName": "",
"description": "",
"assignableScopes": [],
"permissions": [
{
"actions": [],
"notActions": [],
"dataActions": [],
"notDataActions": []
}
]
}
}
REST API を使用してカスタム ロールを一覧表示する場合の出力の例を次に示します。
{
"properties": {
"roleName": "",
"type": "CustomRole",
"description": "",
"assignableScopes": [],
"permissions": [
{
"actions": [],
"notActions": [],
"dataActions": [],
"notDataActions": []
}
],
"createdOn": "",
"updatedOn": "",
"createdBy": "",
"updatedBy": ""
},
"id": "",
"type": "Microsoft.Authorization/roleDefinitions",
"name": ""
}