Criar uma zona de destino usando o Stellar Engine

O processo de implantação da landing zone consiste em estágios. Em cada etapa, você precisa adicionar determinadas variáveis ao arquivo terraform.tfvars. Depois de concluir uma etapa, o Terraform grava um arquivo STAGE_NAME-tfvar.auto.tfvars.json no bucket do Cloud Storage criado na etapa inicial. As etapas subsequentes usam a Google Cloud CLI para copiar os arquivos e um arquivo de provedor que representa uma conta de serviço específica da etapa na nova pasta da etapa.

Dependendo do número de locatários, a implantação de um novo ambiente leva aproximadamente uma hora.

Pré-requisitos

Conclua as tarefas a seguir antes de implantar o Stellar Engine.

Configurar Google Cloud

Siga estas etapas para configurar o Google Cloud:

  1. Selecione uma Google Cloud organização. Se você criar uma organização, faça login no Google Admin Console pelo menos uma vez.

  2. Configure vários administradores para implementar a segregação de funções. Em um ambiente de teste, um usuário pode ter funções de administrador para todos os recursos. No entanto, em um ambiente de produção, você precisa de vários administradores. Para mais informações, consulte Configurar o recurso de organização.

  3. Ative a verificação em duas etapas para todas as contas privilegiadas.

  4. Desative o Cloud Shell. O Cloud Shell não é compatível com ambientes IL4 ou IL5 e precisa ser desativado por um administrador do Google Workspace.

  5. Se você não tiver um projeto, crie um projeto de bootstrap.

    Criar um projeto

  6. Conclua as seguintes tarefas no projeto de bootstrap:

    1. Ativar o faturamento. Para instruções, consulte Verificar o status de faturamento dos seus projetos.

    2. Ative a API Cloud Monitoring.

      Funções necessárias para ativar APIs

      Para ativar APIs, você precisa da permissão serviceusage.services.enable. Se você criou o projeto, provavelmente já tem essa permissão com o papel de Proprietário (roles/owner). Caso contrário, é possível receber essa permissão com o papel de Administrador do Service Usage (roles/serviceusage.serviceUsageAdmin). Saiba como conceder papéis.

      Ativar a API

  7. Verifique se sua conta de usuário é de superadministrador.

  8. Se a organização não tiver um esquema de classificação de dados, crie um.

Atribuir papéis

Atribua os seguintes papéis do Identity and Access Management à conta de usuário que está implantando o Stellar Engine.

  1. Verifique se você tem os seguintes papéis na organização: Administrador da Transparência no acesso, Administrador do Assured Workloads, Administrador da conta de faturamento, Administrador do Logging, Administrador da organização, Administrador da política da organização, Administrador de papéis da organização, Proprietário, Criador de projetos, Administrador da conta de serviço, Criador do token da conta de serviço, Administrador de tags

    Verificar os papéis

    1. No console do Google Cloud , acesse a página IAM.

      Acessar IAM
    2. Selecione a organização.
    3. Na coluna Principal, encontre todas as linhas que identificam você ou um grupo no qual você está incluído. Para saber em quais grupos você está incluído, entre em contato com o administrador.

    4. Em todas as linhas que especificam ou incluem você, verifique a coluna Papel para ver se a lista de papéis inclui os papéis necessários.

    Conceder os papéis

    1. No console do Google Cloud , acesse a página IAM.

      Acessar IAM
    2. Selecione a organização.
    3. Clique em Conceder acesso.
    4. No campo Novos principais, digite seu identificador de usuário. Normalmente, é o endereço de e-mail de uma Conta do Google.

    5. Clique em Selecionar um papel e pesquise o papel.
    6. Para conceder outros papéis, adicione-os clicando em Adicionar outro papel.
    7. Clique em Salvar.

Se você estiver começando com uma nova organização, execute o seguinte script, que está localizado na pasta fast/stages-aw/0-bootstrap, para aplicar as funções:

