AWS KMS と暗号化キー管理

AWS KMS によるマスターキー管理、エンベロープ暗号化、キーポリシー、CloudHSM、Secrets Manager の仕組みと使い分けを学びます。

学習順Step 17 / 91サービスKMS試験ドメインセキュリティ

AWS KMS とは

AWS Key Management Service(KMS)は、暗号化に利用するマスターキーを作成・管理するマネージドサービスです。データを直接暗号化するのではなく、暗号化キー自体を保護する役割を担います。

KMS の主要機能

  • カスタマーマスターキー(CMK)の作成・管理・運用
    CMK の作成、有効化・無効化、削除、ローテーションを一元管理できます。

  • キーポリシーによるアクセス制御
    CMK ごとにキーポリシーを設定し、どの IAM ユーザー・ロールが暗号化・復号を実行できるかを制御します。

  • 自動・手動キーローテーション
    CMK に対して1年ごとの自動ローテーションを有効化できます。また、必要に応じてマニュアルでのローテーションも可能です。

  • キータイプの使い分け

    • AWS 管理キー: AWS サービスが自動的に作成・管理するキー(ローテーション固定)
    • カスタマー管理キー: ユーザーが KMS で作成したキー(ポリシー・ローテーション設定可能)
    • 外部キー: ユーザーが KMS の外部で生成したキーをインポートして管理
  • CloudTrail との統合
    KMS キーの使用ログを CloudTrail に記録し、誰がいつどのキーを使用したかを監査できます。

  • 幅広い AWS サービスとの統合
    RDS、S3、EBS、DynamoDB など、データを扱うほぼすべての AWS サービスで KMS を利用した暗号化を選択できます。

  • KMS SDK によるアプリケーション暗号化
    アプリケーションコード内で KMS SDK を使用し、データの暗号化・復号をプログラムから呼び出せます。


カスタマーマスターキー(CMK)とデータキー

KMS では、暗号化キーを階層的に管理します。

用語 役割
カスタマーマスターキー(CMK) 暗号化の根幹となるマスターキー。データを直接暗号化するのではなく、暗号化キー(データキー)を暗号化するために使用します。紛失するとデータにアクセスできなくなるため、KMS が厳重に保護します。定期的にローテーション可能。
カスタマーデータキー(暗号化キー) 実際のデータを暗号化するために使用するキー。KMS が生成し、CMK で暗号化した状態でアプリケーションに渡されます。

エンベロープ暗号化

エンベロープ暗号化は、データを直接マスターキーで暗号化せず、データキーを使ってデータを暗号化し、そのデータキー自体をマスターキーで暗号化する手法です。4KB を超えるデータを暗号化する際に用いられます。

エンベロープ暗号化の流れ

エンベロープ暗号化のフロー

  1. アプリケーションが KMS にデータキーを要求
    暗号化を実行したいアプリケーションが、KMS の GenerateDataKey API を呼び出します。

  2. KMS がデータキーを2つ返却

    • プレーンテキストのデータキー(実際の暗号化に使用)
    • CMK で暗号化されたデータキー(保存用)
  3. アプリケーションがデータを暗号化
    プレーンテキストのデータキーを使ってデータを暗号化します。暗号化後、プレーンテキストのデータキーはメモリから破棄します。

  4. 暗号化データと暗号化済みデータキーを保存
    暗号化されたデータと、暗号化済みデータキーをセットで保存します。

  5. 復号時は KMS に暗号化済みデータキーを送る
    復号時には、暗号化済みデータキーを KMS の Decrypt API に渡し、プレーンテキストのデータキーを取得してデータを復号します。

この仕組みにより、CMK は KMS の外に出ることなく、データキーの暗号化・復号のみを担当します。


キーポリシー

キーポリシーは、CMK に対するアクセス制御を定義するポリシーです。IAM ポリシーと組み合わせて、誰がどの操作を実行できるかを制御します。

デフォルト KMS キーポリシー

CMK 作成時にキーポリシーを指定しない場合、自動的に適用されるポリシーです。

  • ルートユーザーに鍵管理権限を付与
    AWS アカウントのルートユーザーが CMK の管理・削除を実行できます。

  • IAM ポリシーによるアクセス制御
    IAM ユーザー・ロールに対して、IAM ポリシーで暗号化・復号の権限を付与できます。

カスタム KMS キーポリシー

より細かい制御が必要な場合は、カスタムキーポリシーを作成します。

  • キー管理者の明示的な指定
    特定の IAM ユーザーやロールのみにキー管理権限を付与します。

  • キー使用者の指定
    暗号化・復号を実行できるユーザーやロールを明示的に定義します。

  • クロスアカウントアクセスの有効化
    別の AWS アカウントから CMK を使用できるように設定します。


RDS における暗号化

