
TerraGoatはBridgecrewの"脆弱性を意図的に含んだ"Terraformリポジトリです。

TerraGoatはBridgecrewの"脆弱性を意図的に含んだ"Terraformリポジトリです。 TerraGoatは、一般的な設定ミスがどのように本番クラウド環境に紛れ込む可能性があるかを示す学習およびトレーニングプロジェクトです。
TerraGoatは、DevSecOpsが持続可能な設定ミス防止戦略を設計および実装できるようにするために構築されました。これは、Bridgecrew や Checkov のようなポリシー・アズ・コードフレームワーク、インラインリンター、pre-commitフック、その他のコードスキャン手法をテストするために使用できます。
TerraGoatは、クラウドインフラストラクチャのセキュアな開発ベストプラクティスを実装する練習のためのベーストレーニング環境を提供する既存の*Goatプロジェクトの伝統に従っています。
先に進む前に、次の警告に注意してください:
⚠️ TerraGoatは意図的に脆弱なAWSリソースをアカウント内に作成します。本番環境や機密性の高いAWSリソースと一緒にTerraGoatをデプロイしないでください。
脆弱なインフラストラクチャが本番環境に到達するのを防ぐには、Bridgecrew と、Infrastructure as Code向けのオープンソース静的解析ツールである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 スタックをデプロイできます。
#### Terraform の状態を保持する Azure ストレージアカウントバックエンドを作成する```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>