./setIAM.sh EMAIL_ADDRESS ORGANIZATION_ID

Substitua:

  • EMAIL_ADDRESS: o endereço de e-mail da sua conta de usuário.
  • ORGANIZATION_ID: o ID da sua organização.

Esse script adiciona todos os papéis, exceto Administrador da conta de faturamento e Superadministrador.

Adicionar grupos e configurar serviços

  1. Adicione os seguintes grupos, conforme descrito em 2. Usuários e grupos:

    • gcp-billing-admins@DOMAIN
    • gcp-developers@DOMAIN
    • gcp-devops@DOMAIN
    • gcp-hybrid-connectivity-admins@DOMAIN
    • gcp-logging-monitoring-admins@DOMAIN
    • gcp-logging-monitoring-viewers@DOMAIN
    • gcp-organization-admins@DOMAIN
    • gcp-vpc-network-admins@DOMAIN
    • gcp-security-admins@DOMAIN

    Acesse a etapa 2

    Substitua DOMAIN pelo seu FQDN.

    Se solicitado, pule a etapa do provedor de identidade.

    O Google pode mudar os nomes padrão dos grupos. É possível criar um grupo manualmente se ele não estiver no guia de configuração.

  2. Ative as APIs Assured Workloads, BigQuery, Cloud Billing, Cloud Logging, Cloud KMS, IAM, Pub/Sub, Resource Manager, Service Account Credentials, Service Usage e Serviço de Política da Organização.

    Funções necessárias para ativar APIs

    Para ativar APIs, você precisa da permissão serviceusage.services.enable. Se você criou o projeto, provavelmente já tem essa permissão com o papel de Proprietário (roles/owner). Caso contrário, é possível receber essa permissão com o papel de Administrador do Service Usage (roles/serviceusage.serviceUsageAdmin). Saiba como conceder papéis.

    Ativar as APIs

  3. Também é possível usar o script fast/stages-aw/0-bootstrap/enableServices.sh para ativar os serviços.

  4. Ative a Transparência no acesso.

  5. Se a cota for menor que 13 projetos, acesse Google Cloud Platform/Projeto de API: solicitar aumento da cota de faturamento para pedir 13 projetos. Para mais informações, consulte Ver e gerenciar cotas.

Configurar o ambiente local

Conclua as etapas a seguir para configurar seu ambiente local:

  1. Clone o repositório do Stellar Engine no GitHub.
  2. Instalar o SDK do Google Cloud.
  3. Atualize seu Terraform local para a versão 1.8.1 ou mais recente.
  4. Instale o binário jq.
  5. Autentique e defina o projeto de bootstrap como o projeto ativo:

    gcloud auth login
    gcloud config set project BOOTSTRAP_PROJECT_ID
    gcloud auth application-default login
    

Modificar módulos

Na maioria dos casos, é possível usar o repositório sem alterações. Se você precisar modificar um módulo, copie todo o módulo e use a convenção de nomenclatura <module-se> para evitar conflitos de mesclagem quando as atualizações periódicas forem extraídas do repositório de estrutura de fundação do Cloud.

Executar a etapa 0: inicialização

