瞭解 Azure 角色定義

如果您想要瞭解 Azure 角色的運作方式,或是您要建立自己的 azure 自訂角色,則瞭解角色的定義方式會很有説明。 本文詳細描述角色定義並提供一些範例。

角色定義

「角色定義」是權限集合。 有時就是所謂的 角色。 角色定義會列出可執行檔動作,例如讀取、寫入和刪除。 它也可以列出從允許的動作或與基礎資料相關的動作中排除的動作。

以下顯示使用Azure PowerShell顯示時,角色定義中的屬性範例:

Name
Id
IsCustom
Description
Actions []
NotActions []
DataActions []
NotDataActions []
AssignableScopes []

以下顯示使用 Azure 入口網站Azure CLIREST API顯示時,角色定義中的屬性範例:

roleName
name
type
description
actions []
notActions []
dataActions []
notDataActions []
assignableScopes []

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

屬性 描述
Name
roleName
角色的顯示名稱。
Id
name
角色的唯一識別碼。 內建角色具有相同的角色識別碼。
IsCustom
roleType
表示這是否為自訂角色。 trueCustomRole 針對自訂角色設定為或。 falseBuiltInRole 針對內建角色設定為或。
Description
description
角色的描述。
Actions
actions
字串陣列,指定角色允許執行的控制項平面動作。
NotActions
notActions
字串陣列,指定從允許的中排除的控制項平面動作 Actions
DataActions
dataActions
字串陣列,指定角色允許對該物件中的資料執行的資料平面動作。
NotDataActions
notDataActions
字串陣列,指定從允許的中排除的資料平面動作 DataActions
AssignableScopes
assignableScopes
字串陣列,指定角色可指派的範圍。

動作格式

系統會使用具有下列格式的字串來指定動作:

  • {Company}.{ProviderName}/{resourceType}/{action}

{action}動作字串的部分會指定您可以在資源類型上執行的動作類型。 例如,您將會在 {action} 中看到下列子字串:

動作子字串 Description
* 萬用字元會授與所有符合字串之動作的存取權。
read 啟用 (取得) 的讀取動作。
write 啟用 (PUT 或 PATCH) 的寫入動作。
action 啟用自訂動作,例如重新開機虛擬機器 (POST) 。
delete 啟用刪除 (刪除) 的動作。

角色定義範例

以下是 Azure PowerShell 和 Azure CLI 中顯示的參與者角色定義。 下的萬用字元 (*) 動作 Actions 表示指派給這個角色的主體可以執行所有動作; 換句話說,它可以管理所有動作。 這包括未來 Azure 新增資源類型時所定義的動作。 下的動作 NotActions 會從減去 Actions 。 在 參與者 角色的情況下,會 移除此角色管理資源存取權的能力,同時管理 Azure 藍圖指派。

Azure PowerShell中顯示的參與者角色:

{
  "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": [
    "/"
  ]
}

Azure CLI中顯示的參與者角色:

{
  "assignableScopes": [
    "/"
  ],
  "description": "Lets you manage everything except access to resources.",
  "id": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c",
  "name": "b24988ac-6180-42a0-ab88-20f7382dd24c",
  "permissions": [
    {
      "actions": [
        "*"
      ],
      "notActions": [
        "Microsoft.Authorization/*/Delete",
        "Microsoft.Authorization/*/Write",
        "Microsoft.Authorization/elevateAccess/Action",
        "Microsoft.Blueprint/blueprintAssignments/write",
        "Microsoft.Blueprint/blueprintAssignments/delete"
      ],
      "dataActions": [],
      "notDataActions": []
    }
  ],
  "roleName": "Contributor",
  "roleType": "BuiltInRole",
  "type": "Microsoft.Authorization/roleDefinitions"
}

控制項和資料動作

控制平面動作的角色型存取控制是在 Actions 角色定義的和 NotActions 屬性中指定。 以下是 Azure 中的一些控制平面動作範例:

  • 管理儲存體帳戶的存取權
  • 建立、更新或刪除 Blob 容器
  • 刪除資源群組及其所有資源

