
Infraestructura Terraform intencionalmente vulnerable para aprender detección de configuraciones erróneas en la nube y prácticas DevSecOps en AWS, Azure y GCP.
TerraGoat es el repositorio Terraform "Vulnerable por Diseño" de Bridgecrew.

TerraGoat es el repositorio Terraform "Vulnerable por Diseño" de Bridgecrew. TerraGoat es un proyecto de aprendizaje y formación que demuestra cómo los errores de configuración comunes pueden llegar a los entornos de producción en la nube.
TerraGoat fue construido para permitir que DevSecOps diseñe e implemente una estrategia sostenible de prevención de configuraciones incorrectas. Se puede utilizar para probar un marco de política como código como Bridgecrew & Checkov, linters en línea, hooks de pre-commit u otros métodos de escaneo de código.
TerraGoat sigue la tradición de los proyectos *Goat existentes que proporcionan un campo de entrenamiento básico para practicar la implementación de mejores prácticas de desarrollo seguro para infraestructura en la nube.
Antes de continuar, toma nota de esta advertencia:
⚠️ TerraGoat crea intencionalmente recursos vulnerables de AWS en tu cuenta. NO implementes TerraGoat en un entorno de producción ni junto a recursos sensibles de AWS.
Para evitar que la infraestructura vulnerable llegue a producción, consulta: Bridgecrew & checkov, la herramienta de análisis estático de código abierto para infraestructura como código.
Puedes desplegar múltiples stacks de TerraGoat en una sola cuenta de AWS usando el 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
#### Creando múltiples stacks de TerraGoat en AWS```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
### Configuración de Azure
#### Instalación (Azure)
Puedes desplegar múltiples stacks de TerraGoat en una sola suscripción de Azure usando el parámetro `TF_VAR_environment`.
#### Crear un backend de Azure Storage Account para mantener el estado de 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
#### Eliminar TerraGoat (Azure)```bash
terraform destroy
Puede implementar múltiples stacks de TerraGoat en un solo proyecto de GCP utilizando el parámetro TF_VAR_environment.