Azure カスタム ロール

Azure の組み込みロールが組織の特定のニーズを満たさない場合は、独自のカスタム ロールを作成することができます。 組み込みロールと同様に、カスタム ロールは、ユーザー、グループ、サービス プリンシパルに対して、管理グループ、サブスクリプション、およびリソース グループのスコープで割り当てることができます。

カスタム ロールは、同じ Microsoft Entra テナントを信頼するサブスクリプション間で共有できます。 カスタム ロールの数は、テナントあたり 5,000 個という制限があります。 (21Vianet が運営する Microsoft Azure の場合、カスタム ロールの上限数は 2,000 個です。)カスタム ロールは、Azure portal、Azure PowerShell、Azure CLI、または REST API を使用して作成できます。

カスタム ロールの作成手順

カスタム ロールを作成する基本的な手順について説明します。

  1. 必要なアクセス許可を決定する。

    カスタム ロールを作成する場合、アクセス許可を定義するために使用可能なアクションを把握しておく必要があります。 通常は、まず、既存の組み込みロールを使用し、必要に応じてそれを変更します。 アクションをロール定義Actions または NotActions プロパティに追加します。 データ アクションをする場合は、それらを DataActions または NotDataActions プロパティに追加します。

    詳細については、次のセクション「必要なアクセス許可を特定する方法」をご覧ください。

  2. カスタム ロールを作成する方法を決定する。

    カスタム ロールは、Azure portalAzure PowerShellAzure CLI、または REST API を使用して作成できます。

  3. カスタム ロールを作成する。

    最も簡単な方法は、Azure portal を使用することです。 Azure portal を使用してカスタム ロールを作成する手順については、「Azure portal を使用して Azure カスタム ロールを作成または更新する」を参照してください。

  4. カスタム ロールをテストする。

    カスタム ロールを作成したら、それをテストして期待どおりに動作することを確認する必要があります。 後で調整する必要がある場合は、カスタム ロールを更新できます。

必要なアクセス許可を特定する方法

Azure には、カスタム ロールに含めることができる何千ものアクセス許可があります。 カスタム ロールに追加するアクセス許可を決定するのに役立ついくつかの方法を示します。

  • 既存の組み込みロールを確認します。

    既存のロールを変更したり、複数のロールで使用されるアクセス許可を結合したりすることができます。

  • アクセス権を付与する Azure サービスを一覧表示します。

  • Azure サービスにマップされるリソース プロバイダーを決定します。

    Azure サービスでは、リソース プロバイダーによって機能とアクセス許可が公開されます。 たとえば、Microsoft.Compute リソース プロバイダーは、仮想マシンのリソースを提供し、Microsoft.Billing リソース プロバイダーはサブスクリプションと課金のリソースを提供します。 リソース プロバイダーを把握することで、カスタム ロールに必要なアクセス許可を絞り込み特定できます。

    Azure portal を使用してカスタム ロールを作成する場合は、キーワードを検索してリソース プロバイダーを特定することもできます。 この検索機能については、「Azure portal を使用して Azure カスタム ロールを作成または更新する」で説明しています。

    Add permissions pane with resource provider

  • 使用可能なアクセス許可を検索して、含めるアクセス許可を見つけます。

    Azure portal を使用してカスタム ロールを作成する場合は、キーワードを使用してアクセス許可を検索できます。 たとえば、"仮想マシン" や "請求" のアクセス許可を検索できます。 すべてのアクセス許可を CSV ファイルとしてダウンロードし、このファイルを検索することもできます。 この検索機能については、「Azure portal を使用して Azure カスタム ロールを作成または更新する」で説明しています。

    Add permissions list

カスタム ロールの例

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 リソース プロバイダーの操作」に示されているアクセス許可の大文字と小文字の区別の規則に従ってください。

ワイルドカードのアクセス許可

ActionsNotActionsDataActions、および 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

ワイルドカード (*) 文字を使用する代わりに、ActionsDataActions を明示的に指定することをお勧めします。 今後の Actions または DataActions を通じて付与される追加のアクセスとアクセス許可は、ワイルドカードを使用した望ましくない動作である可能性があります。

カスタム ロールを作成、削除、更新、または表示できるユーザー

組み込みロールと同じように、AssignableScopes プロパティでは、割り当てにロールを使用できるスコープを指定します。 カスタム ロールの AssignableScopes プロパティでは、カスタム ロールを作成、削除、更新、または表示できるユーザーも制御されます。

タスク アクション 説明
カスタム ロールの作成/削除 Microsoft.Authorization/ roleDefinitions/write カスタム ロールのすべての AssignableScopes に対してこのアクションが許可されているユーザーは、これらのスコープで使用するカスタム ロールを作成 (または削除) できます。 たとえば、管理グループ、サブスクリプション、リソース グループの所有者ユーザー アクセス管理者です。
カスタム ロールの更新 Microsoft.Authorization/ roleDefinitions/write カスタム ロールのすべての AssignableScopes に対してこのアクションが許可されているユーザーは、これらのスコープ内のカスタム ロールを更新できます。 たとえば、管理グループ、サブスクリプション、リソース グループの所有者ユーザー アクセス管理者です。
カスタム ロールの表示 Microsoft.Authorization/ roleDefinitions/read あるスコープでこのアクションを許可されたユーザーは、そのスコープで割り当て可能なカスタム ロールを表示できます。 すべての組み込みロールを使用すると、カスタム ロールを割り当てに使用できます。

カスタム ロールを削除するためにロールの割り当てを見つける

カスタム ロールを削除する前に、そのカスタム ロールを使用するロールの割り当てを削除する必要があります。 ロールの割り当てがあるカスタム ロールを削除しようとすると、There are existing role assignments referencing role (code: RoleDefinitionHasAssignments) というメッセージが表示されます。

カスタム ロールを削除する前にロールの割り当てを見つける手順を次に示します。

カスタム ロールの制限事項

次の一覧では、カスタム ロールの制限事項について説明します。

  • 各テナントは、最大 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": ""
}

次のステップ