如果容器驗證方法設定為「Azure AD 使用者帳戶」,而不是「存取金鑰」,則不會將控制平面存取權繼承至您的資料平面。 此隔離可防止具有萬用字元 (*) 的角色不受限地存取您的資料。 例如,如果使用者具有訂用帳戶的讀取者角色,則可以檢視儲存體帳戶,但預設為無法檢視基礎資料。

先前,角色型存取控制不會用於資料動作。 跨資源提供者的資料動作授權不同。 用於控制平面動作的相同角色型存取控制授權模型已延伸至資料平面動作。

為了支援資料平面動作,已將新的資料屬性新增至角色定義。 資料平面動作是在 DataActions 和屬性中指定 NotDataActions 。 藉由新增這些資料屬性,將會維護控制平面和資料平面之間的分隔。 這可避免目前具有萬用字元 (*) 的角色指派突然存取資料。 以下是可在和中指定的一些資料平面 DataActions 動作 NotDataActions

  • 讀取容器中的 Blob 清單
  • 在容器中寫入儲存體 Blob
  • 刪除佇列中的訊息

以下是儲存體 Blob 資料讀取器角色定義,其中包含和屬性中的 動作 DataActions 。 此角色可讓您讀取 Blob 容器和基礎 Blob 資料。

儲存體 Blob 資料讀取器角色,如 Azure PowerShell 所示:

{
  "Name": "Storage Blob Data Reader",
  "Id": "2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
  "IsCustom": false,
  "Description": "Allows for read access to Azure Storage blob containers and data",
  "Actions": [
    "Microsoft.Storage/storageAccounts/blobServices/containers/read",
    "Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey/action"
  ],
  "NotActions": [],
  "DataActions": [
    "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read"
  ],
  "NotDataActions": [],
  "AssignableScopes": [
    "/"
  ]
}

儲存體 Blob 資料讀取器角色,如 Azure CLI 所示:

{
  "assignableScopes": [
    "/"
  ],
  "description": "Allows for read access to Azure Storage blob containers and data",
  "id": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
  "name": "2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
  "permissions": [
    {
      "actions": [
        "Microsoft.Storage/storageAccounts/blobServices/containers/read",
        "Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey/action"
      ],
      "notActions": [],
      "dataActions": [
        "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read"
      ],
      "notDataActions": []
    }
  ],
  "roleName": "Storage Blob Data Reader",
  "roleType": "BuiltInRole",
  "type": "Microsoft.Authorization/roleDefinitions"
}

只有資料平面動作可以加入至 DataActionsNotDataActions 屬性。 資源提供者會藉由將屬性設定為,來識別哪些動作是資料動作 isDataActiontrue 。 若要查看的動作清單,請 isDataActiontrue 參閱 isDataAction。 在角色定義中,沒有資料動作的角色不需要具有 DataActionsNotDataActions 屬性。

所有控制平面 API 呼叫的授權是由 Azure Resource Manager 處理。 資料平面 API 呼叫的授權是由資源提供者或 Azure Resource Manager 處理。

資料動作範例

為了進一步瞭解控制平面和資料平面動作的運作方式,讓我們來看看一個特定的範例。 Alice 已在訂用帳戶範圍上獲得擁有者角色的指派。 Bob 已獲指派在儲存體帳戶範圍內的儲存體 Blob 資料參與者角色。 此範例如下圖所示。

Role-based access control has been extended to support both control plane and data plane actions

Alice 的擁有者角色和 Bob 的儲存體 Blob 資料參與者角色具有下列動作:

擁有者

    動作
    *

儲存體 Blob 資料參與者

    動作
    Microsoft.Storage/storageAccounts/blobServices/containers/delete
    Microsoft.Storage/storageAccounts/blobServices/containers/read
    Microsoft.Storage/storageAccounts/blobServices/containers/write
    Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey/action
    DataActions
    Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete
    Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
    Microsoft.Storage/storageAccounts/blobServices/containers/blobs/move/action
    Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write

