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

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

Antes de começar

Sistemas operativos compatíveis

Para ver uma lista completa dos sistemas operativos e das versões que suportam as políticas de SO, consulte os detalhes do sistema operativo.

Autorizações

Uma vez que pode usar políticas do SO para instalar e gerir pacotes de software numa VM, a criação e a gestão de políticas do SO equivalem a conceder acesso à execução de código remoto numa VM. Quando configura políticas do SO, as autorizações de IAM são usadas para controlar o acesso aos recursos da política e as atividades são registadas em auditoria.

Os proprietários de um projeto têm acesso total para criar e gerir atribuições de políticas de SO. Para todos os outros utilizadores, tem de conceder autorizações. Pode conceder uma das seguintes funções detalhadas:

  • Administrador de OSPolicyAssignment (roles/osconfig.osPolicyAssignmentAdmin). Contém autorizações para criar, eliminar, atualizar, obter e listar atribuições de políticas do SO.
  • Editor de atribuições de políticas do SO (roles/osconfig.osPolicyAssignmentEditor). Contém autorizações para atualizar, obter e listar atribuições de políticas do SO.
  • Visualizador de atribuições de políticas de SO (roles/osconfig.osPolicyAssignmentViewer). Contém autorizações para acesso só de leitura para obter e listar atribuições de políticas de SO.

Exemplo de comando para definir autorizações

Para conceder acesso de administrador a um utilizador para atribuições de políticas 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 o seguinte:

  • PROJECT_ID: o ID do projeto
  • USER_ID: o nome de utilizador do Google Workspace do utilizador

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

Para criar e implementar uma atribuição de política do SO, conclua os seguintes passos:

  1. Configure o Gestor de VMs.
  2. Atribua as autorizações necessárias aos utilizadores.
  3. Reveja a política do SO e a atribuição da política do SO.
  4. Crie os recursos da política do SO.
  5. Para criar e implementar a atribuição da política de SO, use um dos seguintes métodos:

    Consola

    Para criar e implementar uma atribuição de política do SO, conclua os seguintes passos:

    1. No cliente local, crie ou transfira uma política de SO. Tem de ser um ficheiro JSON ou YAML. Para mais informações sobre a criação de políticas de SO ou para ver exemplos de políticas de SO, consulte o artigo Políticas de SO.
    2. Na Trusted Cloud consola, aceda à página Políticas de SO.

      Aceda às políticas de SO

    3. Clique em Criar zonal.

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

    5. Na secção Políticas de SO, carregue o ficheiro de políticas de SO.

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

      • Selecione a zona que contém as VMs às quais quer aplicar a política.
      • Selecione as famílias de SO.
      • Opcional: pode filtrar ainda mais as VMs especificando etiquetas de inclusão e exclusão.

      Por exemplo, pode selecionar todas as VMs Ubuntu no seu ambiente de teste e excluir as que estão a executar o Google Kubernetes Engine, especificando o seguinte:

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

      Selecione as 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 da implementação.

    8. Clique em Iniciar implementação.

    gcloud

    Para criar e implementar uma atribuição de política de SO numa zona, conclua os seguintes passos:

    1. Crie um recurso de atribuição de política do SO no formato JSON ou YAML. Este ficheiro define as políticas de SO que quer aplicar às suas VMs, as VMs de destino às quais quer aplicar as políticas e a taxa de implementação à qual quer aplicar as políticas de SO. Para mais informações sobre este ficheiro e exemplos de atribuições, consulte o artigo Atribuição de políticas de SO.

    2. Use o comando os-config os-policy-assignments create para criar e implementar a atribuição da política do SO numa localização especificada.

      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 a Convenção de nomenclatura de recursos.
      • ZONE: zona na qual criar a atribuição da política do SO.
      • OS_POLICY_ASSIGNMENT_FILE: o caminho absoluto para o ficheiro de atribuição de políticas do SO que criou no passo anterior.

      Exemplo

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

      O resultado é 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.
      
    3. Tome nota do 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
      

      Pode usar este nome do recurso totalmente qualificado para obter detalhes de uma implementação, ou para cancelar uma implementação. Consulte a secção Implementações.

    Terraform

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

    O exemplo seguinte verifica se o servidor Web Apache está a ser executado em VMs do 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 os comandos básicos do Terraform.

    REST

    Para criar uma atribuição de política de SO no seu cliente local, conclua os seguintes passos:

    1. Crie uma atribuição de política de SO. Tem de ser um ficheiro JSON. Para mais informações sobre a criação de atribuições de políticas do SO ou para ver exemplos de atribuições de políticas do SO, consulte o artigo Atribuição de políticas do SO.

      Se quiser usar a atribuição de política de SO YAML de exemplo, tem de a converter em JSON.

    2. Na API, crie um pedido POST para o método projects.locations.osPolicyAssignments.create.

      No corpo do pedido, cole as especificações de atribuição da política do SO do passo 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 da política do SO
      • JSON_OS_POLICY: as especificações de atribuição de políticas do SO criadas no passo anterior. Tem de estar no formato JSON. Para mais informações sobre os parâmetros e o formato, consulte Resource: OSPolicyAssignment.
      • ZONE: zona na qual criar a atribuição da política do SO

      Exemplo

      Por exemplo, para criar uma atribuição de política de SO para o Google Cloud Observability que instala agentes de monitorização e registo em VMs selecionadas através da atribuição de política de SO de exemplo, conclua os seguintes passos:

      1. Converta o exemplo em JSON
      2. Faça o seguinte pedido:
      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
          }
        }
      }
      

Implementações

As atribuições de políticas de SO são implementadas de acordo com uma taxa de implementação. Isto significa que as atribuições que segmentam um conjunto de VMs podem ser implementadas 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 as novas alterações causarem regressões.

Quando as chamadas de métodos para uma API podem demorar muito tempo a serem concluídas, a API devolve operações de longa duração (LRO). Para mais informações acerca das LROs, consulte o artigo Operações de longa duração.

A API OS Config cria um LRO sempre que cria, atualiza ou elimina uma atribuição de política do SO. Cada LRO devolve 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 eliminação também gera uma nova revisão da atribuição de políticas do SO. Para ver as revisões de uma atribuição de política do SO, consulte o artigo Liste as revisões de atribuições de políticas do SO.

Pode usar a CLI Google Cloud para obter os detalhes de uma implementação ou cancelar uma implementação.

Obtenha detalhes de uma implementação

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 de recurso totalmente qualificado da operação devolvida pela operação de criação, atualização ou eliminaçã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 resultado

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

Cancele uma implementação

Consola

  1. Na Trusted Cloud consola, aceda à página Políticas de SO.

    Aceda às políticas de SO

  2. Clique no separador Atribuições zonais.

  3. Para a atribuição de política de SO cuja implementação quer 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 de recurso totalmente qualificado da operação devolvida pela operação de criação, atualização ou eliminaçã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, não é devolvido nenhum resultado.

O que se segue?