Neste tutorial, descrevemos 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
- Crie uma postura de segurança.
- Implantar a postura em um projeto.
- Verifique se há violações em um arquivo do Terraform de exemplo.
- Corrija as violações no arquivo do Terraform e verifique o arquivo novamente para confirmar a correção.
Antes de começar
Configurar permissões
-
Verifique se você tem os seguintes papéis na organização: Project Creator and Security Posture Admin
Verificar os papéis
-
No console do Google Cloud, abra a página IAM.
Acessar IAM - Selecionar uma organização.
-
Na coluna Principal, encontre a linha que contém seu endereço de e-mail.
Caso seu endereço de e-mail não esteja nessa coluna, isso significa que você não tem papéis.
- Na coluna Papel da linha com seu endereço de e-mail, verifique se a lista de papéis inclui os papéis necessários.
Conceder os papéis
-
No console do Google Cloud, abra a página IAM.
Acesse o IAM - Selecionar uma organização.
- Clique em CONCEDER ACESSO.
- No campo Novos participantes, digite seu endereço de e-mail.
- Na lista Selecionar um papel, escolha um.
- Para conceder outros papéis, clique em Adicionar outro papel e adicione cada papel adicional.
- Clique em Save.
-
Configurar o Cloud Shell
-
No Console do Google Cloud, ative o Cloud Shell.
Na parte inferior do Console do Google Cloud, uma sessão do Cloud Shell é iniciada e exibe um prompt de linha de comando. O Cloud Shell é um ambiente shell com a CLI do Google Cloud já instalada e com valores já definidos para o projeto atual. A inicialização da sessão pode levar alguns segundos.
- Encontre o ID da sua organização:
gcloud organizations list
prepare o ambiente
- Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
- Instale a CLI do Google Cloud.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
-
Crie ou selecione um projeto do Google Cloud.
-
Crie um projeto do Google Cloud:
gcloud projects create PROJECT_ID
Substitua
PROJECT_ID
por um nome para o projeto do Google Cloud que você está criando. -
Selecione o projeto do Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_ID
pelo nome do projeto do Google Cloud.
-
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Ative as APIs Security posture service and Security Command Center management:
gcloud services enable securityposture.googleapis.com
securitycentermanagement.googleapis.com - Instale a CLI do Google Cloud.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
-
Crie ou selecione um projeto do Google Cloud.
-
Crie um projeto do Google Cloud:
gcloud projects create PROJECT_ID
Substitua
PROJECT_ID
por um nome para o projeto do Google Cloud que você está criando. -
Selecione o projeto do Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_ID
pelo nome do projeto do Google Cloud.
-
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Ative as APIs Security posture service and Security Command Center management:
gcloud services enable securityposture.googleapis.com
securitycentermanagement.googleapis.com - Copie o ID do projeto:
gcloud projects describe PROJECT_ID
- Inicialize o Terraform:
terraform init
Criar e implantar uma postura
No Cloud Shell, inicie o Cloud Shell 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 seguinte código no arquivo:
name: organizations/ORGANIZATION_ID/locations/global/postures/example-standard state: ACTIVE policySets: - policySetId: policySet1 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
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 de 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_ID
Substitua:
ORGANIZATION_ID
: o código da sua organização.POSTURE REVISION_ID
: o ID de revisão de postura que você copiou.PROJECT_ID
: o ID do projeto.
Crie o arquivo do Terraform e valide-o
No Cloud Shell, inicie o Cloud Shell Editor.
Crie um arquivo do Terraform chamado
main.tf
.Cole o seguinte código 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_ID
pelo 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 violações a seguir:
- O
mtu
paraexample_network
não é 1.000. - O
initial_node_count
paraexample_node_pool
não é 3. - O
example_bucket
não tem acesso uniforme no nível do bucket ativado. - A geração de registros não está ativada no
example_bucket
.
- O
Resolver violações
No Cloud Shell, inicie o Cloud Shell Editor.
Atualize o arquivo
main.tf
com 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_ID
pelo 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.
Exclua o projeto
Exclua um projeto do Google Cloud:
gcloud projects delete PROJECT_ID
A seguir
- Consulte Validar a 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.