Amazon Redshift データベース暗号化 - Amazon Redshift

Amazon Redshift データベース暗号化

Amazon Redshift では、クラスターに対してデータベースの暗号化を有効にして、保管中のデータを保護できます。クラスターに対して暗号化を有効にすると、クラスターとそのスナップショットのデータブロックとシステムメタデータが暗号化されます。

クラスターの起動時に暗号化を有効にすることも、暗号化されていないクラスターを AWS Key Management Service (AWS KMS) 暗号化を使用するように変更することもできます。そのためには、AWS 管理キーまたはカスタマー管理キーのどちらかを使用できます。クラスターを変更して AWS KMS 暗号化を有効にすると、Amazon Redshift は自動的にデータを新たな暗号化されたクラスターに移行します。暗号化されたクラスターから作成されたスナップショットも暗号化されます。また、クラスターを変更して データベースの暗号化 オプションを変更することで、暗号化されたクラスターを暗号化されていないクラスターに移行することもできます。詳細については クラスターの暗号化の変更を参照してください。

暗号化は Amazon Redshift ではオプションの設定ですが、機密データを含むクラスターに対しては有効にすることをお勧めします。また、データに適用されるガイドラインやルールに応じて暗号化の使用が必要になる場合があります。たとえば、Payment Card Industry Data Security Standard (PCI DSS)、Sarbanes-Oxley Act (SOX)、Health Insurance Portability and Accountability Act (HIPAA) といった規制では、特定の種類のデータの取り扱いに関するガイドラインが規定されています。

Amazon Redshift では、暗号化キーの階層を使用してデータベースを暗号化します。AWS Key Management Service (AWS KMS) またはハードウェアセキュリティモジュール (HSM) のいずれかを使用して、この階層の最上位の暗号化キーを管理できます。Amazon Redshift が暗号化に使用するプロセスは、キーの管理方法によって異なります。Amazon Redshift は AWS KMS と自動的に統合されますが、HSM とは統合されません。HSM を使用するときは、クライアントとサーバーの証明書を使用して、Amazon Redshift と HSM との間で信頼された接続を設定する必要があります。

パフォーマンスと可用性の向上のための暗号化プロセスの改善

RA3 ノードによる暗号化

RA3 ノードの暗号化プロセスの更新により、エクスペリエンスが大幅に向上しました。プロセス中に読み取りクエリと書き込みクエリの両方を実行でき、暗号化によるパフォーマンスへの影響が少なくなります。また、暗号化がはるかに迅速に終了します。更新されたプロセスステップには、復元オペレーションとクラスターメタデータのターゲットクラスターへの移行が含まれます。エクスペリエンスの向上は、例えば AWS KMS のような暗号化タイプでも実現します。ペタバイトスケールのデータ量であれば、運用にかかる時間が数週間から数日に短縮されます。

クラスターを暗号化する前に、データベースワークロードを引き続き実行する予定がある場合は、伸縮自在なサイズ変更が可能なノードを追加することで、パフォーマンスを向上させ、プロセスをスピードアップできます。暗号化中は伸縮自在なサイズ変更を使用できないため、暗号化する前に使用してください。通常は、ノードを追加するとコストが高くなることに注意してください。

他のノードタイプによる暗号化

DC2 または DS2 ノードでクラスターを暗号化する場合、RA3 ノードのように、書き込みクエリを実行することはできません。読み取りクエリのみ実行できます。

RA3 ノードでの暗号化の使用上の注意

以下のインサイトとリソースは、暗号化の準備とプロセスの監視に役立ちます。

  • 暗号化開始後のクエリの実行 — 暗号化の開始後、約 15 分以内に読み取りと書き込みが可能になります。完全な暗号化プロセスが完了するまでにかかる時間は、クラスター上のデータ量とワークロードレベルによって異なります。

  • 暗号化にはどれくらいの時間がかかりますか? — データを暗号化する時間は、実行中のワークロードの数、使用されているコンピューティングリソース、ノードの数、ノードのタイプなど、複数の要因によって異なります。最初は、テスト環境で暗号化を実行することをお勧めします。経験則として、ペタバイト単位のデータ量を扱う場合、暗号化が完了するまでに 1~3 日かかる可能性があります。

  • 暗号化が完了したことを確認するにはどうすればよいですか? – 暗号化を有効にすると、最初のスナップショットの完了により、暗号化が完了したことが確認されます。

  • 暗号化のロールバック — 暗号化操作をロールバックする必要がある場合は、暗号化が開始される前に作成された最新のバックアップから復元するのが最善の方法です。最後のバックアップの後で、新しい更新 (更新/削除/挿入) を再適用する必要があります。

  • テーブルの復元の実行 — 暗号化されていないクラスターから暗号化されたクラスターにテーブルを復元することはできないことに注意してください。

  • 単一ノードクラスターの暗号化 — 単一ノードクラスターの暗号化にはパフォーマンス上の制限があります。マルチノードクラスターでは、暗号化よりも時間がかかります。

  • 暗号化後のバックアップの作成 — クラスター内のデータを暗号化する場合、クラスターが完全に暗号化されるまでバックアップは作成されません。この処理にかかる時間はさまざまです。バックアップにかかる時間は、クラスターのサイズによって、数時間から数日かかる場合があります。暗号化の完了後、バックアップを作成できるようになるまでに時間がかかることがあります。

    バックアップおよび復元オペレーションは暗号化プロセス中に発生するため、BACKUP NO で作成したテーブルやマテリアライズドビューは保持されません。詳細については、「CREATE TABLE」または「CREATE MATERIALIZED VIEW」を参照してください。

