Azure のカスタム ロールとは

場合によっては、組み込みロールでは必要なレベルのアクセス権が付与されないことがあります。 カスタム ロールを使用すると、組織の特定のニーズを満たすロールを定義できます。 作成した Azure カスタム ロールは、サブスクリプション、リソース グループ、またはリソースのスコープで、ユーザー、グループ、およびサービス プリンシパルに割り当てることができます。

このユニットでは、Azure のロールベースのアクセス制御 (RBAC) のカスタム ロールについて学習します。

Azure Active Directory ロールと Azure ロール

Azure を初めて使用するときは、Azure Active Directory (Azure AD) ロールと Azure ロールが混同されることがよくあります。 Azure AD ロールは、ユーザー アカウントやパスワードなどの AD リソースへのアクセス許可を管理するためのメカニズムを提供します。 Azure ロールは、仮想マシン (VM) などの Azure リソースを詳細なレベルで管理するための豊富な機能を提供します。

Azure ロールと Azure AD ロールの関係を示す図。

この 2 つの設定方法と管理方法の微妙な違いは、次の表のとおりです。

Azure ロール Azure AD ロール
VM、ストレージ、ネットワークなどの Azure リソースへのアクセスを管理する ユーザー アカウントやパスワードなどの Azure Active Directory リソースへのアクセスを管理する
複数のスコープ レベル (管理グループ、サブスクリプション、リソース グループ、リソース) テナント レベルのスコープのみ
Azure portal、Azure CLI、Azure PowerShell、Azure Resource Manager のテンプレート、REST API を使用してアクセスできるロール情報 Azure 管理ポータル、Microsoft 365 管理センター、Microsoft Graph、Azure AD PowerShell でアクセス可能なロール情報

このシナリオでは、サブスクリプションのスコープで Azure VM を管理するためのカスタム ロールが必要です。 そのため、Azure RBAC でカスタム ロールを使用する必要があります。

カスタム ロールの割り当てとスコープ

ユーザー アクセス管理者または所有者のロールを持つユーザーは、Azure RBAC でカスタム ロールを作成または割り当てることができます。

カスタム ロールを割り当てることができるのは、次のとおりです。

セキュリティ プリンシパル 概要
ユーザー Azure Active Directory のプロファイルを持つ個人
グループ Azure Active Directory 内に作成されたユーザーのセット
サービス プリンシパル アプリケーションまたはサービスが特定の Azure リソースにアクセスするために使用するセキュリティ ID
マネージド ID Azure によって自動的に管理される Azure Active Directory の ID

Azure 内のさまざまなレベルに割り当てと関連するアクセス許可のスコープを設定できます。 さまざまなスコープは次のとおりです。

  • サブスクリプション
  • リソース グループ
  • 個々のリソース

ロールの割り当てのスコープと相互の関係を示す図。

ロール定義と構造

カスタム ロール定義は、さまざまなアクセス許可のコレクションに分割されます。 各定義には、読み取り、書き込み、削除など、許可される操作の詳細が記述されています。 定義は、次の構造を使用して形成されます。

{
  "Name": "",
  "IsCustom": true,
  "Description": "",
  "Actions": [],
  "NotActions": [],
  "DataActions": [],
  "NotDataActions": [],
  "AssignableScopes": [
    "/subscriptions/{subscriptionId1}"
  ]
}

次の例は、共同作成者ロールのロール定義を示しています。

{
  "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": [
    "/"
  ]
}

ロール定義は、次の形式で宣言されます。

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

アクションの部分は、通常は次のいずれかのアクションです。

  • *
  • 読み取り
  • 書き込み
  • アクション
  • 削除

VM を管理するためのカスタム ロールを定義する

ロール定義に含めるアクセス許可を特定するには、Azure Resource Manager リソース プロバイダーの操作の一覧を使用し、必要なアクセス許可を持つ組み込みの Azure ロールを確認します。

組み込みロールを確認する

このシナリオでは、仮想マシン共同作成者の組み込みロールには従業員のニーズよりも多くのアクセス許可があり、仮想マシンの管理者ログインには十分なアクセス許可がありません。

次のコマンドは、仮想マシン共同作成者の組み込みロールに対するアクセス許可を返します。

az role definition list --name "Virtual Machine Contributor" --output json | jq '.[] | .permissions[0].actions'

次の一覧は、仮想マシン共同作成者の組み込みロールに対するアクセス許可です。

