Criar uma atribuição de política de SO

Use políticas de sistema operacional para manter configurações de software consistentes em instâncias de máquinas virtuais (VM) Linux e Windows.

Antes de começar

Sistemas operacionais suportados

Para obter uma lista completa de sistemas operacionais e versões que suportam políticas de SO, consulte Detalhes do sistema operacional .

Permissões

Como você pode usar políticas de SO para instalar e gerenciar pacotes de software em uma VM, a criação e o gerenciamento de políticas de SO equivalem a conceder acesso de execução remota de código em uma VM. Quando você configura políticas do sistema operacional, as permissões do IAM são usadas para controlar o acesso aos recursos da política e as atividades são registradas em log de auditoria.

Os proprietários de um projeto têm acesso total para criar e gerenciar atribuições de políticas de SO. Para todos os outros usuários, você precisa conceder permissões. Você pode conceder uma das seguintes funções granulares:

  • Administrador OSPolicyAssignment ( roles/osconfig.osPolicyAssignmentAdmin ). Contém permissões para criar, excluir, atualizar, obter e listar atribuições de políticas do sistema operacional.
  • Editor OSPolicyAssignment ( roles/osconfig.osPolicyAssignmentEditor ). Contém permissões para atualizar, obter e listar atribuições de políticas do sistema operacional.
  • Visualizador OSPolicyAssignment ( roles/osconfig.osPolicyAssignmentViewer ). Contém permissões de acesso somente leitura para obter e listar atribuições de políticas do sistema operacional.

Comando de exemplo para definir permissões

Para conceder acesso de administrador a um usuário para atribuições de políticas do sistema operacional, execute o seguinte comando:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member user:USER_ID@gmail.com \
        --role roles/osconfig.osPolicyAssignmentAdmin

Substitua o seguinte:

  • PROJECT_ID : o ID do projeto
  • USER_ID : o nome de usuário do Google Workspace do usuário

Criar uma atribuição de política de SO

