了解 Azure 角色指派。
角色指派可讓您授與主體 (例如使用者、群組、受控識別或服務主體) 對於特定 Azure 資源的存取權。 本文說明角色指派的詳細資料。
角色指派
建立角色指派可授與 Azure 資源存取權,而移除角色指派則可撤銷存取權。
角色指派有數個元件,包括:
- 「主體」,或者獲指派角色的「人員」。
- 指派的「角色」。
- 指派角色的「範圍」。
- 角色指派的「名稱」,以及可協助您說明角色指派原因的「描述」。
例如,您可以使用 Azure RBAC 來指派角色:
- 使用者 Sally 具有擁有者存取權,可存取資源群組「ContosoStorage」中的儲存體帳戶「contoso123」。
- Microsoft Entra ID 雲端系統管理員群組中的每個人都具有讀者存取權,可存取資源群組「ContosoStorage」中的所有資源。
- 允許與應用程式相關聯的受控識別,在 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 物件類型。 有效值包括 User 、Group 和 ServicePrincipal 。 |
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) 技術來建立角色指派時,您可以指定「主體類型」。 主體類型包括「使用者」、「群組」和「服務主體」。 請務必指定正確的主體類型。 否則您可能會收到間歇性的部署錯誤,尤其是當您使用服務主體和受控身分識別時。
名稱
角色指派的資源名稱必須是全域唯一識別碼 (GUID)。
Microsoft Entra 租用戶內的角色指派資源名稱不可重複,即使角色指派的範圍較狹窄也一樣。
提示
當您使用 Azure 入口網站、Azure PowerShell 或 Azure CLI 建立角色指派時,建立程序會自動為您提供角色指派的唯一名稱。
如果您使用 Bicep 或其他基礎結構作為程式碼 (IaC) 技術來建立角色指派,則必須仔細規劃角色指派的命名方式。 如需詳細資訊,請參閱使用 Bicep 來建立 Azure RBAC 資源。
刪除資源行為
當您從 Microsoft Entra ID 刪除使用者、群組、服務主體或受控識別時,刪除任何角色指派是個良好的習慣做法。 角色指派不會自動刪除。 任何參考已刪除主體識別碼的角色指派都會失效。
如果您嘗試將角色指派的名稱重複用於另一個角色指派,部署將會失敗。 當您使用 Bicep 或 Azure Resource Manager 範本 (ARM) 範本部署角色指派時,較可能發生此問題,因為當您使用這些工具時,必須明確設定角色指派名稱。 若要因應這個行為,您應該先移除舊的角色指派再重新建立,或確定您在部署新的角色指派時使用唯一名稱。
描述
您可以將文字描述新增至角色指派。 雖然您可以選擇是否新增描述,但仍建議您將其新增至角色指派。 提供簡短原因,說明主體為何需要指派的角色。 當人員稽核角色指派時,描述可協助其瞭解角色建立的原因,並判斷角色是否仍然適用。
條件
某些角色會根據特定動作內容中的屬性來支援「角色指派條件」。 角色指派條件是額外的檢查,您可以選擇性地將其新增至您的角色指派,以提供更精細的存取控制。
例如,您可以新增「物件需具有特定標記,才能讓使用者讀取物件」的條件。
您通常會使用視覺條件編輯器來建置條件,但以下是範例條件在程式碼中的外觀:
((!(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'))
前置條件可讓使用者讀取 Blob,其 Blob 索引標記索引鍵為「Project」且值為「Cascade」。
如需條件的詳細資訊,請參閱什麼是 Azure 屬性型存取控制 (Azure ABAC)?