
Absichtlich anfällige Terraform-Infrastruktur zum Erlernen der Erkennung von Cloud-Fehlkonfigurationen und von DevSecOps-Praktiken in AWS, Azure und GCP.
TerraGoat ist Bridgecrews „Vulnerable by Design“ Terraform-Repository.

TerraGoat ist Bridgecrews „Vulnerable by Design“ Terraform-Repository. TerraGoat ist ein Lern- und Trainingsprojekt, das zeigt, wie häufige Konfigurationsfehler den Weg in Produktions-Cloud-Umgebungen finden können.
TerraGoat wurde entwickelt, um DevSecOps zu ermöglichen, eine nachhaltige Strategie zur Vermeidung von Fehlkonfigurationen zu entwerfen und umzusetzen. Es kann verwendet werden, um ein Policy-as-Code-Framework wie Bridgecrew & Checkov, Inline-Linter, Pre-Commit-Hooks oder andere Code-Scanning-Methoden zu testen.
TerraGoat folgt der Tradition bestehender *Goat-Projekte, die eine grundlegende Trainingsumgebung bieten, um die Umsetzung bewährter Praktiken für sichere Entwicklung in der Cloud-Infrastruktur zu üben.
Bevor Sie fortfahren, beachten Sie bitte diese Warnung:
⚠️ TerraGoat erstellt absichtlich verwundbare AWS-Ressourcen in Ihrem Konto. Stellen Sie TerraGoat NICHT in einer Produktionsumgebung oder neben sensiblen AWS-Ressourcen bereit.
Um zu verhindern, dass verwundbare Infrastruktur in die Produktion gelangt, siehe: Bridgecrew & checkov, das Open-Source-Tool zur statischen Analyse für Infrastructure as Code.
Sie können mehrere TerraGoat-Stacks in einem einzigen AWS-Konto bereitstellen, indem Sie den Parameter TF_VAR_environment verwenden.
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" } } ] }'
#### TerraGoat (AWS) anwenden```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
#### Erstellen mehrerer TerraGoat AWS-Stacks```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
### Azure Einrichtung
#### Installation (Azure)
Sie können mehrere TerraGoat-Stacks in einem einzigen Azure-Abonnement mit dem Parameter `TF_VAR_environment` bereitstellen.
#### Erstellen Sie ein Azure Storage-Konto-Backend zur Aufbewahrung des Terraform-Status```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
#### TerraGoat (Azure) entfernen```bash
terraform destroy
Sie können mehrere TerraGoat-Stacks in einem einzigen GCP-Projekt bereitstellen, indem Sie den Parameter TF_VAR_environment verwenden.