Поделиться через


Использование Azure PIM для управления активным доступом с помощью REST API

Azure управление привилегированными пользователями (PIM) позволяет ограничить постоянный доступ администратора к привилегированным ролям, определить, кто имеет доступ, и проверить привилегированный доступ. В этой статье описываются распространенные способы управления доступом с помощью REST API.

Вывод списка активных назначений

Чтобы получить список активных назначений ролей (доступ к списку), можно использовать один из экземпляров расписания ролей — список для области или Расписания назначения ролей — список для области REST API. Чтобы уточнить результаты, укажите область и дополнительный фильтр. Чтобы вызвать API, нужен доступ к операции Microsoft.Authorization/roleAssignments/read в указанной области. Всем встроенным ролям предоставляется доступ к этой операции.

Важно!

Разница между расписаниями и экземплярами расписания заключается в том, что в то время как экземпляры расписания включают только те назначения, которые активны в текущее время, расписания также включают назначения, которые станут активными в будущем.

  1. Можете начать со следующего запроса:

    GET https://management.azure.com/{scope}/providers/Microsoft.Authorization/roleAssignmentScheduleInstances?api-version=2020-10-01&$filter={filter}
    
    GET https://management.azure.com/{scope}/providers/Microsoft.Authorization/roleAssignmentSchedules?api-version=2020-10-01&$filter={filter}
    
  2. Внутри URI замените {scope} областью, для которой требуется вывести список назначений ролей.

    Область Тип
    providers/Microsoft.Management/managementGroups/{mg-name} Группа управления
    subscriptions/{subscriptionId} Подписка
    subscriptions/{subscriptionId}/resourceGroups/myresourcegroup1 Группа ресурсов
    subscriptions/{subscriptionId}/resourceGroups/myresourcegroup1/providers/Microsoft.Web/sites/mysite1 Ресурс
  3. Замените {filter} условием, по которому требуется отфильтровать список назначений ролей.

    Filter Описание
    $filter=atScope() Вывод списка назначений ролей только для определенной области без учета внутренних областей.
    $filter=principalId%20eq%20'{objectId}' Вывод списка назначений ролей для определенного пользователя, группы или субъекта-службы.
    $filter=roleDefinitionId%20eq%20'{roleDefinitionId}' Перечисление назначений ролей для указанного определения роли.
    $filter=assignedTo('{objectId}') Вывод списка назначений ролей для определенного пользователя, включая унаследованные от групп.
    $filter=asTarget() Перечисление назначений ролей для текущего пользователя или субъекта-службы, включая наследуемые от групп.
    $filter=assignedTo('{objectId}')+and+atScope() Перечисление назначений ролей для указанного пользователя, включая наследуемые от групп только для указанных область, не включая назначения ролей в подобласти.

Предоставление активного назначения

Чтобы создать активное назначение роли (предоставить доступ), используйте запросы расписания назначения ролей — создание REST API и укажите субъект безопасности, определение роли, расписание, requestType = AdminAssign и область. Чтобы вызвать этот 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/roleAssignmentScheduleRequests/{roleAssignmentScheduleRequestName}?api-version=2020-10-01
    
    {
      "Properties": {
        "RoleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/{roleDefinitionId}",
        "PrincipalId": "{principalId}",
        "RequestType": "AdminAssign",
        "ScheduleInfo": {
          "StartDateTime": "2020-09-09T21:31:27.91Z",
          "Expiration": {
            "Type": "AfterDuration", // Values: AfterDuration, AfterDateTime, NoExpiration
            "EndDateTime": null,
            "Duration": "P30D" // Use ISO 8601 format
          }
        }
      }
    }
    
  4. Внутри URI замените {scope} областью для назначения роли.

    Область Тип
    providers/Microsoft.Management/managementGroups/{mg-name} Группа управления
    subscriptions/{subscriptionId} Подписка
    subscriptions/{subscriptionId}/resourceGroups/myresourcegroup1 Группа ресурсов
    subscriptions/{subscriptionId}/resourceGroups/myresourcegroup1/providers/Microsoft.Web/sites/mysite1 Ресурс
  5. Замените {roleAssignmentScheduleRequestName} идентификатором GUID назначения роли.

  6. В тексте запроса замените {subscriptionId} своим идентификатором подписки.

  7. Замените {roleDefinitionId} идентификатором определения роли.

  8. Замените {principalId} идентификатором объекта для пользователя, группы или субъекта-службы, которым будет назначена роль.

Удаление активного назначения

