Utilizar o PIM do Azure para gerir o acesso ativo com a API REST

O Azure Privileged Identity Management (PIM) permite-lhe limitar o acesso de administrador permanente a funções privilegiadas, descobrir quem tem acesso e rever o acesso privilegiado. Este artigo descreve as formas comuns de gerir o acesso com a API REST.

Listar atribuições ativas

Para listar atribuições de funções ativas (acesso à lista), pode utilizar uma das Instâncias de Agendamento de Atribuição de Funções – Lista para Agendamentos de Âmbito ou Atribuição de Funções – Lista para APIs REST de Âmbito. Para refinar os resultados, especifique um âmbito e um filtro opcional. Para chamar a API, tem de ter acesso à Microsoft.Authorization/roleAssignments/read operação no âmbito especificado. Todas as funções incorporadas têm acesso a esta operação.

Importante

A diferença entre agendas e instâncias de agenda é que, embora as instâncias de agendamento incluam apenas atribuições que estão ativas no momento atual, as agendas também incluem atribuições que ficarão ativas no futuro.

  1. Comece com o seguinte pedido:

    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. No URI, substitua {scope} pelo âmbito para o qual pretende listar as atribuições de funções.

    Âmbito Tipo
    providers/Microsoft.Management/managementGroups/{mg-name} Grupo de Gestão
    subscriptions/{subscriptionId} Subscrição
    subscriptions/{subscriptionId}/resourceGroups/myresourcegroup1 Grupo de recursos
    subscriptions/{subscriptionId}/resourceGroups/myresourcegroup1/providers/Microsoft.Web/sites/mysite1 Recurso
  3. Substitua {filter} pela condição que pretende aplicar para filtrar a lista de atribuições de funções.

    Filtro Description
    $filter=atScope() Liste atribuições de funções apenas para o âmbito especificado, não incluindo as atribuições de funções em subâmbitos.
    $filter=principalId%20eq%20'{objectId}' Listar atribuições de funções para um utilizador, grupo ou principal de serviço especificado.
    $filter=roleDefinitionId%20eq%20'{roleDefinitionId}' Listar atribuições de funções para uma definição de função especificada.
    $filter=assignedTo('{objectId}') Listar atribuições de funções para um utilizador especificado, incluindo as herdadas de grupos.
    $filter=asTarget() Liste atribuições de funções para o utilizador ou principal de serviço atual, incluindo as herdadas de grupos.
    $filter=assignedTo('{objectId}')+and+atScope() Listar atribuições de funções para um utilizador especificado, incluindo as herdadas de grupos apenas para o âmbito especificado, sem incluir as atribuições de funções em subâmbitos.

Conceder atribuição ativa

Para criar uma atribuição de função ativa (conceder acesso), utilize os Pedidos de Agendamento de Atribuição de Funções – Criar API REST e especifique o principal de segurança, a definição de função, a agenda, requestType = AdminAssign e o âmbito. Para chamar esta API, tem de ter acesso à Microsoft.Authorization/roleAssignments/write operação. Das funções incorporadas, apenas o Proprietário e o Administrador de Acesso de Utilizadores têm acesso a esta operação.

  1. Utilize a API REST De Definições de Função – Listar ou veja Funções incorporadas para obter o identificador da definição de função que pretende atribuir.

  2. Utilize uma ferramenta GUID para gerar um identificador exclusivo que será utilizado para o identificador de atribuição de função. O identificador tem o formato: 00000000-0000-0000-0000-000000000000

  3. Comece com o seguinte pedido e corpo:

    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. No URI, substitua {scope} pelo âmbito da atribuição de função.

    Âmbito Tipo
    providers/Microsoft.Management/managementGroups/{mg-name} Grupo de Gestão
    subscriptions/{subscriptionId} Subscrição
    subscriptions/{subscriptionId}/resourceGroups/myresourcegroup1 Grupo de recursos
    subscriptions/{subscriptionId}/resourceGroups/myresourcegroup1/providers/Microsoft.Web/sites/mysite1 Recurso
  5. Substitua {roleAssignmentScheduleRequestName} pelo identificador GUID da atribuição de função.

  6. No corpo do pedido, substitua {subscriptionId} pelo identificador da subscrição.

  7. Substitua {roleDefinitionId} pelo identificador de definição de função.

  8. Substitua {principalId} pelo identificador de objeto do utilizador, grupo ou principal de serviço ao qual será atribuída a função.

