Amazon Redshiftの暗号化キー階層とKMS統合

目次

概要

AWSのデータウェアハウスサービスであるAmazon Redshiftは、保存データの暗号化に4層のキー階層を使用しています。これはエンベロープ暗号化と呼ばれる手法を拡張したもので、KMSマスターキーから始まり、クラスター暗号化キー、データベース暗号化キー、データ暗号化キーと段階的にデータを保護します。

本記事では、このRedshift固有の暗号化キー階層の仕組みを詳しく解説し、KMSカスタマー管理キーを使ったRedshiftクラスターの暗号化設定を実際に行います。

[!NOTE] KMSの3種類のキータイプ(AWS所有キー、AWSマネージドキー、カスタマーマネージドキー)についてはAWS暗号化キーの使い方 – 3種類の特徴と選び方を参照してください。

Redshiftの4層暗号化キー階層(KMSマスターキー→クラスター暗号化キー→データベース暗号化キー→データ暗号化キー)の全体像を示す図
Redshiftの4層暗号化キー階層(KMSマスターキー→クラスター暗号化キー→データベース暗号化キー→データ暗号化キー)の全体像を示す図
クラウドおさる

Redshift の保存データは、KMS マスターキーからデータ暗号化キーまで 4 層のキーで守られているのでござる。この記事では、その階層をたどりながら、カスタマー管理キーで暗号化したクラスターを実際に作って確かめるでござるな。

この記事のメリット

  • エンベロープ暗号化の概念を正確に理解できる
  • Redshiftの4層暗号化キー階層の各層の役割と管理場所を把握できる
  • KMSカスタマー管理キーを使ったRedshiftクラスターの暗号化設定を実際に体験できる
  • 暗号化キーのローテーション(KMS自動ローテーションとRedshift手動ローテーション)の違いを理解できる
  • SCS試験の「Redshift暗号化・KMS統合」に関する問いに正確に答えられるようになる

執筆者とキャラクター紹介

執筆者:土肥(とひ)

株式会社ジェニュインの代表であり元エンジニア。これまでオンプレミスと AWS 環境のインフラ業務を担当。AWS 認定資格の学習で得た知識を、ハンズオンとともに解説するのが得意。直近では新人の教育も行っており、これから技術を学ぶ方が納得できる解説を心がけています。基礎編・Cloud Practitioner の記事では、解説役としても登場します。

土肥

クラウドおさる

クラウドおさる

はじめましてでござる。弊猿はクラウドおさる。IT インフラが異常に発達した猿山から、雲に乗って地上の AWS を学びに降りてきたのでござる。

クラウドおさる

基礎編や Cloud Practitioner の記事では、とひさんに素朴な疑問をぶつける役でござるな。Security - Specialty などの記事では、要所でワンポイントや注意点をひとこと添えるでござる。

クラウドおさる

猿山にもデータセンターや監視当番があって、地上で起きることはだいたい猿山にも同じ仕組みがあるのでござる。例え話がつい猿山に寄るのは、弊猿の癖でござる。

技術解説

エンベロープ暗号化とは

エンベロープ暗号化は、データを直接マスターキーで暗号化するのではなく、データ暗号化キー(DEK)でデータを暗号化し、そのDEKをさらに上位のキーで暗号化する手法です。

単純な暗号化では、すべてのデータを1つのマスターキーで暗号化するため、マスターキーの管理が単一障害点になります。エンベロープ暗号化では、階層的にキーを管理することで以下のメリットがあります。

  • マスターキーの露出リスクを低減: マスターキーは他のキーの暗号化にのみ使用し、データの暗号化には使用しない
  • パフォーマンスの向上: 大量のデータを暗号化する際に、ローカルで生成したDEKを使用することでKMSへのリクエスト回数を減らせる
  • キーローテーションの効率化: マスターキーをローテーションしても、再暗号化が必要なのは1つ下の階層のキーのみ
エンベロープ暗号化の概念図(マスターキーがDEKを暗号化し、DEKがデータを暗号化する2層構造)
エンベロープ暗号化の概念図(マスターキーがDEKを暗号化し、DEKがデータを暗号化する2層構造)