A etapa 0 alinha as partes atuais da rede com o estado do Terraform. A etapa 0 cria as contas de serviço e os projetos iniciais de bootstrap da IaC. A etapa 0 foi projetada para fazer a transição do projeto inicial do usuário para um novo projeto principal e migrar o estado do Terraform.

  1. Mude o diretório para fast/stages-aw/0-bootstrap.

  2. Copie o arquivo terraform.tfvars.sample:

    cp terraform.tfvars.sample terraform.tfvars
    
  3. Copie o arquivo providers.tf.tmp para o arquivo 0-bootstrap-providers.tf:

    cp providers.tf.tmp 0-bootstrap-providers.tf
    
  4. Atualize as informações em fast/stages-aw/0-bootstrap/terraform.tfvars:

    billing_account = {
    id = "BILLING_ACCOUNT_ID"
    }
    regions = {
    primary = "REGION"
    }
    organization = {
    domain = "DOMAIN"
    id = "ORGANIZATION_ID"
    customer_id = "CUSTOMER_ID"
    }
    outputs_location = "~/fast-config"
    prefix = "PREFIX"
    log_sinks = {
    audit-logs = {
    filter = "logName:\"/logs/cloudaudit.googleapis.com%2Factivity\" OR logName:\"/logs/cloudaudit.googleapis.com%2Fsystem_event\" OR protoPayload.metadata.@type=\"type.googleapis.com/google.cloud.audit.TransparencyLog\""
    type = "logging"
    }
    vpc-sc = {
    filter = "protoPayload.metadata.@type=\"type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata\""
    type = "logging"
    }
    workspace-audit-logs = {
    filter = "logName:\"/logs/cloudaudit.googleapis.com%2Fdata_access\" and protoPayload.serviceName:\"login.googleapis.com\""
    type = "logging"
    }
    empty-audit-logs = {
    filter = ""
    type = "logging"
    }
    }
    org_policies_config = {
      constraints = {
        "ALLOWED_POLICY_MEMBER_DOMAINS" = []
        }
      }
    fast_features = {
    envs = true
    }
    assured_workloads = {
    regime = "COMPLIANCE_REGIME"
    location = "LOCATION"
    }
    bootstrap_project = "BOOTSTRAP_PROJECT_ID"
    alert_email = "ALERT_EMAIL"
    

    Substitua:

    • BILLING_ACCOUNT_ID: a conta de faturamento a ser usada para a implantação dos ambientes. Para encontrar as informações da conta de faturamento, consulte o console Google Cloud .

      Acessar "Faturamento"

    • REGION: a região principal para implantar recursos. O padrão é us-east4 para IL5 e FedRAMP.

      Para adicionar uma região secundária em que implantar recursos, adicione secondary=secondary.

    • DOMAIN: o nome de domínio totalmente qualificado (FQDN). Para conferir o FQDN, execute gcloud organizations list.

    • ORGANIZATION: o ID da organização para a Google Cloud organização. Para conferir o ID da organização, execute gcloud organizations list.

    • CUSTOMER_ID: o ID do cliente do diretório do Google Workspace. Para ver o ID, execute gcloud organizations list.

    • PREFIX: o prefixo a ser anexado aos nomes de projetos e recursos implantados. O nome do projeto precisa ser globalmente único, e o prefixo precisa ter no máximo seis caracteres. Um erro 409 ocorre se o nome do projeto não for exclusivo.

    • ALLOWED_POLICY_MEMBER_DOMAINS: se necessário, atualize com outros IDs de cliente. Para mais informações, consulte Restringir identidades com compartilhamento restrito por domínio.

    • COMPLIANCE_REGIME: o regime de conformidade deste ambiente, um de IL4, IL5, FEDRAMP_HIGH e COMPLIANCE_REGIME_UNSPECIFIED. Se você não quiser usar o Assured Workloads, defina esse valor como COMPLIANCE_REGIME_UNSPECIFIED.

    • LOCATION: a região dos EUA em que os recursos serão implantados. Regiões birregionais, como NAM9 ou continentes, não são aceitas.

    • BOOTSTRAP_PROJECT_ID: o ID do projeto de bootstrap que você criou em Configurar Google Cloud.

    • ALERT_EMAIL: o endereço de e-mail para enviar notificações de alerta de geração de registros.

  5. Execute terraform init.

  6. Execute terraform apply:

    terraform apply -var bootstrap_user=$(gcloud config list --format
     'value(core.account)')
    
  7. Digite yes quando solicitado.

  8. Mude para o novo projeto:

    gcloud config set project PREFIX-prod-iac-core-0
    
  9. Copie o novo arquivo de provedores locais do Terraform:

    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/providers/0-bootstrap-providers.tf ./
    
  10. Migre o estado de local para remoto:

    terraform init --migrate-state
    
  11. Digite yes quando solicitado.

  12. Execute ./import.sh.

  13. Execute terraform apply mais uma vez. Digite yes quando solicitado.

