AWS Key Management Service

# AWS Key Management Service

https://d1.awsstatic.com/webinars/jp/pdf/services/20181121_AWS-BlackBelt-KMS.pdf

 

## KMS 概要

  • 暗号の鍵管理において考慮すべき問題
    • 鍵の保存先
    • 鍵はどこで扱われるのか
    • 誰が鍵を使えるのか
  • Key Management Infrastructure
    • KMI とは
      • 暗号鍵の保管、鍵のアクセス制御等、鍵自身のセキュリティを管理するインフラストラクチャ
    • KMIの機能
      • 鍵の保管
        • 鍵を安全に保管するストレージ
      • 鍵の管理
        • 鍵のライフサイクル管理、鍵の管理や利用に対する認証・認可・記録するアクセス制御
    • 厳しいコンプライアンスの場合にはHSM(占有デバイス)が利用されることが多い

 

  • AWS Key Management Service
    • 暗号鍵の作成、管理、運用のためのサービス
      • 可用性、物理的セキュリティ、ハードウェアの管理をAWSが担当するマネージドサービス
      • 暗号鍵を保存、暗号鍵を使用するためのサービス
      • マスターキーはFIPS 140-2 検定済暗号化モジュールによって保護
    • 他のサービス(S3EBSRedshiftRDSSnowball等)との連携
    • SDKとの連携で独自アプリケーションのデータも暗号化
    • CloudTrail と連動したログ生成

 

  • KMSで登場する用語
    • Customer Master Key(CMK)
      • 暗号鍵のヒエラルキーの頂点に位置するKMS上のAWS256ビットの鍵
      • 暗号化された状態で保存
      • KMS内部のHSM上でのみ平文で存在する
      • この鍵を利用して個別データの鍵を暗号化する
    • Enveloper Encryption
      • マスターキーで暗号した暗号キーで対象オブジェクトを暗号化・復号する
      • 暗号化したデータと、CMKで暗号化されたデータキーを一緒に保管する。コンテンツに対する封筒
      • 大量データの暗号化を実現
      • 管理性の向上
    • Customer Data Key(CDK)
      • 実際の暗号化対象オブジェクトの暗号化・復号化に使用されるAWS256ビットの鍵
      • KMSで生成され、CMKで暗号化された状態で保存
  • AWS KMS でできること
    • できること
      • 暗号鍵の生成と保管
      • 鍵利用の権限管理
      • 鍵利用の監査
      • 対象鍵暗号
      • 最大4KBのデータ暗号化
      • 他のAWSサービスとのインテグレーション
      • 鍵のインポート
    • できないこと
      • シングルテナント
      • 非対称鍵暗号
      • 鍵のエクスポート
  • AWS KMSの暗号鍵管理機能
    • 鍵の生成
    • 鍵のアクセス管理
      • IAMユーザおよびロールの定義
      • キーポリシーによるリソースベースの管理
    • CMKの無効化・有効化・削除
    • 自動キーローテーションの有効化
      • ライフサイクルは利用者が管理
    • CMKのインポート
  • KMSの認可・監査
    • Key Policy
    • IAM ベースのパーミッション管理
    • 許可(Grant)
    • Encryption Context
      • 暗号化機能を利用する際にKMSに渡すことのできるKey/Value ペア
      • 復号化の際にもこのKey/Value が必要になる
      • CloudTrail ログに平文で出力される値
  • AWS KMSの鍵を使用した暗号化・復号化
    • API
      • Encrypt API
      • Decrypt API
      • GenerateDataKey
    • 暗号処理
      • データキーを作成
      • データキーはアプリケーションのメモリ上に配置し、データの暗号化に利用(ディスクにはおかない)
      • 暗号化されたデータキーは暗号化されたデータとともに保存する(Enverope
    • 復号処理
      • アプリケーションから暗号化されたデータキーをKMSに送信
      • KMSはマスターキーを利用してデータキーを復号し、アプリケーションに返す
      • アプリケーションでデータキーを使ってデータを復号
    • データ暗号の選択肢
      • Client-Side Encryption
        • ユーザーアプリケーションでのデータ暗号化にKMSを利用
        • 他のAWSサービスのSDKやクライアントを利用して、Envelope Encryption して管理する
      • Server-Side Encryption
        • AWS 各種サービスと既にインテグレーションされている
        • AWSサービスでデータが受信された後にサービスがKMSを利用してデータを暗号化
        • 通信上では暗号化はされていない
    • AWS Encryption SDK
      • AWSが提供するクライアントサイド暗号化のためのライブラリ
      • トップレベルのマスターキーを指定すればSDKが残りの作業を実施
      • 鍵プロバイダを抽象化
    • AWS KMSの鍵管理(内部)
      • KMS内部では以下の鍵データが存在
        • Domain Key(DK)
          • 管理用の鍵
          • リージョンないの全てのHSMがメモリ上に保存
          • 日時ローテーション
        • HSM Backing Key(HBK)
          • CMKの実体となる平文の鍵データ
          • HSMの揮発性メモリ上でのみ平文で存在
        • Exported Key Token(EKT)
          • DKで暗号化されたHBK

 

## ベストプラクティス

  • 認証と認可
    • IAMポリシーとキーポリシーでデザイン
    • 最小権限の原則
    • MFAの利用と検討
  • 発見的統制
    • CloudTrail の利用
  • パフォーマンスとサービス制限
  • インフラストラクチャのセキュリティ
    • カスタマーマネージド型鍵の利用
    • 鍵をどの単位で分割するかの検討
      • AWSアカウントの体型
      • データクラス
      • インシデント対応
  • インシデント対応の明確化と自動化
    • AWS KMSセキリティの自動化
    • CMKの無効化と削除
  • 他のAWSサービスとの連携
    • 暗号化オプションはONにする必要がある
    • 暗号化されたバックアップは共有が可能(リージョン間で渡すことはできない)。その場合はCMKの共有もしないと復号できない
    • 対応しているインスタンスタイプ(RDS, EBSなど)注意が必要
    • 暗号化しているものを途中で暗号化しないに変更することはできない
  • KMSのセキュリティ
    • 鍵の管理はユーザーが行う
    • マスターキーには誰もアクセスできない
    • KMSサービス内でアクセスする方法を限定する
    • キーは指定されたリージョンにのみ保存され、他のリージョンに移動できない
    • キーの1年毎の自動ローテーション。インポートされたキーは対応していない
    • CloudTrail による監査

 

## 雑感

混乱しやすいHSMKMSKMSの方。サーバーサイドの暗号化は他のAWSサービスにインテグレーションしやすくなっている。

マスターキーとコンテンツを復号するキー、コンテンツの3つの要素から成り立っていて、マスターキーはコンテンツを暗号化した暗号鍵の暗号化のみに利用される。暗号化された暗号鍵を暗号化したコンテンツと一緒に管理することにより、管理をシンプルにしている(Enverope)。

暗号化されたデータはコピーや共有に制限があったり、CMKの共有が必要であったりするので利用する際には制限の部分に注意する必要がある。

基本的には仕組みに乗っかれれば、キーの管理も自動で行ってくれるので良きサービス。