Redshiftの4層暗号化キー階層

Redshiftはエンベロープ暗号化を拡張した4層のキー階層を使用しています。各層の役割は以下の通りです。

層キー名管理場所役割
第1層KMSマスターキー(CMK)AWS KMSクラスター暗号化キー(CEK)を暗号化
第2層クラスター暗号化キー(CEK)Redshift(暗号化された状態で保存)データベース暗号化キー(DEK)を暗号化
第3層データベース暗号化キー(DEK)Redshift(暗号化された状態で保存)データ暗号化キーを暗号化
第4層データ暗号化キーRedshift(暗号化された状態で保存)実際のデータブロックを暗号化
Redshiftの4層暗号化キー階層の詳細図(各層のキーの関係と、KMS管理領域・Redshift管理領域の境界を示す)
Redshiftの4層暗号化キー階層の詳細図(各層のキーの関係と、KMS管理領域・Redshift管理領域の境界を示す)

第1層: KMSマスターキー(CMK)

KMS内で管理されるルートキーです。このキー自体がKMSの外に出ることはありません。Redshiftは起動時にKMSに対してAPIコールを発行し、このマスターキーを使ってクラスター暗号化キー(CEK)を暗号化・復号します。

カスタマー管理キーを使用する場合、キーポリシーや有効化・無効化、削除のスケジュールなどをユーザーが制御できます。

第2層: クラスター暗号化キー(CEK)

Redshiftクラスターに固有のキーです。クラスター作成時にランダムに生成され、KMSマスターキーで暗号化された状態でRedshift内部に保存されます。CEKは第3層のデータベース暗号化キー(DEK)を暗号化するために使用されます。

第3層: データベース暗号化キー(DEK)

Redshiftデータベースに固有のキーです。CEKで暗号化された状態で保存されます。DEKは第4層のデータ暗号化キーを暗号化するために使用されます。

第4層: データ暗号化キー

実際のデータブロックを暗号化するキーです。データブロックごとにランダムに生成されます。DEKで暗号化された状態で、対応するデータブロックとともに保存されます。

クラウドおさる

KMS の外に出ないのは第 1 層のマスターキーで、CEK から下は暗号化された状態で Redshift 側に保存されるのでござる。猿山でいえば、長老会の金庫の鍵で倉庫の鍵束をしまい、その鍵束で棚ごとの鍵をしまうような入れ子でござるな。上の鍵が下の鍵を守る、という順番で覚えるのでござる。

暗号化キーのローテーション

Redshiftの暗号化キーのローテーションには2つの種類があります。

ローテーション種別対象実行方法影響
KMSキーの自動ローテーション第1層(KMSマスターキー)KMS側で自動ローテーションを有効化(年1回)KMSが新しいキーマテリアルを生成。既存の暗号文はそのまま復号可能
Redshiftの暗号化キーローテーション第2層〜第4層(CEK、DEK、データ暗号化キー)Redshiftコンソールまたはコマンドで手動実行Redshiftが内部キーを再生成し、データを再暗号化

KMSの自動ローテーションでは、KMSが新しいキーマテリアルを生成しますが、古いキーマテリアルも保持されるため、ローテーション前に暗号化されたデータの復号には影響しません。

Redshift側のキーローテーションでは、CEK以下のすべてのキーが再生成され、データブロックの再暗号化が行われます。この処理中、クラスターは一時的に利用不可になります。

クラウドおさる

KMS の自動ローテーションは新しいキーマテリアルを作るだけで、データの再暗号化はしないのでござる。一方、Redshift の暗号化キーローテーションは CEK 以下を作り直してデータを再暗号化し、その間クラスターは一時的に使えなくなるでござるぞ。

HSMとの統合オプション

KMSの代わりに、AWS CloudHSMを使用してマスターキーを管理することも可能です。CloudHSMを使用する場合、FIPS 140-3 Level 3 認証を受けた専有のハードウェアセキュリティモジュールでキーが管理されます。規制要件によりHSM上でのキー管理が必要な場合に選択します。

