Criar uma política de convidado (legada)


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

Para configurar uma política de convidado em um conjunto de VMs, siga estas etapas:

  1. Atribua as permissões necessárias aos usuários.
  2. Configure a VM.
  3. Configure o arquivo JSON ou YAML da política de convidado.
  4. Crie a política de convidado.

Antes de começar

  • 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.

    Selecione a guia para como planeja usar as amostras nesta página:

    gcloud

    1. Instale a Google Cloud CLI e inicialize-a executando o seguinte comando:

      gcloud init
    2. Defina uma região e uma zona padrão.

    REST

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

      Instale a Google Cloud CLI e inicialize-a executando o seguinte comando:

      gcloud init

Limitações

  • Para VMs de destino, a política de convidado é atualizada sempre que o agente faz check-in com o serviço. Essa verificação acontece a cada 10 a 15 minutos.
  • Não há painéis de compliance, notificações ou serviços de alerta disponíveis nestas políticas de convidado do SO legado. As VMs que não estão executando o agente de configuração do SO não reportam falhas. Para garantir resultados ainda melhores, use esse recurso com o serviço OS Inventory Management ou com qualquer outra ferramenta de monitoramento de compliance.
  • Um roteiro de software, com um nome específico, é executado apenas uma vez quando você cria uma política de convidado. Para executar novamente um roteiro de software, faça o seguinte:

    1. Renomeie a receita de software.
    2. Exclua e recrie a política de convidado usando a receita de software renomeada.

Permissões

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

Quando você configura políticas de convidado, as permissões do IAM são usadas para controlar o acesso ao recurso de política e as atividades são registradas em auditoria. No entanto, os usuários ainda podem executar código na VM, o que representa um possível risco de segurança. Para atenuar isso, 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 políticas. Para todos os outros usuários, você precisa conceder permissões. É possível conceder uma das seguintes funções granulares:

  • Administrador de GuestPolicy (roles/osconfig.guestPolicyAdmin). Contém permissões para criar, excluir, atualizar, receber e listar políticas de convidado.
  • Editor de GuestPolicy (roles/osconfig.guestPolicyEditor). Contém permissões para receber, atualizar e listar políticas de convidado.
  • Leitor de GuestPolicy (roles/osconfig.guestPolicyViewer): tem permissões de acesso somente leitura para receber e listar políticas de convidados.

Por exemplo, para conceder a um usuário o acesso de administrador às políticas de convidado, execute o seguinte comando:

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

Substitua:

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

Configure a VM.

Para usar políticas de convidado, é preciso configurar o VM Manager.

Configure um arquivo YAML ou JSON da política de convidado

É necessário fornecer especificações da política de convidado usando um arquivo JSON ou YAML. Para ver exemplos de configurações, consulte Exemplos de arquivos YAML da política de convidado.

O arquivo YAML ou JSON contém estas duas seções principais:

Atividades

É possível atribuir políticas de convidado a todas as VMs no projeto ou usar a chave assignment no arquivo JSON ou YAML para visar um grupo específico de VMs.

Por exemplo, você consegue segmentar um grupo de VMs usando qualquer uma das características a seguir:

  • Nome da instância. Veja o exemplo 1.
  • Prefixo de nome da instância. Veja o exemplo 2.
  • Rótulo da instância. Veja o exemplo 3.
  • Zona. Veja o exemplo 4.
  • Informações do sistema operacional que contém o nome, a versão e a arquitetura do SO. Veja o exemplo 5. O comando os-invent describe pode ser usado para determinar o nome, a versão e a arquitetura do SO das VMs.

Para atribuir uma política de convidado usando informações do sistema operacional, o agente de configuração do SO precisa enviar essas informações para o endpoint de atributos de convidado da VM. Por padrão, para garantir a privacidade, as informações do sistema operacional para VMs não estão disponíveis. Para agrupar VMs por informações do sistema operacional, verifique se os atributos de convidado os serviços de gerenciamento de inventário do SO estão ativados. Para ativar esses serviços, consulte Configure sua VM.

As configurações de política de convidado são aplicadas automaticamente a todas as novas VMs que corresponderem à atribuição.

Configuração necessária

A configuração necessária pode ser realizada usando qualquer uma das tarefas vistas a seguir ou uma combinação delas:

  • Instalar, remover e atualizar automaticamente os pacotes de software. Veja o exemplo 1.
  • Configurar repositórios de pacotes de software. Veja o exemplo 1 ou o exemplo 3.
  • Instalar o software usando roteiros de software.

Exemplos de arquivos YAML da política de convidado

Exemplo 1

Instale o pacote my-package, que precisa ser atualizado nas seguintes instâncias de VM: my-instance-1 e my-instance-2.

assignment:
  instances:
  - zones/us-east1-c/instances/my-instance-1
  - zones/us-east1-c/instances/my-instance-2
packages:
- name: "my-package"
  desiredState: UPDATED

Para mais informações sobre como atribuir políticas de convidado para pacotes, consulte o documento de referência Representação JSON do pacote.

Exemplo 2

Instale o agente do Cloud Monitoring usando o gerenciador de pacotes yum em todas as instâncias de VM que tenham um dos seguintes prefixos de nome de instância: test-instance- ou dev-instance-.

