KMS

AWS の暗号鍵管理サービスで、データの暗号化 / 復号に使う鍵を安全に管理する

AWSセキュリティ

KMS とは

AWS KMS (Key Management Service) は、データの暗号化・復号に使う暗号鍵を安全に管理するマネージドサービスである。S3、DynamoDB、EBS、Lambda 環境変数など、AWS サービスの暗号化に使われる。

暗号化の仕組み

KMS はエンベロープ暗号化を採用している。まず KMS がデータキー (平文と暗号化済みのペア) を生成し、平文のデータキーでデータを暗号化した後、平文のデータキーを即座に破棄する。保存するのは暗号化済みデータキーと暗号化データのみ。復号時は暗号化済みデータキーを KMS に送り、KMS キーで復号してもらう。

エンベロープ暗号化:
  1. KMS がデータキー (平文 + 暗号化済み) を生成
  2. 平文のデータキーでデータを暗号化
  3. 平文のデータキーを破棄
  4. 暗号化済みデータキー + 暗号化データを保存

復号:
  1. 暗号化済みデータキーを KMS に送信
  2. KMS が KMS キーでデータキーを復号
  3. 復号されたデータキーでデータを復号

キーの種類

キーの種類を以下にまとめる。

種類置かれる場所コスト用途
AWS 所有キーAWS 側のアカウント無料多くのサービスの既定の暗号化 (DynamoDB のテーブルなど)
AWS マネージドキー自分のアカウント (管理は AWS)保管は無料 (使用は課金対象・サービスにより無料)サービスの暗号化を CloudTrail で追跡したい場合。エイリアスは aws/ebs のようにサービス名が付く
カスタマーマネージドキー自分のアカウント (管理も自分)$1/月 + API 呼び出しキーポリシーを自分で制御したい場合

AWS 所有キーは AWS 側のアカウントに置かれるため、キーポリシーを見ることも CloudTrail で使用を追跡することもできない。AWS マネージドキーは自分のアカウントに現れるが、ライフサイクルも権限も変更できず、他アカウントへ共有もできない。しかも 2021 年時点でレガシー扱いとなり、新しい AWS サービス向けには新規作成されなくなった。新旧どちらのサービスも既定では AWS 所有キーで暗号化するため、実務上の選択は「既定のまま (AWS 所有キー) か、制御が必要ならカスタマーマネージドキー」の二択になる。自前で用意した鍵素材をインポートする場合や外部キーストアを使う場合も、カスタマーマネージドキーの一種として扱う。

なお CMK (customer master key) はカスタマーマネージドキーの略語ではなく、KMS キー全般を指した旧称である。現行のドキュメントでは使われないため、設計書やコードのコメントに残っていたら書き換えておく。

Lambda 環境変数の暗号化

Lambda の環境変数はデフォルトで AWS マネージドキーで暗号化される。この既定のキーは Lambda が自分のアカウントに作り、使用料も取らない。機密情報は Secrets Manager で管理し、Lambda から動的に取得する方が安全。

キーのローテーション

カスタマーマネージドキーは自動ローテーションを有効にできる。周期の既定値は 365 日で、90 日から 2560 日 (7 年) の範囲で指定できる。API を呼んで任意のタイミングでローテーションすることも可能だが、こちらは 1 キーあたり生涯 10 回までという上限がある。

自動ローテーションでは、新しいキーマテリアルが生成されるが、古いキーマテリアルも保持されるため、過去に暗号化したデータは引き続き復号できる。キー ID もエイリアスも変わらないので、アプリケーション側の書き換えは不要。料金は 1 回目と 2 回目のローテーションでそれぞれ月額 1 ドルが加算され、3 回目以降は加算されない (つまり月額の上限は 3 ドル)。非対称キー・HMAC キー・CloudHSM のカスタムキーストアで生成したキーは自動ローテーションの対象外。

よくある使い方

よくある使い方を以下にまとめる。

サービス暗号化対象
S3オブジェクト (SSE-KMS)
DynamoDBテーブルデータ
EBSボリューム
RDSデータベース
Secrets Managerシークレット
Lambda環境変数

ただし「KMS を使う」がどこまで既定かはサービスによって違う。S3 の既定は S3 管理キーによる SSE-S3 で、KMS を使う SSE-KMS はバケット単位で選ぶ設定である。DynamoDB は既定で暗号化されているが、使われるのは AWS 所有キーなので KMS の料金は発生しない。KMS の請求が立つのはカスタマーマネージドキーを指定したとき、と覚えておくとコストの見積もりを外さない。

KMS の背景や設計思想は関連書籍に詳しい。

この記事は役に立ちましたか?

関連用語

関連する記事