Executar a etapa 1: gerenciamento de recursos

A etapa 1 cria as diferentes pastas, projetos e contas de serviço no nível da organização que são usados nas etapas subsequentes. Para criar o ambiente, atualize o arquivo terraform.tfvars em fast/stages-aw/1-resman para incluir uma variável tenants. Cada locatário (por exemplo, uma agência federal específica ou um grupo de desenvolvimento interno) tem um limite dedicado e isolado para executar as cargas de trabalho. Cada locatário herda os controles de segurança centralizados, o perímetro de rede, as proteções de política e os coletores registro de auditoria criados nos estágios 0 e 2.

  1. Se você estiver usando uma conta de faturamento externa, consulte Configurar o faturamento ao usar contas de faturamento externas.

  2. Mude o diretório para fast/stages-aw/1-resman.

  3. Copie o arquivo terraform.tfvars.sample:

    cp terraform.tfvars.sample terraform.tfvars
    
  4. Atualize o terraform.tfvars desta maneira:

    tenants = {
    ten-1 = {
      admin_principal = "group:gcp-devops@DOMAIN"
      descriptive_name = "TENANT_ONE_NAME"
      locations = {
        gcs = "REGION"
        kms = "REGION"
        }
      },
    ten-2 = {
      admin_principal = "group:gcp-devops@DOMAIN"
      descriptive_name = "TENANT_TWO_NAME"
      locations = {
        gcs = "REGION"
        kms = "REGION"
        }
      }
    }
    fast_features = {
    envs = true
    }
    envs_folders = {
    Prod = {
      admin = "gcp-organization-admins@DOMAIN"
    },
    Int = {
      admin = "gcp-organization-admins@DOMAIN"
    },
    Test = {
      admin = "gcp-organization-admins@DOMAIN"
    }
    }
    

    Substitua:

    • DOMAIN: o nome de domínio totalmente qualificado (FQDN) principal. Para conferir o FQDN, execute gcloud organizations list.

    • TENANT_ONE_NAME: o nome do primeiro projeto de locatário implantado. Use no máximo seis caracteres.

    • REGION: a região principal para implantar recursos. O padrão é us-east4 para IL5 e FedRAMP.

    • TENANT_TWO_NAME: o nome do segundo projeto de locatário implantado. Use no máximo seis caracteres.

    Adicione quantas definições de locatário forem necessárias.

  5. Copie os arquivos tfvars do Cloud Storage:

    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/providers/1-resman-providers.tf ./ &&
    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/0-globals.auto.tfvars.json ./ &&
    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/0-bootstrap.auto.tfvars.json ./
    
  6. Execute terraform init.

  7. Execute terraform apply. Digite yes quando solicitado.

Executar a etapa 2: criação de rede

A etapa 2 inclui duas opções de rede: uma para FedRAMP High e outra para IL4 ou IL5.

Configurar redes para o FedRAMP High

  1. Se você estiver usando uma conta de faturamento externa, consulte Configurar o faturamento ao usar contas de faturamento externas.

  2. Mude o diretório para fast/stages-aw/2-networking-a-fedramp-high.

  3. Copie os arquivos tfvars globais e do provedor dos buckets do Cloud Storage:

    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/providers/2-networking-providers.tf ./ && \
    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/0-globals.auto.tfvars.json ./ && \
    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/0-bootstrap.auto.tfvars.json ./ && \
    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/1-resman.auto.tfvars.json ./
    
  4. Copie o arquivo terraform.tfvars.sample:

    cp terraform.tfvars.sample terraform.tfvars
    
  5. No arquivo terraform.tfvars, atualize as sub-redes personalizadas, as sub-redes de proxy, as regras de firewall, os CIDRs nomeados e as regras de política de resposta do DNS.

  6. Execute terraform init.

  7. Execute terraform apply. Digite yes quando solicitado.