RDS では、KMS を使った暗号化を複数のレイヤーで実装できます。

  • 保存データの暗号化(Encryption at rest)
    DB インスタンスのストレージ、自動バックアップ、リードレプリカ、スナップショットを KMS で暗号化します。

  • 転送中のデータの暗号化(Encryption in transit)
    SSL/TLS を使用して、アプリケーションと RDS 間の通信を暗号化します。


CloudHSM

CloudHSM は、AWS が提供する**専用ハードウェアセキュリティモジュール(HSM)**です。KMS よりも厳格なセキュリティ要件がある場合に選択します。

CloudHSM の特徴

  • FIPS 140-2 Level 3 準拠
    国際標準に準拠した暗号化ハードウェアで、政府機関や金融機関の要件に対応します。

  • 複数 AZ に分散した CloudHSM クラスター
    高可用性を実現するため、複数の AZ に HSM を配置してクラスターを構成します。

  • ユーザーが暗号化キーを完全管理
    AWS はハードウェアを管理しますが、暗号化キーの生成・管理はユーザーが実施します。KMS の SSE-C(Server-Side Encryption with Customer-Provided Keys)の強化版として位置付けられます。

  • 対称キーと非対称キーの両方をサポート
    共通鍵暗号(AES)と公開鍵暗号(RSA)の両方を利用できます。

  • CloudHSM クライアントソフトウェア
    ユーザー管理とキー管理を実施するための専用クライアントを使用します。


AWS Secrets Manager

AWS Secrets Manager は、認証情報や API キーなどのシークレットを保存し、認証時に安全に利用するためのサービスです。

Secrets Manager の主要機能

  • シークレットの暗号化保存
    パスワード、API キー、データベース認証情報などを KMS で暗号化して保存します。

  • 自動ローテーション
    パラメータポリシーで TTL(Time To Live)を設定し、指定した期間ごとに自動的にシークレットをローテーションします。

  • IAM とリソースベースポリシーによるアクセス制御
    IAM ポリシーとリソースベースポリシーを組み合わせて、誰がどのシークレットにアクセスできるかを制御します。

  • マルチリージョンレプリケーション
    シークレットを複数のリージョンにレプリケートし、ディザスタリカバリやマルチリージョンアプリケーションに対応します。

  • RDS との統合
    RDS のデータベース認証時に Secrets Manager を連携させることで、認証情報をハードコードせずに安全に管理できます。


Secrets Manager と Systems Manager Parameter Store の比較

Secrets Manager と Systems Manager の Parameter Store は、どちらも機密情報を保存できますが、機能に違いがあります。

機能 AWS Secrets Manager AWS Systems Manager Parameter Store
位置付け 認証情報・API キーなどのシークレット専用サービス Systems Manager の一機能として、設定データと機密データを一元管理
自動ローテーション ✅ サポート(TTL設定で自動ローテーション) ❌ サポートしていない
ライフサイクル管理 ✅ パラメータポリシーで有効期限・通知を設定可能 ❌ ライフサイクル管理機能なし
KMS 暗号化 ✅ 自動的に KMS で暗号化 ✅ SecureString パラメータで KMS 暗号化可能
用途 データベース認証情報、API キーなど頻繁にローテーションが必要なシークレット アプリケーション設定、環境変数、パラメータなど静的な設定データ
料金 シークレット保存数・API呼び出し回数で課金 標準パラメータは無料、高度なパラメータは有料

まとめ

AWS KMS は、暗号化キーの作成・管理を一元化し、エンベロープ暗号化によってデータキーを安全に保護します。キーポリシーで柔軟なアクセス制御を実現し、CloudTrail と統合することで監査証跡を確保できます。

より厳格なセキュリティ要件がある場合は CloudHSM を選択し、ユーザーが暗号化キーを完全に管理します。

認証情報や API キーの管理には Secrets Manager を使用し、自動ローテーションとライフサイクル管理で運用負荷を削減します。静的な設定データには Parameter Store を使い、用途に応じて使い分けることが重要です。

重要ポイント

  • KMS はマスターキー(CMK)の作成・管理・運用を担うマネージドサービス
  • エンベロープ暗号化により、データキーを CMK で暗号化してセキュリティを強化
  • キーポリシーでCMKへのアクセスを制御。デフォルトキーポリシーとカスタムキーポリシーを使い分ける
  • CloudHSM は FIPS 140-2 Level 3 準拠の専用ハードウェアで、ユーザーが暗号化キーを完全管理
  • Secrets Manager は認証情報を保存・暗号化し、自動ローテーションとライフサイクル管理を提供

このトピックの学習を完了しますか?

完了状態はいつでも切り替えられます

同じサービスの関連トピック

KMS と暗号化 に関連するトピックを続けて確認できます。