Чтобы удалить активное назначение роли (удалить доступ), используйте REST API Расписания назначения ролей — создание REST API, чтобы создать новый запрос на отмену назначения и указать субъект безопасности, определение роли, requestType = AdminRemove и область. Чтобы вызвать этот API, нужен доступ к операции Microsoft.Authorization/roleAssignments/write. Из встроенных ролей эту операцию могут выполнять только владелец и администратор доступа пользователей.

  1. Используйте средство GUID для создания уникального идентификатора, который будет использоваться для назначения роли. Этот идентификатор имеет следующий формат: 00000000-0000-0000-0000-000000000000

  2. Можете начать со следующего запроса:

    PUT https://management.azure.com/{scope}/providers/Microsoft.Authorization/roleAssignmentScheduleRequests/{roleAssignmentScheduleRequestName}?api-version=2020-10-01
    
    {
      "Properties": {
        "RoleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/{roleDefinitionId}",
        "PrincipalId": "{principalId}",
        "RequestType": "AdminRemove"
        }
    }
    
  3. Внутри URI замените {scope} областью для удаления назначения роли.

    Область Тип
    providers/Microsoft.Management/managementGroups/{mg-name} Группа управления
    subscriptions/{subscriptionId} Подписка
    subscriptions/{subscriptionId}/resourceGroups/myresourcegroup1 Группа ресурсов
    subscriptions/{subscriptionId}/resourceGroups/myresourcegroup1/ providers/Microsoft.Web/sites/mysite1 Ресурс
  4. Замените {roleAssignmentScheduleRequestName} идентификатором GUID назначения роли.

Активация назначения соответствующих ролей

Чтобы активировать допустимое назначение роли (получить активированный доступ), используйте запросы расписания назначения ролей — создание REST API, чтобы создать новый запрос и указать субъект безопасности, определение роли, requestType = SelfActivate и область. Чтобы вызвать этот API, необходимо иметь соответствующее назначение роли в область.

  1. Используйте средство GUID для создания уникального идентификатора, который будет использоваться для назначения роли. Этот идентификатор имеет следующий формат: 00000000-0000-0000-0000-000000000000

  2. [Необязательно] Выберите , RoleEligibilitySchedule который вы хотите активировать, и получите RoleEligibilityScheduleId из API ролей для передачи в качестве LinkedRoleEligibilityScheduleId. Это необязательный параметр, и если он не передан, система выберет .RoleEligibilitySchedule

  3. Можете начать со следующего запроса:

    PUT https://management.azure.com/{scope}/providers/Microsoft.Authorization/roleAssignmentScheduleRequests/{roleAssignmentScheduleRequestName}?api-version=2020-10-01
    
     {
       "Properties": {
         "RoleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/{roleDefinitionId}",
         "PrincipalId": "{principalId}",
         "RequestType": "SelfActivate",
         "ScheduleInfo": {
           "StartDateTime": "2020-09-09T21:31:27.91Z",
           "Expiration": {
             "Type": "AfterDuration", // Values: AfterDuration, AfterDateTime, NoExpiration
             "EndDateTime": null,
             "Duration": "PT8H" // Use ISO 8601 format
           }
         },
         "LinkedRoleEligibilityScheduleId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleAssignmentSchedules/{roleAssignmentScheduleId}" //Optional
       }
     }
    
  4. Внутри URI замените {scope} областью для удаления назначения роли.

    Область Тип
    providers/Microsoft.Management/managementGroups/{mg-name} Группа управления
    subscriptions/{subscriptionId} Подписка
    subscriptions/{subscriptionId}/resourceGroups/myresourcegroup1 Группа ресурсов
    subscriptions/{subscriptionId}/resourceGroups/myresourcegroup1/ providers/Microsoft.Web/sites/mysite1 Ресурс
  5. Замените {roleAssignmentScheduleRequestName} идентификатором GUID назначения роли.

Деактивация активного назначения ролей

