使用角色來控制資源存取
適用於 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 : {/}
嘗試針對參與者和讀者角色執行相同動作,以查看允許和拒絕的動作。
內建角色
若要深入檢查 Microsoft Entra ID 中的 RBAC 和使用者角色,請參閱檢查 Microsoft Entra ID 中的 RBAC 和使用者角色。
什麼是角色定義?
角色定義是一個權限集合。 角色定義會列出角色可執行的作業,例如讀取、寫入及刪除。 它也會列出無法執行的作業或與基礎資料相關的作業。
如前所述,角色定義具有下列結構:
名稱 | 描述 |
---|---|
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
您可以量身打造 Actions
和 NotActions
屬性,以授與及拒絕所需的確切權限。 這些屬性的格式一律為:{Company}.{ProviderName}/{resourceType}/{action}
。
例如,以下是我們先前查看之三個角色的動作:
內建角色 | 動作 | NotActions |
---|---|---|
擁有者 (允許所有動作) | * |
- |
參與者 (允許寫入或刪除角色指派以外的所有動作) | * |
Microsoft.Authorization/*/Delete, Microsoft.Authorization/*/Write, Microsoft.Authorization/elevateAccess/Action |
讀者 (允許所有讀取動作) | */read |
- |
在 Actions
下的萬用字元 (*
) 作業,代表指派給這個角色的主體能執行所有動作;換句話說,這個角色可以管理所有項目,包括未來所定義的動作,例如 Azure 中新增資源類型。 針對讀者角色,只允許 read
動作。
NotActions
下的作業會從 Actions
扣除。 針對參與者角色,NotActions
就會移除此角色管理資源存取權的能力,也同時會移除指派資源存取權的能力。
DataActions 和 NotDataActions
資料作業會在 DataActions
和 NotDataActions
屬性中指定。 您可以個別指定資料作業與管理作業。 這可避免具有萬用字元 (*
) 的目前角色指派突然能夠存取資料。 以下是一些可在 DataActions
和 NotDataActions
中指定的資料作業:
- 讀取容器中的 Blob 清單
- 在容器中寫入儲存體 Blob
- 刪除佇列中的訊息
您只能將資料作業新增至 DataActions
和 NotDataActions
屬性。 資源提供者會透過將 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 |
從佇列中讀取訊息 |
可指派的範圍
定義 Actions 和 NotActions 屬性不足以完全實作角色。 您也必須適當地設定角色的範圍。
角色的 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;您無法在免費層中建立自訂角色。
您可以透過數種機制來建立新角色:
Microsoft Entra 系統管理中心:您可以使用 Microsoft Entra 系統管理中心來建立自訂角色,只要在左側功能表中的 [角色與系統管理員] 底下選取 [角色與系統管理員],然後選取 [新增自訂角色] 即可。
Azure 入口網站:您可以使用 Azure 入口網站,透過選取 [Microsoft Entra ID]>[角色與系統管理員]>[新增自訂角色],來建立自訂角色。
Azure PowerShell:您可以使用
New-AzRoleDefinition
Cmdlet 來定義新角色。Azure Graph API:您可以對圖形 API 使用 REST 呼叫,以程式設計方式建立新角色。
本課程模組的 [摘要] 區段包含這些方法的文件連結。