
Infrastructure Terraform intentionnellement vulnérable pour apprendre la détection des mauvaises configurations cloud et les pratiques DevSecOps sur AWS, Azure et GCP.
TerraGoat est le dépôt Terraform « Vulnerable by Design » de Bridgecrew.

TerraGoat est le dépôt Terraform « Vulnerable by Design » de Bridgecrew. TerraGoat est un projet d'apprentissage et de formation qui montre comment des erreurs de configuration courantes peuvent se retrouver dans des environnements cloud de production.
TerraGoat a été conçu pour permettre aux DevSecOps de concevoir et mettre en œuvre une stratégie durable de prévention des mauvaises configurations. Il peut être utilisé pour tester un framework policy-as-code comme Bridgecrew & Checkov, des inline-linters, des hooks de pre-commit ou d'autres méthodes d'analyse de code.
TerraGoat s'inscrit dans la tradition des projets *Goat existants qui fournissent un terrain d'entraînement de base pour pratiquer la mise en œuvre de bonnes pratiques de développement sécurisé pour l'infrastructure cloud.
Avant de continuer, veuillez prendre note de cet avertissement :
⚠️ TerraGoat crée intentionnellement des ressources AWS vulnérables dans votre compte. NE PAS déployer TerraGoat dans un environnement de production ou à côté de ressources AWS sensibles.
Pour empêcher que des infrastructures vulnérables n'arrivent en production, voir : Bridgecrew & checkov, l'outil open source d'analyse statique pour l'infrastructure en tant que code.
Vous pouvez déployer plusieurs stacks TerraGoat dans un seul compte AWS en utilisant le paramètre 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" } } ] }'
#### Appliquer 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
#### Création de plusieurs 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
### Configuration Azure
#### Installation (Azure)
Vous pouvez déployer plusieurs piles TerraGoat dans un seul abonnement Azure en utilisant le paramètre `TF_VAR_environment`.
#### Créer un backend de compte de stockage Azure pour conserver l'état 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
#### Supprimer TerraGoat (Azure)```bash
terraform destroy
Vous pouvez déployer plusieurs piles TerraGoat dans un seul projet GCP en utilisant le paramètre TF_VAR_environment.