Configurar a rede para IL4 ou IL5

Esta etapa implanta um par de firewalls de última geração (NGFWs) da Palo Alto VM-Series na conta de rede. Os NGFWs usam a imagem de implantação Bring Your Own License (BYOL) e exigem que você use o console da Palo Alto para fazer upload de um código de VM e registrá-los. Para mais instruções, consulte o README na pasta de 2-networking-b-il5-ngfw etapa.

  1. Se você estiver usando uma conta de faturamento externa, consulte Configurar o faturamento ao usar contas de faturamento externas.

  2. Mude o diretório para fast/stages-aw/2-networking-b-il5-ngfw.

  3. Copie os arquivos tfvars globais e do provedor dos buckets do Cloud Storage:

    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/providers/2-networking-providers.tf ./ && \
    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/0-globals.auto.tfvars.json ./ && \
    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/0-bootstrap.auto.tfvars.json ./ && \
    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/1-resman.auto.tfvars.json ./
    
  4. Copie o arquivo terraform.tfvars.sample:

    cp terraform.tfvars.sample terraform.tfvars
    
  5. No arquivo terraform.tfvars, atualize as sub-redes personalizadas (incluindo mgmt), sub-redes de proxy, regras de firewall, CIDRs nomeados e regras de política de resposta do DNS.

  6. Execute terraform init.

  7. Execute terraform apply. Digite yes quando solicitado.

    Se você receber um erro informando que uma conta de serviço ou o Cloud Key Management Service não existe, clique em Configurações na conta de armazenamento PREFIX-net-vdss-host no console. A conta de serviço é gerada.

Executar a etapa 3: configuração da conta de segurança e auditoria

A etapa 3 configura os projetos de segurança e auditoria. O projeto de segurança (prod-sec-core-0) contém o Cloud KMS e pode conter o Secret Manager. No IL5, a CMEK é ativada por padrão para o Compute Engine, o Google Kubernetes Engine (GKE), o Cloud Storage e o Cloud SQL. As seguintes restrições de política da organização são aplicadas:

  • gcp.restrictNonCmekServices:
    • denied_values: "compute.googleapis.com"
    • denied_values: "container.googleapis.com"
    • denied_values: "storage.googleapis.com"
    • denied_values: "sqladmin.googleapis.com"
  • gcp.restrictCmekCryptoKeyProjects: gcp.restrictCmekCryptoKeyProjects inclui uma lista de projetos que podem usar a CMEK.

No projeto prod-sec-core-0, os seguintes itens são configurados:

  • Os administradores restritos do Cloud KMS recebem a função de administrador restrito para que possam conceder permissões de descriptografia a outros serviços.
  • Keyrings do Cloud KMS em locais diferentes são provisionados. Os locais do anel de chaves precisam corresponder aos locais do serviço. Por exemplo, um keyring multirregional não pode ser usado em um bucket de armazenamento de uma única região.

O projeto de auditoria contém um bucket de geração de registros para registros de auditoria.

Os administradores de segurança são responsáveis pelo projeto de segurança, e os auditores, pelo projeto de auditoria.

  1. Se você estiver usando uma conta de faturamento externa, consulte Configurar o faturamento ao usar contas de faturamento externas.

  2. Mude o diretório para fast/stages-aw/3-security.

  3. Copie os arquivos de configuração dos buckets do Cloud Storage:

    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/providers/3-security-providers.tf ./ &&
    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/0-globals.auto.tfvars.json ./ &&
    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/0-bootstrap.auto.tfvars.json ./ &&
    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/1-resman.auto.tfvars.json ./
    
  4. Execute terraform init.

  5. Execute terraform apply. Digite yes quando solicitado.

    Se você tiver um problema com as contas de serviço, execute terraform apply novamente.

  6. Execute ./sa_lockdown.sh para desativar as contas de serviço usadas durante a implantação.

