
Преднамеренно уязвимая инфраструктура Terraform для изучения обнаружения неверных конфигураций облака и практик DevSecOps в AWS, Azure и GCP.
TerraGoat — это репозиторий Terraform от Bridgecrew, созданный по принципу «Уязвимо по замыслу».

TerraGoat — это репозиторий Terraform от Bridgecrew, созданный по принципу «Уязвимо по замыслу». TerraGoat — это учебный и тренировочный проект, демонстрирующий, как типичные ошибки конфигурации могут попасть в производственные облачные среды.
TerraGoat был создан, чтобы позволить DevSecOps-специалистам спроектировать и внедрить устойчивую стратегию предотвращения неправильных конфигураций. Его можно использовать для тестирования фреймворка «политика как код», такого как Bridgecrew и Checkov, инлайн-линтеров, pre-commit хуков или других методов сканирования кода.
TerraGoat продолжает традицию существующих *Goat-проектов, предоставляющих базовую тренировочную площадку для практики внедрения лучших практик безопасной разработки для облачной инфраструктуры.
Прежде чем продолжить, обратите внимание на это предупреждение:
⚠️ TerraGoat создаёт намеренно уязвимые ресурсы AWS в вашем аккаунте. НЕ развёртывайте TerraGoat в производственной среде или рядом с любыми конфиденциальными ресурсами AWS.
Чтобы предотвратить попадание уязвимой инфраструктуры в производство, см.: Bridgecrew и checkov — инструмент статического анализа с открытым исходным кодом для инфраструктуры как кода.
Вы можете развернуть несколько стеков TerraGoat в одном аккаунте AWS, используя параметр 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" } } ] }'
#### Применить 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
#### Создание нескольких стеков TerraGoat 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
### Настройка Azure
#### Установка (Azure)
Вы можете развернуть несколько стеков TerraGoat в одной подписке Azure, используя параметр `TF_VAR_environment`.
#### Создание бэкенда учетной записи хранения Azure для хранения состояния 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
#### Удаление TerraGoat (Azure)```bash
terraform destroy
Вы можете развернуть несколько стеков TerraGoat в одном проекте GCP, используя параметр TF_VAR_environment.