了解 Azure 角色指派。

角色指派可讓您將特定 Azure 資源的存取權授與主體(例如使用者、群組、受控識別或服務主體)。 本文說明角色指派的詳細資料。

角色指派

藉由建立角色指派來授與 Azure 資源的存取權,並藉由移除角色指派來撤銷存取權。

角色指派有數個元件,包括:

  • 主體 獲派角色的人員
  • 指派的角色
  • 指派 角色的範圍
  • 角色 指派的名稱 ,以及 可協助您說明角色指派原因的描述

例如,您可以使用 Azure RBAC 來指派角色,例如:

  • 使用者 Sally 具有資源群組 Contoso儲存體 中儲存體帳戶 contoso123 的擁有者存取權。
  • Microsoft Entra ID 中 Cloud 管理員istrators 群組中的每個人都具有資源群組 Contoso 中所有資源的讀取者存取權儲存體
  • 允許在 Contoso 訂用帳戶內重新開機與應用程式相關聯的受控識別。

以下顯示使用 Azure PowerShell 顯示的角色指派中屬性範例:

{
  "RoleAssignmentName": "00000000-0000-0000-0000-000000000000",
  "RoleAssignmentId": "/subscriptions/11111111-1111-1111-1111-111111111111/providers/Microsoft.Authorization/roleAssignments/00000000-0000-0000-0000-000000000000",
  "Scope": "/subscriptions/11111111-1111-1111-1111-111111111111",
  "DisplayName": "User Name",
  "SignInName": "user@contoso.com",
  "RoleDefinitionName": "Contributor",
  "RoleDefinitionId": "b24988ac-6180-42a0-ab88-20f7382dd24c",
  "ObjectId": "22222222-2222-2222-2222-222222222222",
  "ObjectType": "User",
  "CanDelegate": false,
  "Description": null,
  "ConditionVersion": null,
  "Condition": null
}

下列顯示使用 Azure CLI REST API 時,角色指派中的屬性範例:

{
  "canDelegate": null,
  "condition": null,
  "conditionVersion": null,
  "description": null,
  "id": "/subscriptions/11111111-1111-1111-1111-111111111111/providers/Microsoft.Authorization/roleAssignments/00000000-0000-0000-0000-000000000000",
  "name": "00000000-0000-0000-0000-000000000000",
  "principalId": "22222222-2222-2222-2222-222222222222",
  "principalName": "user@contoso.com",
  "principalType": "User",
  "roleDefinitionId": "/subscriptions/11111111-1111-1111-1111-111111111111/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c",
  "roleDefinitionName": "Contributor",
  "scope": "/subscriptions/11111111-1111-1111-1111-111111111111",
  "type": "Microsoft.Authorization/roleAssignments"
}

下表描述角色指派屬性的意義。

屬性 說明
RoleAssignmentName
name
角色指派的名稱,這是全域唯一識別碼 (GUID)。
RoleAssignmentId
id
角色指派的唯一識別碼,其中包含名稱。
Scope
scope
角色指派的範圍為的 Azure 資源識別碼。
RoleDefinitionId
roleDefinitionId
角色的唯一識別碼。
RoleDefinitionName
roleDefinitionName
角色的名稱。
ObjectId
principalId
已指派角色之主體的 Microsoft Entra 物件識別碼。
ObjectType
principalType
主體所代表的 Microsoft Entra 物件類型。 有效值包括 UserGroupServicePrincipal
DisplayName 針對使用者的角色指派,使用者顯示名稱。
SignInName
principalName
使用者的唯一主體名稱(UPN)或與服務主體相關聯的應用程式名稱。
Description
description
角色指派的描述。
Condition
condition
使用角色定義和屬性的一或多個動作所建置的條件陳述式。
ConditionVersion
conditionVersion
條件版本號碼。 預設為 2.0,且是唯一支援的版本。
CanDelegate
canDelegate
未實作。

範圍

當您建立角色指派時,您必須指定其套用的範圍。 範圍代表允許主體存取的資源或一組資源。 您可以將角色指派的範圍設定為單一資源、資源群組、訂用帳戶或管理群組。

提示

使用您需要的最小範圍,以符合您的需求。

例如,如果您需要將受控識別存取權授與單一儲存體帳戶,在儲存體帳戶的範圍而非資源群組或訂用帳戶範圍建立角色指派是很好的安全性做法。

如需範圍的詳細資訊,請參閱 瞭解範圍

要指派的角色

角色指派與角色定義相關聯。 角色定義會指定主體在角色指派範圍內應具有的許可權。

您可以指派內建角色定義或自訂角色定義。 當您建立角色指派時,某些工具會要求您使用角色定義識別碼,而其他工具則可讓您提供角色的名稱。

如需角色定義的詳細資訊,請參閱 瞭解角色定義

主體

主體包括使用者、安全性群組、受控識別、工作負載身分識別和服務主體。 主體會在您的 Microsoft Entra 租使用者中建立和管理。 您可以將角色指派給任何主體。 使用 Microsoft Entra ID 物件識別碼 來識別您要指派角色的主體。

當您使用 Azure PowerShell、Azure CLI、Bicep 或其他基礎結構即程式碼 (IaC) 技術建立角色指派時,您可以指定 主體類型 。 主體類型包括 User Group ServicePrincipal 。 請務必指定正確的主體類型。 否則,您可能會收到間歇性部署錯誤,特別是當您使用服務主體和受控識別時。

名稱

角色指派的資源名稱必須是全域唯一識別碼 (GUID)。

角色指派資源名稱在 Microsoft Entra 租使用者內必須是唯一的,即使角色指派的範圍較窄也一樣。

提示

當您使用 Azure 入口網站、Azure PowerShell 或 Azure CLI 建立角色指派時,建立程式會自動為角色指派提供唯一的名稱。

如果您使用 Bicep 或其他基礎結構即程式碼 (IaC) 技術建立角色指派,則必須仔細規劃如何命名角色指派。 如需詳細資訊,請參閱 使用 Bicep 建立 Azure RBAC 資源。

資源刪除行為

當您從 Microsoft Entra ID 刪除使用者、群組、服務主體或受控識別時,最好刪除任何角色指派。 系統不會自動刪除它們。 參考已刪除主體識別碼的任何角色指派會變成無效。

如果您嘗試針對另一個角色指派重複使用角色指派的名稱,部署將會失敗。 當您使用 Bicep 或 Azure Resource Manager 範本來部署角色指派時,較可能發生此問題,因為當您使用這些工具時必須明確設定角色指派名稱。 若要解決此問題,您應該先移除舊的角色指派,再重新建立該指派,或確定您在部署新角色指派時使用唯一名稱。

描述

您可以將文字描述新增至角色指派。 雖然描述是選擇性的,但最好將它們新增至您的角色指派。 提供主體為何需要指派角色的簡短理由。 當有人稽核角色指派時,描述有助於瞭解他們建立的原因,以及它們是否仍然適用。

條件

某些角色根據特定動作內容中的屬性支援 角色指派條件 。 角色指派條件是一項額外的檢查,可讓您選擇性地新增至角色指派,以提供更精細的存取控制。

例如,您可以新增條件,要求物件具有特定標記,使用者才能讀取物件。

您通常會使用視覺化條件編輯器來建置條件,但以下是程式碼中的範例條件:

((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEqualsIgnoreCase 'Cascade'))

上述條件可讓使用者使用 Project Blob 索引標籤索引鍵和 Cascade 來讀取 Blob。

如需條件的詳細資訊,請參閱 什麼是 Azure 屬性型存取控制 (Azure ABAC)?

下一步