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


Use políticas de SO para manter as configurações de software consistentes nas instâncias de máquina virtual (VM, na sigla em inglês) do Linux e do Windows.

Antes de começar

  • Analise a política do SO e a atribuição da política do SO.
  • Revise as cotas de configuração do SO.
  • Configure a autenticação, caso ainda não tenha feito isso. A autenticação é o processo de verificação da sua identidade para acesso a serviços e APIs do Google Cloud. Para executar códigos ou amostras de um ambiente de desenvolvimento local, autentique-se no Compute Engine da seguinte maneira.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. Terraform

      Para usar os exemplos do Terraform nesta página em um ambiente de desenvolvimento local, instale e inicialize a gcloud CLI e, em seguida, configure o Application Default Credentials com suas credenciais de usuário.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      Confira mais informações em Set up authentication for a local development environment.

      REST

      Para usar as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para gcloud CLI.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Para mais informações, consulte Autenticar para usar REST na documentação de autenticação do Google Cloud.

Sistemas operacionais compatíveis

Para ver uma lista completa de sistemas operacionais e versões compatíveis com políticas de SO, consulte Detalhes do sistema operacional.

Permissões

Como é possível usar políticas de SO para instalar e gerenciar pacotes de software em uma VM, a criação e a gestão de políticas de SO equivale a conceder acesso de execução remota de código em uma VM.

Quando você configura políticas do SO, as permissões do IAM são usadas para controlar o acesso aos recursos da política e às atividades são registradas em auditoria. No entanto, os usuários ainda podem executar códigos na VM, o que representa um possível risco de segurança. Para atenuar esse risco, recomendamos que você forneça apenas o acesso necessário para cada usuário.

Os proprietários de um projeto têm acesso total para criar e gerenciar atribuições de política do SO. Para todos os outros usuários, você precisa conceder permissões. É possível conceder um dos seguintes papéis granulares:

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

Exemplo de comando para definir permissões

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

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

Substitua:

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

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

Para criar e implantar uma atribuição de política de SO, siga estas etapas:

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

    Console

    Para criar e implantar uma atribuição de política de SO, siga estas etapas:

    1. No cliente local, crie ou faça o download de uma política de SO. Precisa ser um arquivo JSON ou YAML. Para mais informações sobre como criar políticas do SO ou ver amostras de políticas do SO, consulte Políticas do SO.
    2. No console do Google Cloud, acesse a página Políticas do SO.

      Acessar as políticas do SO

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

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

    5. Na seção Políticas do SO, faça upload do arquivo da política 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ê quer aplicar a política.
      • Selecione as famílias do SO.
      • Opcional: é possível filtrar ainda mais as VMs especificando inclusões e exclusões.

      Por exemplo, é possível selecionar todas as VMs do Ubuntu no ambiente de teste e excluir aquelas que executam o Google Kubernetes Engine. Basta especificar o seguinte:

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

      Selecione as VMs de destino.

    7. Especifique um plano de lançamento.

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

        Configuração de lançamento.

    8. Clique em Iniciar lançamento.

    gcloud

    Para criar e lançar uma atribuição de política de SO em uma zona, siga estas etapas:

    1. Crie um recurso de atribuição de política de SO no formato JSON ou YAML. Esse arquivo define as políticas do SO que você quer aplicar às VMs, as VMs de destino a que as políticas serão aplicadas e a taxa de lançamento em que as políticas do SO serão aplicadas. Para mais informações sobre esse arquivo e amostras de atribuições, consulte Atribuição de política do SO.

    2. Use o comando os-config os-policy-assignments create para criar e implantar a atribuição de política do SO 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:

      • OS_POLICY_ASSIGNMENT_ID: nome da atribuição da política do SO. Consulte a Convenção de nomenclatura de recursos.
      • ZONE: zona em que a atribuição de política do SO será criada.
      • 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 resposta será semelhante a:

      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 do recurso totalmente qualificado para a operação. No exemplo anterior, o nome do recurso totalmente qualificado é:

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

      Use esse nome de recurso totalmente qualificado para saber detalhes sobre um lançamento ou cancelar um lançamento. Consulte Lançamentos.

    Terraform

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

    O exemplo a seguir verifica se o servidor da Web Apache está em execução nas 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.

    REST

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

    1. Crie uma atribuição de política do SO. Ele precisa ser um arquivo JSON. Para mais informações sobre como criar atribuições de política do SO ou ver amostras de atribuições de política do SO, consulte Atribuição da política do SO.

      Se você quiser usar a atribuição de política de amostra do YAML do SO, será necessário 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 da 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:

      • PROJECT_ID: ID do 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. Ele precisa estar no formato JSON. Para mais informações sobre os parâmetros e o formato, consulte Resource: OSPolicyAssignment.
      • ZONE: a zona em que a atribuição da política do SO será criada

      Exemplo

      Por exemplo, para criar uma atribuição de política de SO para o Google Cloud Observability que instala agentes do Logging e Monitoring nas VMs selecionadas usando o exemplo de atribuição de política de SO, conclua as seguintes etapas:

      1. Converter 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 SO são implantadas de acordo com uma taxa de lançamento. Isso 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 lançadas gradualmente para que você tenha a oportunidade de intervir e cancelar o lançamento se novas alterações causarem regressão.

Quando as chamadas de método para uma API podem levar muito tempo para serem concluídas, a API retorna uma operação de longa duração (LRO, na sigla em inglês). Para 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 do 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 de SO. Para visualizar as revisões de uma atribuição de política do SO, consulte Listar revisões de atribuição de política do SO.

Use a Google Cloud CLI para ver os detalhes de um lançamento ou para cancelá-lo.

Ver detalhes de um lançamento

Para conferir detalhes de um lançamento, 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 de recurso totalmente qualificado da operação que é 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 Políticas do SO.

    Acessar as políticas do SO

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

  3. Na atribuição da política do SO em que você quer cancelar o lançamento, clique em Ação () > Cancelar lançamento.

  4. Clique em Cancelar lançamento.

gcloud

Para cancelar um lançamento, 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 de recurso totalmente qualificado da operação que é 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.

A seguir