AWS Key Management Service (KMS)についてまとめています。
AWS KMSは、暗号化やデジタル署名用のキーの作成・管理をおこなうサービス
AWS Key Management Service (KMS) は、暗号化キーを簡単に作成・管理できるサービスです。AWS EBSの暗号化機能などと連携することで暗号化キーの扱いが簡単になります。
【関連記事】
▶AWS EBSは、EC2ブロックストレージボリューム 暗号化やスナップショットも可能
暗号化キーの管理がずさんだと、キーが盗み出されてデータが勝手に復号されてしまう可能性があるんですね。そのため、暗号化をおこなう場合には、キーの管理をどうするかはとても重要です。KMSはフルマネージド型サービスなので、セキュリティ面やキーの保管状態の監査の仕組みなどをユーザが意識する必要がありません。
AWS KMSの特徴
AWS KMSの特徴は以下の通り。
- 暗号化キーの保護
- 監査機能
- スケーラビリティ、耐久性、高可用性
暗号化キーの保護について、AWS KMSは、FIPS 140-2 レベル 2 準拠のハードウェアセキュリティモジュール(HSM)で、カスタマーマスターキー(CMK)のキーマテリアルを生成。キーマテリアルは HSM で暗号化され、ストレージに書き込まれます。CMK のキーマテリアルやキーマテリアルを保護する暗号化キーは、プレーンテキスト形式の状態になることはありません。
AWS KMS では、キーを使用できるユーザーとは別に、キーの管理ユーザーを設定できます。AWS KMS から生成したキー以外に、独自のキー管理インフラストラクチャのキーや、AWS CloudHSM クラスターに保存されたキーを使用することも可能。AWS KMS で生成したルートキーの自動ローテーションを設定すると、データの最暗号化が不要になります。
データの復号用に、古いルートキーは自動保存されます。ルートキーの管理とその使用状況の履歴は、AWS マネジメントコンソールか、 AWS SDK か AWS コマンドラインインターフェイス (CLI) を使用します。
【関連記事】
▶AWS CLIのインストール方法 AWSアクセスキーの登録と疎通確認
AWS KMSの監査機能について、AWS KMS は AWS CloudTrail と統合されていて、キーの使用ログを表示できます。法規制やコンプライアンスの要件に対応できるんですね。AWS アカウントで AWS CloudTrail を有効にしておくと、Amazon S3 バケットに送信されるログファイルに記録されます。記録される項目には、ユーザーの詳細、時間、日付、API アクション、使用されるキーが含まれます。
AWS KMSのスケーラビリティ、耐久性、高可用性について、暗号化の使用が増加すると、サービスが自動的にスケールされます。アカウント内の数千規模の KMS キーの管理が可能です。KMSのキーはサービスからエクスポートできません。99.999999999% の耐久性を持つように設計されたシステムに、キーの暗号化コピーを複数保存します。カスタムキーストア機能も用意されていて、KMS にキーをインポートしておくと、AWS CloudHSM クラスターにキーの暗号化されたコピーが自動的にバックアップされます。
AWS KMSの料金
KMS で作成したキーには、1 USD/月の料金が発生します。料金は、対称キー、非対称キー、各マルチリージョンキー、インポートされたキー、カスタムキーストアのキーでも同じ料金です。
関連)料金 – AWS Key Management Service | AWS
料金はリージョンによって変化します。リージョンがアジアパシフィック(東京)の場合は以下の通りです。
- 10,000 件のリクエスト当たり0.03USD
- 10,000 件の RSA 2048 キーを含むリクエスト当たり0.03USD
- 10,000 件の ECC GenerateDataKeyPair リクエスト当たり0.10USD
- 10,000 件の RSA 2048 を除く非対称のリクエスト当たり0.15USD
- 10,000 件の RSA GenerateDataKeyPair リクエスト当たり12.00USD
なお、削除が予定されているKMS キーについては、料金はかかりません。待機期間中に削除をキャンセルした場合は、カスタマーマネージド KMS キーは料金を請求されます。KMS が生成するデータキーやデータキーペアには、API コールの料金以上の月額料金はかかりません。
AWS KSMには無料利用枠があります。AWS Key Management Service は、サービスが利用可能な全てのリージョンで計 20,000 件のリクエスト/月が無料で利用できます。
AWS KMSの使い方
AWSマネジメントコンソールまたは、AWS KMS APIを使って、Java、C#、Python、Ruby、PHPなどの開発言語から操作が可能です。
AWSマネジメントコンソールから、ウィザード形式でキーの生成ができます。
【関連記事】
▶AWSを集中管理したい!AWS マネジメントコンソールを使いこなそう!
関連)キーの使用 – AWS Key Management Service
以下は、AWS SDK for Pythonを使ってPythonからAWS KMSを操作する例です。CMK(カスタマーマスターキー)の作成、データキーの作成、CMKの有効化をおこなっています。
# CMKの作成 desc = 'Key for protecting critical data' response = kms_client.create_key( Description=desc ) # データキーの生成 # Replace the following example key ARN with any valid key identfier key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' response = kms_client.generate_data_key( KeyId=key_id, KeySpec='AES_256' ) plaintext_key = response['Plaintext'] encrypted_key = response['CiphertextBlob'] # CMKの有効化 # Replace the following example key ARN with a valid key ID or key ARN key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' response = kms_client.enable_key( KeyId=key_id )
AWS KMSのまとめ
- AWS KMSは暗号化キーを作成、保管するサービス
- 暗号化キーは高度なセキュリティと高可用性で保護
- AWSマネジメントコンソールやAWS CLIから操作が可能