使用 REST API 指派 Azure 角色
Azure 角色型存取控制 (Azure RBAC) 是您用來管理 Azure 資源的存取權的授權系統。 若要授與存取權,您可以將角色指派給特定範圍的使用者、群組、服務主體或受控識別。 本文說明如何使用 REST API 指派角色。
必要條件
若要指派 Azure 角色,您必須具備:
Microsoft.Authorization/roleAssignments/write
許可權,例如角色型 存取控制 管理員 istrator 或 User Access 管理員 istrator
您必須使用下列版本:
2015-07-01
或更新版本指派 Azure 角色2018-09-01-preview
或更新版本將 Azure 角色指派給新的服務主體
如需詳細資訊,請參閱 Azure RBAC REST API 的 API 版本。
指派 Azure 角色
若要指派角色,請使用 角色指派 - 建立 REST API,並指定安全性主體、角色定義和範圍。 若要呼叫此 API,您必須能夠存取Microsoft.Authorization/roleAssignments/write
動作,例如角色型 存取控制 管理員 istrator。
使用 GUID 工具來產生將用於角色指派標識碼的唯一標識碼。 識別碼的格式如下:
00000000-0000-0000-0000-000000000000
從下列要求和本文開始:
PUT https://management.azure.com/{scope}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}?api-version=2022-04-01
{ "properties": { "roleDefinitionId": "/{scope}/providers/Microsoft.Authorization/roleDefinitions/{roleDefinitionId}", "principalId": "{principalId}" } }
在 URI 中,將 {scope} 取代為角色指派的範圍。
範圍 類型 providers/Microsoft.Management/managementGroups/{groupId1}
管理群組 subscriptions/{subscriptionId1}
訂用帳戶 subscriptions/{subscriptionId1}/resourceGroups/myresourcegroup1
資源群組 subscriptions/{subscriptionId1}/resourceGroups/myresourcegroup1/providers/microsoft.web/sites/mysite1
資源 在上述範例中,microsoft.web 是參考 App Service 實例的資源提供者。 同樣地,您可以使用任何其他資源提供者並指定範圍。 如需詳細資訊,請參閱 Azure 資源提供者和類型和 支援的 Azure 資源提供者作業。
將 {roleAssignmentId} 取代為角色指派的 GUID 標識符。
在要求本文中,將 {scope} 取代為與 URI 中相同的範圍。
將 {roleDefinitionId} 取代為角色定義標識符。
將 {principalId} 取代為將指派角色之使用者、群組或服務主體的物件標識符。
下列要求和本文會將 備份讀取者 角色指派給訂用帳戶範圍的使用者:
PUT https://management.azure.com/subscriptions/{subscriptionId1}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId1}?api-version=2022-04-01
{
"properties": {
"roleDefinitionId": "/subscriptions/{subscriptionId1}/providers/Microsoft.Authorization/roleDefinitions/a795c7a0-d4a2-40c1-ae25-d81f01202912",
"principalId": "{objectId1}"
}
}
下列顯示輸出的範例:
{
"properties": {
"roleDefinitionId": "/subscriptions/{subscriptionId1}/providers/Microsoft.Authorization/roleDefinitions/a795c7a0-d4a2-40c1-ae25-d81f01202912",
"principalId": "{objectId1}",
"principalType": "User",
"scope": "/subscriptions/{subscriptionId1}",
"condition": null,
"conditionVersion": null,
"createdOn": "2022-05-06T23:55:23.7679147Z",
"updatedOn": "2022-05-06T23:55:23.7679147Z",
"createdBy": null,
"updatedBy": "{updatedByObjectId1}",
"delegatedManagedIdentityResourceId": null,
"description": null
},
"id": "/subscriptions/{subscriptionId1}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId1}",
"type": "Microsoft.Authorization/roleAssignments",
"name": "{roleAssignmentId1}"
}
新的服務主體
如果您建立新的服務主體,並立即嘗試將角色指派給該服務主體,在某些情況下,該角色指派可能會失敗。 例如,如果您建立新的受控識別,然後嘗試將角色指派給該服務主體,角色指派可能會失敗。 此失敗的原因可能是復寫延遲。 服務主體會在一個區域中建立;不過,角色指派可能會發生在尚未復寫服務主體的不同區域中。
若要解決此案例,請使用角色 指派 - 建立 REST API,並將 屬性設定 principalType
為 ServicePrincipal
。 您也必須將 設定 apiVersion
為 2018-09-01-preview
或更新版本。 2022-04-01
是第一個穩定版本。
PUT https://management.azure.com/{scope}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}?api-version=2022-04-01
{
"properties": {
"roleDefinitionId": "/{scope}/providers/Microsoft.Authorization/roleDefinitions/{roleDefinitionId}",
"principalId": "{principalId}",
"principalType": "ServicePrincipal"
}
}