由於 Alice * 在訂用帳戶範圍中有萬用字元 () 動作,因此其許可權會繼承,讓他們能夠執行所有控制平面動作。 Alice 可以讀取、寫入和刪除容器。 不過,Alice 無法執行資料平面動作,而不需要採取額外的步驟。 例如,根據預設,Alice 無法讀取容器內的 Blob。 若要讀取 Blob,Alice 必須擷取儲存體存取金鑰,並使用它們來存取 Blob。

Bob 的許可權僅限於 ActionsDataActionsActions角色中指定的和。 根據角色,Bob 可以執行控制平面和資料平面動作。 例如,Bob 可以讀取、寫入和刪除指定儲存體帳戶中的容器,也可以讀取、寫入和刪除 blob。

如需適用于儲存體的控制和資料平面安全性的詳細資訊,請參閱Azure 儲存體安全性指南

哪些工具支援使用 Azure 角色來進行資料動作?

若要查看及使用資料動作,您必須擁有正確的工具或 Sdk 版本:

工具 版本
Azure PowerShell 1.1.0 或更新版本
Azure CLI 2.0.30 或更新版本
Azure for .NET 2.8.0-預覽或更新版本
Azure SDK for Go 15.0.0 或更新版本
適用於 Java 的 Azure 1.9.0 或更新版本
Azure for Python 0.40.0 或更新版本
適用於 Ruby 的 Azure SDK 0.17.1 或更新版本

若要在 REST API 中查看及使用資料動作,您必須將 API 版本 參數設定為下列版本或更新版本:

  • 2018-07-01

動作

Actions許可權會指定角色允許執行的控制項平面動作。 它是可識別 Azure 資源提供者之安全措施的字串集合。 以下是可在中使用的一些控制平面動作範例 Actions