assignment:
  instanceNamePrefixes:
  - "test-instance-"
  - "dev-instance-"
packages:
- name: "stackdriver-agent"
  desiredState: INSTALLED
  manager: YUM
packageRepositories:
- yum:
    id: google-cloud-monitoring
    displayName: "Google Cloud Monitoring Agent Repository"
    baseUrl: https://packages.cloud.google.com/yum/repos/google-cloud-monitoring-el7-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

Para mais informações sobre como atribuir políticas de convidado para repositórios de pacotes, consulte o documento de referência Representação JSON do PackageRepository.

Exemplo 3

Instale my-package e remova bad-package-1 e bad-package-2 das instâncias com um conjunto específico de rótulos. Além disso, adicione repositórios para os gerenciadores de pacotes apt e yum.

assignment:
  # Assign to VM instances where `(label.color=red AND label.env=test) OR (label.color=blue AND label.env=test)`
  groupLabels:
  - labels:
      color: red
      env: test
  - labels:
      color: blue
      env: test
packages:
- name: "my-package"
  desiredState: INSTALLED
- name: "bad-package-1"
  desiredState: REMOVED
- name: "bad-package-2"
  desiredState: REMOVED
  manager: APT  # Only apply this to systems with APT.
packageRepositories:
- apt:  # Only apply this to systems with APT.
    uri: "https://packages.cloud.google.com/apt"
    archiveType: DEB
    distribution: cloud-sdk-stretch
    components:
    - main
- yum:  # Only apply this to systems with YUM.
    id: google-cloud-sdk
    displayName: "Google Cloud SDK"
    baseUrl: https://packages.cloud.google.com/yum/repos/cloud-sdk-el7-x86_64
    gpgKeys:
    - https://packages.cloud.google.com/yum/doc/yum-key.gpg
    - https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg

Exemplo 4

Instale o software de um MSI hospedado no Cloud Storage para todas as instâncias em us-east1-b e us-east1-d.

assignment:
  zones:
  - us-east1-b
  - us-east1-d
recipes:
- name: "swr-msi-gcs"
  desiredState: INSTALLED
  artifacts:
  - id: "the-msi"
    gcs:
      bucket: "my-bucket"
      object: "executable.msi"  # full URI gs://my-bucket/executable.msi#nnnnn
      generation: 1546030865175603
  installSteps:
  - msiInstallation:
      artifactId: "the-msi"

Para mais informações sobre como configurar políticas de roteiro, consulte o documento de referência Representação JSON do SoftwareRecipe.

Exemplo 5

Instale o software ao executar um script in-line em todas as instâncias de VM que atendam aos seguintes requisitos:

  • Sistema operacional: Red Hat Enterprise Linux 7
  • Rótulo: color=red
assignment:
  osTypes:
  - osShortName: rhel
    osVersion: "7"
  groupLabels:
  - labels:
      color: red
recipes:
- name: recipe-runscript
  desiredState: INSTALLED
  installSteps:
  - scriptRun:
      script: |-
        #!/bin/bash
        touch /TOUCH_FILE

Para mais informações sobre como configurar políticas de roteiro, consulte o documento de referência Representação JSON do SoftwareRecipe.

Exemplo 6

Instala o aplicativo em todas as instâncias do Windows usando um instalador executável com o seguinte prefixo de nome de instância: test-instance-.

assignment:
  instanceNamePrefixes:
  - "test-instance-"
  osTypes:
  - osShortName: WINDOWS
recipes:
- name: windows-install-exe-example
  desiredState: INSTALLED
  artifacts:
  - id: installer
    gcs:
      bucket: my-bucket
      generation: '1597013478912389'
      object: MyApp.Installer.x64.exe
  installSteps:
  - fileExec:
      artifactId: installer
      args:
      - /S # Installation must be silent

Para mais informações sobre como configurar políticas de roteiro, consulte o documento de referência Representação JSON do SoftwareRecipe.

Crie uma política de convidado.

Quando você cria uma política de convidado, o nome dela precisa atender aos seguintes requisitos de nomenclatura:

  • Ter somente letras minúsculas, números e hifens
  • Começar com uma letra
  • Terminar com um número ou uma letra
  • Ter entre 1 e 63 caracteres
  • Cada ID de política precisa ser exclusivo em um projeto

Use um dos métodos a seguir para criar uma política de convidado.

gcloud

Use o comando os-config guest-policies create para criar uma política de convidado.

gcloud beta compute os-config guest-policies create POLICY_ID \
    --file=FILE

Substitua:

  • POLICY_ID: o nome da política de convidado que você quer criar;
  • FILE: o arquivo JSON ou YAML que contém as especificações da política de convidado. Para ver exemplos de configurações, consulte Exemplos de arquivos YAML da política de convidado.

REST

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

POST https://osconfig.googleapis.com/v1beta/projects/PROJECT_ID/guestPolicies?guestPolicyId=POLICY_ID

{
 For more information, see Guest policy JSON
}

Substitua:

  • PROJECT_ID: o ID do projeto.
  • POLICY_ID: o nome da política de convidado.

Para ver exemplos de configurações, consulte Exemplos de arquivos YAML da política de convidado.

Solução de problemas

Para resolver problemas de uma política de convidado, consulte Como depurar uma política de convidado.

A seguir