TerraGoat 是 Bridgecrew 的 "Vulnerable by Design" Terraform 仓库。

TerraGoat 是 Bridgecrew 的 "Vulnerable by Design" Terraform 仓库。 TerraGoat 是一个学习和培训项目,演示了常见配置错误如何进入生产云环境。
TerraGoat 的构建是为了使 DevSecOps 能够设计和实施可持续的配置错误预防策略。它可以用于测试策略即代码框架,如 Bridgecrew 和 Checkov、内联 linter、预提交钩子或其他代码扫描方法。
TerraGoat 遵循现有 *Goat 项目的传统,这些项目提供了一个基础训练场,用于实践云基础设施的安全开发最佳实践。
在继续之前,请注意这些警告:
⚠️ TerraGoat 会在您的账户中创建故意易受攻击的 AWS 资源。请勿在生产环境或任何敏感 AWS 资源旁部署 TerraGoat。
要防止易受攻击的基础设施进入生产环境,请参见:Bridgecrew 和 checkov,基础设施即代码的开源静态分析工具。
您可以使用参数 TF_VAR_environment 在单个 AWS 账户中部署多个 TerraGoat 堆栈。
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)
您可以使用参数 `TF_VAR_environment` 在单个 Azure 订阅中部署多个 TerraGoat 堆栈。
#### 创建 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
你可以使用参数 TF_VAR_environment 在单个 GCP 项目中部署多个 TerraGoat 堆栈。
要使用 Terraform,需要服务账户和相应的凭据集。 如果它们不存在,则需要为相关项目手动创建。 要创建服务账户:
IAM > 服务账户。创建服务账户。terragoat),然后点击 创建。项目 > 编辑者 角色,然后点击 继续。完成。要创建凭据:
IAM > 服务账户,然后点击相关的服务账户。添加密钥 > 创建新密钥 > JSON,然后点击 创建。这将创建一个 .json 文件并下载到你的计算机。我们建议将密钥保存为比自动生成的名称更友好的名称(例如 terragoat_credentials.json),并将生成的 JSON 文件存储在 terragoat 的 terraform/gcp 目录中。
一旦凭据设置完成,如下创建 BE 配置:```bash
export TF_VAR_environment="dev"
export TF_TERRAGOAT_STATE_BUCKET=remote-state-bucket-terragoat
export TF_VAR_credentials_path=<PATH_TO_CREDNETIALS_FILE> # example: export TF_VAR_credentials_path=terragoat_credentials.json
export TF_VAR_project=<YOUR_PROJECT_NAME_HERE>
gsutil mb gs://${TF_TERRAGOAT_STATE_BUCKET}
#### 应用 TerraGoat (GCP)```bash
cd terraform/gcp/
terraform init -reconfigure -backend-config="bucket=$TF_TERRAGOAT_STATE_BUCKET" \
-backend-config "credentials=$TF_VAR_credentials_path" \
-backend-config "prefix=terragoat/${TF_VAR_environment}"
terraform apply
terraform destroy
## Bridgecrew 的 IaC 山羊群