Para criar e implementar uma atribuição de política de SO, conclua as seguintes etapas:

  1. Configure o Gerenciador de VM .
  2. Atribua as permissões necessárias aos usuários.
  3. Revise a política do SO e a atribuição da política do SO .
  4. Crie os recursos de política do SO .
  5. Para criar e implementar a atribuição de política de SO, utilize um dos seguintes métodos:

    Console

    Para criar e implementar uma atribuição de política de SO, conclua as seguintes etapas:

    1. No seu cliente local, crie ou baixe uma política de sistema operacional. Deve ser um arquivo JSON ou YAML. Para obter mais informações sobre a criação de políticas de SO ou para visualizar exemplos de políticas de SO, consulte Políticas de SO .
    2. No console do Google Cloud, acesse a página de políticas do SO .

      Vá para as políticas do sistema operacional

    3. Clique em Criar atribuição de política de SO .

    4. Na seção ID de Atribuição , forneça um nome para a atribuição de política do SO. Consulte Convenção de nomenclatura de recursos .

    5. Na seção Políticas do SO , carregue o arquivo de políticas do SO.

    6. Na seção Instâncias de VM de destino , especifique as VMs de destino.

      • Selecione a zona que contém as VMs às quais você deseja aplicar a política.
      • Selecione as famílias de sistemas operacionais.
      • Opcional: você pode filtrar ainda mais as VMs especificando rótulos de inclusão e exclusão.

      Por exemplo, você pode selecionar todas as VMs do Ubuntu em seu ambiente de teste e excluir aquelas que executam o Google Kubernetes Engine, especificando o seguinte:

      • Família de SO: ubuntu
      • Incluir: env:test , env:staging
      • Excluir: goog-gke-node

      Selecione VMs de destino.

    7. Especifique um plano de implementação.

      • Especifique o tamanho da onda (também conhecido como orçamento de interrupção). Por exemplo, 10%.
      • Especifique o tempo de espera. Por exemplo, 15 minutos.

        Configuração de implementação.

    8. Clique em Iniciar implementação .

    gcloud

    Para criar e implementar uma atribuição de política de SO em uma zona, conclua as etapas a seguir:

    1. Crie um recurso de atribuição de política de SO no formato JSON ou YAML. Este arquivo define as políticas do sistema operacional que você deseja aplicar às suas VMs, as VMs de destino às quais você deseja aplicar as políticas e a taxa de implementação na qual as políticas do sistema operacional serão aplicadas. Para obter mais informações sobre esse arquivo e atribuições de exemplo, consulte Atribuição de política do sistema operacional .

    2. Use o comando os-config os-policy-assignments create para criar e implementar a atribuição de política do sistema operacional em um local especificado.

      gcloud compute os-config os-policy-assignments create OS_POLICY_ASSIGNMENT_ID \
         --location=ZONE \
         --file=OS_POLICY_ASSIGNMENT_FILE \
         --async
      

      Substitua o seguinte:

      • OS_POLICY_ASSIGNMENT_ID : nome da atribuição da política do SO. Consulte Convenção de nomenclatura de recursos .
      • ZONE : zona na qual criar a atribuição de política do SO.
      • OS_POLICY_ASSIGNMENT_FILE : o caminho absoluto para o arquivo de atribuição de política do SO que você criou na etapa anterior.

      Exemplo

      gcloud compute os-config os-policy-assignments create my-os-policy-assignment \
          --location=asia-south1-a \
          --file=/downloads/assignment-config.yaml \
          --async
      

      A saída é semelhante à seguinte:

      Create request issued for: [my-os-policy-assignment]
      Check operation [projects/384123488288/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment/operations/fb2011d6-61de-46f1-afdb-bc96bdb3fbaa] for status.
      
    3. Anote o nome completo do recurso para a operação. No exemplo anterior, o nome completo do recurso é:

      projects/384123488288/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment/operations/fb2011d6-61de-46f1-afdb-bc96bdb3fbaa
      

      Você pode usar esse nome de recurso totalmente qualificado para obter detalhes de uma implementação ou para cancelar uma implementação. Consulte Implementações .

    Terraforma

    Para criar uma atribuição de política de SO, use o recurso google_os_config_os_policy_assignment .

    O exemplo a seguir verifica se o servidor web Apache está sendo executado em VMs CentOS.

    resource "google_os_config_os_policy_assignment" "my_os_policy_assignment" {
    
      name        = "my-os-policy-assignment"
      location    = "us-west1-a"
      description = "An OS policy assignment that verifies if the Apache web server is running on CentOS VMs."
    
      instance_filter {
        # filter to select VMs
        all = false
    
        exclusion_labels {
          labels = {
            label-one = "goog-gke-node"
          }
        }
    
        inclusion_labels {
          labels = {
            env = "test",
          }
        }
    
        inventories {
          os_short_name = "centos"
          os_version    = "7*"
        }
      }
    
      os_policies {
        #list of OS policies to be applied to VMs
        id   = "apache-always-up-policy"
        mode = "ENFORCEMENT"
    
        resource_groups { #list of resource groups for the policy
          resources {
            id = "ensure-apache-is-up"
    
            exec {
              validate {
                interpreter = "SHELL"
                script      = "if systemctl is-active --quiet httpd; then exit 100; else exit 101; fi"
              }
    
              enforce {
                interpreter = "SHELL"
                script      = "systemctl start httpd && exit 100"
              }
            }
          }
    
          inventory_filters {
            os_short_name = "centos"
            os_version    = "7*"
          }
        }
    
        allow_no_resource_group_match = false #OS policy compliance status
        description                   = "An OS policy that verifies if the Apache web server is running on Linux VMs."
      }
    
      rollout {
        #define rollout parameters
        disruption_budget {
          fixed = 1
        }
        min_wait_duration = "3.5s"
      }
    }

    Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform .

    DESCANSAR

    Para criar uma atribuição de política de SO no seu cliente local, conclua as etapas a seguir:

    1. Crie uma atribuição de política de SO. Este deve ser um arquivo JSON. Para obter mais informações sobre como criar atribuições de políticas de SO ou para visualizar exemplos de atribuições de políticas de SO, consulte Atribuição de políticas de SO .

      Se quiser usar a atribuição de política do sistema operacional YAML de amostra, você deverá convertê-la em JSON.

    2. Na API, crie uma solicitação POST para o método projects.locations.osPolicyAssignments.create .

      No corpo da solicitação, cole as especificações de atribuição de política do SO da etapa anterior.

      POST https://osconfig.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/OSPolicyAssignments?osPolicyAssignmentId=OS_POLICY_ASSIGNMENT_ID
      
      {
       JSON_OS_POLICY
      }
      

      Substitua o seguinte:

      • PROJECT_ID : o ID do seu projeto
      • OS_POLICY_ASSIGNMENT_ID : nome da atribuição de política do SO
      • JSON_OS_POLICY : as especificações de atribuição de política do SO criadas na etapa anterior. Deve estar no formato JSON. Para obter mais informações sobre os parâmetros e o formato, consulte Resource: OSPolicyAssignment .
      • ZONE : zona para criar a atribuição de política do SO em

      Exemplo

      Por exemplo, para criar uma atribuição de política de SO para o Google Cloud Observability que instala agentes de monitoramento e registro em VMs selecionadas usando a atribuição de política de SO de exemplo , conclua as etapas a seguir:

      1. Converta a amostra em JSON
      2. Faça a seguinte solicitação:
      POST https://osconfig.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/OSPolicyAssignments?osPolicyAssignmentId=OS_POLICY_ASSIGNMENT_ID
      
      {
        "osPolicies": [
          {
            "id": "setup-repo-and-install-package-policy",
            "mode": "ENFORCEMENT",
            "resourceGroups": [
              {
                "resources": [
                  {
                    "id": "setup-repo",
                    "repository": {
                      "yum": {
                        "id": "google-cloud-monitoring",
                        "displayName": "Google Cloud Monitoring Agent Repository",
                        "baseUrl": "https://packages.cloud.google.com/yum/repos/google-cloud-monitoring-el8-x86_64-all",
                        "gpgKeys": [
                          "https://packages.cloud.google.com/yum/doc/yum-key.gpg",
                          "https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg"
                        ]
                      }
                    }
                  },
                  {
                    "id": "install-pkg",
                    "pkg": {
                      "desiredState": "INSTALLED",
                      "yum": {
                        "name": "stackdriver-agent"
                      }
                    }
                  }
                ]
              }
            ]
          }
        ],
        "instanceFilter": {
          "inclusionLabels": [
            {
              "labels": {
                "used_for": "testing"
              }
            }
          ]
        },
        "rollout": {
          "disruptionBudget": {
            "fixed": 10
          },
          "minWaitDuration": {
            "seconds": 300
          }
        }
      }
      

