
بنية تحتية من Terraform معرضة للاختراق بشكل متعمد لتعلم اكتشاف الأخطاء في التهيئة السحابية وممارسات DevSecOps عبر AWS وAzure وGCP.
TerraGoat هو مستودع Terraform "قابل للثغرات حسب التصميم" من Bridgecrew.

TerraGoat هو مستودع Terraform "قابل للثغرات حسب التصميم" من Bridgecrew. TerraGoat هو مشروع تعليمي وتدريبي يوضح كيف يمكن لأخطاء التهيئة الشائعة أن تجد طريقها إلى بيئات الإنتاج السحابية.
تم بناء TerraGoat لتمكين فرق DevSecOps من تصميم وتنفيذ استراتيجية مستدامة لمنع سوء التهيئة. يمكن استخدامه لاختبار إطار عمل السياسة كرمز مثل Bridgecrew و Checkov، وأدوات الفحص المضمنة، وربطات ما قبل الالتزام، أو طرق فحص الكود الأخرى.
يتبع 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 (Storage Account) خلفي للاحتفاظ بحالة 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.
لاستخدام terraform، يلزم وجود حساب خدمة ومجموعة مطابقة من بيانات الاعتماد. إذا لم تكن موجودة، يجب إنشاؤها يدويًا للمشروع المعني. لإنشاء حساب الخدمة:
IAM > Service Accounts.CREATE SERVICE ACCOUNT.terragoat) وانقر على CREATE.Project > Editor وانقر على CONTINUE.DONE.