目次
1.KMSとは
KMS(Key Management Service)は、暗号化などに使う鍵を作成・保護し、利用権限を管理するAWSのサービスです。
金庫に例えると、データは書類、暗号化は金庫に入れること、暗号鍵は金庫の鍵です。KMSは、その鍵を厳重に管理する仕組みに当たります。
| できること | 内容 |
|---|---|
| 鍵の作成・保護 | KMSキーを作成し、安全に保管する |
| 利用権限の制御 | 誰が鍵を使って暗号化・復号できるかを決める |
| 鍵の運用 | 対応する鍵のローテーション、無効化、削除予約などを行う |
| 利用状況の確認 | CloudTrailを使って鍵への操作や利用を記録・確認する |
2.基本用語
| 用語 | 意味 |
|---|---|
| 暗号化 | データを、鍵がなければ読めない形式に変えること |
| 復号 | 暗号化したデータを、鍵を使って元に戻すこと |
| KMSキー | KMSで管理する鍵。データキーの保護などに使う |
| データキー | データ本体の暗号化に使う鍵 |
| キーポリシー | そのKMSキーを誰が管理・利用できるかを定めるルール |
| エイリアス | alias/demo-s3-keyのような、鍵に付ける分かりやすい名前 |
AWS管理のキーとカスタマーマネージドキー
AWS管理のキーはAWSサービスが作成・管理します。カスタマーマネージドキーは利用者が作成し、キーポリシーや有効・無効などを管理できます。
KMSで管理される「AWS管理のキー」と、下記のSSE-S3で使う「S3管理のキー」は区別が必要です。
3.データを守る仕組み
S3のSSE-KMSなどでは、データを暗号化する鍵を、KMSキーでさらに保護する「エンベロープ暗号化」を使います。
データキーの役割
KMSキーの役割
- S3がKMSにデータキーの生成を依頼する。
- S3が平文のデータキーでファイルを暗号化する。
- S3が暗号化済みファイルと暗号化済みデータキーを保存し、平文のデータキーをメモリから削除する。
- 読み出し時は、権限を確認したうえでKMSにデータキーの復号を依頼し、S3がファイルを復号して返す。
上記はS3の基本的な説明です。S3バケットキーを有効にした場合は、KMSへのリクエストを減らす仕組みが加わります。
4.簡単な使用例:S3のファイルを保護する
例:社内資料の sample.txt を、指定したKMSキーで保護してS3に保存します。 検証用バケットと、小さなテストファイルを使う想定です。
① KMSキーを用意する
- AWSコンソールで「KMS」を開き、S3バケットと同じリージョンを選ぶ。
- 「カスタマーマネージドキー」からキーを作成する。
- キーのタイプは「対称」、使用法は「暗号化および復号」を選ぶ。
- エイリアスを demo-s3-key とし、キー管理者・キー利用者を設定する。
キー利用者には、アップロードやダウンロードを行うIAMユーザー・IAMロールを指定します。鍵の管理者と利用者は役割が異なります。
② S3のアップロード画面で指定する
- S3で検証用バケットを開き、sample.txt のアップロードを開始する。
- アップロード画面の「プロパティ」などにあるサーバー側の暗号化設定を開く。
- バケットのデフォルト設定を上書きし、暗号化タイプとして SSE-KMS を選ぶ。
- 作成したKMSキーを指定してアップロードする。
- 保存したオブジェクトの「プロパティ」で、SSE-KMSとKMSキーのARNを確認する。
画面の表記・配置は変更される場合があります。バケットのデフォルト暗号化にSSE-KMSを設定する方法もあります。
③ ダウンロードする
権限のある利用者が通常どおりダウンロードすると、S3が復号してファイルを返します。ダウンロード後のファイル自体が、引き続きKMSで暗号化されているわけではありません。
必要な権限の考え方
| 操作 | S3の権限 | KMSの権限 |
|---|---|---|
| 通常のアップロード | s3:PutObject | kms:GenerateDataKey |
| ダウンロード | s3:GetObject | kms:Decrypt |
マルチパートアップロードでは、KMS側に両方の権限が必要です。実際の許可はIAMポリシー、キーポリシー、バケットポリシーなどの組み合わせで決まります。
参考:AWS CLIでアップロードする例
AWS CLIの認証と必要な権限が設定済みで、カレントフォルダーに sample.txt がある場合の例です。キーとバケットは東京リージョンにある想定です。
aws s3 cp sample.txt s3://YOUR-TEST-BUCKET/sample.txt --sse aws:kms --sse-kms-key-id alias/demo-s3-key --region ap-northeast-1
Windowsのコマンドプロンプト・PowerShellでも1行で実行できます。同名オブジェクトがある場合は上書きされ、バージョニング有効時は新バージョンになります。
5.混同しやすい点と注意点
| 疑問 | 回答 |
|---|---|
| S3はKMSを使わないと 暗号化されない? |
いいえ。S3への新規アップロードは、標準でSSE-S3により保存時に暗号化されます。SSE-KMSではKMSキーを使います。 |
| SSE-KMSにすると S3は非公開になる? |
暗号化と公開範囲は別の設定です。 |
| 通信もKMSで暗号化する? | この使用例でKMSが関わるのは保存時の暗号化です。通信中の保護にはHTTPS/TLSを使います。 |
| デフォルト暗号化を変えると 既存ファイルも変わる? |
いいえ。既存オブジェクトは自動では再暗号化されません。 |
| 費用はかかる? | キーの種類・数、KMSへのリクエスト数などに応じた料金がかかります。S3の利用料金も別途発生します。 |
関連の記事
