シークレット管理とKMS

🔥 Vibe プロンプト

「自動キーローテーション付きKMSを設定。AWS Secrets Managerにシークレットを保存。エンベロープ暗号化を実装。」

KMS

resource "aws_kms_key" "app" {
  description             = "アプリケーション暗号化キー"
  enable_key_rotation     = true
}

resource "aws_kms_alias" "app" {
  name          = "alias/app-key"
  target_key_id = aws_kms_key.app.key_id
}

エンベロープ暗号化

import boto3
kms = boto3.client('kms')

# データキー生成
response = kms.generate_data_key(KeyId='alias/app-key', KeySpec='AES_256')
plaintext_dek = response['Plaintext']
ciphertext_dek = response['CiphertextBlob']

# DEKでデータを暗号化
fernet = Fernet(plaintext_dek)
encrypted_data = fernet.encrypt(b"機密データ")

# 復号: まずDEKを復号
plaintext_dek = kms.decrypt(CiphertextBlob=ciphertext_dek)['Plaintext']
fernet = Fernet(plaintext_dek)
data = fernet.decrypt(encrypted_data)

AWS Secrets Manager

resource "aws_secretsmanager_secret" "db" {
  name = "prod/db_password"
  rotation_rules {
    automatically_after_days = 30
  }
}

Secrets Manager vs Parameter Store

| 機能 | Secrets Manager | Parameter Store | |------|----------------|----------------| | 最大サイズ | 64 KB | 8 KB | | ローテーション | 組み込み | 手動 | | 価格 | $0.40/シークレット/月 | 無料(標準) |

ベストプラクティス

  • 大量データにはエンベロープ暗号化
  • キーとシークレットを定期的にローテーション
  • KMSキーポリシーは最小権限
  • シークレットをコードにハードコードしない
  • EC2/LambdaにはIAMロールを使用
  • 環境ごとにキーを分離

重要なポイント

  • コアコンセプトをしっかり理解する
  • ハンズオンコード例で実践する
  • 実世界の問題に応用する
  • 演習で知識を強化する

さらに学ぶ

  • 公式ドキュメント
  • GitHubのオープンソースプロジェクト
  • コミュニティフォーラムとディスカッション
  • 関連コースとチュートリアル

完全なチュートリアルをロック解除

このチャプターは有料コンテンツです。プロジェクトに参加して、10以上の神レベルのPromptや実際のソースコード例を含む、5000字以上の深い分析をロック解除してください!