Compartilhar via


Use o Azure Policy para impor a execução do trabalho no Hybrid Runbook Worker

Importante

O Hybrid Runbook Worker do Usuário baseado no Agente de Automação do Azure (Windows e Linux) foi desativado em 31 de agosto de 2024 e não tem mais suporte. Siga as diretrizes sobre como migrar de Hybrid Runbook Workers baseados em Agente existentes para Hybrid Runbook Workers baseados em Extensão.

A inicialização de um runbook em um Hybrid Runbook Worker usa uma opção Executar em que permite especificar o nome de um grupo do Hybrid Runbook Worker ao iniciar a partir do portal do Azure, com o Azure PowerShell ou a API REST. Quando um grupo é especificado, um dos trabalhos desse grupo recupera e executa o runbook. Se o runbook não especificar essa opção, a Automação do Azure executará o runbook na área restrita do Azure.

Qualquer pessoa em sua organização que seja membro do Operador do Trabalho de Automação ou superior pode criar trabalhos de runbook. Para gerenciar a execução do runbook direcionando um grupo do Hybrid Runbook Worker em sua conta de automação, você pode usar o Azure Policy. Isso ajuda a impor os padrões organizacionais e a garantir que seus trabalhos de automação sejam controlados e gerenciados por pessoas designadas, sendo que ninguém pode executar um runbook em uma área restrita do Azure, somente em Hybrid Runbook Workers.

Uma definição personalizada do Azure Policy está incluída neste artigo para ajudá-lo a controlar essas atividades usando as seguintes operações da API REST de automação. Especificamente:

Essa política é baseada na propriedade runOn. A política valida o valor da propriedade que deve conter o nome de um grupo existente do Hybrid Runbook Worker. Se o valor for nulo, ele será interpretado como a solicitação de criação para o trabalho, a agenda de trabalho ou o webhook será destinado à área restrita do Azure e a solicitação será negada.

Permissões exigidas

Você precisa ser membro da função Proprietário no nível da assinatura para obter permissão para recursos do Azure Policy.

Criar e atribuir a definição de política

Aqui, compomos a regra de política e, em seguida, a atribuímos a um grupo de gerenciamento ou assinatura e, opcionalmente, especificamos um grupo de recursos na assinatura. Se você ainda não estiver familiarizado com a linguagem da política, referencie Estrutura da definição de política para saber como estruturar a definição de política.

  1. Use o seguinte snippet JSON para criar um arquivo JSON com o nome AuditAutomationHRWJobExecution.json.

     {
       "properties": {
         "displayName": "Enforce job execution on Automation Hybrid Runbook Worker",
         "description": "Enforce job execution on Hybrid Runbook Workers in your Automation account.",
         "mode": "all",
         "parameters": {
           "effectType": {
             "type": "string",
             "defaultValue": "Deny",
             "allowedValues": [
                "Deny",
                "Disabled"
             ],
             "metadata": {
               "displayName": "Effect",
               "description": "Enable or disable execution of the policy"
             }
           }
         },
         "policyRule": {
           "if": {
             "anyOf": [
               {
                 "allOf": [
                   {
                     "field": "type",
                     "equals": "Microsoft.Automation/automationAccounts/jobs"
                   },
                   {
                     "value": "[length(field('Microsoft.Automation/automationAccounts/jobs/runOn'))]",
                     "less": 1
                   }
                 ]
               },
               {
                 "allOf": [
                   {
                     "field": "type",
                     "equals": "Microsoft.Automation/automationAccounts/webhooks"
                   },
                   {
                     "value": "[length(field('Microsoft.Automation/automationAccounts/webhooks/runOn'))]",
                     "less": 1
                   }
                 ]
               },
               {
                 "allOf": [
                   {
                     "field": "type",
                     "equals": "Microsoft.Automation/automationAccounts/jobSchedules"
                   },
                   {
                     "value": "[length(field('Microsoft.Automation/automationAccounts/jobSchedules/runOn'))]",
                     "less": 1
                   }
                 ]
               }
             ]
           },
           "then": {
             "effect": "[parameters('effectType')]"
           }
         }
       }
     }
    
  2. Execute o seguinte Azure PowerShell ou comando da CLI do Azure para criar uma definição de política usando o arquivo AuditAutomationHRWJobExecution.json.

     az policy definition create --name 'audit-enforce-jobs-on-automation-hybrid-runbook-workers' --display-name 'Audit Enforce Jobs on Automation Hybrid Runbook Workers' --description 'This policy enforces job execution on Automation account user Hybrid Runbook Workers.' --rules 'AuditAutomationHRWJobExecution.json' --mode All
    

    O comando cria uma definição de política chamada Auditar Imposição de Trabalhos no Hybrid Runbook Workers de Automação. Para saber mais sobre outros parâmetros que você pode usar, confira Criar definição de política do az.

    Quando chamado sem parâmetros de local, az policy definition create é padronizado para salvar a definição de política na assinatura selecionada do contexto de sessões. Para salvar a definição para um local diferente, use os seguintes parâmetros:

    • subscription – Salvar em uma assinatura diferente. Requer um valor de GUID para a ID da assinatura ou um valor de cadeia de caracteres para o nome da assinatura.
    • management-group – Salvar em um grupo de gerenciamento. Exige um valor de cadeia de caracteres.

  1. Depois de criar sua definição de política, você pode criar uma atribuição de política executando os seguintes comandos:

    az policy assignment create --name '<name>' --scope '<scope>' --policy '<policy definition ID>'
    

    O parâmetro scope em az policy assignment create funciona com grupos de gerenciamento, assinaturas, grupos de recursos ou com um recurso único. O parâmetro usa um caminho de recurso completo. O padrão para scope em cada contêiner é descrito a seguir. Substitua {rName}, {rgName}, {subId} e {mgName} pelo nome de recurso, nome do grupo de recursos, ID da assinatura e nome do grupo de gerenciamento, respectivamente. {rType} deve ser substituído pelo tipo de recurso, como Microsoft.Compute/virtualMachines para uma VM.

    • Recurso: /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
    • Grupo de recursos – /subscriptions/{subID}/resourceGroups/{rgName}
    • Assinatura – /subscriptions/{subID}
    • Grupo de gerenciamento – /providers/Microsoft.Management/managementGroups/{mgName}

    Você pode obter a ID de definição do Azure Policy usando o seguinte do comando do PowerShell:

    az policy definition show --name 'Audit Enforce Jobs on Automation Hybrid Runbook Workers'
    

    A ID de definição de política para a definição de política que você criou deve se assemelhar ao exemplo a seguir:

    "/subscription/<subscriptionId>/providers/Microsoft.Authorization/policyDefinitions/Audit Enforce Jobs on Automation Hybrid Runbook Workers"
    

  1. Entre no portal do Azure.

  2. Inicie o serviço do Azure Policy no portal do Azure selecionando Todos os serviços e, em seguida, pesquisando e selecionando Política.

  3. Selecione Conformidade no lado esquerdo da página. Em seguida, localize a atribuição de política que você criou.

    Captura de tela do painel do Azure Policy.