オプションキーの保護コスト管理負荷
KMS(AWS管理キー)FIPS 140-3 検証済みのKMS HSM(マルチテナント)低い低い
KMS(カスタマー管理キー)FIPS 140-3 検証済みのKMS HSM(マルチテナント)中程度中程度
CloudHSMFIPS 140-3 Level 3 の専有HSM高い高い

本記事ではKMSカスタマー管理キーを使用した手順を実践します。

フリーランス案件
クラウドおさる
クラウドキャリアフリーランス

AWS の実務経験があるなら、単価を上げにいく

AWS に特化したフリーランスエージェントです。以下は取り扱い案件の一例です。設計・SRE・セキュリティ・生成 AI の領域で、専門を掛け合わせるほど単価が上がります。

横にスクロールできます。掲載時点の情報のため、募集が終了している場合があります。条件の近い案件をご紹介しますので、お気軽にご相談ください。

実践

前提条件

  • リージョン: ap-northeast-1(東京)
  • KMSの操作権限とRedshiftの管理権限を持つIAMユーザーでログインしていること
  • VPCと、異なるアベイラビリティーゾーンにある2つのサブネット、およびそれらを含むRedshiftのクラスターサブネットグループが作成済みであること

クラスターサブネットグループが1つも無いアカウントでは、クラスター作成時に ClusterSubnetGroupNotFoundFault になります。先にRedshiftコンソールの「設定」→「サブネットグループ」で作成しておきます。

作成するリソース一覧

リソース種別リソース名用途
KMSキーredshift-encryption-keyRedshiftクラスター暗号化用のカスタマー管理キー
Redshiftクラスターencrypted-cluster暗号化設定を検証するためのクラスター(ra3.xlplus / 1ノード)

ステップ1: KMSカスタマー管理キーの作成

Redshiftクラスターの暗号化に使用するKMSキーを作成します。

  • AWSマネジメントコンソールにログインし、リージョンがap-northeast-1(東京)であることを確認します
  • 上部の検索バーにKMSと入力し、表示された「Key Management Service」を選択します
  • 左側ナビゲーションの「カスタマー管理型のキー」を選択します
  • 「キーの作成」をクリックします。6ステップのウィザード(キーを設定 / ラベルを追加 / キーの管理アクセス許可を定義 / キーの使用法アクセス許可を定義 / キーポリシーを編集 / 確認)が開きます

ステップ1: キーを設定

  • キーのタイプで「対称」を選択します(デフォルト。Redshiftは対称キーのみサポート)
  • キーの使用法で「暗号化および復号化」を選択します(デフォルト)
  • 「次へ」をクリックします

ステップ2: ラベルを追加

  • エイリアスにredshift-encryption-keyと入力します
  • 説明に「Redshiftクラスター暗号化用キー」と入力します
KMSキー作成画面のエイリアス入力(redshift-encryption-keyが入力された状態)
KMSキー作成画面のエイリアス入力(redshift-encryption-keyが入力された状態)

ステップ3〜5(オプション)

  • 「キーの管理アクセス許可を定義」「キーの使用法アクセス許可を定義」「キーポリシーを編集」は任意です。キーポリシーに個別のIAMユーザー・ロールを追加したい場合はここで選択します
  • 何も追加しない場合、キーポリシーにはアカウントのルートに対する許可だけが入り、IAMポリシーでアクセスを制御する形になります。「確認 にスキップ」で最後のステップまで進めます

ステップ6: 確認

  • 設定内容を確認し、「完了」をクリックします

作成後、キーの詳細画面でキーIDとARN、ステータス(有効)が確認できます。

作成したKMSキーの詳細画面(キーIDとエイリアス、ステータスが表示された状態)
作成したKMSキーの詳細画面(キーIDとエイリアス、ステータスが表示された状態)

ステップ2: Redshiftクラスターの暗号化有効での作成

