使用角色來控制資源存取

已完成

適用於 Azure 資源的內建角色 (使用 PowerShell)

Azure 提供數個內建角色,以涵蓋最常見的安全性案例。 若要了解角色的運作方式,讓我們檢查適用於所有資源類型的三個角色:

  • 擁有者:具有所有資源的完整存取權,包括將存取權委派給其他人的權限。
  • 參與者:可以建立及管理所有類型的 Azure 資源,但是不能將存取權授與其他人。
  • 讀者:可以檢視現有的 Azure 資源。

角色定義

每個角色都是 JavaScript 物件標記法 (JSON) 檔案中所定義的一組屬性。 此角色定義包括名稱識別碼描述。 其也包括角色允許的權限 (Actions)、拒絕的權限 (NotActions) 及範圍 (例如讀取權限)。

對於擁有者角色,這意味著所有動作 (以星號 (*) 表示)、沒有拒絕的動作,以及所有範圍 (以斜線 (/) 表示)。

您可以使用 PowerShell Get-AzRoleDefinition Owner Cmdlet 來取得此資訊。

Get-AzRoleDefinition Owner

此程式碼應該會產生下列輸出:

Name             : Owner
Id               : 8e3af657-a8ff-443c-a75c-2fe8c4bcb635
IsCustom         : False
Description      : Lets you manage everything, including access to resources.
Actions          : {*}
NotActions       : {}
DataActions      : {}
NotDataActions   : {}
AssignableScopes : {/}

嘗試針對參與者讀者角色執行相同動作,以查看允許和拒絕的動作。

檢查內建角色

接下來,讓我們探索一些其他內建角色。

  1. 開啟 Azure 入口網站

  2. 在 Azure 首頁上,在左側功能表中選取 [資源群組]

  3. 選取資源群組。 隨即會出現 [資源群組] 窗格。

  4. 請在左側功能表窗格中,選取 [存取控制 (IAM)]。 隨即會顯示您資源群組的 [存取控制 (IAM)]

  5. 在內部功能表列上,選取 [角色] 索引標籤 (如下所示),即可查看可用角色的清單。

    Screenshot showing the roles in the Azure portal.

什麼是角色定義?

角色定義是一個權限集合。 角色定義會列出角色可執行的作業,例如讀取、寫入及刪除。 它也會列出無法執行的作業或與基礎資料相關的作業。

如前所述,角色定義具有下列結構:

名稱 描述
Id 由 Azure 所指派角色的唯一識別碼
IsCustom 如果是自訂角色,則為 True,如果是內建角色,則為 False
Description 可閱讀的角色描述
Actions [] 允許的權限;* 表示全部
NotActions [] 拒絕的權限
DataActions [] 套用到資料的特定允許權限,例如 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
NotDataActions [] 套用到資料的特定拒絕權限。
AssignableScopes [] 此角色的適用範圍;/ 表示全域,但可以觸及階層式樹狀結構

在角色型存取控制 (RBAC) 中使用或從底層 API 使用時,此結構會以 JSON 表示。 例如,以下是 JSON 格式的參與者角色定義。

{
  "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"
  ],
  "DataActions": [],
  "NotDataActions": [],
  "AssignableScopes": [
    "/"
  ]
}

Actions 和 NotActions

您可以量身打造 ActionsNotActions 屬性,以授與及拒絕所需的確切權限。 這些屬性的格式一律為:{Company}.{ProviderName}/{resourceType}/{action}

例如,以下是我們先前查看之三個角色的動作:

內建角色 動作 NotActions
擁有者 (允許所有動作) * -
參與者 (允許寫入或刪除角色指派以外的所有動作) * Microsoft.Authorization/*/Delete, Microsoft.Authorization/*/Write, Microsoft.Authorization/elevateAccess/Action
讀者 (允許所有讀取動作) */read -

Actions 下的萬用字元 (*) 作業,代表指派給這個角色的主體能執行所有動作;換句話說,這個角色可以管理所有項目,包含未來所定義的動作,例如 Azure 新增資源類型。 針對讀者角色,只允許 read 動作。

NotActions 下的作業會從 Actions 扣除。 針對參與者角色,NotActions 就會移除此角色管理資源存取權的能力,也同時會移除指派資源存取權的能力。

DataActions 和 NotDataActions

資料作業會在 DataActionsNotDataActions 屬性中指定。 您可以個別指定資料作業與管理作業。 這可避免具有萬用字元 (*) 的目前角色指派突然能夠存取資料。 以下是一些可在 DataActionsNotDataActions 中指定的資料作業:

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

您只能將資料作業新增至 DataActionsNotDataActions 屬性。 資源提供者會透過將 isDataAction 屬性設為 true,來識別哪些作業是資料作業。 沒有資料作業的角色可以從角色定義中省略這些屬性。

這些動作的運作方式與其管理表親完全相同。 您可以指定想要允許的動作 (或 * 代表全部),然後提供要在 NotDataActions 集合中移除的特定動作清單。 以下提供一些範例;您可以在資源提供者文件中找到動作和資料動作的完整清單

資料作業 描述
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete 刪除 Blob 資料
Microsoft.Compute/virtualMachines/login/action 以一般使用者身分登入 VM
Microsoft.EventHub/namespaces/messages/send/action 在事件中樞上傳送訊息
Microsoft.Storage/storageAccounts/fileServices/fileshares/files/read 傳回檔案/資料夾或檔案/資料夾的清單
Microsoft.Storage/storageAccounts/queueServices/queues/messages/read 從佇列中讀取訊息

可指派的範圍

定義 ActionsNotActions 屬性不足以完全實作角色。 您也必須適當地設定角色的範圍。

角色的 AssignableScopes 屬性會指定該角色可供指派的範圍 (訂用帳戶、資源群組或資源)。 您可以讓自訂角色僅能指派給需要該角色的訂用帳戶或資源群組,從而避免干擾其餘訂用帳戶或資源群組的使用者體驗。

以下列出一些範例:

目標 使用範圍
限制為某個訂用帳戶 "/subscriptions/{sub-id}"
限制為某個特定訂用帳戶上的特定資源群組 "/subscriptions/{sub-id}/resourceGroups/{rg-name}"
限制為特定的資源 "/subscriptions/{sub-id}/resourceGroups/{rg-name}/{resource-name}"
讓角色可在兩個訂用帳戶中進行指派 "/subscriptions/{sub-id}", "/subscriptions/{sub-id}"

建立角色

Microsoft Entra ID 隨附數個內建角色,其可能涵蓋 99% 您想要執行的動作。 如果可能,建議您優先使用內建角色。 不過,您可以建立自訂角色 (如果有必要)。

注意

建立自訂角色需要 Microsoft Entra ID P1 或 P2;您無法在免費層中建立自訂角色。

您可以透過數種機制來建立新角色:

  • Azure 入口網站:您可以使用 Azure 入口網站,透過選取 [Microsoft Entra ID]>[角色與系統管理員]>[新增自訂角色],來建立自訂角色。

  • Azure PowerShell:您可以使用 New-AzRoleDefinition Cmdlet 來定義新角色。

  • Azure Graph API:您可以對圖形 API 使用 REST 呼叫,以程式設計方式建立新角色。

本課程模組的 [摘要] 區段包含這三種方法的文件連結。

檢定您的知識

1.

Action 會在角色定義中提供哪些資訊?

2.

下列哪一個選項會將角色的「範圍」設定為資源群組 myResourceGroup

3.

如何在角色定義中使用 NotActions