Como criar uma política de convidado

Use políticas de convidado para manter configurações de software consistentes nas máquinas virtuais (VMs) 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 sua VM.
  3. Configure o arquivo JSON ou YAML da política de convidado.
  4. Crie a política de convidado.

Antes de começar

Sistemas operacionais compatíveis

Para ver a lista completa de sistemas operacionais e versões compatíveis com o gerenciamento de configuração do SO (políticas de convidado), consulte os detalhes do sistema operacional.

Limitações

  • Todas as instâncias segmentadas por uma política de convidado são atualizadas 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 nesta versão Beta. 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.

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ê usa políticas de convidado, o acesso é controlado por meio de permissões do IAM e é registrado em auditoria. No entanto, a capacidade de executar o código na VM ainda é uma opção e pode representar 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.

Como configurar a VM

Para usar o serviço de Gerenciamento de configuração do SO, é necessário configurar a API do serviço de configuração do SO e instalar o agente de configuração do SO. Para instruções detalhadas, consulte Como configurar o VM Manager.

Como configurar 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:

Atribuições

É 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 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 Como configurar 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 um pacote my-package que precisa manter-se 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

Usando o gerenciador de pacotes yum, instale o agente do Cloud Monitoring 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.

Como criar uma política de convidado

É possível criar uma política de convidado usando a ferramenta de linha de comando gcloud ou a API Cloud OS Config.

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

Na ferramenta de linha de comando gcloud e na API Cloud OS Config, o nome da política de visitante será conhecido como policy-id.

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.

API

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.

A seguir