Instiq
第3章 · セキュリティ·v2.1.0·更新 2026/6/14·読了目安 約8分

変更要約: in-scopeサービス網羅(軸B): s3にSystems Manager(Parameter Store)とAppConfigによる設定/フィーチャーフラグ外部化の定義・役割・選択基準を追記。

3.3暗号化とシークレット管理(KMS・Secrets Manager)

この節の要点

AWS KMS による鍵管理と保管時の暗号化、Secrets Manager / SSM パラメータストアによるシークレットの安全な保管・取得・自動ローテーションを理解します。

機密データは暗号化し、パスワードや API キーはコードに書かず安全に保管します。AWS では KMS(鍵)と Secrets Manager(シークレット)が要です。

3.3.1鍵とシークレット

AWS KMS(暗号鍵の管理・S3/EBS 等の保管時暗号化・CloudTrail で監査)と、Secrets Manager(DB 資格情報や API キーを保管・自動ローテーション・実行時に取得)の役割の違いを対比した図。
KMS(鍵)と Secrets Manager(シークレット)
  • AWS KMS:暗号鍵を一元管理し、S3・EBS・RDS などの保管時暗号化に使う。鍵の利用は CloudTrail で監査できる。
  • Secrets Manager:DB 資格情報や API キーを暗号化保管し、自動ローテーションに対応。実行時に SDK で取得する。
  • SSM パラメータストア:設定値やシークレットを保管(SecureString は KMS で暗号化)。自動ローテーションは無いが安価。
  • エンベロープ暗号化:データキーでデータを暗号化し、そのデータキーを KMS のマスターキーで暗号化する仕組み。

セキュリティでは「鍵の管理」と「シークレットの管理」を分けて考えます。AWS KMS は暗号鍵を一元管理し、S3・EBS・RDS などの保管時暗号化に使います。実体は エンベロープ暗号化 で、データはデータキーで暗号化し、そのデータキーを KMS のマスターキー(CMK)で暗号化します。鍵の使用は CloudTrail で監査できます。一方、DB のパスワードや API キーといった シークレットSecrets Manager に暗号化保管し、自動ローテーションして実行時に SDK で取得します(コードや環境変数に平文で置かない)。ローテーションが不要で安価に済ませたい設定値・小さなシークレットは SSM パラメータストアSecureString(KMS で暗号化)が向きます。要件が「自動ローテーション」なら Secrets Manager、「低コストな設定/小さなシークレット」なら Parameter Store、と切り分けます。

要件使うもの
保管時暗号化の鍵を管理AWS KMS
DB 資格情報を保管+自動ローテーションSecrets Manager
設定値/小さなシークレットを安価にSSM Parameter Store(SecureString)
鍵の使用を監査KMS+CloudTrail

KMS の鍵には種類があります。AWS マネージドキー はサービスが自動管理し手軽ですが、ローテーション周期や鍵ポリシーを細かく制御できません。カスタマーマネージドキー(CMK) は自分で鍵ポリシーを定義し、年次の自動キーローテーションを有効化でき、削除前の待機期間も設定できます。誰がどの鍵で暗号化/復号できるかは鍵ポリシー+IAM ポリシーの組み合わせで決まり、一時的に権限を委譲する グラント(Grant) も使えます。アプリ実装では、大きなデータを直接 KMS で暗号化するのではなく、データキー(GenerateDataKey) を取得してローカルで暗号化し、暗号化済みデータキーだけを保存するエンベロープ暗号化が定石です(KMS API 呼び出し回数とサイズ上限を回避できる)。Secrets Manager は内部でこの KMS を使ってシークレットを暗号化し、Lambda 連携で自動ローテーションを実現します。

シナリオ:Lambda が RDS に接続する。 DB パスワードをコードに書く代わりに Secrets Manager に保管し、自動ローテーションを有効化。Lambda は実行ロールの最小権限で実行時にシークレットを取得します。RDS のストレージは KMS キーで保管時暗号化し、鍵の使用は CloudTrail で監査します。

補足

Q. Secrets Manager と Parameter Store の違いは? 前者は自動ローテーション対応(やや高価)、後者は安価だが自動ローテーション無し。Q. KMS は何をする? 暗号鍵を管理し保管時暗号化に使う(エンベロープ暗号化)。Q. シークレットはどこに置く? コード/平文環境変数ではなく専用サービスに。

注意

混同に注意:
シークレットをコード/平文環境変数に置かない
自動ローテーション要=Secrets Manager、無くてよく安価=Parameter Store。
③KMS は「鍵」、Secrets Manager は「シークレットそのもの」を扱う——役割を取り違えない。

試験ポイント

「鍵の管理・保管時暗号化=KMS」「DB 資格情報などの保管+自動ローテーション=Secrets Manager」「設定値/シークレットの安価な保管=SSM パラメータストア」 は DVA で頻出です。シークレットをコードや環境変数に平文で置くのは誤りです。

3.3.2設定とフィーチャーフラグの外部化(Systems Manager・AppConfig)

シークレット以外の設定値(接続先、しきい値、機能の ON/OFF)もコードに直書きせず外部化します。AWS Systems Manager(SSM)はサーバーやアプリの運用を束ねるサービス群で、なかでも Parameter Store は設定値やシークレット参照を階層的なキーで安価に保存し、SecureString なら KMS で暗号化できます。設定を再デプロイなしに安全に変更したいときは AWS AppConfig を使います。AppConfig は フィーチャーフラグや動的設定を管理し、検証(スキーマ/Lambda バリデーター)を通したうえで段階的にロールアウトし、CloudWatch アラームに連動して異常時は自動ロールバックします。判断の勘所は「静的な設定値/シークレット参照の保存=Parameter Store」「稼働中アプリへ動的設定/フィーチャーフラグを安全に配信=AppConfig」「自動ローテーションする機密=Secrets Manager」です。

やりたいこと選択
設定値/シークレット参照を安価に階層保存AWS Systems Manager パラメータストア
再デプロイなしの動的設定・フィーチャーフラグAWS AppConfig
自動ローテーションする機密AWS Secrets Manager

3.3.3この節のまとめ

  • KMS=鍵/保管時暗号化/Secrets Manager=シークレット+自動ローテーション
  • シークレットはコードや平文に置かず、専用サービスで管理

進捗の記録にはログインが必要です。

理解度チェック

(軽い確認用)

Q1. データベースの資格情報を安全に保管し、自動ローテーションもしたい。最も適したサービスはどれですか?

Q2. S3 や EBS の保管時暗号化に使う鍵を一元管理する AWS のサービスはどれですか?

Q3. 小さな設定値やシークレットを低コストで保管し、必要なら KMS で暗号化(SecureString)したい。何を使いますか?

理解度を確認第3章「セキュリティ」の問題を解く