使用 REST API 指派 Azure 角色

Azure 角色型存取控制 (Azure RBAC) 是您用來管理 Azure 資源的存取權的授權系統。 若要授與存取權,您可以將角色指派給特定範圍的使用者、群組、服務主體或受控識別。 本文說明如何使用 REST API 指派角色。

必要條件

若要指派 Azure 角色,您必須具備:

您必須使用下列版本:

  • 2015-07-01 或更新版本指派 Azure 角色
  • 2018-09-01-preview 或更新版本將 Azure 角色指派給新的服務主體

如需詳細資訊,請參閱 Azure RBAC REST API 的 API 版本。

指派 Azure 角色

若要指派角色,請使用 角色指派 - 建立 REST API,並指定安全性主體、角色定義和範圍。 若要呼叫此 API,您必須能夠存取Microsoft.Authorization/roleAssignments/write動作,例如角色型 存取控制 管理員 istrator

  1. 使用角色 定義 - 列出 REST API,或查看 內建角色 ,以取得您想要指派的角色定義識別碼。

  2. 使用 GUID 工具來產生將用於角色指派標識碼的唯一標識碼。 識別碼的格式如下: 00000000-0000-0000-0000-000000000000

  3. 從下列要求和本文開始:

    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}"
      }
    }
    
  4. 在 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 資源提供者作業

  5. 將 {roleAssignmentId} 取代為角色指派的 GUID 標識符。

  6. 在要求本文中,將 {scope} 取代為與 URI 中相同的範圍。

  7. 將 {roleDefinitionId} 取代為角色定義標識符。

  8. 將 {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,並將 屬性設定 principalTypeServicePrincipal。 您也必須將 設定 apiVersion2018-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"
  }
}

下一步