Questão nº 113
Questão de Tecnologia da Informação · FGV CGE-SP 2025 (nº 113)
Um arquiteto de infraestrutura está revisando a adoção de Infrastructure as Code (IaC) com Terraform em um projeto de modernização. A equipe já criou módulos reutilizáveis e utiliza workspaces para isolar ambientes (dev/hom/prod).
Ao inspecionar o repositório, foram encontrados os seguintes arquivos: main.tf, variables.tf, terraform.tfstate, terraform.tfvars e .terraform.lock.hcl
Considerando as melhores práticas de segurança e gerenciamento de estado em Terraform, assinale a afirmativa correta.
- AO arquivo .terraform.lock.hcl deve ser incluído no .gitignore para evitar conflitos entre ambientes, e o state file deve ser armazenado em backend remoto com state locking habilitado utilizando DynamoDB ou equivalente.
- BO arquivo terraform.tfstate deve ser versionado no Git para garantir rastreabilidade de mudanças, enquanto terraform.tfvars contendo credenciais deve ser armazenado em secrets manager e referenciado via variáveis de ambiente.
- COs arquivos terraform.tfstate devem ser excluídos do controle de versão e armazenados em backend remoto com criptografia, enquanto .terraform.lock.hcl deve ser versionado para garantir consistência de versões de providers entre execuções. (alternativa correta)
- DO arquivo variables.tf contendo valores sensíveis deve ser criptografado com GPG antes do commit, e múltiplos state files podem compartilhar o mesmo backend S3 bucket sem isolamento de paths desde que utilizem workspace diferente.
- EO state file local deve ser mantido apenas em ambientes de desenvolvimento, e a produção deve utilizar backend remoto sem versionamento, priorizando performance de leitura através de cache local do Terraform.
Resposta comentada
Gabarito Alternativa C
O estado do Terraform é um arquivo (terraform.tfstate) que registra a correspondência entre os recursos da sua infraestrutura real e a sua configuração em código. Gerenciar esse arquivo de forma segura e consistente é fundamental para a estabilidade e segurança da sua infraestrutura.
- A) Incorreta: O arquivo
.terraform.lock.hcldeve ser versionado no Git para garantir que todos os membros da equipe e sistemas de CI/CD utilizem as mesmas versões de providers, evitando inconsistências. Incluí-lo no.gitignoreé uma má prática. - B) Incorreta: O arquivo
terraform.tfstatenão deve ser versionado diretamente no Git, pois pode conter dados sensíveis, é propenso a conflitos em equipes e o Git não oferece os mecanismos de bloqueio e versionamento adequados para ele. Essa é a armadilha da banca, pois "rastreabilidade de mudanças" soa bem, mas não para o state file no Git. - C) Correta: Os arquivos
terraform.tfstatedevem ser excluídos do controle de versão (Git) e armazenados em um backend remoto (como S3, Azure Blob Storage, GCS) com criptografia e state locking para segurança, colaboração e durabilidade. O arquivo.terraform.lock.hcldeve ser versionado para garantir que as versões dos providers sejam consistentes entre todas as execuções e ambientes. - D) Incorreta: O arquivo
variables.tfdefine as variáveis, não seus valores. Valores sensíveis geralmente ficam emterraform.tfvarsou são passados via variáveis de ambiente/secrets manager. Criptografarterraform.tfvarscom GPG antes do commit não é a prática recomendada; o ideal é usar um secrets manager. Além disso, múltiplos state files (ou workspaces) em um mesmo backend S3 precisam de isolamento de paths (chaves únicas) para evitar corrupção. - E) Incorreta: A produção deve utilizar um backend remoto com versionamento do state file habilitado. O versionamento é crucial para auditoria, recuperação de desastres e reversão de estados em caso de erro. Priorizar performance sobre a segurança e a capacidade de recuperação é uma má prática.
Fonte: FGV CGE-SP 2025 Auditor Estadual de Controle - Tecnologia da Informação (Caderno Tipo 1). Reproduzida para fins de estudo.