AWS KMS を使用した Amazon Redshift のデータベース暗号化

Amazon Redshift によるキー管理用に AWS KMS を選択した場合、4 階層の暗号化キーがあります。これらのキーは、階層の最上位から順にルートキー、クラスターの暗号化キー (CEK)、データベースの暗号キー (DEK)、データ暗号化キーとなっています。

クラスターを起動すると、Amazon Redshift は、 AWS アカウントが作成した、または AWS KMSで使用する許可を得た AWS KMS keys のリストを返します。暗号化キーの階層でルートキーとして使用する KMS キーを選択します。

デフォルトでは、Amazon Redshift はデフォルトのキーをルートキーとして選択します。デフォルトのキーは、Amazon Redshift で使用するための AWS アカウント 用に作成された AWS 管理キーです。暗号化されたクラスターを AWS リージョンで初めて起動してデフォルトのキーを選択すると、 AWS KMS でこのキーが作成されます。

デフォルトのキーを使用しない場合は、Amazon Redshift でクラスターを起動する前に、AWS KMS でカスタマー管理 KMS キーを別途用意(または作成)する必要があります。カスタマー管理キーを作成すると、データの保護に使用する暗号化キーを作成、ローテーション、無効化、アクセス制御定義、監査できるなど、より柔軟に取り扱うことができます。KMS キーの作成の詳細については、 AWS Key Management Service デベロッパーガイドキーの作成 を参照してください。

別の AWS アカウントの AWS KMS キーを使用する場合は、そのキーを使用するアクセス許可が必要であり、Amazon Redshift でその Amazon リソースネーム (ARN) を指定する必要があります。AWS KMS でのキーアクセスの詳細については、AWS Key Management Service デベロッパーガイドキーのアクセスの制御 を参照してください。

ルートキーを選択すると、Amazon Redshift では、 AWS KMS によるデータキーの生成と、選択されたルートキーによる暗号化が要求されます。このデータキーは Amazon Redshift で CEK として使用されます。 AWS KMS では、暗号化された CEK が Amazon Redshift にエクスポートされます。CEK は、クラスターから別のネットワークのディスクの内部で、KMS キーと CEK の暗号化コンテキストに対する権限とともに保存されます。暗号化された CEK だけが Amazon Redshift にエクスポートされ、KMS キーは AWS KMS に残ります。また、Amazon Redshift は暗号化された CEK を安全なチャンネル経由でクラスターに渡し、メモリにロードします。その後、Amazon Redshift は、 AWS KMS を呼び出して CEK を復号化し、復号化した CEK をメモリにロードします。権限、暗号化コンテキスト、およびその他の AWS KMS関連概念の詳細については、 AWS Key Management Service デベロッパーガイド概念 を参照してください。

次に、Amazon Redshift は DEK として使用するキーを生成し、クラスターのメモリにランダムにロードします。復号化された CEK は DEK の暗号化に使用されます。その後、暗号化された DEK はクラスターから安全なチャンネル経由で Amazon Redshift に渡され、クラスターとは別のネットワーク内のディスクに内部で保存されます。CEK と同様に、DEK の暗号化と復号の両方のバージョンはクラスターのメモリにロードされます。その後、DEK の復号バージョンは、データベース内の各データブロックのランダムに生成された暗号化キーを暗号化するために使用されます。

クラスターを再起動すると、Amazon Redshift は、内部に保存した CEK と DEK の暗号化バージョンをまずメモリに再ロードしてから、AWS KMS を呼び出して KMS キーで CEK を再び復号化します。これで、CEK がメモリにロードできるようになります。復号された CEK で DEK は再び復号され、復号された DEK はメモリにロードされて、必要に応じてデータブロックキーの暗号化および復号に使用されます。

