Este tutorial descreve como verificar se a infraestrutura como código (IaC, na sigla em inglês) não viola as políticas da organização ou os detectores da Análise de integridade da segurança.
Objetivos
- Criar uma postura de segurança.
- Implantar a postura em um projeto.
- Verificar um arquivo de exemplo do Terraform em busca de violações.
- Corrigir as violações no arquivo do Terraform e verificar o arquivo novamente para confirmar a correção.
Antes de começar
Configurar permissões
-
No Google Cloud console, acesse a página IAM.
Acessar IAM - Selecione a organização.
-
Na coluna Principal, encontre todas as linhas que identificam você ou um grupo em que você está incluído. Para saber em quais grupos você está incluído, entre em contato com o administrador.
- Para todas as linhas que especificam ou incluem você, verifique a coluna Papel para saber se a lista de papéis inclui os papéis necessários.
-
No Google Cloud console, acesse a página IAM.
Acessar IAM - Selecione a organização.
- Clique em Conceder acesso.
-
No campo Novos principais, digite seu identificador de usuário. Normalmente, é o identificador de um usuário em um pool de identidades de força de trabalho. Saiba mais em Representar usuários do pool de força de trabalho nas políticas do IAM ou entre em contato com seu administrador.
- Clique em Selecionar um papel e pesquise o papel.
- Para conceder outros papéis, clique em Adicionar outro papel e adicione cada papel adicional.
- Clique em Salvar.
Verifique se você tem os seguintes papéis na organização: Criador de projetos e Administrador de postura de segurança.
Verificar os papéis
Conceder os papéis
Configurar o Cloud Shell
- Encontre o ID da organização:
gcloud organizations list
No Google Cloud console, ative o Cloud Shell.
Na parte de baixo do Google Cloud console, uma sessão do Cloud Shell é iniciada e exibe um prompt de linha de comando. O Cloud Shell é um ambiente shell com a Google Cloud CLI já instalada e com valores já definidos para o projeto atual. A inicialização da sessão pode levar alguns segundos.
Prepare o ambiente
-
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.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
Crie ou selecione um Google Cloud projeto.
Papéis necessários para selecionar ou criar um projeto
- Selecionar um projeto: a seleção de um projeto não requer um papel específico do IAM. Você pode selecionar qualquer projeto em que tenha recebido um papel.
-
Criar um projeto: para criar um projeto, você precisa do papel Criador de projetos
(
roles/resourcemanager.projectCreator), que contém aresourcemanager.projects.createpermissão. Saiba como conceder papéis.
-
Crie um Google Cloud projeto do:
gcloud projects create PROJECT_ID
Substitua
PROJECT_IDpor um nome para o Google Cloud projeto do que você está criando. -
Selecione o Google Cloud projeto do que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_IDpelo nome do Google Cloud projeto do.
-
Verifique se o faturamento está ativado para o Google Cloud projeto.
Ative o serviço de postura de segurança e as APIs de gerenciamento do Security Command Center:
Funções necessárias para ativar APIs
Para ativar as APIs, é necessário ter a permissão
serviceusage.services.enable. Se você criou o projeto, provavelmente já tem essa permissão pelo papel Proprietário (roles/owner). Caso contrário, você pode receber essa permissão pelo papel Administrador de uso do serviço (roles/serviceusage.serviceUsageAdmin). Saiba como conceder papéis.gcloud services enable securityposture.googleapis.com
securitycentermanagement.googleapis.com - Copie o número do projeto. Você vai precisar do número do projeto para definir o recurso de destino ao implantar a postura.
gcloud projects describe PROJECT_ID
- Inicialize o Terraform:
terraform init
Criar e implantar uma postura
No Cloud Shell, inicie o editor. Para iniciar o editor, clique em
Abrir editor na barra de ferramentas da janela do Cloud Shell.Crie um arquivo YAML chamado
example-standard.yaml.Cole o código a seguir no arquivo:
name: organizations/ORGANIZATION_ID/locations/global/postures/example-standard state: ACTIVE policySets: - policies: - constraint: orgPolicyConstraintCustom: customConstraint: actionType: ALLOW condition: "resource.initialNodeCount == 3" description: Set initial node count to be exactly 3. displayName: fixedNodeCount methodTypes: - CREATE name: organizations/ORGANIZATION_ID/customConstraints/custom.fixedNodeCount resourceTypes: - container.googleapis.com/NodePool policyRules: - enforce: true policyId: fixedNodeCount - constraint: securityHealthAnalyticsCustomModule: config: customOutput: {} description: Set MTU for a network to be exactly 1000. predicate: expression: "!(resource.mtu == 1000)" recommendation: Only create networks whose MTU is 1000. resourceSelector: resourceTypes: - compute.googleapis.com/Network severity: HIGH displayName: fixedMTU moduleEnablementState: ENABLED policyId: fixedMTU - constraint: securityHealthAnalyticsModule: moduleEnablementState: ENABLED moduleName: BUCKET_POLICY_ONLY_DISABLED policyId: bucket_policy_only_disabled - constraint: securityHealthAnalyticsModule: moduleEnablementState: ENABLED moduleName: BUCKET_LOGGING_DISABLED policyId: bucket_logging_disabled policySetId: policySet1
Substitua ORGANIZATION_ID pelo ID da organização.
No Cloud Shell, crie a postura:
gcloud scc postures create organizations/ORGANIZATION_ID/locations/global/postures/example-standard --posture-from-file=example-standard.yaml
Copie o ID da revisão de postura gerado pelo comando.
Implante a postura no projeto:
gcloud scc posture-deployments create organizations/ORGANIZATION_ID/locations/global/postureDeployments/example-standard \ --posture-name=organizations/ORGANIZATION_ID/locations/global/postures/example-standard \ --posture-revision-id="POSTURE_REVISION_ID" \ --target-resource=projects/PROJECT_NUMBER
Substitua:
ORGANIZATION_ID: o ID da sua organização.POSTURE REVISION_ID: o ID da revisão de postura que você copiou.PROJECT_NUMBER: o número do projeto.
Criar o arquivo do Terraform e validar
No Cloud Shell, inicie o editor.
Crie um arquivo do Terraform chamado
main.tf.Cole o código a seguir no arquivo:
terraform { required_providers { google = { source = "hashicorp/google" } } } provider "google" { region = "us-central1" zone = "us-central1-c" } resource "google_compute_network" "example_network"{ name = "example-network-1" delete_default_routes_on_create = false auto_create_subnetworks = false routing_mode = "REGIONAL" mtu = 100 project = "PROJECT_ID" } resource "google_container_node_pool" "example_node_pool" { name = "example-node-pool-1" cluster = "example-cluster-1" project = "PROJECT_ID" initial_node_count = 2 node_config { preemptible = true machine_type = "e2-medium" } } resource "google_storage_bucket" "example_bucket" { name = "example-bucket-1" location = "EU" force_destroy = true project = "PROJECT_ID" uniform_bucket_level_access = false }Substitua
PROJECT_IDpelo ID do projeto que você criou.No Cloud Shell, crie o arquivo de plano do Terraform e converta-o para o formato JSON:
terraform plan -out main.plan terraform show -json main.plan > mainplan.json
Crie o relatório de validação de IaC para
mainplan.json:gcloud scc iac-validation-reports create organizations/ORGANIZATION_ID/locations/global --tf-plan-file=mainplan.json
Esse comando retorna um relatório de validação de IaC que descreve as seguintes violações:
- O
mtudeexample_networknão é 1000. - O
initial_node_countdeexample_node_poolnão é 3. - O
example_bucketnão tem acesso uniforme no nível do bucket ativado. - O
example_bucketnão tem a geração de registros ativada.
- O
Resolver violações
No Cloud Shell, inicie o editor.
Atualize o arquivo
main.tfcom as seguintes mudanças:terraform { required_providers { google = { source = "hashicorp/google" } } } provider "google" { region = "us-central1" zone = "us-central1-c" } resource "google_compute_network" "example_network"{ name = "example-network-1" delete_default_routes_on_create = false auto_create_subnetworks = false routing_mode = "REGIONAL" mtu = 1000 project = "PROJECT_ID" } resource "google_container_node_pool" "example_node_pool" { name = "example-node-pool-1" cluster = "example-cluster-1" project = "PROJECT_ID" initial_node_count = 3 node_config { preemptible = true machine_type = "e2-medium" } } resource "google_storage_bucket" "example_bucket" { name = "example-bucket-1" location = "EU" force_destroy = true project = "PROJECT_ID" uniform_bucket_level_access = true logging { log_bucket = "my-unique-logging-bucket" // Create a separate bucket for logs log_object_prefix = "tf-logs/" // Optional prefix for better structure } }Substitua
PROJECT_IDpelo ID do projeto que você criou.No Cloud Shell, crie o arquivo de plano do Terraform e converta-o para o formato JSON:
terraform plan -out main.plan terraform show -json main.plan > mainplan.json
Recrie o relatório de validação de IaC para
mainplan.json:gcloud scc iac-validation-reports create organizations/ORGANIZATION_ID/locations/global --tf-plan-file=mainplan.json
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.
Excluir o projeto
Exclua um Google Cloud projeto do:
gcloud projects delete PROJECT_ID
A seguir
- Analise Validar sua IaC em relação às políticas da organização.
- Confira arquiteturas de referência, diagramas, tutoriais e práticas recomendadas do Google Cloud. Confira o Centro de arquitetura do Cloud.