Partilhar via


Usar a Política do Azure para impor a execução de trabalho no Runbook Worker Híbrido

Importante

O Runbook Worker Híbrido de Usuário baseado no Azure Automation Agent (Windows e Linux) foi desativado em 31 de agosto de 2024 e não é mais suportado. Siga as diretrizes sobre como migrar de um Runbook Workers Híbrido de Usuário baseado em Agente existente para Trabalhadores Híbridos baseados em Extensão.

Iniciar um runbook em um Trabalhador de Runbook Híbrido usa uma opção Executar em que permite especificar o nome de um grupo de Trabalhador de Runbook Híbrido ao iniciar a partir do portal do Azure, com o Azure PowerShell ou API REST. Quando um grupo é especificado, um dos trabalhadores desse grupo recupera e executa o runbook. Se o seu 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 de Trabalho de Automação ou superior pode criar trabalhos de runbook. Para gerenciar a execução de runbook direcionada a um grupo de Trabalhador de Runbook Híbrido em sua conta de Automação, você pode usar a Política do Azure. Isso ajuda a impor padrões organizacionais e garantir que seus trabalhos de automação sejam controlados e gerenciados por aqueles designados, e qualquer pessoa não pode executar um runbook em uma área restrita do Azure, apenas em trabalhadores de Runbook Híbrido.

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

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

Permissões necessárias

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

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

Aqui, compomos a regra de política e, em seguida, atribuímo-la a um grupo de gerenciamento ou assinatura e, opcionalmente, especificamos um grupo de recursos na assinatura. Se ainda não está familiarizado com a linguagem da política, veja a estrutura da definição de política para saber como estruturar a definição de política.

  1. Use o seguinte trecho 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 comando do Azure PowerShell ou 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 Audit Enforce Jobs on Automation Hybrid Runbook Workers. Para obter mais informações sobre outros parâmetros que você pode usar, consulte az policy definition create.

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

    • subscrição - Guarde numa subscrição diferente. Requer um valor 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. Requer 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 on az policy assignment create funciona com grupo de gerenciamento, assinatura, grupo de recursos ou um único recurso. O parâmetro usa um caminho de recurso completo. O padrão de escopo para cada contêiner é o seguinte. Substitua {rName}, {rgName}, {subId}e {mgName} pelo nome do recurso, nome do grupo de recursos, ID da assinatura e nome do grupo de gerenciamento, respectivamente. {rType} seria substituído pelo tipo de recurso do recurso, como Microsoft.Compute/virtualMachines para uma VM.

    • Recurso - /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
    • Grupo de recursos - /subscriptions/{subID}/resourceGroups/{rgName}
    • Subscrição - /subscriptions/{subID}
    • Grupo de gestão - /providers/Microsoft.Management/managementGroups/{mgName}

    Você pode obter a ID de Definição de Política do Azure usando o PowerShell com o seguinte comando:

    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 ser semelhante ao exemplo a seguir:

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

  1. Inicie sessão no portal do Azure.

  2. Inicie o serviço de Política do Azure no portal do Azure selecionando Todos os serviços e, em seguida, procurando 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 ecrã do painel da Política do Azure.

Quando uma das operações REST de automação é executada sem referência a um Runbook Worker híbrido no corpo da solicitação, um código de resposta 403 é retornado com um erro semelhante ao exemplo a seguir indicando a tentativa de execução da operaçã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 tentativa de operação também é registrada no log de atividades da conta de automação, semelhante ao exemplo a seguir.

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

Próximos passos

Para trabalhar com runbooks, consulte Gerenciar runbooks na Automação do Azure.