Чтобы отменить активированное назначение ролей (удалить активированный доступ), используйте REST API Расписания назначения ролей — создание REST API, чтобы создать новый запрос и указать субъект безопасности, определение роли, requestType = SelfDeactivate и область. Чтобы вызвать этот API, необходимо иметь активированное назначение роли в область.

  1. Используйте средство GUID для создания уникального идентификатора, который будет использоваться для назначения роли. Этот идентификатор имеет следующий формат: 00000000-0000-0000-0000-000000000000

  2. Можете начать со следующего запроса:

    PUT https://management.azure.com/{scope}/providers/Microsoft.Authorization/roleAssignmentScheduleRequests/{roleAssignmentScheduleRequestName}?api-version=2020-10-01
    
     {
       "Properties": {
         "RoleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/{roleDefinitionId}",
         "PrincipalId": "{principalId}",
         "RequestType": "SelfDeactivate"        
       }
     }
    
  3. Внутри URI замените {scope} областью для удаления назначения роли.

    Область Тип
    providers/Microsoft.Management/managementGroups/{mg-name} Группа управления
    subscriptions/{subscriptionId} Подписка
    subscriptions/{subscriptionId}/resourceGroups/myresourcegroup1 Группа ресурсов
    subscriptions/{subscriptionId}/resourceGroups/myresourcegroup1/ providers/Microsoft.Web/sites/mysite1 Ресурс
  4. Замените {roleAssignmentScheduleRequestName} идентификатором GUID назначения роли.

Just-Enough-Access (JEA)

Если у пользователя есть соответствующее назначение роли в ресурсе (родительском), он может активировать роль на дочернем уровне область родительского ресурса, а не на всем родительском область. Например, если пользователь имеет Contributor подходящую роль в подписке, он может активировать роль на уровне дочерней группы ресурсов подписки.

Чтобы получить список всех дочерних элементов ресурса, к которому у вас есть соответствующий доступ, можно использовать API подходящих дочерних ресурсов .

  1. Можете начать со следующего запроса:

    GET https://management.azure.com/{scope}/providers/Microsoft.Authorization/eligibleChildResources?api-version=2020-10-01&$filter={filter}
    
  2. Внутри URI замените {scope} областью, для которой требуется вывести список назначений ролей.

    Область Тип
    providers/Microsoft.Management/managementGroups/{mg-name} Группа управления
    subscriptions/{subscriptionId} Подписка
    subscriptions/{subscriptionId}/resourceGroups/myresourcegroup1 Группа ресурсов
  3. Замените {filter} условием, по которому требуется отфильтровать список назначений ролей.

    Filter Описание
    $filter=resourceType+eq+'Subscription' Список ресурсов типа = "Подписка".
    $filter=$filter=resourceType+eq+'subscription'+or+resourceType+eq+'resourcegroup'' Список ресурсов типа = "Подписка" или тип = "Группа ресурсов".
  4. id Используйте для любого дочернего ресурса, который будет использоваться в scope качестве для активации.RoleAssignmentScheduleRequest

Распространенные ошибки, возвращаемые для нового запроса

Ниже приведен список распространенных ошибок, которые могут возникнуть при создании нового запроса, и способы их устранения.

Сообщение об ошибке Экспланантность Меры по снижению риска
code: RoleAssignmentExists
message: назначение роли уже существует.
Аналогичное назначение роли уже существует Вы можете GET назначить эту роль и проверить ее расписание.
code: RoleAssignmentRequestPolicyValidationFailed
message: не удалось выполнить следующие правила политики: ["ExpirationRule"]
Значение , ScheduleInfo указанное в запросе, превышает максимально допустимую длительность. Для этого RoleDefinitionId можно GET использовать RoleManagementPolicy и проверкаRoleManagementPolicyExpirationRule
code: RoleAssignmentRequestPolicyValidationFailed
message: не удалось выполнить следующие правила политики: ["JustificationRule"]
Необходимо указать Justification в тексте запроса Для этого RoleDefinitionId можно GET использовать RoleManagementPolicy и проверкаRoleManagementPolicyEnablementRule
code: RoleAssignmentRequestPolicyValidationFailed
message: не удалось выполнить следующие правила политики: ["EligibilityRule"]
Не существует допустимого RoleEligibilityScheduleInstance значения для активации этой роли. Администратор ресурсов должен создать RoleEligibilityScheduleRequest для этого субъекта
code: RoleAssignmentRequestPolicyValidationFailed
message: не удалось выполнить следующие правила политики: ["TicketingRule"]
Необходимо указать TicketInfo в тексте запроса Для этого RoleDefinitionId можно GET использовать RoleManagementPolicy и проверкаRoleManagementPolicyEnablementRule
code: RoleAssignmentRequestPolicyValidationFailed
message: не удалось выполнить следующие правила политики: ["MfaRule"]
Для отправки этого запроса необходимо выполнить Многофакторную идентификацию Azure. Для этого RoleDefinitionId можно GET использовать RoleManagementPolicy и проверкаRoleManagementPolicyEnablementRule