KMS

【VPC外リージョンサービス】

KMS(Key Management Service) は、AWS全体でデータ暗号化を一元的に管理する鍵管理サービスです。

KMS Key(旧CMK:カスタマーマスターキー)を用いて暗号化を集中管理し、S3、EBS、RDS、Redshift、DynamoDB などの主要サービスと統合して利用できます。

KMSには、AWSが自動的に作成・管理する AWS Managed Key(AWS管理キー)、ユーザー自身が作成・制御する Customer Managed Key(カスタマー管理キー)、そしてAWS内部で利用される AWS Owned Key(AWS所有キー) の3種類のキーがあります。用途に応じてこれらを使い分けることで、セキュリティと運用効率を両立できます。

アクセス制御には Key Policy(キーポリシー) を使用し、どのIAMユーザーやロールが鍵を利用できるかを細かく制御します。一時的に鍵の使用を許可する場合は Grants(一時的アクセス許可) を利用します。
また、Key Alias(エイリアス) を設定することで、鍵をわかりやすい名前で管理することができます。

暗号化の仕組みとしては、Envelope Encryption(エンベロープ暗号化) を採用しており、実際のデータを暗号化する Data Encryption Key(データ暗号化キー) を生成し、それ自体をKMSキーで暗号化することで、大規模データでも効率的かつ安全に処理できます。

Key Rotation(キーの自動更新) により、KMSキーは定期的に自動ローテーションされ、セキュリティリスクを低減します。鍵の状態は Key State(キー状態) によって「有効」「無効」「削除保留」などが管理されます。また、既存データを別のキーで再暗号化する ReEncrypt(再暗号化) 機能にも対応しています。

Custom Key Store(カスタムキーストア) を利用することで、AWS CloudHSM上の専用ハードウェアに鍵を保存し、より厳格なコンプライアンス要件を満たすことができます。

鍵の利用目的は Key Usage(キー用途) により暗号化・復号や署名・検証などに分かれ、暗号アルゴリズムは Key Spec(キー仕様) で指定します。

KMSは、SSM (Secrets Manager) や Parameter Store と連携して認証情報や設定値を安全に暗号化・保管できます。また、CloudTrail による操作監査、CloudWatch Logs との連携による可視化にも対応しており、HSM(ハードウェアセキュリティモジュール) 基盤の上で高いセキュリティ水準を維持します。

重要用語

ユースケース

データ暗号化キーの集中管理S3、EBS、RDSなどの暗号化に使用するカスタマーマスターキー(CMK)をKMSで管理し、鍵の利用権限やローテーションを制御する。
アプリケーション内での機微データ暗号化顧客情報や個人情報などを保存する際に、アプリケーションからKMSを呼び出して暗号化・復号し、平文を最小限に抑える。
監査対応のための鍵利用ログ取得CloudTrailと組み合わせて、どのユーザー・サービスがいつ鍵を利用したかを記録し、コンプライアンスや監査要件に対応する。

ベストプラクティス

カスタマー管理キーの利用重要データにはCMKを利用し、キーのローテーションを有効にする。
キー ポリシーの明確化キーごとに利用者と用途を限定したポリシーを設定する。
ログと監査CloudTrailで暗号化・復号リクエストを監査する。

高可用性・バックアップ・リトライ

高可用性・バックアップ・リトライ設計のポイント
【デフォルト】AWS内部で冗長化
 ・KMSキー情報のレプリケーション
 ・HSMフリート
 ・キーマテリアル
 ・APIエンドポイント
 ・データの全ホスト配備

セキュリティ

関連サービス設定内容
CloudTrail(操作履歴の記録・監査・追跡)【自動記録】
作成・更新・削除・設定変更は自動記録される。(コントロールプレーンAPI)
データ操作は追跡できない(データプレーンAPI)
Config(リソースの構成状態・設定変更を記録)【Configが有効な場合】
キー/エイリアスの変更履歴・キー回転/ポリシーの準拠評価
GuardDuty(脅威を自動検出)【GuardDutyが有効な場合】
キー削除・権限改ざんのAPI異常検知

リソースベースポリシーによる補完

実行ロールで不足する権限をKMS のリソースベースポリシーで補うパターン
リソースベースポリシーのPrincipalリソースベースポリシーのAction
【S3】
s3.amazonaws.com
kms:Decrypt
kms:GenerateDataKey
【EBS】
ec2.amazonaws.com
kms:CreateGrant
kms:Decrypt
kms:GenerateDataKey
【RDS】
rds.amazonaws.com
kms:CreateGrant
kms:Decrypt
kms:GenerateDataKey
【CloudWatch Logs】
logs.amazonaws.com
kms:Encrypt
kms:Decrypt
kms:GenerateDataKey
【SNS】
sns.amazonaws.com
kms:Decrypt
kms:GenerateDataKey
【SQS】
sqs.amazonaws.com
kms:Decrypt
kms:GenerateDataKey
【Secrets Manager】
secretsmanager.amazonaws.com
kms:Decrypt
kms:GenerateDataKey
【Backup】
backup.amazonaws.com
kms:CreateGrant
kms:Decrypt
kms:GenerateDataKey
【Redshift】
edshift.amazonaws.com
kms:CreateGrant
kms:Decrypt
kms:GenerateDataKey
【ECR】
ecr.amazonaws.com
kms:Decrypt
kms:GenerateDataKey
【SageMaker】
sagemaker.amazonaws.com
kms:CreateGrant
kms:Decrypt
kms:GenerateDataKey
【Glue】
glue.amazonaws.com
kms:Decrypt
kms:GenerateDataKey
※)権限設計の原則

ログ・監視

標準メトリクス
メトリクス名説明
NumberOfKeyUsageキー使用回数

制限値(固定値/ハードリミット/ソフトリミット)

ソフトリミット制限値
カスタマー管理キー数/リージョン100,000
エイリアス数/キー50
グラント数/キー50,000
カスタムキーストア数/リージョン10
リクエストレート(対称キー暗号化)5,500/秒(共有)、10,000/秒(RSA)
リクエストレート(対称キー復号)10,000/秒(共有)、15,000/秒(RSA)
リクエストレート(非対称キー)500/秒
リクエストレート(GenerateDataKey)5,500/秒

AWS CLIのサンプルコード

CloudFormationのサンプルコード

Terraformのサンプルコード

料金計算

課金項目説明
カスタマーマスターキーカスタマー管理キーの月額料金
リクエスト数暗号化/復号などのAPIリクエスト数
自動キーローテーション自動ローテーション有効時の追加料金なし
料金計算ツール

公式ページ

AWSドキュメント KMS