
【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リクエスト数 |
| 自動キーローテーション | 自動ローテーション有効時の追加料金なし |