AWS KMS キーで暗号化された Amazon Redshift クラスターの作成の詳細については、 クラスターの作成AWS CLI および Amazon Redshift API を使用したクラスターの管理を参照してください。

別の AWS リージョンに AWS KMS暗号化スナップショットをコピーする

AWS KMS キーは、 AWS リージョンに固有のものです。別の AWS リージョンへの Amazon Redshift スナップショットのコピーを有効にし、ソースクラスターとそのスナップショットが AWS KMS からのルートキーを使用して暗号化される場合、Amazon Redshift がターゲットの AWS リージョンで ルートキーを使用するように、権限を設定する必要があります。この権限により、Amazon Redshift はターゲットの AWS リージョンでスナップショットを暗号化できるようになります。リージョン間スナップショットコピーに関する詳細については、 別の AWS リージョンにスナップショットをコピーする を参照してください。

注記

暗号化されたクラスターからのスナップショットのコピーを有効にし、ルートキーとして AWS KMS を使用する場合は、クラスター名が暗号化コンテキストの一部になるため、そのクラスター名を変更することはできません。クラスター名を変更する必要がある場合、ソースの AWS リージョンでスナップショットのコピーを無効にし、クラスター名を変更してから、再びスナップショットのコピーを設定して有効にします。

スナップショットのコピー権限を設定するプロセスは、以下のとおりです。

  1. ターゲットの AWS リージョンで、次の手順を実行してスナップショットのコピー権限を作成します。

    • 使用する AWS KMS キーがまだなければ作成します。AWS KMS キーの作成の詳細については、 AWS Key Management Service デベロッパーガイドキーの作成 を参照してください。

    • スナップショットのコピー権限の名前を指定します。この名前は、 AWS アカウントの AWS リージョンで一意である必要があります。

    • 作成する権限が適用される AWS KMS キー ID を指定します。キー ID を指定しない場合は、この権限はデフォルトのキーに適用されます。

  2. ソースの AWS リージョンでスナップショットのコピーを有効にし、ターゲットの AWS リージョンで作成したスナップショットのコピー権限の名前を指定します。

この事前のプロセスは、 AWS CLI、Amazon Redshift API、または SDK を使用してスナップショットのコピーを有効にする場合にのみ必要です。コンソールを使用する場合、Amazon Redshift では、リージョン間のスナップショットのコピーを有効にするときに、権限の設定ワークフローがあります。コンソールを使用して、AWS KMS暗号化されたクラスター用にリージョン間のスナップショットのコピーを設定する方法の詳細については、 AWS KMS で暗号化されたクラスターのクロスリージョンスナップショットコピーを設定するを参照してください。

スナップショットがターゲットの AWS リージョンにコピーされる前に、Amazon Redshift はソースの AWS リージョンでルートキーを使用してスナップショットを復号化し、ランダムに生成された (内部管理の) RSA キーを使用して一時的な再暗号化を行います。その後、Amazon Redshift は安全なチャンネル経由でターゲットの AWS リージョンにスナップショットをコピーし、それを (内部管理の) RSA キーを使用して復号化した上で、ターゲットの AWS リージョンのルートキーを使用して再暗号化します。

AWS KMS暗号化されたクラスター用にスナップショットのコピー権限を設定する方法の詳細については、 Amazon Redshift API と AWS KMS を使用して AWS CLI暗号化キーを使用するように Amazon Redshift を設定するを参照してください。

Amazon Redshift でのハードウェアセキュリティモジュールを使用した暗号化

キー管理に AWS KMS を使用しない場合、Amazon Redshift ではキー管理にハードウェアセキュリティモジュール (HSM) を使用できます。

重要

HSM 暗号化は DC2 と RA3 ノードタイプではサポートされません。

HSM は、キー生成と管理を直接に制御するデバイスです。キーの管理をアプリケーションとデータベースのレイヤーから切り離すことで、より優れたセキュリティを実現します。Amazon Redshift では、キー管理のために AWS CloudHSM Classic がサポートされています。AWS KMS の代わりに HSM を使用して暗号化キーを管理するときは、暗号化プロセスが異なります。

重要

Amazon Redshift では、 AWS CloudHSM Classic のみがサポートされています。新しい AWS CloudHSM サービスはサポートされていません。

新規のお客様は、AWS CloudHSM クラシックをご利用いただけません。詳細については、 CloudHSM Classic の料金を参照してください。 AWS CloudHSMClassic はすべての AWS リージョンで使用できるわけではありません。使用できる AWS リージョンについては、 AWS リージョン表を参照してください。