Configurar o faturamento ao usar contas de faturamento externas

Se você estiver usando uma conta de faturamento externa, adicione o papel de administrador da conta de faturamento às seguintes contas de serviço:

  • PREFIX-prod-resman-0@PREFIX-prod-iac-core-0.iam.gserviceaccount.com: essa conta é criada na etapa 0.

  • PREFIX-prod-resman-net-0@PREFIX-prod-iac-core-0.iam.gserviceaccount.com: essa conta de serviço é criada na etapa 1.

  • PREFIX-security-0@PREFIX-prod-iac-core-0.iam.gserviceaccount.com: essa conta de serviço é criada na etapa 2.

Para adicionar o papel a essas contas de serviço, conclua Acessar o painel "Permissões" de uma conta do Cloud Billing Cloud e Atualizar papéis e principais no painel "Permissões".

Modificar projetos de locatário

Siga estas etapas ao adicionar ou remover projetos de locatário para uma implantação do Stellar Engine.

  1. Autentique e defina o projeto ativo:

    gcloud auth login
    gcloud config set project PREFIX-prod-iac-core-0
    gcloud auth application-default login
    
  2. Ative as contas de serviço para as etapas:

    1. Mude o diretório para fast/stages-aw/3-security.

    2. Execute ./sa_lockdown.sh --enable.

  3. Aplicar a etapa 1:

    1. Mude o diretório para fast/stages-aw/1-resman.

    2. Atualize as informações em terraform.tfvars de acordo com seus novos requisitos.

    3. Execute terraform init.

    4. Execute terraform apply. Digite yes quando solicitado.

  4. Aplicar a etapa 2:

    1. Mude o diretório para uma das seguintes pastas de rede:

    2. Copie o arquivo tfvars 1-resman do bucket do Cloud Storage:

    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/1-resman.auto.tfvars.json ./
    
    1. Execute terraform init.

    2. Execute terraform apply. Digite yes quando solicitado.

  5. Desative as contas de serviço para as etapas:

    1. Mude o diretório para fast/stages-aw/3-security.

    2. Execute ./sa_lockdown.sh.

Solução de problemas

Esta seção descreve alguns erros comuns e resoluções.

Erro de BigQuery não utilizável na etapa 1

Se você receber um erro informando que bigquery.googleapis.com não pode ser usado em Assured Workloads, faça o seguinte:

  1. No console, acesse a página "Assured Workloads".

    Assured Workloads

  2. Selecione a pasta StellarEngine-COMPLIANCE_REGIME e a pasta "Rede", se aplicável.

  3. Clique em Revisar atualizações disponíveis.

  4. Acesse Serviços permitidos.

  5. Clique em Permitir serviços para adicionar as APIs do BigQuery.

  6. Se for solicitado, clique em Sim para confirmar.

  7. Aguarde cerca de dois minutos e execute terraform apply novamente:

    terraform apply -var bootstrap_user=$(gcloud config list --format 'value(core.account)')
    
  8. Digite yes quando solicitado.

Seu projeto de bootstrap perde o acesso à sua conta de faturamento

Se o projeto de bootstrap perder o acesso à conta de faturamento, reative o faturamento para ele.

Ativar faturamento

Erros de chave do Cloud KMS

Se ocorrerem erros de chave durante o processo de build, talvez seja necessário ativar as chaves manualmente. Para instruções, consulte Ativar uma versão de chave.

Se você receber esses erros, aguarde cerca de um minuto e execute terraform apply novamente.

Em um computador Windows, os links simbólicos podem não funcionar. Talvez seja necessário copiar manualmente arquivos específicos, principalmente psc.tf e log-metric-alerts.tf durante a etapa 2.

Problemas de faturamento ou cota

Se você tiver problemas de faturamento ou de cota, verifique se o projeto de cota está definido. Para isso, execute o seguinte:

gcloud auth application-default set-quota-project PREFIX-prod-iac-core-0

Se quiser, use outro projeto.

A seguir