「AWS Black Belt Online Seminar AWS Key Management Service (AWS KMS)」レポート

2016.09.29

こんにちは、菊池です。

先週に引き続き、2016年9月28日(水)のAWS Black Belt Online Seminarを受講しましたので、レポートします。

今回は暗号化で使用する鍵の作成と管理をサービスする、AWS Key Management Service (KMS)についてで、講師はAWSJソリューションアーキテクトの布目さんでした。

AWS Black Belt Online Seminar 2016 AWS Key Management Service from Amazon Web Services Japan

AWS Key Management Service (KMS) とは

アジェンダは以下の通りでした。

  • KMS概要
  • KMSの暗号鍵管理
  • KMSの暗号化処理
  • KMS利用TIPS
  • ログ、HSMとの比較、制限、料金等
  • まとめ

KMSの概要

暗号化によるデータ保護の対象は2つ

  • 通信の暗号化
  • 保管データの暗号化 <- KMSはこちらを対象にしている

暗号化の鍵管理においては、どこに保管するか/どこで使われるか/誰が使えるか、の考慮が必要であり、その管理にKey Management Infrastrucure (KMI)が用いられる。

KMIは鍵の保管管理を担う。

  • AWS KMS は上記モデルCに該当
  • Cloud HSM はモデルBに該当

AWS Key Management Serviceの特徴

  • 暗号鍵の作成、管理、運用を行うマネージメントサービス
  • S3、EBSなどのAWSサービスと統合
  • SDKで独自アプリケーションのデータ暗号化も可能
  • AWS CloudTrailと連動した監査

KMSで使用する用語

  • Customer Master Key (CMK):ヒエラルキーの頂点に位置するKMS内の鍵で、外部エクスポート不可
  • Customer Data Key (CDK):CMKから生成される暗号鍵で、実際のデータ暗号化に使用する
  • Envelope Encryption:マスターキーを使用せず、データキーを暗号化/復号化に利用する

2階層モデル

  1. CMKから生成されたCDKでデータを暗号化
  2. CMKで暗号化したCDKをデータと一緒に保管する
  3. 復号化時:CMKで復号化したCDKでデータを復号化する

KMSでできないこと

  • シングルテナント
  • 非対称鍵暗号(公開鍵暗号化はできない)
  • 4KB超のデータの直接暗号化
  • 鍵のエクスポート

主要なKMS API

鍵管理用APIとデータ(暗号化/復号化)APIに分類される。

KMSの暗号鍵管理

KMSの鍵管理機能

  • CMKの生成
  • キーを利用/管理するIAMユーザー及びロールの定義
  • CMKのEnable/Disable/Delete
  • 1年毎のキーの自動ローテーション
  • CMKのインポート

CMKの生成

  • マネジメントコンソールにKMSのメニューはないので、IAMの"Encryption Keys"より作成する。
  • 暗号鍵はリージョン単位
  • 鍵に対しパーミッションの設定

CMKのEnable/Disable/Delete

  • 管理者により自由にEnable/Disableが可能で、Disableにすることで使用不可になる。ただし、Disableの鍵も課金対象。
  • Disable状態の鍵はDeleteが可能。削除した鍵を利用していたデータは復号不可能になる。削除には猶予期間(デフォルト30日)があり、その期間であれば削除のキャンセルが可能。

CMKのローテーション

  • 1年毎に自動ローテーション(期間は現時点で固定)。
  • 古い鍵は保管され続け(課金対象)、復号に利用される。
  • 利用者からは新旧の鍵を意識せず、透過的に利用可能。

CMKのインポート

  • 自前の鍵を持ち込み可能に(2016/8/11リリース)
  • 有効期限指定/削除/再インポートが可能
  • インポートした鍵の自動ローテーションは不可

Key Policy

  • 鍵に対するリソースベースのパーミッション
  • Key Policyの他、IAM Policyでもアクセス制御が可能
  • 評価はIAMと同様で、デフォルトDeny < Allow < 明示的Deny

サービスデフォルトキー

AWSが管理する各サービスのデフォルトキーで、S3/EBSなどの対応サービスでサーバーサイド暗号化を有効化することで、自動生成される(アカウント/リージョン毎)

KMSの暗号化処理

KMSホストにリクエストすることで内部で処理される。

KMSの暗号化選択肢

クライアントサイド暗号化

ユーザーアプリケーションでデータ暗号化する際にKMSを利用する。AWS SDKを使うことでハンドル可能。

サーバーサイド暗号化

AWSの各種サービス(S3/EBS/RDS/...etc.)とインテグレーションされている。

KMS利用TIPS

  • アカウント毎の制限があるので必要に応じて上限緩和申請をすること
  • APIリクエストのスロットリングに注意(100リクエスト/秒)。S3のデータへの同時大量アクセスなど。
  • リージョン間で鍵の共有はできない
  • KMS with AWSサービス
    • EBS:サポートされているインスタンスに注意。また、1インスタンスにアタッチできる同じCMSで暗号化したボリュームは30個まで
    • RDS:レプリケーション、スナップショット利用時の制限事項に注意が必要。また、暗号化した状態でCMKをDisableにするとリカバリー不可能になる
    • S3:バケットポリシーで強制も可能

ログ、HSMとの比較、制限、料金等

CloudTrailを有効にすることでKMSのログは集約される

Cloud HSMとの比較

料金

月額$1/key VersionとAPIリクエスト($0.03/10,000リクエスト)に応じた課金

まとめ

  • KMSを使うことで暗号鍵をセキュアかつ低コストに一元管理できる
  • AWSサービスとの統合による容易なデータ暗号化とSDKによるアプリケーションデータ暗号化に対応
  • CloudTrailとの統合により監査対応も可能

今後のオンラインセミナー

最後に

KMSはこれまで積極的に利用してきませんでしたが、サービス仕様やCloud HSMとの違い、内部動作への理解が深まりました。データ暗号化の鍵管理をセキュアに、かつ簡単なオペレーションで実現でき、コストもそれほどかかりませんのでどんどん利用していきたいサービスの1つと言えるでしょう。