KMSキーを指定して暗号化を有効にしたRedshiftクラスターを作成します。

  • 上部の検索バーにRedshiftと入力し、表示された「Amazon Redshift」を選択します
  • 左側ナビゲーションの「クラスター」を選択します
  • 「クラスターを作成」をクリックします
  • 以下の基本設定を入力します
  • クラスター識別子: encrypted-cluster
  • ノードの種類: ra3.xlplus(単一ノードのクラスターを作れる最小構成。現在の作成画面ではRA3系・RG系のみが選択できます)
  • ノードの数: 1
  • 「データベース設定」セクションで以下を入力します
  • 管理者ユーザー名: awsuser(デフォルト)
  • 管理者パスワード: 「手動でパスワードを追加」を選び、任意のパスワードを入力します(AWS Secrets Managerに管理させることもできます)
  • 「Choose a key type」(暗号化)セクションで以下を設定します
  • 「Customer managed key.」を選択します(デフォルトは「AWS owned key」。RA3クラスターではどちらを選んでも暗号化自体は有効です)
  • 「AWS KMS キーを選択」で、先ほど作成したredshift-encryption-keyを選びます
Redshiftクラスター作成画面の暗号化設定セクション(カスタマー管理キーとredshift-encryption-keyが選択された状態)
Redshiftクラスター作成画面の暗号化設定セクション(カスタマー管理キーとredshift-encryption-keyが選択された状態)
  • 「追加設定」で「デフォルトを使用」をオフにし、「ネットワークとセキュリティ」で作成済みのクラスターサブネットグループとVPC、セキュリティグループを選択します
  • ページ下部の「クラスターを作成」をクリックします

注意: クラスターの作成には数分かかります。ステータスが「作成中」から「使用可能」に変わるまで待ちます。

ステップ3: クラスターの暗号化設定の確認

作成したクラスターの暗号化設定を確認します。

  • クラスター一覧からencrypted-clusterをクリックします
  • 「プロパティ」タブを選択します
  • 「データベース設定」セクションで以下を確認します
  • 暗号化: 有効
  • AWS KMS キー ID: 先ほど作成したredshift-encryption-keyのARNが表示されている
Redshiftクラスターのプロパティ画面(暗号化が有効でKMSキーIDが表示されている状態)
Redshiftクラスターのプロパティ画面(暗号化が有効でKMSキーIDが表示されている状態)
  • この時点で、Redshift内部では以下の処理が完了しています
  • KMSマスターキー(redshift-encryption-key)を使ってCEKが暗号化されている
  • CEKを使ってDEKが暗号化されている
  • データブロックの暗号化キーがDEKで暗号化されている

ステップ4: KMSキーの使用状況の確認

KMSコンソールでキーがRedshiftから使用されていることを確認します。

  • 上部の検索バーにKMSと入力し、「Key Management Service」を選択します
  • 左側ナビゲーションの「カスタマー管理型のキー」を選択します
  • redshift-encryption-keyをクリックします
  • 「キーの使用」セクションまたは「暗号化の設定」タブで、このキーがRedshiftクラスターに関連付けられていることを確認できます
  • CloudTrailと連携している場合、「キーポリシー」タブから、Redshiftサービスがこのキーに対してEncryptやDecryptのAPIコールを行っていることを確認できます

ステップ5: 暗号化キーのローテーション

Redshiftクラスターの暗号化キーをローテーションします。この操作により、CEK以下のキーが再生成されます。

  • 上部の検索バーにRedshiftと入力し、「Amazon Redshift」を選択します
  • encrypted-clusterの詳細画面を開き、「プロパティ」タブを選択します
  • 「データベース設定」セクションの「暗号化キーの更新」をクリックします
  • 確認ダイアログに、更新される範囲が表示されます
  • クラスターのクラスター暗号化キー(CEK)が更新される
  • 自動スナップショット・手動スナップショットごとにCEKが更新される
  • Amazon S3に保存されたスナップショットのキーは更新されない
