
Infraestrutura Terraform intencionalmente vulnerável para aprender detecção de configurações incorretas em nuvem e práticas de DevSecOps nas plataformas AWS, Azure e GCP.
TerraGoat é o repositório Terraform "Vulnerável por Design" da Bridgecrew.

TerraGoat é o repositório Terraform "Vulnerável por Design" da Bridgecrew. TerraGoat é um projeto de aprendizagem e treinamento que demonstra como erros de configuração comuns podem chegar a ambientes de nuvem em produção.
O TerraGoat foi construído para permitir que DevSecOps projetem e implementem uma estratégia sustentável de prevenção de má configuração. Ele pode ser usado para testar um framework de política como código como Bridgecrew & Checkov, linters inline, hooks de pré-commit ou outros métodos de varredura de código.
O TerraGoat segue a tradição de projetos *Goat existentes que fornecem uma base de treinamento para praticar a implementação de melhores práticas de desenvolvimento seguro para infraestrutura em nuvem.
Antes de prosseguir, tome nota destes avisos:
⚠️ O TerraGoat cria recursos AWS intencionalmente vulneráveis na sua conta. NÃO implante o TerraGoat em um ambiente de produção ou ao lado de quaisquer recursos AWS sensíveis.
Para evitar que infraestrutura vulnerável chegue à produção, veja: Bridgecrew & checkov, a ferramenta de análise estática de código aberto para infraestrutura como código.
Você pode implantar várias stacks do TerraGoat em uma única conta AWS usando o parâmetro TF_VAR_environment.
export TERRAGOAT_STATE_BUCKET="mydevsecops-bucket" export TF_VAR_company_name=acme export TF_VAR_environment=mydevsecops export TF_VAR_region="us-west-2"
aws s3api create-bucket --bucket $TERRAGOAT_STATE_BUCKET
--region $TF_VAR_region --create-bucket-configuration LocationConstraint=$TF_VAR_region
aws s3api put-bucket-versioning --bucket $TERRAGOAT_STATE_BUCKET --versioning-configuration Status=Enabled
aws s3api put-bucket-encryption --bucket $TERRAGOAT_STATE_BUCKET --server-side-encryption-configuration '{ "Rules": [ { "ApplyServerSideEncryptionByDefault": { "SSEAlgorithm": "aws:kms" } } ] }'
#### Aplicar TerraGoat (AWS)```bash
cd terraform/aws/
terraform init \
-backend-config="bucket=$TERRAGOAT_STATE_BUCKET" \
-backend-config="key=$TF_VAR_company_name-$TF_VAR_environment.tfstate" \
-backend-config="region=$TF_VAR_region"
terraform apply
terraform destroy
#### Criando múltiplos stacks AWS TerraGoat```bash
cd terraform/aws/
export TERRAGOAT_ENV=$TF_VAR_environment
export TERRAGOAT_STACKS_NUM=5
for i in $(seq 1 $TERRAGOAT_STACKS_NUM)
do
export TF_VAR_environment=$TERRAGOAT_ENV$i
terraform init \
-backend-config="bucket=$TERRAGOAT_STATE_BUCKET" \
-backend-config="key=$TF_VAR_company_name-$TF_VAR_environment.tfstate" \
-backend-config="region=$TF_VAR_region"
terraform apply -auto-approve
done
cd terraform/aws/
export TF_VAR_environment = $TERRAGOAT_ENV
for i in $(seq 1 $TERRAGOAT_STACKS_NUM)
do
export TF_VAR_environment=$TERRAGOAT_ENV$i
terraform init
-backend-config="bucket=$TERRAGOAT_STATE_BUCKET"
-backend-config="key=$TF_VAR_company_name-$TF_VAR_environment.tfstate"
-backend-config="region=$TF_VAR_region"
terraform destroy -auto-approve
done
### Configuração do Azure
#### Instalação (Azure)
Você pode implantar várias pilhas do TerraGoat em uma única assinatura do Azure usando o parâmetro `TF_VAR_environment`.
#### Criar um backend de Conta de Armazenamento do Azure para manter o estado do Terraform```bash
export TERRAGOAT_RESOURCE_GROUP="TerraGoatRG"
export TERRAGOAT_STATE_STORAGE_ACCOUNT="mydevsecopssa"
export TERRAGOAT_STATE_CONTAINER="mydevsecops"
export TF_VAR_environment="dev"
export TF_VAR_region="westus"
# Create resource group
az group create --location $TF_VAR_region --name $TERRAGOAT_RESOURCE_GROUP
# Create storage account
az storage account create --name $TERRAGOAT_STATE_STORAGE_ACCOUNT --resource-group $TERRAGOAT_RESOURCE_GROUP --location $TF_VAR_region --sku Standard_LRS --kind StorageV2 --https-only true --encryption-services blob
# Get storage account key
ACCOUNT_KEY=$(az storage account keys list --resource-group $TERRAGOAT_RESOURCE_GROUP --account-name $TERRAGOAT_STATE_STORAGE_ACCOUNT --query [0].value -o tsv)
# Create blob container
az storage container create --name $TERRAGOAT_STATE_CONTAINER --account-name $TERRAGOAT_STATE_STORAGE_ACCOUNT --account-key $ACCOUNT_KEY
cd terraform/azure/
terraform init -reconfigure -backend-config="resource_group_name=$TERRAGOAT_RESOURCE_GROUP"
-backend-config "storage_account_name=$TERRAGOAT_STATE_STORAGE_ACCOUNT"
-backend-config="container_name=$TERRAGOAT_STATE_CONTAINER"
-backend-config "key=$TF_VAR_environment.terraform.tfstate"
terraform apply
#### Remover TerraGoat (Azure)```bash
terraform destroy
É possível implantar várias stacks do TerraGoat em um único projeto GCP usando o parâmetro TF_VAR_environment.