Quando uma das operações REST de Automação é executada sem referência a um Hybrid Runbook Worker no corpo da solicitação, um código de resposta 403 é retornado com um erro semelhante ao exemplo a seguir, indicando que a operação tentou uma execução em uma área restrita do Azure:

{
  "error": {
    "code": "RequestDisallowedByPolicy",
    "target": "Start_VMS",
    "message": "Resource 'Start_VMS' was disallowed by policy. Policy identifiers: '[{\"policyAssignment\":{\"name\":\"Enforce Jobs on Automation Hybrid Runbook Workers\",\"id\":\"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MAIC-RG/providers/Microsoft.Authorization/policyAssignments/fd5e2cb3842d4eefbc857917\"},\"policyDefinition\":{\"name\":\"Enforce Jobs on Automation Hybrid Runbook Workers\",\"id\":\"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/policyDefinitions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f\"}}]'.",
    "additionalInfo": [
      {
        "type": "PolicyViolation",
        "info": {
          "policyDefinitionDisplayName": "Enforce Jobs on Automation Hybrid Runbook Workers",
          "evaluationDetails": {
            "evaluatedExpressions": [
              {
                "result": "True",
                "expressionKind": "Field",
                "expression": "type",
                "path": "type",
                "expressionValue": "Microsoft.Automation/automationAccounts/jobs",
                "targetValue": "Microsoft.Automation/automationAccounts/jobs",
                "operator": "Equals"
              },
              {
                "result": "True",
                "expressionKind": "Value",
                "expression": "[length(field('Microsoft.Automation/automationAccounts/jobs/runOn'))]",
                "expressionValue": 0,
                "targetValue": 1,
                "operator": "Less"
              }
            ]
          },
          "policyDefinitionId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/policyDefinitions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f",
          "policyDefinitionName": "bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f",
          "policyDefinitionEffect": "Deny",
          "policyAssignmentId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MAIC-RG/providers/Microsoft.Authorization/policyAssignments/fd5e2cb3842d4eefbc857917",
          "policyAssignmentName": "fd5e2cb3842d4eefbc857917",
          "policyAssignmentDisplayName": "Enforce Jobs on Automation Hybrid Runbook Workers",
          "policyAssignmentScope": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MAIC-RG",
          "policyAssignmentParameters": {}
        }
      }
    ]
  }
}

A operação tentada também é registrada no log de atividades da conta de Automação, de forma similar ao exemplo a seguir.

Exemplo de log de atividades para execução de trabalho com falha.

Próximas etapas

Para se familiarizar com os runbooks, confira Gerenciar runbooks na Automação do Azure.