目次
Stop Leaking Secrets: Real Security for Terraform
部屋の中の象について話す必要があります。
TerraformファイルにAWSキーがハードコードされています。データベースパスワードがGitにコミットされています。環境変数にAPIトークンが浮遊しています。そして誰かが「セキュリティ監査」と言うたびに汗をかいています。
私はそこにいました。私たち全員がそこにいました。
真実: ほとんどのインフラ侵害は、ハッカーが優秀だから起こるのではありません。誰かがどこかに平文で認証情報を残したから起こります。2023年のCircleCI侵害?180万のシークレットが露出。コスト?1000万ドル以上のクリーンアップ、顧客の信頼は完全に失われました。
これは脅しではありません。これはセキュリティが後付けのときに起こることです。
このパートでは、本番チームが実際にシークレットを処理する方法を示します - HashiCorp Vault、SOPS暗号化、OIDC認証、適切な監査ログで。理論なし。実世界で機能するものだけ。
📦 Code Examples
Repository: terraform-hcl-tutorial-series This Part: Part 11 - Security Practices
git clone https://github.com/khuongdo/terraform-hcl-tutorial-series.git
cd terraform-hcl-tutorial-series
git checkout part-11
cd examples/part-11-security/
terraform init
terraform plan
実際に重要な5つのルール
ルール1: シークレットはコードに触れない
シークレットが属さない場所:
- Terraform
.tfファイル - Gitリポジトリ(プライベートでも)
- 暗号化されていないステートファイル
- CI/CD設定ファイル
属する場所: Vault、AWS Secrets Manager、GCP Secret Managerのような専用シークレットマネージャー。
ルール2: 認証情報は有効期限を持つべき
静的認証情報は牛乳のようなもの - 悪くなりますが、いつかはわかりません。動的認証情報は自動的に期限切れになります。
ルール3: 最小権限はオプションではない
Terraformが S3バケットだけを作成する?ならEC2権限は不要です。終わり。
ルール4: すべてを暗号化
機密でディスクに座っている場合、暗号化されている方が良い:
- Terraformステートファイル(暗号化されたS3バックエンドを使用)
- シークレットストレージ(Vaultが処理)
- 設定ファイル(それがSOPSの目的)
ルール5: すべてを監査
何かが間違ったときに3つの質問に答える必要があります:
- 誰がそのシークレットを取得した?
- いつアクセスした?
- それで何をした?
HashiCorp Vault: 実際に期限切れになる認証情報
Vaultは魔法が起こる場所です。静的認証情報を保存する代わりに、Vaultはオンデマンドで新しいものを生成し、設定時間後に自動的に削除します。
TerraformにVaultシークレットを取り込む
# provider.tf
provider "vault" {
address = "https://vault.example.com:8200"
}
# main.tf
data "vault_kv_secret_v2" "db" {
mount = "secret"
name = "database/prod"
}
resource "aws_db_instance" "main" {
identifier = "production-db"
username = data.vault_kv_secret_v2.db.data["username"]
password = data.vault_kv_secret_v2.db.data["password"]
}
SOPS: Gitにシークレットをコミット(安全に)
SOPSは設定ファイルを暗号化するので、セキュリティチームが問題なくGitにコミットできます。
OIDC: CI/CD認証情報の保存を停止
OIDCは永続キーの代わりに一時トークンを使用することで修正します。
チェックポイント
なぜシークレットをハードコードできないのか? Git履歴に永遠に残る、監査証跡ゼロ、ローテーションにコード変更が必要。
Vaultの動的シークレットが静的キーより優れている理由は? 新しく生成、自動期限切れ、リクエストごとにユニーク。
SOPSは何のため? 設定ファイルを暗号化してGitに安全にコミット。
OIDCはCI/CDをどのように安全にする? 永続認証情報の代わりに1時間で期限切れになる一時トークン。
連載ナビゲーション:
- Part 10: Testing & Validation
- Part 11: Security & Secrets Management (現在地)
- Part 12: Production Patterns & DevSecOps
この記事は「Terraform from Fundamentals to Production」シリーズの一部です。本番環境にデプロイする人のための実世界のTerraform。