AWS KMS
暗号化キーの作成、管理、ローテーションを一元的に行うフルマネージドな鍵管理サービスで、100 以上の AWS サービスと統合されている
概要
AWS Key Management Service (KMS) は、データの暗号化に使用する暗号化キーを安全に作成、保管、管理するためのフルマネージドサービスです。S3、EBS、RDS、DynamoDB、Lambda など 100 以上の AWS サービスと統合されており、数クリックでデータの暗号化を有効にできます。KMS キーはハードウェアセキュリティモジュール (HSM) で保護され、キーマテリアルが HSM の外部に出ることはありません。対称キー (AES-256) と非対称キー (RSA、ECC) の両方をサポートし、エンベロープ暗号化によりデータキーを KMS キーで暗号化する多層防御を実現します。キーポリシーと IAM ポリシーの組み合わせで、キーの使用権限をきめ細かく制御でき、AWS CloudTrail で全てのキー使用履歴を監査できます。自動キーローテーション機能により、年に 1 回の頻度でキーマテリアルを自動的に更新できます。
エンベロープ暗号化の仕組みと利点
KMS の中核をなすのがエンベロープ暗号化です。データを直接 KMS キーで暗号化するのではなく、まず GenerateDataKey API でデータキー (平文と暗号化済みのペア) を生成し、平文のデータキーでデータを暗号化した後、暗号化済みのデータキーをデータと一緒に保存します。復号時は暗号化済みのデータキーを KMS に送信して平文を取得し、そのキーでデータを復号します。この 2 層構造により、大量のデータを暗号化する際にも KMS への API 呼び出しは鍵の生成・復号時の 1 回ずつで済み、スループットのボトルネックを回避できます。Azure Key Vault はキー、シークレット、証明書を 1 つのサービスで統合管理する設計ですが、KMS は暗号化キーの管理に特化し、Secrets Manager (シークレット) や ACM (証明書) と機能を分離しています。この分離により、キーポリシーの設計がシンプルになり、最小権限の原則を適用しやすくなります。
キーポリシーと権限設計
KMS のアクセス制御はキーポリシーと IAM ポリシーの 2 層で構成されます。キーポリシーはキーごとに設定するリソースベースポリシーで、どのプリンシパルがそのキーを使用できるかを定義します。IAM ポリシーはプリンシパル側から「どのキーを使えるか」を制御します。両方のポリシーで許可されている場合にのみ操作が成功するため、意図しないアクセスを二重に防止できます。AWS 管理キー (aws/s3、aws/ebs など) は無料で利用でき、S3 や EBS の暗号化を追加コストなしで有効にできますが、キーポリシーのカスタマイズやクロスアカウントアクセスには対応していません。組織のコンプライアンス要件に応じてカスタマーマネージドキーを作成し、キーの使用権限を明示的に制限するのがベストプラクティスです。暗号化技術の関連書籍 (Amazon) では、鍵管理の設計パターンが体系的にまとめられています。
キーローテーションとマルチリージョン対応
KMS の自動キーローテーションを有効にすると、365 日ごとに新しいキーマテリアルが生成されます。古いキーマテリアルは復号用に保持されるため、ローテーション前に暗号化されたデータも引き続き復号可能です。アプリケーション側のコード変更は不要で、キー ID は変わらないまま内部的にキーマテリアルだけが更新されます。マルチリージョンキーを使えば、異なるリージョンで同一のキー ID を使用でき、リージョン間でのデータ複製 (S3 クロスリージョンレプリケーションや DynamoDB グローバルテーブルなど) の際に再暗号化が不要になります。FIPS 140-2 レベル 3 の認証が必要なコンプライアンス要件には、カスタムキーストア機能で CloudHSM クラスターをバックエンドとして使用することで対応できます。CloudTrail で全ての KMS API 呼び出しが記録されるため、誰がいつどのキーを使用したかを完全に監査できます。