[
  "Microsoft.Authorization/*/read",
  "Microsoft.Compute/availabilitySets/*",
  "Microsoft.Compute/locations/*",
  "Microsoft.Compute/virtualMachines/*",
  "Microsoft.Compute/virtualMachineScaleSets/*",
  "Microsoft.DevTestLab/schedules/*",
  "Microsoft.Insights/alertRules/*",
  "Microsoft.Network/applicationGateways/backendAddressPools/join/action",
  "Microsoft.Network/loadBalancers/backendAddressPools/join/action",
  "Microsoft.Network/loadBalancers/inboundNatPools/join/action",
  "Microsoft.Network/loadBalancers/inboundNatRules/join/action",
  "Microsoft.Network/loadBalancers/probes/join/action",
  "Microsoft.Network/loadBalancers/read",
  "Microsoft.Network/locations/*",
  "Microsoft.Network/networkInterfaces/*",
  "Microsoft.Network/networkSecurityGroups/join/action",
  "Microsoft.Network/networkSecurityGroups/read",
  "Microsoft.Network/publicIPAddresses/join/action",
  "Microsoft.Network/publicIPAddresses/read",
  "Microsoft.Network/virtualNetworks/read",
  "Microsoft.Network/virtualNetworks/subnets/join/action",
  "Microsoft.RecoveryServices/locations/*",
  "Microsoft.RecoveryServices/Vaults/backupFabrics/backupProtectionIntent/write",
  "Microsoft.RecoveryServices/Vaults/backupFabrics/protectionContainers/protectedItems/*/read",
  "Microsoft.RecoveryServices/Vaults/backupFabrics/protectionContainers/protectedItems/read",
  "Microsoft.RecoveryServices/Vaults/backupFabrics/protectionContainers/protectedItems/write",
  "Microsoft.RecoveryServices/Vaults/backupPolicies/read",
  "Microsoft.RecoveryServices/Vaults/backupPolicies/write",
  "Microsoft.RecoveryServices/Vaults/read",
  "Microsoft.RecoveryServices/Vaults/usages/read",
  "Microsoft.RecoveryServices/Vaults/write",
  "Microsoft.ResourceHealth/availabilityStatuses/read",
  "Microsoft.Resources/deployments/*",
  "Microsoft.Resources/subscriptions/resourceGroups/read",
  "Microsoft.SqlVirtualMachine/*",
  "Microsoft.Storage/storageAccounts/listKeys/action",
  "Microsoft.Storage/storageAccounts/read",
  "Microsoft.Support/*"
]

PowerShell でこの一覧を取得するには、次のコマンドを実行します。

Get-AzRoleDefinition -Name "Virtual Machine Contributor" | Select Actions | ConvertTo-Json

このシナリオでは、特定のサブスクリプションの仮想マシンを監視および再起動できるカスタム ロールが必要です。 そのため、サブスクリプション レベルでスコープが設定された次のアクションを含める必要があります。

  • コンピューティング リソース、ネットワーク リソース、およびストレージ リソースへの読み取りアクセス
  • 仮想マシンを起動および再起動する機能
  • サブスクリプション内のリソース グループへのアクセス
  • 監視リソースへのアクセス

仮想マシン共同作成者のロール定義には、監視のために "Microsoft.Insights/alertRules/*" のように使用できる操作がいくつかあります。 しかし、再起動すると、そのロール定義にアクションとして一覧表示されないものもあります。

リソース プロバイダーの操作を確認する

VM の再起動アクションは、Azure Resource Manager リソース プロバイダーの操作の一覧で、または次のコマンドを実行して VM の操作を返すことで確認できます。

Get-AzProviderOperation */virtualMachines/*

再起動では次の操作が一覧に返されます。

Operation         : Microsoft.Compute/virtualMachines/restart/action
OperationName     : Restart Virtual Machine
ProviderNamespace : Microsoft Compute
ResourceName      : Virtual Machines
Description       : Restarts the virtual machine
IsDataAction      : False

Azure PowerShell の Get-AzProviderOperation コマンドレットは、リソース プロバイダーの操作の最新の一覧を取得するのに役立ちます。 Azure CLI の場合は、az provider operation show コマンドを使用します。 発行されたリソース プロバイダーと操作の一覧については、Docs にある Azure RBAC のコンテンツを参照してください。

VM オペレーターのロール定義の作成

ここでは、関連する組み込みロール定義とリソース プロバイダーの操作の一覧を確認することで、必要なものを選択するものとします。 最終的には、カスタム ロールの次のロール定義が作成されます。 このカスタム ロールには、このロール定義を使用します。

   {
   "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.Support/*"
   ],
   "NotActions": [],
   "DataActions": [],
   "NotDataActions": [],
   "AssignableScopes": [
      "/subscriptions/{subscriptionId1}" 
   ]
   }

自分の知識をチェックする

1.

カスタム Azure ロールの定義には何が含まれますか?

2.

カスタム ロール定義に追加する操作は、どのようなコマンドを使用して判断できますか?