Remover atribuição ativa

Para remover uma atribuição de função ativa (remover acesso), utilize os Pedidos de Agendamento de Atribuição de Funções – Criar API REST para criar um novo pedido para revogar a atribuição e especificar o principal de segurança, a definição de função, requestType = AdminRemove e o âmbito. Para chamar esta API, tem de ter acesso à Microsoft.Authorization/roleAssignments/write operação. Das funções incorporadas, apenas o Proprietário e o Administrador de Acesso de Utilizadores têm acesso a esta operação.

  1. Utilize uma ferramenta GUID para gerar um identificador exclusivo que será utilizado para o identificador de atribuição de função. O identificador tem o formato: 00000000-0000-0000-0000-000000000000

  2. Comece com o seguinte pedido:

    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. No URI, substitua {scope} pelo âmbito para remover a atribuição de função.

    Âmbito Tipo
    providers/Microsoft.Management/managementGroups/{mg-name} Grupo de Gestão
    subscriptions/{subscriptionId} Subscrição
    subscriptions/{subscriptionId}/resourceGroups/myresourcegroup1 Grupo de recursos
    subscriptions/{subscriptionId}/resourceGroups/myresourcegroup1/ providers/Microsoft.Web/sites/mysite1 Recurso
  4. Substitua {roleAssignmentScheduleRequestName} pelo identificador GUID da atribuição de função.

Ativar uma atribuição de função elegível

Para ativar uma atribuição de função elegível (obter acesso ativado), utilize os Pedidos de Agendamento de Atribuição de Funções – Criar API REST para criar um novo pedido e especificar o principal de segurança, a definição de função, requestType = SelfActivate e o âmbito. Para chamar esta API, tem de ter uma atribuição de função elegível no âmbito.

  1. Utilize uma ferramenta GUID para gerar um identificador exclusivo que será utilizado para o identificador de atribuição de função. O identificador tem o formato: 00000000-0000-0000-0000-000000000000

  2. [Opcional] Escolha um RoleEligibilitySchedule que pretenda ativar e obtenha o RoleEligibilityScheduleId da API Agendamentos de Elegibilidade de Funções para transmitir como .LinkedRoleEligibilityScheduleId Isto é opcional e, se não for transmitido, o sistema irá escolher um RoleEligibilitySchedule.

  3. Comece com o seguinte pedido:

    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. No URI, substitua {scope} pelo âmbito para remover a atribuição de função.

    Âmbito Tipo
    providers/Microsoft.Management/managementGroups/{mg-name} Grupo de Gestão
    subscriptions/{subscriptionId} Subscrição
    subscriptions/{subscriptionId}/resourceGroups/myresourcegroup1 Grupo de recursos
    subscriptions/{subscriptionId}/resourceGroups/myresourcegroup1/ providers/Microsoft.Web/sites/mysite1 Recurso
  5. Substitua {roleAssignmentScheduleRequestName} pelo identificador GUID da atribuição de função.

Desativar uma atribuição de função ativa

Para anular a ativação de uma atribuição de função ativada (remover o acesso ativado), utilize os Pedidos de Agendamento de Atribuição de Funções – Criar API REST para criar um novo pedido e especificar o principal de segurança, a definição de função, requestType = SelfDeactivate e o âmbito. Para chamar esta API, tem de ter uma atribuição de função ativada no âmbito.

  1. Utilize uma ferramenta GUID para gerar um identificador exclusivo que será utilizado para o identificador de atribuição de função. O identificador tem o formato: 00000000-0000-0000-0000-000000000000

  2. Comece com o seguinte pedido:

    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. No URI, substitua {scope} pelo âmbito para remover a atribuição de função.

    Âmbito Tipo
    providers/Microsoft.Management/managementGroups/{mg-name} Grupo de Gestão
    subscriptions/{subscriptionId} Subscrição
    subscriptions/{subscriptionId}/resourceGroups/myresourcegroup1 Grupo de recursos
    subscriptions/{subscriptionId}/resourceGroups/myresourcegroup1/ providers/Microsoft.Web/sites/mysite1 Recurso
  4. Substitua {roleAssignmentScheduleRequestName} pelo identificador GUID da atribuição de função.

