AWS KMSとは ― 暗号化キーとエンベロープ暗号化
KMSは、
AWS KMSとは、暗号化に使う鍵を作り、保管し、使わせるサービス
AWSのサービスでデータを暗号化するとき、鍵を作成して保護するのがAWS KMSです。正式名はAWS Key Management Serviceです。KMSで作って管理する鍵を、KMSキーと呼びます。KMSキーは、暗号化されていない形でKMSの外に出ません。利用者は鍵そのものを受け取らず、KMSに暗号化や復号を依頼します。
データを暗号化すると、今度はその鍵を保護する必要が出てきます。鍵を別の鍵で暗号化しても、最上位の鍵はどこかで保護しなければなりません。KMSは、この最上位の鍵を、FIPS 140-3のセキュリティレベル3の認定を受けたHSMの中で保護します。HSMは、暗号の処理と鍵の保管を行う専用の機器です。
KMSは、多くのAWSのサービスと連携しています。AWSの開発者ガイドが挙げるよくある使い方は、EBSのボリューム・S3のバケット・RDSのデータベースの暗号化です。
KMSキーの種類は3つ。違いは利用者が管理できる範囲
KMSキーには、作成者と管理者の違いによって3つの種類があります。利用者が自分で作って管理するキーを、カスタマーマネージドキーと呼びます。キーポリシーの内容・ローテーションの有無・削除の予定まで、利用者が決められます。
AWSのサービスが、利用者のアカウントの中に作るキーもあります。これをAWSマネージドキーと呼びます。aws/s3やaws/ebsのような別名が付きます。利用者はキーとその使用の記録を確認できますが、設定は変更できません。
3つ目のAWS所有のキーは、AWSのサービスが自分のアカウントで保持し、複数の利用者のために使うキーです。料金はかかりませんが、利用者はキーポリシーの変更も、使用の記録の確認もできません。AWSの開発者ガイドによると、2021年以降の新しいサービスにはAWSマネージドキーが作られません。既定の暗号化には、AWS所有のキーが使われます。
| 比べる | カスタマーマネージドキー | AWSマネージドキー | AWS所有の |
|---|---|---|---|
| 作る人 | 利用者 | AWSのサービスが、利用者のアカウントに作る | AWSのサービスが、サービス側のアカウントに作る |
| キーポリシー | 利用者が決める | サービスが決める。利用者は見られるが変えられない | サービスだけが決め、利用者は見られない |
| CloudTrailでの記録 | 利用者の証跡に残る | 利用者の証跡に残る | 利用者は見られない |
| 自動ローテーション | 任意。利用者が有効にする | 毎年。利用者は変えられない | サービスごとに異なる |
| 料金 | 月額と使用料がかかる | 月額はかからない。使用料はかかる | かからない |
鍵を自分で管理したいとき、使用を監査したいときはカスタマーマネージドキーを使います。手間をかけずに暗号化したいときは、サービスが用意するAWS所有のキーかAWSマネージドキーで十分です。
エンベロープ暗号化とは、データを暗号化した鍵を、さらにKMSキーで暗号化すること
KMSキーで、データを直接暗号化することもできます。ただし、KMSのEncryptという操作で暗号化できるのは4,096バイトまでです。直接暗号化するには、データそのものをKMSに送る必要もあります。
そこで、大きなデータには別の鍵を使います。KMSが作ってアプリに渡す、データの暗号化用の共通鍵をデータキーと呼びます。データはデータキーで暗号化し、データキーはKMSキーで暗号化します。
このように、データを暗号化した鍵を別の鍵でさらに暗号化するやり方を、エンベロープ暗号化と呼びます。エンベロープは、英語で封筒のことです。AWSの開発者ガイドは、暗号化した鍵と暗号化したデータをまとめたものを、この名前で呼んでいます。
暗号化したデータキーは、暗号化したデータの隣に置いても安全です。データキーを復号できるのは、KMSキーを使う権限を持つ人だけだからです。鍵を変更したいときも、大きなデータを暗号化し直さずに、小さなデータキーだけを暗号化し直せます。
次の図で、ファイルを暗号化して保存し、あとで復号するまでを1段ずつ進めます。ステップ1から4が暗号化、ステップ5と6が復号です。
アプリが、
アプリは、
暗号化が
暗号化した
ファイルを
アプリは、
KMSに送るのは、データキーの作成と復号の依頼だけです。ファイルの暗号化と復号は、KMSの外にあるアプリが平文のデータキーで行います。KMSはデータキーを保存しないので、暗号化したデータキーを保管するのは利用者の側です。
S3のSSE-S3とSSE-KMSの違いは、鍵をS3とKMSのどちらが管理するか
S3の記事で説明したオブジェクトは、保存するときにS3の側で暗号化されます。この仕組みをサーバ側暗号化と呼びます。S3では、鍵の管理方法によって方式が分かれます。2023年1月5日からは、新しく保存するオブジェクトのすべてがSSE-S3で自動的に暗号化されます。
SSE-S3は、S3が管理する鍵で暗号化する方式です。追加の料金はかかりません。S3は、オブジェクトごとに別の鍵を使います。SSE-KMSは、KMSのキーで暗号化する方式です。バケットの既定の設定か、保存のときの指定で選びます。
SSE-KMSを選ぶと、S3は前の節で説明したエンベロープ暗号化を使います。使うKMSキーは、S3用のAWSマネージドキーか、自分で作ったカスタマーマネージドキーから選びます。
| 比べる | SSE-S3 | SSE-KMS |
|---|---|---|
| 鍵の | S3 | AWS KMS |
| 使う | S3が | KMSキー。 |
| 既定 | 新しい | バケットの |
| 追加の | かからない | KMSの |
SSE-KMSでは、オブジェクトを読み書きする人に、KMSキーの権限も必要です。保存にはkms:GenerateDataKey、読み出しにはkms:Decryptの権限が必要です。AWSマネージドキーで暗号化したオブジェクトは、別のアカウントと共有できません。
SSE-KMSでは、オブジェクトを読み書きするたびに、S3からKMSへのリクエストが発生します。S3バケットキーを有効にすると、このリクエストを減らせます。AWSは、KMSのリクエストの料金を最大99%減らせると説明しています。S3のどこに個人情報などの機密データがあるかを調べるサービスには、Amazon Macieがあります。
KMSキーを使える人は、キーポリシーで決まる
KMSキーには、必ず1つのキーポリシーが付いています。キーポリシーは、キーの側に付けるポリシーです。そのキーを誰がどの操作に使えるかを書きます。キーポリシーもIAMのポリシーと同じくJSONの文書で、1つ以上のステートメントから成ります。
KMSキーには、ルートユーザーやキーを作った人を含め、明示的に許可された人しかアクセスできません。IAMポリシーで許可しても、キーポリシーがIAMポリシーを有効にしていなければ効きません。キーを作成するときの既定のキーポリシーには、IAMポリシーを有効にするステートメントが含まれます。組織のメンバーアカウントでは、KMSの操作もAWS OrganizationsのSCPが決める上限の中でしか使えません。
キーポリシーは、リージョンごとに適用されます。IAMポリシーは、すべてのリージョンに効きます。キーポリシーが効くのは、同じリージョンにあるKMSキーだけです。
KMSキーを使った記録は、CloudTrailに残る
KMSへの操作は、AWS CloudTrailに記録されます。CloudTrailは、AWSへの操作を誰がいつ行ったかを記録するサービスです。KMSでは、キーの作成やキーポリシーの変更に加えて、データキーの作成や復号の操作も記録されます。
記録を確認すると、どのキーがいつ、誰の操作で使われたかが分かります。カスタマーマネージドキーとAWSマネージドキーの記録は、利用者が確認できます。AWS所有のキーの記録は、利用者には見えません。CloudTrailとCloudWatchの違いは、CloudWatchの記事にまとめています。
キーのローテーションは、カスタマーマネージドキーなら選べる
KMSキーの中で、実際に暗号化に使う秘密の値をキーマテリアルと呼びます。ローテーションは、KMSキーはそのままに、このキーマテリアルを新しくすることです。キーIDやキーポリシーは変わらないので、キーを使うアプリを書き換える必要はありません。
カスタマーマネージドキーでは、自動ローテーションは任意で、利用者が有効にします。有効にすると、既定では365日ごとにキーマテリアルが新しくなります。周期は、90日から2,560日の間で変更できます。定期のローテーションとは別に、すぐにローテーションすることもできます。
AWSマネージドキーは、毎年自動でローテーションされます。利用者はこの予定を変えられません。AWS所有のキーのローテーションは、サービスごとに異なります。自動ローテーションを使えるのは、対称キーだけです。外部から持ち込んだキーマテリアルのキーなどは対象外です。
ローテーションのあとも、前のキーマテリアルは残ります。古いデータを復号するとき、KMSは暗号化したときのキーマテリアルを自動で選びます。そのため、ローテーションの前に暗号化したデータも、そのまま復号できます。
KMSキーの削除には、7日から30日の待機期間がある
KMSキーは、削除を予定してから待機期間が過ぎたときに削除されます。待機期間は7日から30日の間で決め、既定は30日です。削除を予定できるのは、カスタマーマネージドキーだけです。AWSマネージドキーとAWS所有のキーは削除できません。
待機期間を置くのは、削除が元に戻せない操作だからです。KMSキーが削除されると、一部の例外を除いて、そのキーで暗号化したデータは復号できなくなります。待機期間は、そのキーが今後も不要かどうかを確認するための時間です。
待機期間中のキーは削除保留中の状態になり、暗号化にも復号にも使えません。待機期間が終わる前なら、削除を取り消せます。取り消したキーは無効の状態に戻るので、使うには有効にし直します。
待機期間が終わると、削除はもう取り消せません。必要かどうか迷うときは、削除ではなくキーを無効にする方法があります。無効にしたキーは、あとから有効に戻せます。
キーマテリアルの持ち込み(BYOK)は、自分で生成した鍵の値をKMSキーにインポートすること
KMSキーのキーマテリアルは、通常はKMSが生成します。キーマテリアルの無いKMSキーを作成し、自分で生成したキーマテリアルをインポートすることもできます。この機能を、一般にBYOK(bring your own key)と呼びます。
持ち込んだキーマテリアルの生成と保護は、利用者の責任になります。KMSから、持ち込んだキーマテリアルを取り出すことはできません。そのため、元のキーマテリアルはAWSの外で保管しておきます。
持ち込んだキーマテリアルは、利用者がいつでも削除できます。有効期限を設定しておくと、期限が来たときにKMSが削除します。削除すると、KMSキーはすぐに使えなくなります。同じキーマテリアルを再度インポートすると、また使えるようになります。
前の節で説明したとおり、持ち込んだキーマテリアルのキーは、自動ローテーションの対象外です。対称キーなら、新しいキーマテリアルをインポートして、すぐにローテーションすることはできます。対称キーで暗号化したデータは、同じキーマテリアルを持っていても、KMSの外では復号できません。
KMSとCloudHSM・Secrets Managerの違い
AWS CloudHSMは、最初の節で説明したHSMを1つの利用者だけで使い、利用者が完全に制御するサービスです。KMSのキーの保管先にCloudHSMを使うこともできます。その場合は、CloudHSMの料金が別にかかります。
AWS Secrets Managerは、データベースのパスワードやAPIキーのような秘密情報を保管するサービスです。取得とローテーションも行います。Secrets Managerの説明では、暗号化の鍵にはKMSを使うよう勧めています。アプリに書きたくないパスワードはSecrets Manager、データを暗号化する鍵はKMSが受け持ちます。
KMSの料金は、キーの月額とリクエストの数で決まる
KMSの料金は、主にカスタマーマネージドキーの数と、KMSへのリクエストの数で決まります。次の表の値は、2026年10月28日にAWSの料金ページで確認したものです。
| 項目 | 料金 |
|---|---|
| カスタマー | 1キーあたり月1ドル。 |
| ローテーション | 1回目と |
| AWS | 月額は |
| AWS所有の | かからない |
| リクエスト | 1万件あたり0.03ドル。 |
| 無料枠 | すべての |
データキーそのものには、月額の料金はかかりません。データキーにかかるのは、データキーを作るリクエストと、復号するリクエストの料金です。従量課金の考え方は、AWSの料金の記事にまとめています。最新の値は、KMSの料金ページで確認してください。
参考にした資料
- AWS「AWS Key Management Service」(KMSの定義、KMSキーがHSMの外に出ないこと)
- AWS「AWS KMS keys」(3つのキーの種類の違い、AWSマネージドキーのローテーション)
- AWS「Cryptography essentials」(エンベロープ暗号化の定義と利点)
- AWS「Generate data keys」(データキーの作成・暗号化・復号の流れ)
- AWS「Encrypt」(KMSキーで直接暗号化できる大きさ)
- AWS「Key policies in AWS KMS」(キーポリシーとIAMポリシーの関係)
- AWS「Logging AWS KMS API calls with AWS CloudTrail」(CloudTrailに記録される操作)
- AWS「Rotate AWS KMS keys」とAWS「EnableKeyRotation」(ローテーションの既定と周期の範囲)
- AWS「Delete an AWS KMS key」とAWS「Cancel key deletion」(削除の待機期間と取り消し)
- AWS「Importing key material for AWS KMS keys」とAWS「Special considerations for imported key material」(キーマテリアルの持ち込みと、その扱い)
- AWS「Using server-side encryption with Amazon S3 managed keys (SSE-S3)」(S3の既定の暗号化)
- AWS「Using server-side encryption with AWS KMS keys (SSE-KMS)」(SSE-KMSで使える鍵と必要な権限)
- AWS「Reducing the cost of SSE-KMS with Amazon S3 Bucket Keys」(S3バケットキー)
- AWS「Using AWS KMS encryption with AWS services」(KMSと連携するサービスの例)
- AWS「What is AWS CloudHSM?」とAWS「What is AWS Secrets Manager?」(CloudHSMとSecrets Managerの役割)
- AWS「AWS Key Management Service Pricing」(キーの月額、リクエストの料金、無料枠)
練習問題(全5問)
正解:暗号化した
データキーは
正解:KMSキーで
KMSの
正解:毎年
AWSマネージドキーは、
正解:キーポリシーが
KMSキーへの
正解:カスタマーマネージドキー
キーポリシーを
選んでから「採点する」を押すと、解説つきで答え合わせができます。