Para aplicar configurações consistentes do sistema operacional e automatizar a conformidade em toda a Cloud de Confiance by S3NS hierarquia de recursos, use o Terraform para configurar o VM Manager no nível da organização.
Este documento explica como usar o Terraform para ativar automaticamente o VM Manager (API OS Config), definir metadados comuns da instância e atribuir políticas do SO a todos os projetos de destino na hierarquia de recursos.
Para uma visão geral dos recursos do Terraform disponíveis para o VM Manager, consulte Provisionar recursos do VM Manager usando o Terraform.
Antes de começar
-
Configure a autenticação, caso ainda não tenha feito isso.
Com isso, você confirma sua identidade para acesso a Cloud de Confiance by S3NS serviços e APIs do. Para executar
código ou amostras de um ambiente de desenvolvimento local, autentique-se no
Compute Engine com uma destas opções:
Para usar os exemplos do Terraform desta página em um ambiente de desenvolvimento local, instale e inicialize a CLI gcloud e configure o Application Default Credentials com suas credenciais de usuário.
-
Instale a Google Cloud CLI.
-
Configure a CLI gcloud para usar sua identidade federada.
Para mais informações, consulte Fazer login na CLI gcloud com sua identidade federada.
-
Crie credenciais de autenticação local para sua conta de usuário:
gcloud auth application-default login
Se um erro de autenticação for retornado e você estiver usando um provedor de identidade (IdP) externo, confirme se você fez login na CLI gcloud com sua identidade federada.
Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
-
Antes de começar
- Consulte a visão geral da configuração para VM Manager.
- Revise as cotas de configuração do SO.
- Prepare seu ambiente do Terraform.
Permissões do IAM obrigatórias
Para ativar automaticamente o VM Manager e atribuir políticas do SO a vários projetos, a principal ou conta de serviço que executa o Terraform precisa de permissões específicas do Identity and Access Management (IAM).
Permissões do projeto de destino
Para receber as permissões necessárias para ativar o serviço do VM Manager e definir os metadados do projeto, peça ao administrador para conceder a você os seguintes papéis do IAM em cada projeto de destino:
- Administrador do Service Usage (
roles/serviceusage.serviceUsageAdmin) - Administrador da instância do Compute (v1) (
roles/compute.instanceAdmin.v1)
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Esses papéis predefinidos contêm as permissões necessárias para ativar o serviço do VM Manager e definir os metadados do projeto. Para acessar as permissões exatas que são necessárias, expanda a seção Permissões necessárias:
Permissões necessárias
As permissões a seguir são necessárias para ativar o serviço do VM Manager e definir os metadados do projeto:
-
serviceusage.services.enable -
compute.projects.setCommonInstanceMetadata
Essas permissões também podem ser concedidas com papéis personalizados ou outros papéis predefinidos.
Configuração da conta de serviço e do papel personalizado
O Google recomenda que você crie uma conta de serviço dedicada para executar a automação centralizada do Terraform.
Para conceder as permissões necessárias a essa conta de serviço em vários projetos, crie um papel personalizado do IAM no nível da organização:
- Crie um papel personalizado no nível da organização que inclua
serviceusage.services.enableecompute.projects.setCommonInstanceMetadata. - Conceda o papel personalizado à sua conta de serviço no escopo aplicável mais baixo, como a organização ou a pasta. Por exemplo, se todos os projetos de destino estiverem contidos em uma pasta específica, conceda o papel no nível da pasta.
Ativar o VM Manager usando o Terraform
Para ativar o VM Manager e atribuir políticas do SO a vários projetos, use uma das seguintes abordagens automatizadas: projetos de referência ou gerenciamento centralizado de projetos.
Usar projetos de referência
Se a organização usa um módulo de projeto do Terraform padronizado (um projeto de referência) ou um mecanismo aplicado centralmente para provisionar projetos, adicione as seguintes definições de recursos ao projeto de referência:
google_project_servicegoogle_project_service_identitygoogle_project_iam_membergoogle_compute_project_metadata_item
Para ativar o VM Manager, inclua os seguintes recursos de serviço e metadados:
# Enable the OS Config API
resource "google_project_service" "osconfig" {
service = "osconfig.googleapis.com"
disable_on_destroy = false
}
# Explicitly provision the OS Config Service Agent
resource "google_project_service_identity" "osconfig_identity" {
provider = google-beta
project = google_project_service.osconfig.project
service = "osconfig.googleapis.com"
}
# Grant the required role to the explicitly provisioned Service Agent
resource "google_project_iam_member" "osconfig_service_agent_binding" {
project = google_project_service.osconfig.project
role = "roles/osconfig.serviceAgent"
member = "serviceAccount:${google_project_service_identity.osconfig_identity.email}"
}
# Set project metadata to enable VM Manager
resource "google_compute_project_metadata_item" "enable_osconfig" {
key = "enable-osconfig"
value = "TRUE"
}
Para implantar atribuições de políticas do SO em todas as VMs provisionadas pelo projeto de referência, anexe o seguinte recurso de atribuição de política:
resource "google_os_config_os_policy_assignment" "base_security_policy" {
name = "base-security-ospolicy"
description = "Ensure baseline security agent is installed and operational"
location = var.zone
os_policies {
id = "no-op-policy"
mode = "ENFORCEMENT"
resource_groups {
resources {
id = "sample"
exec {
validate {
interpreter = "SHELL"
script = "exit 100"
}
enforce {
interpreter = "SHELL"
script = "exit 100"
}
}
}
}
}
os_policies {
id = "install-security-agent"
mode = "ENFORCEMENT"
resource_groups {
resources {
id = "install-agent"
pkg {
desired_state = "INSTALLED"
apt {
name = "security-agent"
}
yum {
name = "security-agent"
}
}
}
}
}
instance_filter {
all = true
}
rollout {
disruption_budget {
percent = 10
}
min_wait_duration = "3.5s"
}
}
Gerenciar todos os projetos de modo centralizado
Se a modificação de um projeto de referência não for aplicável, você poderá gerenciar centralmente a ativação do VM Manager e as atribuições de políticas do SO em vários projetos usando o argumento for_each do Terraform.
Para ativar o VM Manager em projetos de destino, use o argumento for_each para iterar no mapa do projeto:
resource "google_project_service" "osconfig" {
for_each = var.target_projects
project = each.key
service = "osconfig.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service_identity" "osconfig_identity" {
provider = google-beta
for_each = var.target_projects
project = google_project_service.osconfig[each.key].project
service = "osconfig.googleapis.com"
}
resource "google_project_iam_member" "osconfig_service_agent_binding" {
for_each = var.target_projects
project = google_project_service.osconfig[each.key].project
role = "roles/osconfig.serviceAgent"
member = "serviceAccount:${google_project_service_identity.osconfig_identity[each.key].email}"
}
resource "google_compute_project_metadata_item" "enable_osconfig" {
for_each = var.target_projects
project = each.key
key = "enable-osconfig"
value = "TRUE"
}
Para atribuir uma política do SO a projetos de destino, defina o recurso de atribuição de política com o argumento for_each:
resource "google_os_config_os_policy_assignment" "observability_agent_policy" {
for_each = var.target_projects
project = each.key
name = "observability-agent-ospolicy"
description = "Install Google Cloud Observability agent on CentOS VMs across target projects"
location = var.zone
os_policies {
id = "setup-repo-and-install-package-policy"
mode = "ENFORCEMENT"
resource_groups {
inventory_filters {
os_short_name = "centos"
os_version = "8"
}
resources {
id = "setup-repo"
repository {
yum {
id = "google-cloud-ops-agent"
display_name = "Google Cloud Ops Agent Repository"
base_url = "https://packages.cloud.google.com/yum/repos/google-cloud-ops-agent-el8-x86_64-all"
gpg_keys = [
"https://packages.cloud.google.com/yum/doc/yum-key.gpg",
"https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg",
]
}
}
}
resources {
id = "install-pkg"
pkg {
desired_state = "INSTALLED"
yum {
name = "google-cloud-ops-agent"
}
}
}
}
}
instance_filter {
all = true
}
rollout {
disruption_budget {
percent = 10
}
min_wait_duration = "3.5s"
}
}
Definir projetos de destino
É possível fornecer o mapa var.target_projects à configuração do Terraform usando o escopo fixo ou dinâmico:
- Escopo fixo. Mantenha uma lista explícita de IDs de projetos em uma variável local ou arquivo de dados externo. O escopo fixo exige que você atualize a lista sempre que criar ou excluir projetos.
Escopo dinâmico. Descubra projetos de destino com base em regras de hierarquia de recursos (por exemplo, todos os projetos em uma organização ou pasta). É possível consultar projetos usando a fonte de dados
google_projects:data "google_projects" "in_folder" { filter = "parent.id:${local.folder_id}" }Para processar exceções, filtre os projetos que contêm rótulos de exclusão específicos. Também é possível executar scripts externos usando
local_execque executam comandos da Google Cloud CLI (comogcloud asset search-all-resources) para gerar listas de destino dinâmicas.
Estabelecer um fluxo de trabalho automatizado sem estado
Quando você usa o escopo dinâmico, a lista de projetos de destino muda constantemente. O uso de um arquivo de estado persistente padrão do Terraform exige esforço manual para importar novos recursos e remover projetos excluídos do estado.
Para gerenciar o escopo dinâmico com eficiência, implemente um fluxo de trabalho automatizado sem estado usando o Cloud Build:
- Inicialize o Terraform. Execute
terraform initusando um back-end local temporário e não persistente. - Descubra projetos de destino. Gere a lista atual de projetos de destino com base nos critérios de escopo dinâmico.
- Importe recursos atuais. Execute
terraform importpara extrair os recursos existentesgoogle_project_service,google_project_service_identity,google_project_iam_member,google_compute_project_metadata_itemegoogle_os_config_os_policy_assignmentpara o estado local. - Aplique a configuração. Execute comandos padrão do Terraform (
terraform planeterraform apply), transmitindo a lista de projetos descoberta às declarações. - Armazene artefatos de execução. Opcionalmente, salve as saídas do plano, os snapshots de estado e os resumos de cópia em um bucket do Cloud Storage para auditoria.
Programe o pipeline do Cloud Build para ser executado periodicamente (por exemplo, diariamente ou semanalmente) para detectar automaticamente a variação de configuração e aplicar a conformidade em toda a organização.
Conferir o status do VM Manager no nível da organização
Depois de configurar o VM Manager na organização, é possível conferir os relatórios de ativação e status do sistema operacional em todos os projetos da hierarquia. Ao exportar os dados do Inventário de recursos do Cloud para o BigQuery, é possível executar consultas SQL para verificar se o VM Manager está ativado, conferir as versões do agente de configuração do SO e inspecionar os detalhes do sistema operacional em todos os projetos da organização.
Para saber como exportar dados e executar consultas de relatório de status, consulte Conferir o status do VM Manager na organização usando o Inventário de recursos do Cloud e o BigQuery.