Azure のカスタム ロールとは
場合によっては、組み込みロールでは必要とされる精密なレベルのアクセス権が付与されないことがあります。 カスタム ロールを使用すると、組織の特定のニーズを満たすロールを定義できます。 作成した Azure カスタム ロールは、サブスクリプション、リソース グループ、またはリソースのスコープで、ユーザー、グループ、およびサービス プリンシパルに割り当てることができます。
このユニットでは、Azure のロールベースのアクセス制御 (RBAC) のカスタム ロールについて学習します。
Microsoft Entra と Azure のロール
Azure を初めて使う場合、Microsoft Entra ロールと Azure ロールを混同することがよくあります。 Microsoft Entra ロールは、ユーザー アカウントやパスワードなどの Microsoft Entra リソースへのアクセス許可を管理するためのメカニズムを提供します。 Azure ロールは、仮想マシン (VM) などの Azure リソースを詳細なレベルで管理するための豊富な機能を提供します。
次の表に、この 2 つを設定および管理する方法の微妙な違いを示します。
Azure ロール | Microsoft Entra ロール |
---|---|
VM、ストレージ、ネットワークなどの Azure リソースへのアクセスを管理する | ユーザー アカウントやパスワードなどの Microsoft Entra リソースへのアクセスを管理する |
複数のスコープ レベル (管理グループ、サブスクリプション、リソース グループ、リソース) | テナント レベルのスコープのみ |
Azure portal、Azure CLI、Azure PowerShell、Azure Resource Manager のテンプレート、REST API を使用してアクセスできるロール情報 | Azure 管理ポータル、Microsoft 365 管理センター、Microsoft Graph、Microsoft Graph PowerShell でアクセス可能なロール情報 |
このシナリオでは、サブスクリプション スコープで Azure VM を管理するためのカスタム ロールが必要なので、Azure RBAC でカスタム ロールを使用する必要があります。
カスタム ロールの割り当てとスコープ
ユーザー アクセス管理者または所有者のロールを持つユーザーは、Azure RBAC でカスタム ロールを作成または割り当てることができます。
カスタム ロールは、次に対して割り当てることができます。
セキュリティ プリンシパル | 概要 |
---|---|
User | Microsoft Entra ID のプロファイルを持つ個人 |
グループ | Microsoft Entra ID で作成されたユーザーのセット |
サービス プリンシパル | アプリケーションまたはサービスが特定の Azure リソースにアクセスするために使用するセキュリティ ID |
マネージド ID | Azure によって自動的に管理される Microsoft Entra ID の 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 ロールを確認します。
組み込みロールを確認する
このシナリオでは、仮想マシン共同作成者の組み込みロールには従業員のニーズよりも多くのアクセス許可があり、仮想マシンの管理者ログインには十分なアクセス許可がありません。
次の Azure CLI コマンドは、組み込みロールである仮想マシン共同作成者に対するアクセス許可を返します。
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 に対する操作を返す次の PowerShell コマンドを実行することで確認できます。
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}"
]
}