動作字串 Description
*/read 授與所有 Azure 資源提供者的所有資源類型之讀取動作的存取權。
Microsoft.Compute/* 將存取權授與 Microsoft. 計算資源提供者中所有資源類型的所有動作。
Microsoft.Network/*/read 授與對 Microsoft 資源提供者中所有資源類型之讀取動作的存取權。
Microsoft.Compute/virtualMachines/* 授與虛擬機器的所有動作及其子資源類型的存取權。
microsoft.web/sites/restart/Action 授與重新啟動 Web 應用程式的存取權。

NotActions

NotActions許可權會指定在允許的控制項平面動作中減去或排除 Actions () 的萬用字元 *NotActions如果您想要允許的動作集合,可以更輕鬆地藉由 Actions 將萬用字元 () 來定義,請使用此許可權 * 。 角色所授與的存取 (有效的許可權) 是藉由從動作減去動作來計算 NotActionsActions

Actions - NotActions = Effective control plane permissions

下表顯示 CostManagement 萬用字元動作的兩個有效控制平面許可權範例:

動作 NotActions 有效的控制平面許可權
Microsoft.CostManagement/exports/* Microsoft.CostManagement/exports/action
Microsoft.CostManagement/exports/read
Microsoft.CostManagement/exports/write
Microsoft.CostManagement/exports/delete
Microsoft.CostManagement/exports/run/action
Microsoft.CostManagement/exports/* Microsoft.CostManagement/exports/delete Microsoft.CostManagement/exports/action
Microsoft.CostManagement/exports/read
Microsoft.CostManagement/exports/write
Microsoft.CostManagement/exports/run/action

注意

如果使用者被指派的角色會排除中的動作 NotActions ,並獲指派第二個角色來授與相同動作的存取權,則允許使用者執行該動作。 NotActions 不是拒絕規則-它只是一個便利的方式,可以在需要排除特定動作時建立一組允許的動作。

NotActions 和拒絕指派之間的差異

NotActions 和拒絕指派並不相同,而且有不同的用途。 NotActions 是一種便利的方式,可從萬用字元 () 動作中減去特定動作 *

拒絕指派會封鎖使用者執行指定的動作,即使角色指派授與他們存取權也一樣。 如需詳細資訊,請參閱了解 Azure 拒絕指派

DataActions

DataActions許可權會指定角色允許對該物件中的資料執行的資料平面動作。 例如,如果使用者有儲存體帳戶的讀取 Blob 資料存取權,則他們可讀取該儲存體帳戶中的 Blob。 以下是可在中使用的一些資料動作範例 DataActions

資料動作字串 Description
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read 傳回 Blob 或 Blob 清單。
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write 傳回寫入 Blob 的結果。
Microsoft.Storage/storageAccounts/queueServices/queues/messages/read 傳回訊息。
Microsoft.Storage/storageAccounts/queueServices/queues/messages/* 傳回訊息或寫入或刪除訊息的結果。

NotDataActions

NotDataActions許可權會指定在允許的資料平面動作中減去或排除 DataActions () 的萬用字元 *NotDataActions如果您想要允許的動作集合,可以更輕鬆地藉由 DataActions 將萬用字元 () 來定義,請使用此許可權 * 。 角色所授與的存取 (有效的許可權) 是藉由從動作減去動作來計算 NotDataActionsDataActions 。 每個資源提供者都會提供其各自的 Api 集合,以滿足資料動作。

DataActions - NotDataActions = Effective data plane permissions

下表顯示Microsoft 儲存體萬用字元動作的兩個有效日期平面許可權範例:

DataActions NotDataActions 有效的資料平面許可權
Microsoft.Storage/storageAccounts/queueServices/queues/messages/* Microsoft.Storage/storageAccounts/queueServices/queues/messages/read
Microsoft.Storage/storageAccounts/queueServices/queues/messages/write
Microsoft.Storage/storageAccounts/queueServices/queues/messages/delete
Microsoft.Storage/storageAccounts/queueServices/queues/messages/add/action
Microsoft.Storage/storageAccounts/queueServices/queues/messages/process/action
Microsoft.Storage/storageAccounts/queueServices/queues/messages/* Microsoft.Storage/storageAccounts/queueServices/queues/messages/delete
Microsoft.Storage/storageAccounts/queueServices/queues/messages/read
Microsoft.Storage/storageAccounts/queueServices/queues/messages/write
Microsoft.Storage/storageAccounts/queueServices/queues/messages/add/action
Microsoft.Storage/storageAccounts/queueServices/queues/messages/process/action

注意

如果使用者被指派了在中排除資料動作的角色 NotDataActions ,並指派第二個角色來授與相同資料動作的存取權,使用者就可以執行該資料動作。 NotDataActions 不是拒絕規則-它只是一個便利的方式,可以在需要排除特定資料動作時,建立一組允許的資料動作。

AssignableScopes

AssignableScopes屬性會指定 (管理群組、訂用帳戶或資源群組的範圍,) 可指派此角色定義的位置。 您可以只在需要管理群組、訂用帳戶或資源群組的管理群組、訂用帳戶或資源群組中,讓角色可供指派。 您必須至少使用一個管理群組、訂用帳戶或資源群組。

內建角色的 AssignableScopes 設定為根目錄範圍 ("/")。 根目錄範圍表示角色可指派給所有範圍。 有效的可指派範圍範例包括:

角色可供指派 範例
一個訂用帳戶 "/subscriptions/{subscriptionId1}"
兩個訂閱 "/subscriptions/{subscriptionId1}", "/subscriptions/{subscriptionId2}"
網路資源群組 "/subscriptions/{subscriptionId1}/resourceGroups/Network"
一個管理群組 "/providers/Microsoft.Management/managementGroups/{groupId1}"
管理群組和訂用帳戶 "/providers/Microsoft.Management/managementGroups/{groupId1}", /subscriptions/{subscriptionId1}",
所有範圍 (僅適用于內建角色) "/"

如需 AssignableScopes 自訂角色的詳細資訊,請參閱 AssignableScopes

下一步