什麼是 Azure 中的自訂角色?

已完成

有時內建角色不會授與您所需的精確存取層級。 自訂角色可讓您定義符合組織特定需求的角色。 您可以將自行建立的 Azure 自訂角色指派給訂用帳戶、資源群組或資源範圍中的使用者、群組及服務主體。

在本單元中,您將了解 Azure 角色型存取控制 (RBAC) 中的自訂角色。

Microsoft Entra 與 Azure 角色

第一次使用 Azure 時,通常會將 Microsoft Entra 角色和 Azure 角色搞混。 Microsoft Entra 角色提供用於管理 Microsoft Entra 資源 (例如使用者帳戶與密碼) 權限的機制。 Azure 角色則提供豐富的功能,可讓您更精細地管理 Azure 資源,例如虛擬機器 (VM)。

圖表顯示 Azure 角色和 Microsoft Entra 角色的關聯性。

下表說明兩者設定及管理方式之間的些微差異:

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}" 
   ]
   }

檢定您的知識

1.

自訂 Azure 角色定義中包含的內容為何?

2.

哪些命令可協助您判斷要新增至自訂角色定義的作業?