KMS
AWS Key Management Service
https://aws.amazon.com/jp/kms/
https://dev.classmethod.jp/articles/10minutes-kms/
GPT-4.icon
AWSが提供する鍵管理のフルマネージドサービスで、暗号鍵の作成・管理・利用を安全かつ容易に行えるようにするサービスです。以下に詳しく解説します。
🔐 Amazon KMSとは?
Amazon KMSは、データの暗号化と復号のための鍵(キー)を安全に管理するためのサービスです。
AWS上で扱う機密情報(例えばS3のデータ、RDSのデータベース、EBSボリュームなど)を暗号化する際に使用されます。
💡 主な機能
table:_
機能 説明
鍵の作成と管理 対称鍵・非対称鍵を作成・有効化・無効化・削除できます。
鍵の使用制御 IAMポリシーやKMSポリシーで鍵の使用権限を細かく制御可能。
自動ローテーション カスタマー管理キー(CMK)は自動ローテーション可能(年1回など)。
CloudTrailによる監査 鍵の使用履歴をすべてログに記録し、監査対応が可能。
AWSサービスとの統合 S3、EBS、RDS、Lambda、Secrets Manager など多くのAWSサービスと連携。
🔑 鍵の種類
1. カスタマー管理キー(CMK: Customer Managed Key)
自分で作成・管理する鍵。
名前をつけたり、権限やローテーション設定が可能。
2. AWS管理キー(AWS Managed Key)
AWSが自動で作成・管理する鍵。
各サービス用に自動的に作られるので手間が少ない。
3. インポートキー
外部から鍵素材をアップロードしてKMSで管理可能。
外部KMSやオンプレミスとの統合に有効。
🔁 使い方のパターン
1. S3の暗号化
S3バケットで「KMSによる暗号化(SSE-KMS)」を選択すると、KMSキーを使って自動的に暗号化されます。
2. 暗号化と復号をAPIで行う
code:bash
# 暗号化
aws kms encrypt \
--key-id alias/my-key \
--plaintext fileb://data.txt \
--output text \
--query CiphertextBlob
# 復号
aws kms decrypt \
--ciphertext-blob fileb://encrypted.txt \
--output text \
--query Plaintext
3. Secrets Managerと連携
Secrets ManagerはKMSを使って、シークレット情報(APIキーなど)を暗号化・復号しています。
✅ メリット
セキュアな鍵保存(FIPS 140-2 Level 2準拠)
きめ細かなアクセス管理(IAMと統合)
完全なログ監査(CloudTrail対応)
可用性の高いインフラ(AWSのマネージドサービスとして)
⚠️ 注意点
KMSの暗号化処理自体には制限回数(APIリクエストのレート制限)があるため、高頻度アクセスでは**データキーのキャッシュ(Envelope Encryption)**を利用する必要があります。
KMSの利用には料金が発生します(キーの作成、API呼び出しなど)。
Envelope Encryptionとは?
KMSでよく使われるパターンです。
1. KMSで1回限りのデータキーを生成(GenerateDataKey)
2. アプリはこのデータキーで実際のデータを暗号化
3. データキー自体はKMSキーで暗号化して保存
4. 後で復号する場合は、KMSでデータキーを復号して使う
これにより、KMSのリクエストを最小限に抑えつつ、安全に暗号化処理を行えます。