Lançamentos

As atribuições de políticas do sistema operacional são implantadas de acordo com uma taxa de implantação. Isto significa que as atribuições que visam um conjunto de VMs podem ser implantadas gradualmente e não são aplicadas a todas as VMs imediatamente. As alterações são implementadas gradualmente para lhe dar a oportunidade de intervir e cancelar uma implementação se novas alterações causarem regressões.

Quando as chamadas de método para uma API podem levar muito tempo para serem concluídas, a API retorna operações de longa duração (LRO). Para obter mais informações sobre LROs, consulte Operações de longa duração .

A API OS Config cria uma LRO sempre que você cria, atualiza ou exclui uma atribuição de política de SO. Cada LRO retorna um recurso de operação. Este recurso de operação é semelhante ao seguinte:

Create request issued for: [my-os-policy-assignment]
Check operation [projects/384123488288/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment/operations/fb2011d6-61de-46f1-afdb-bc96bdb3fbaa] for status.

Cada operação de criação, atualização ou exclusão também gera uma nova revisão de atribuição de política do sistema operacional. Para visualizar as revisões de uma atribuição de política de sistema operacional, consulte Listar revisões de atribuição de política de sistema operacional .

Você pode usar a CLI do Google Cloud para ver os detalhes de um lançamento ou para cancelar um lançamento.

Obtenha detalhes de um lançamento

Para obter detalhes de uma implementação, use o comando os-config os-policy-assignments operations describe .

gcloud compute os-config os-policy-assignments operations describe FULLY_QUALIFIED_OPERATION_NAME

Substitua FULLY_QUALIFIED_OPERATION_NAME pelo nome completo do recurso para a operação retornada da operação de criação, atualização ou exclusão.

Exemplo

gcloud compute os-config os-policy-assignments operations describe \
    projects/384123488288/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment/operations/fb2011d6-61de-46f1-afdb-bc96bdb3fbaa

Exemplo de saída

done: true
metadata:
  '@type': type.googleapis.com/google.cloud.osconfig.$$api-version$$.OSPolicyAssignmentOperationMetadata
  apiMethod: CREATE
  osPolicyAssignment: projects/3841234882888/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment@cfb78790-41d8-40d1-b8a1-1eaf6011b909
  rolloutStartTime: '2021-04-15T00:53:52.963569Z'
  rolloutState: SUCCEEDED
  rolloutUpdateTime: '2021-04-15T00:53:53.094041Z'
name: projects/3841234882888/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment/operations/cfb78790-41d8-40d1-b8a1-1eaf6011b909
response:
  '@type': type.googleapis.com/google.cloud.osconfig.$$api-version$$.OSPolicyAssignment
  baseline: true
  description: My test policy
  instanceFilter:
    inclusionLabels:
    - labels:
        label-key-not-targeting-instances: label-value-not-targeting-instances
  name: projects/3841234882888/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment
  osPolicies:
  - id: q-test-policy
    mode: ENFORCEMENT
    resourceGroups:
    - osFilter:
        osShortName: centos
        osVersion: '7'
      resources:
      - id: add-repo
        repository:
          yum:
            baseUrl: https://packages.cloud.google.com/yum/repos/google-cloud-ops-agent-el7-x86_64-all

Cancelar um lançamento

Console

  1. No console do Google Cloud, acesse a página de políticas do SO .

    Vá para as políticas do sistema operacional

  2. Clique na guia Atribuições de políticas do SO .

  3. Para a atribuição de política do SO cuja implementação você deseja cancelar, clique em Ação ( ) > Cancelar implementação .

  4. Clique em Cancelar implementação .

gcloud

Para cancelar uma implementação, use o comando gcloud compute os-config os-policy-assignments operations cancel .

gcloud compute os-config os-policy-assignments operations cancel FULLY_QUALIFIED_OPERATION_NAME

Substitua FULLY_QUALIFIED_OPERATION_NAME pelo nome completo do recurso para a operação retornada da operação de criação, atualização ou exclusão.

Exemplo

gcloud compute os-config os-policy-assignments operations cancel \
    projects/384123488288/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment/operations/fb2011d6-61de-46f1-afdb-bc96bdb3fbaa

Se o comando for bem-sucedido, nenhuma saída será retornada.

O que vem a seguir?