AWS KMS と暗号化キー管理
AWS KMS によるマスターキー管理、エンベロープ暗号化、キーポリシー、CloudHSM、Secrets Manager の仕組みと使い分けを学びます。
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 を超えるデータを暗号化する際に用いられます。
エンベロープ暗号化の流れ
-
アプリケーションが KMS にデータキーを要求
暗号化を実行したいアプリケーションが、KMS のGenerateDataKeyAPI を呼び出します。 -
KMS がデータキーを2つ返却
- プレーンテキストのデータキー(実際の暗号化に使用)
- CMK で暗号化されたデータキー(保存用)
-
アプリケーションがデータを暗号化
プレーンテキストのデータキーを使ってデータを暗号化します。暗号化後、プレーンテキストのデータキーはメモリから破棄します。 -
暗号化データと暗号化済みデータキーを保存
暗号化されたデータと、暗号化済みデータキーをセットで保存します。 -
復号時は KMS に暗号化済みデータキーを送る
復号時には、暗号化済みデータキーを KMS のDecryptAPI に渡し、プレーンテキストのデータキーを取得してデータを復号します。
この仕組みにより、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 は認証情報を保存・暗号化し、自動ローテーションとライフサイクル管理を提供
このトピックの学習を完了しますか?
完了状態はいつでも切り替えられます