什麼是 Azure 中的自訂角色?
有時內建角色不會授與您所需的精確存取層級。 自訂角色可讓您定義符合組織特定需求的角色。 您可以將自行建立的 Azure 自訂角色指派給訂用帳戶、資源群組或資源範圍中的使用者、群組及服務主體。
在本單元中,您將了解 Azure 角色型存取控制 (RBAC) 中的自訂角色。
Microsoft Entra 與 Azure 角色
第一次使用 Azure 時,通常會將 Microsoft Entra 角色和 Azure 角色搞混。 Microsoft Entra 角色提供用於管理 Microsoft Entra 資源 (例如使用者帳戶與密碼) 權限的機制。 Azure 角色則提供豐富的功能,可讓您更精細地管理 Azure 資源,例如虛擬機器 (VM)。
下表說明兩者設定及管理方式之間的些微差異:
Azure 角色 | Microsoft Entra 角色 |
---|---|
管理對 Azure 資源 (例如 VM、儲存體、網路和其他) 的存取權 | 管理對 Microsoft Entra 資源 (例如使用者帳戶與密碼) 的存取 |
多個範圍層級 (管理群組、訂用帳戶、資源群組、資源) | 僅限租用戶層級的範圍 |
可透過 Azure 入口網站、Azure CLI、Azure PowerShell、Azure Resource Manager 範本、REST API 來存取的角色資訊 | 可在 Azure 系統管理入口網站、Microsoft 365 系統管理中心、Microsoft Graph、Microsoft Graph PowerShell 中存取的角色資訊 |
在我們的案例中,我們需要自訂角色來管理訂用帳戶範圍內的 Azure VM,因此需要在 Azure RBAC 中使用自訂角色。
指派和自訂角色範圍
具有「使用者存取系統管理員」或「擁有者」角色的使用者,可以在 Azure RBAC 中建立或指派自訂角色。
您可以將自訂角色指派給:
安全性主體 | 摘要 |
---|---|
使用者 | 在 Microsoft Entra ID 中具有設定檔的個人 |
群組 | 一組已在 Microsoft Entra ID 中建立的使用者 |
服務主體 | 應用程式或服務用於存取特定 Azure 資源的安全性身分識別 |
受控識別 | 由 Azure 自動管理的 Microsoft Entra 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}
動作部分通常是下列其中一個動作:
- *
- 讀取
- write
- action
- delete
定義自訂角色來管理 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/*"
可用於監視,但是重新啟動和其他一些作業則不會列為該角色定義中的動作。
尋找資源提供者作業
我們可以在 Azure Resource Manager 資源提供者作業清單中找到 VM 重新開機動作,或執行下列 PowerShell 命令來傳回 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
Cmdlet 取得最新的資源提供者作業清單。 在 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}"
]
}