Just-Enough-Access (JEA)

Se um utilizador tiver uma atribuição de função elegível num recurso (principal), pode optar por ativar a função num âmbito ao nível subordinado do recurso principal em vez de todo o âmbito principal. Por exemplo, se um utilizador tiver Contributor uma função elegível numa subscrição, pode ativar a função ao nível do grupo de recursos subordinado da subscrição.

Para obter uma lista de todos os subordinados de um recurso no qual tem acesso elegível, pode utilizar a API de Recursos Subordinados Elegíveis .

  1. Comece com o seguinte pedido:

    GET https://management.azure.com/{scope}/providers/Microsoft.Authorization/eligibleChildResources?api-version=2020-10-01&$filter={filter}
    
  2. No URI, substitua {scope} pelo âmbito para o qual pretende listar as atribuições de funções.

    Âmbito Tipo
    providers/Microsoft.Management/managementGroups/{mg-name} Grupo de Gestão
    subscriptions/{subscriptionId} Subscrição
    subscriptions/{subscriptionId}/resourceGroups/myresourcegroup1 Grupo de recursos
  3. Substitua {filter} pela condição que pretende aplicar para filtrar a lista de atribuição de funções.

    Filtro Description
    $filter=resourceType+eq+'Subscription' Listar recursos do tipo = "Subscrição".
    $filter=$filter=resourceType+eq+'subscription'+or+resourceType+eq+'resourcegroup'' Listar recursos do tipo = "Subscrição" ou tipo = "ResourceGroup".
  4. Utilizar o id de qualquer recurso subordinado para utilizar como o scope para a ativação RoleAssignmentScheduleRequest

Erros comuns devolvidos para um novo pedido

Segue-se uma lista de erros comuns que pode encontrar ao criar um novo pedido e como os mitigar.

Mensagem de Erro Explanação Mitigação
code: RoleAssignmentExists
message: A atribuição de função já existe.
Já existe uma atribuição de função semelhante Pode GET esta atribuição de função e verificar a respetiva agenda.
code: RoleAssignmentRequestPolicyValidationFailed
message: As seguintes regras de política falharam: ["ExpirationRule"]
O ScheduleInfo especificado no pedido excede a duração máxima permitida Pode GET utilizar RoleManagementPolicy para este procedimento RoleDefinitionId e verificar o RoleManagementPolicyExpirationRule
code: RoleAssignmentRequestPolicyValidationFailed
message: As seguintes regras de política falharam: ["JustificationRule"]
Tem de especificar um Justification no corpo do pedido Pode GET utilizar RoleManagementPolicy para este procedimento RoleDefinitionId e verificar o RoleManagementPolicyEnablementRule
code: RoleAssignmentRequestPolicyValidationFailed
message: As seguintes regras de política falharam: ["EligibilityRule"]
Não existe uma função válida RoleEligibilityScheduleInstance para ativar esta função Um administrador de recursos tem de criar um RoleEligibilityScheduleRequest para este principal
code: RoleAssignmentRequestPolicyValidationFailed
message: As seguintes regras de política falharam: ["TicketingRule"]
Tem de especificar um TicketInfo no corpo do pedido Pode GET utilizar RoleManagementPolicy para este procedimento RoleDefinitionId e verificar o RoleManagementPolicyEnablementRule
code: RoleAssignmentRequestPolicyValidationFailed
message: As seguintes regras de política falharam: ["MfaRule"]
Tem de concluir o Multi-Factor Authentication do Azure para submeter este pedido Pode GET utilizar RoleManagementPolicy para este procedimento RoleDefinitionId e verificar o RoleManagementPolicyEnablementRule