使用 REST API 指派 Azure 角色

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

必要條件

若要指派 Azure 角色,您必須擁有:

指派 Azure 角色

若要指派角色,請使用 角色指派-建立 REST API 並指定安全性主體、角色定義和範圍。 若要呼叫這個 API,您必須具有 Microsoft.Authorization/roleAssignments/write 作業的存取權。 在內建角色中,只有擁有者使用者存取系統管理員會獲得這項作業的存取權。

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

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

  3. 從下列要求和本文著手:

    PUT https://management.azure.com/{scope}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}?api-version=2015-07-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 是參考 App Service 實例的資源提供者。 同樣地,您可以使用任何其他資源提供者,並指定範圍。 如需詳細資訊,請參閱 Azure 資源提供者和類型 ,以及支援的 azure 資源提供者作業

  5. 以角色指派的 GUID 識別碼取代 {roleAssignmentId}

  6. 在要求主體中,將 {scope} 取代為角色指派的範圍。

    影響範圍 類型
    providers/Microsoft.Management/managementGroups/{groupId1} 管理群組
    subscriptions/{subscriptionId1} 訂用帳戶
    subscriptions/{subscriptionId1}/resourceGroups/myresourcegroup1 資源群組
    subscriptions/{subscriptionId1}/resourceGroups/myresourcegroup1/providers/microsoft.web/sites/mysite1 資源
  7. {roleDefinitionId} 取代為角色定義識別碼。

  8. {principalId} 取代為使用者、群組或服務主體 (將獲得角色指派) 的物件識別碼。

下列要求和主體會將「 備份讀者 」角色指派給訂用帳戶範圍中的使用者:

PUT https://management.azure.com/subscriptions/{subscriptionId1}/providers/microsoft.authorization/roleassignments/{roleAssignmentId1}?api-version=2015-07-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}",
        "scope": "/subscriptions/{subscriptionId1}",
        "createdOn": "2020-05-06T23:55:23.7679147Z",
        "updatedOn": "2020-05-06T23:55:23.7679147Z",
        "createdBy": null,
        "updatedBy": "{updatedByObjectId1}"
    },
    "id": "/subscriptions/{subscriptionId1}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId1}",
    "type": "Microsoft.Authorization/roleAssignments",
    "name": "{roleAssignmentId1}"
}

新的服務主體

如果您建立新的服務主體,並立即嘗試將角色指派給該服務主體,在某些情況下,該角色指派可能會失敗。 例如,如果您建立新的受控識別,然後嘗試將角色指派給該服務主體,則角色指派可能會失敗。 此失敗的原因可能是複寫延遲。 服務主體建立在某個區域中;不過,角色指派可能發生在另一個尚未複寫服務主體的區域中。

若要解決此案例,請使用 角色指派-建立 REST API,並將 principalType 屬性設定為 ServicePrincipal 。 您也必須將設 apiVersion2018-09-01-preview 或更新版本。

PUT https://management.azure.com/{scope}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}?api-version=2018-09-01-preview
{
  "properties": {
    "roleDefinitionId": "/{scope}/providers/Microsoft.Authorization/roleDefinitions/{roleDefinitionId}",
    "principalId": "{principalId}",
    "principalType": "ServicePrincipal"
  }
}

下一步