「暗号化キーの更新」ダイアログ(更新される範囲と警告が表示された状態)
「暗号化キーの更新」ダイアログ(更新される範囲と警告が表示された状態)
  • ダイアログの「暗号化キーの更新」をクリックします

注意: キー更新中、クラスターのステータスは rotating-keys(状態は「変更中」)になり、完了までに数分かかります。この間クラスターは一時的に使用できません。

  • クラスターの状態が「Available(使用可能)」に戻れば、更新完了です
ローテーション完了後のクラスター画面(状態が「Available」に戻った状態)
ローテーション完了後のクラスター画面(状態が「Available」に戻った状態)

KMS自動ローテーションの設定(補足)

第1層のKMSマスターキー自体の自動ローテーションも設定できます。これはRedshift側のローテーションとは独立した操作です。

  • KMSコンソールでredshift-encryption-keyを選択します
  • 「キーマテリアルとローテーション」タブを選択します
  • 「自動キーローテーション」の「編集」をクリックし、キーローテーションを「有効」にします
  • 「ローテーション期間 (日)」は既定で 365 です。90〜2,560日の範囲で変更できます
KMSキーの自動キーローテーション編集画面(キーローテーションが「有効」でローテーション期間が表示された状態)
KMSキーの自動キーローテーション編集画面(キーローテーションが「有効」でローテーション期間が表示された状態)
  • 「保存」をクリックします

同じタブには「オンデマンドキーローテーション」もあり、「今すぐローテーション」でその場でキーマテリアルを世代交代させられます(1つのキーにつき最大25回)。

注意: KMSの自動ローテーションでは新しいキーマテリアルが生成されますが、古いキーマテリアルも保持されるため、ローテーション前に暗号化されたデータの復号に影響はありません。Redshift側でのキーローテーション(ステップ5)とは異なり、データの再暗号化は行われません。

クラウドおさる

試験では、KMS 側と Redshift 側のローテーションでそれぞれ何が作り直されるのか、どの層のキーをどこが管理しているのかを取り違えないかが問われるでござるな。4 層の順番と管理場所をセットで押さえておくのでござる。

まとめ

本記事のポイントを整理します。

  • エンベロープ暗号化は、キーでキーを暗号化する階層的なアプローチ です。マスターキーの露出リスクを低減し、パフォーマンスとキーローテーションの効率を向上させます
  • Redshiftは4層の暗号化キー階層 を使用します。KMSマスターキー→クラスター暗号化キー(CEK)→データベース暗号化キー(DEK)→データ暗号化キーの順でデータを保護します
  • 第1層のKMSマスターキーはKMSが管理 し、第2層以下のキーはRedshiftが暗号化された状態で管理します。KMSマスターキーがKMSの外部に出ることはありません
  • キーローテーションには2種類 あります。KMSの自動ローテーション(第1層のキーマテリアルの更新、データ再暗号化なし)と、Redshiftの暗号化キーローテーション(第2層以下の再生成、データ再暗号化あり)です
  • カスタマー管理キーを使用すること で、キーポリシーの制御、使用状況の監査、キーの有効化・無効化など、暗号化キーに対する完全な制御が可能になります

参照先

フリーランス案件
クラウドおさる
クラウドキャリアフリーランス

AWS の実務経験があるなら、単価を上げにいく

AWS に特化したフリーランスエージェントです。以下は取り扱い案件の一例です。設計・SRE・セキュリティ・生成 AI の領域で、専門を掛け合わせるほど単価が上がります。

横にスクロールできます。掲載時点の情報のため、募集が終了している場合があります。条件の近い案件をご紹介しますので、お気軽にご相談ください。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

株式会社ジェニュイン(https://genuine-pt.jp)の代表取締役.

2018年〜インフラエンジニアとしてキャリアをスタートし、オンプレミスのネットワーク・サーバ環境で3年半、クラウド環境で4年半の8年間エンジニアとして従事。
2021年に佐藤氏の創業した株式会社Luxyを引き継ぎ、代表に就任。
その後アガルートグループ内の株式会社ジェニュインと合併。
合併後同社代表に就任。

目次