Posted on :: 1024 Words :: Tags: , , , ,

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は永続キーの代わりに一時トークンを使用することで修正します。

チェックポイント

  1. なぜシークレットをハードコードできないのか? Git履歴に永遠に残る、監査証跡ゼロ、ローテーションにコード変更が必要。

  2. Vaultの動的シークレットが静的キーより優れている理由は? 新しく生成、自動期限切れ、リクエストごとにユニーク。

  3. SOPSは何のため? 設定ファイルを暗号化してGitに安全にコミット。

  4. OIDCはCI/CDをどのように安全にする? 永続認証情報の代わりに1時間で期限切れになる一時トークン。


連載ナビゲーション:


この記事は「Terraform from Fundamentals to Production」シリーズの一部です。本番環境にデプロイする人のための実世界のTerraform。