HSM を使用するようにクラスターを設定すると、Amazon Redshift は HSM に、CEK として使用されるキーの生成と保存を要求します。ただし、 AWS KMS とは異なり、HSM では Amazon Redshift に CEK をエクスポートすることができません。代わりに、Amazon Redshift はクラスターで DEK をランダムに生成し、HSM に DEK を渡して、DEK は CEK で暗号化されます。HSM は暗号化された DEK を Amazon Redshift に返します。その DEK は、内部で保存されているランダムに生成されたルートキーでさらに暗号化され、クラスターとは別のネットワークにあるディスク内に保存されます。また、Amazon Redshift は、DEK の復号バージョンをクラスターのメモリにロードします。それにより、DEK を使用して個々のデータブロックキーを暗号化および復号できるようになります。

クラスターを再起動した場合、Amazon Redshift は、内部に保存したルートキーを使用して、内部で保存され二重に暗号化された DEK を復号化することで、その DEK を CEK で暗号化した状態に戻します。その後、CEK で暗号化された DEK は HSM に渡され、復号化されて、Amazon Redshift に戻され、再びメモリにロードされて、個々のデータブロックキーに使用できるようになります。

Amazon Redshift と HSM との間の信頼された接続の設定

クラスターキーの管理に HSM を使用するように選択した場合、Amazon Redshift と HSM の間に信頼されたネットワークリンクを構成する必要があります。これを行うには、クライアント証明書とサーバー証明書の設定が必要です。信頼された接続は、暗号化と復号化のオペレーション中に、HSM と Amazon Redshift との間で暗号化キーを渡すために使用されます。

Amazon Redshift は、ランダムに生成されたプライベートキーと公開キーの組み合わせから、公開クライアント証明書を作成します。これらは内部的に暗号化されて保存されます。ユーザーは、公開クライアント証明書を HSM にダウンロードして登録し、該当する HSM パーティションに割り当てます。

ユーザーは、HSM の IP アドレス、HSM パーティション名、HSM パーティションのパスワード、および内部ルートキーで暗号化された (パブリックな) HSM サーバー証明書を Amazon Redshift に対し指定します。Amazon Redshift は設定プロセスを完了し、HSM に接続できることを確認します。接続できない場合、クラスターは INCOMPATIBLE_HSM 状態に設定され、クラスターは作成されません。この場合、不完全なクラスターを削除してから、もう一度やり直す必要があります。

重要

別の HSM パーティションを使用するクラスターを変更する場合、Amazon Redshift は新しいパーティションに接続できるか確認しますが、有効な暗号化キーがあるかは確認しません。新しいパーティションを使用する前に、新しいパーティションのキーをレプリケーションする必要があります。クラスターを再起動し、Amazon Redshift が有効なキーを見つけることができない場合、再起動は失敗します。詳細については、 HSM 間のキーのレプリケーションを参照してください。

初期設定の後で Amazon Redshift が HSM に接続できない場合、イベントが記録されます。これらのイベントの詳細については、 Amazon Redshift イベント通知を参照してください。

Amazon Redshift における暗号化キーのローテーション

Amazon Redshift では、暗号化したクラスターの暗号化キーをローテーションすることができます。キーのローテーションプロセスを開始すると、Amazon Redshift は指定されたクラスターとそのクラスターの自動または手動スナップショット用の CEK をローテーションします。また、Amazon Redshift は指定されたクラスターの DEK をローテーションしますが、スナップショットの DEK をローテーションすることはできません。スナップショットの DEK は Amazon Simple Storage Service (Amazon S3) に内部で保存されている間、既存の DEK で暗号化されているためです。

ローテーションの進行中、クラスターはその完了まで ROTATING_KEYS 状態に設定され、完了すると AVAILABLE 状態に戻ります。 は、キーのローテーションプロセスの間に、復号と再暗号化の処理を行います。Amazon Redshift は、キーローテーションプロセス中に復号と再暗号化を処理します。

注記

ソースクラスターなしでスナップショットのキーをローテーションすることはできません。クラスターを削除する際には、スナップショットのキーローテーションが必要になるかどうかを検討してください。

キーローテーションプロセス中はクラスターが一時的に使用不能になるので、キーローテーションは、データのニーズによって必要となるか、キーの漏洩の疑いがある場合のみ行ってください。ベストプラクティスとして、保存するデータの種類を考慮してデータの暗号化キーのローテーション頻度を計画してください。キーローテーションの頻度は、データセキュリティに対する企業のポリシーと、機密データと規制コンプライアンスに関する業界標準によって異なります。セキュリティのニーズとクラスターの可用性のバランスを考慮して計画を立ててください。

キーローテーションの詳細については、 Amazon Redshift コンソールを使用した暗号化キーのローテーションAmazon Redshift API および AWS CLI を使用した暗号化キーのローテーションを参照してください。