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 はエンベロープ暗号化という手法を採用しています。データを直接 KMS キーで暗号化するのではなく、まず KMS にデータキー (平文と暗号化済みのペア) を生成させ、平文のデータキーでデータを暗号化し、暗号化済みのデータキーをデータと一緒に保存します。復号時は暗号化済みのデータキーを KMS に送信して平文のデータキーを取得し、そのデータキーでデータを復号します。この方式により、大量のデータを暗号化する際に KMS への API 呼び出しを最小限に抑えつつ、キーの安全な管理を実現できます。GenerateDataKey API は 1 回の呼び出しで平文と暗号化済みのデータキーペアを返し、Encrypt/Decrypt API は最大 4 KB のデータを直接暗号化/復号できます。
Azure Key Vault との比較
Azure で KMS に対応するサービスは Azure Key Vault です。KMS は暗号化キーの管理に特化しているのに対し、Azure Key Vault はキー、シークレット (パスワード、接続文字列)、証明書の 3 種類を統合管理します。AWS では KMS がキー管理、Secrets Manager がシークレット管理、ACM が証明書管理と、機能ごとにサービスが分かれています。料金面では、KMS の対称キーは月額 1 ドル/キー + API 呼び出し 10,000 件あたり 0.03 ドルです。Azure Key Vault の Standard 層はキーの保管が無料で、操作 10,000 件あたり 0.03 ドルです。KMS の特徴として、AWS 管理キー (aws/s3、aws/ebs など) は無料で利用でき、S3 や EBS の暗号化を追加コストなしで有効にできます。また、KMS はカスタムキーストア機能により、AWS CloudHSM クラスターをバックエンドとして使用でき、FIPS 140-2 レベル 3 の認証を必要とするコンプライアンス要件にも対応します。