Amazon S3 データ保護 の概要

  • Amazon S3 は、ミッションクリティカルでプライマリデータストレージ用に設計された高耐久ストレージインフラストラクチャを使用して、S3 データ保護を提供します。
  • オブジェクトは、S3 リージョン内の複数の施設にまたがって複数のデバイスに冗長に格納されます。
  • Amazon S3 PUT および PUT オブジェクトのコピー操作は、成功を返す前に、複数の施設間でデータを同期的に保存します。
  • オブジェクトが保存されると、S3 は、失われた冗長性を素早く検出して修復することによって、その耐久性を維持します。
  • また、S3 はチェックサムを使用して保存されたデータの整合性を定期的に検証します。Amazon S3 がデータの破損を検出すると、冗長データを使用して修復されます。
  • また、S3 はすべてのネットワークトラフィックのチェックサムを計算し、データの格納または取得時にデータパケットの破損を検出します。
  • バージョン管理を有効にすることによって、偶発的な上書きや削除に対するデータ保護を追加できます。
  • S3 はまた、(S3 との間で)移動中のデータおよび S3 から移動中のデータを保護する能力を提供します(S3に格納されている間)

データ保護

送信中のデータ

S3 は、SSL 経由の通信を有効にするか、クライアント側の暗号化を使用して、転送中のデータを保護します。

残りのデータ

  • S3 は、残りのデータを保護するためのクライアント側の暗号化とサーバー側の暗号化の両方をサポートします。
  • サーバー側の暗号化を使用して、S3 はオブジェクトを暗号化し、データセンターのディスクに保存してから、オブジェクトのダウンロード時に復号化します。
  • クライアント側の暗号化を使用して、データクライアント側を暗号化し、暗号化されたデータを S3 にアップロードできます。この場合、暗号化プロセス、暗号化キー、および関連ツールを管理します。

サーバー側の暗号化

  • サーバー側の暗号化は、残りのデータの暗号化についてです。
  • サーバー側の暗号化では、オブジェクトデータのみが暗号されます。オブジェクトメタデータは暗号化されません。
  • S3 は、データオブジェクトの暗号化 (ディスクへの書き込み時) と復号化 (オブジェクトにアクセスするとき) を処理します。
  • 暗号化または暗号化されていないオブジェクトのアクセスメカニズムに違いはなく、S3 によって透過的に処理されます。

Amazon S3 で管理されたキー (SSE-S3) を使用したサーバー側の暗号化

  • 各オブジェクトは、強力な多要素暗号化を使用する一意のデータキーで暗号化されます。
  • SSE-S3 は、定期的に回転するマスタキーを使用してデータキーを暗号化します。
  • S3 のサーバー側の暗号化は、256ビット高度な暗号化標準 (AES-256)、データを暗号化するために利用可能な最強のブロック暗号のいずれかを使用しています。
  • オブジェクトが SSE-S3 で暗号化されているかどうかは、サーバー側の暗号化を指定できる唯一の方法は、AWS マネジメントコンソールまたは HTTP リクエストヘッダーを使用しているため、事前に署名された URL を使ってアップロードする場合には適用できません。

AWS KMS で管理されたキー (SSE-KMS) によるサーバー側の暗号化

SSE-KMS

  • SSE-KMS は SSE-S3 に似ていますが、AWS キーマネージメントサービス (KMS) を使用して追加料金と共に追加の特典を提供します。
    • KMS は、セキュリティで保護された高可用性ハードウェアとソフトウェアを組み合わせて、クラウド向けのキーマネージメントシステムを提供するサービスです。
    • KMS は、顧客マスタキー (CMK) を使用して S3 オブジェクトを暗号化します。
    • マスターキーは使用できません。
    • KMS では、暗号化キーを一元的に作成し、キーの使用方法を制御するポリシーを定義できます。
    • AWS CloudTrail でログを検査することにより、キー使用量の監査を使用して正しく使用されていることを証明できます。
    • キーを一時的に無効にし、再度有効にすることができます。
    • キーを定期的に回転させることができます。
    • AWS KMS のセキュリティコントロールは、暗号化に関連するコンプライアンス要件を満たすのに役立ちます。
  • SSE-KMS では、エンベロープキー (つまり、データの暗号化キーを保護するキー) を使用するための個別のアクセス許可を有効にして、S3 内のオブジェクトの不正アクセスに対する保護を追加できます。
  • SSE-KMS では、暗号化キーを自分で作成および管理したり、自分に固有の既定の顧客マスターキー (CMK)、使用しているサービス、および作業中のリージョンを使用することができます。
  • 独自の CMK を作成および管理することにより、アクセス制御を作成、回転、無効化、定義する機能、データの保護に使用される暗号化キーを監査するなど、柔軟性が向上します。
  • データを暗号化するために使用されるデータキーも暗号化され、保護するデータと共に格納され、各オブジェクトに固有のものになります。
  • プロセスフロー
    • アプリケーションまたは AWS サービスクライアントは、暗号化キーを要求してデータを暗号化し、そのアカウントの下にあるマスタキーへの参照を渡します。
    • クライアント要求は、マスターキーを使用するアクセス権があるかどうかに基づいて認証されます。
    • 新しいデータ暗号化キーが作成され、そのコピーがマスターキーの下に暗号化されます。
    • データキーと暗号化されたデータキーの両方がクライアントに返されます。
    • データキーは、顧客データを暗号化するために使用され、すぐに実用的な削除されます。
    • 暗号化されたデータキーは、後で使用するために保存され、ソースデータを復号化する必要があるときに AWS KMS に送り戻されます。

お客様が用意した暗号化キーによるサーバー側の暗号化(SSE-C)

SSE-C

  • 暗号化キーは、顧客によって管理および提供することができ、S3 は、オブジェクトにアクセスするときにディスクに書き込み、復号化を行うときに暗号化を管理します。
  • オブジェクトをアップロードすると、暗号化キーは要求の一部として提供され、S3 はその暗号化キーを使用してデータに AES-256 暗号化を適用し、メモリから暗号化キーを削除します。
  • オブジェクトをダウンロードするときは、要求の一部として同じ暗号化キーを指定する必要があります。S3 は最初に暗号化キーを検証し、一致する場合はオブジェクトを復号化してから戻ります。
  • 各オブジェクトと各オブジェクトのバージョンを別のキーで暗号化できるため、使用するオブジェクトと暗号化キーの間のマッピングを維持する必要があります。
  • SSE-C の要求は HTTPS を介して行われなければならないと S3 は、SSE-C を使用するときに HTTP 経由で行われた要求を拒否します。
  • セキュリティ上の考慮事項については、HTTP を使用して誤って送信されたキーを侵害し、破棄またはローテーションすることをお勧めします。
  • S3 は、提供された暗号鍵を格納しません。 代わりに、暗号化キーのランダムにソルトされた HMAC 値を格納します。これは、将来の要求を検証するために使用できます。 暗号化された HMAC 値を使用して、暗号化キーの値を導出したり、暗号化されたオブジェクトの内容を復号化することはできません。 つまり、暗号化キーを失うと、オブジェクトが失われます。

クライアント側の暗号化

クライアント側の暗号化とは、データを暗号化して Amazon S3 に送信し、データをダウンロードした後に復号化することです。

AWS KMS管理のカスタマーマスタキー(CMK)

  • お客様は、AWS KMS での暗号化 CMK を維持し、データを暗号化するためにクライアントに CMK ID を提供することができます。
  • オブジェクトのアップロード
    • AWS S3 暗号化クライアントは、まず、オブジェクトデータを暗号化するためのキーに対して AWS KMS に要求を送信します。
    • AWS KMS は、オブジェクトメタデータとしてアップロードされるデータと暗号 BLOB を暗号化するためのプレーンテキストバージョンで、ランダムに生成されたデータ暗号化キーを2バージョンで返します。
    • クライアントは、アップロードする各オブジェクトに対して一意のデータ暗号化キーを取得します。
    • AWS S3 暗号化クライアントは、暗号化されたデータと暗号 BLOB をオブジェクトメタデータでアップロードします。
  • オブジェクトのダウンロード
    • AWS クライアントは、まず、暗号化されたオブジェクトを Amazon S3 から、オブジェクトメタデータとして保存したデータ暗号化キーの暗号 BLOB バージョンと共にダウンロードします。
    • AWS クライアントは、その暗号 BLOB を AWS KMS に送信して、オブジェクトデータを復号化できるように、同じバージョンのプレーンテキストを取得します。

クライアント側のマスターキー

  • 暗号化マスタキーはクライアント側で完全に維持されます。
  • オブジェクトのアップロード
    • Amazon S3 暗号化クライアント (Java 用の AWS SDK の AmazonS3EncryptionClient など) は、1回限りの対称キー (データ暗号化キーまたはデータキーとも呼ばれます) をローカルにランダムに生成します。
    • クライアントは、顧客提供のマスターキーを使用してデータ暗号化キーを暗号化します。
    • クライアントは、このデータ暗号化キーを使用して単一の S3 オブジェクトのデータを暗号化します(オブジェクトごとに、クライアントは個別のデータキーを生成します)
    • クライアントは暗号化されたデータを Amazon S3 にアップロードし、デフォルトで Amazon S3 に暗号化されたデータキーとその素材の説明をオブジェクトメタデータ(x-amz-meta-x-amz-key)として保存します。
  • オブジェクトのダウンロード
    • クライアントは、まず、オブジェクトメタデータと共に、Amazon S3 から暗号化されたオブジェクトをダウンロードします。
    • クライアントは、メタデータ内のマテリアルの説明を使用して、暗号化されたデータキーの復号化に使用するマスタキーを最初に決定します。
  • このマスタキーを使用すると、クライアントはデータキーを復号化し、それを使用してオブジェクトの暗号化を解除します。
  • クライアント側のマスタキーと暗号化されていないデータは、AWS に送られません。

AWS認定試験の練習問題

  • 質問はインターネットから収集され、答えは自分の知識と理解に基づいてマークされます(これはあなたと異なる場合があります)。
  • AWSサービスは毎日更新され、回答と質問はすぐに時代遅れになる可能性がありますので、それに応じて調査してください。
  • AWSのアップデートのペースを追うためにAWS試験の質問は更新されないため、基礎となる機能が変更されても質問が更新されないことがあります。
  • さらなるフィードバック、ディスカッション、修正を可能にします。
  1. 同社は、Amazon のシンプルなストレージサービス (S3) にデータを格納している。同社のセキュリティポリシーは、データが残りの部分で暗号化されることを義務付けています。これを実現する方法は次のどれですか。3つの回答を選択
    1. AWS キーマネージメントサービスマネージキーで Amazon S3 サーバー側暗号化を使用する。
    2. Amazon S3 サーバー側暗号化をお客様が提供するキーで使用する。
    3. Amazon S3 サーバー側暗号化を EC2 キーペアで使用します。
    4. Amazon S3 バケットポリシーを使用して、残りのデータへのアクセスを制限します。
    5. 独自のマスターキーを使用して Amazon S3 に取り込む前に、クライアント側のデータを暗号化する。
    6. Amazon S3 への転送中に、SSL を使用してデータを暗号化します。
  2. ユーザーが S3 バケットのバージョン管理を有効にしました。ユーザーは、残りのデータに対してサーバー側の暗号化を使用しています。ユーザーが暗号化のための彼自身のキーを供給している場合 (SSE-C) は、以下のステートメントのどれが当てはまりますか?
    1. ユーザーは同じオブジェクトのすべてのバージョンに対して同じ暗号化キーを使用する必要があります。
    2. 同じオブジェクトの異なるバージョンに対して異なる暗号化キーを持つことが可能です。
    3. AWS S3 は、ユーザーがサーバー側の暗号化のために自分のキーをアップロードすることはできません。
    4. バージョン管理が有効な場合、SSE-C は機能しません。
  3. ストレージ管理者は、サーバー側の暗号化を使用して S3 に格納されているすべてのオブジェクトを暗号化したいと考えています。ユーザーは、S3 によって提供される AES-256 暗号化キーを使用する必要はありません。どのようにユーザーがこれを達成することができます?
    1. 管理者は、AWS コンソールに彼の秘密鍵をアップロードし、S3 がオブジェクトを復号化できるようにする必要があります。
    2. 管理者は、CLI または API を使用して、暗号化キーを S3 バケットにアップロードする必要があります。S3 API の呼び出しを行う際には、各リクエストの暗号化キー URL について言及します。
    3. S3 は、サーバー側の暗号化のためのクライアント提供の暗号化キーをサポートしていません。
    4. 管理者は、各 API 呼び出しでキーと暗号化アルゴリズムを送信する必要があります。
  4. ユーザーが S3 バケットのバージョン管理を有効にしました。ユーザーは、残りのデータに対してサーバー側の暗号化を使用しています。ユーザーが暗号化 (SSE-C) のために自分のキーを供給している場合、セキュリティの目的でユーザーに推奨されるものは何ですか?
    1. セキュリティで保護されていないため、ユーザーは自分のセキュリティーキーを使用しないでください。
    2. ユーザーの暗号化キーを一定の間隔で回転させるように S3 を構成する。
    3. ユーザーのキーを SSL で安全に保存するように S3 を構成する。
    4. 暗号化キーをクライアント側で手動で回転させる。
  5. システム管理者は、アプリケーションから S3 にアップロードされるすべてのオブジェクトを暗号化することを計画しています。システム管理者は、独自の暗号化アルゴリズムを実装する必要はありません。代わりに、彼は自分のキー (SSE-C を供給することによってサーバー側の暗号化を使用することを計画している。SSE-C の呼び出しを行うときに、どのパラメータが必要ではありませんか。
    1. x-amz-server-side-encryption-customer-key-AES-256
    2. x-amz-server-side-encryption-customer-key
    3. x-amz-server-side-encryption-customer-algorithm
    4. x-amz-server-side-encryption-customer-key-MD5
  6. あなたは従業員数千人のグローバル企業のための個人的なドキュメントアーカイブソリューションを設計しています。このアーカイブソリューションでは、各従業員に対してギガバイトのデータがバックアップされる可能性があります。このソリューションは、アプリケーションとして従業員に公開され、アーカイブ・システムにファイルをドラッグ・アンド・ドロップするだけです。従業員は、web インターフェイスを介してアーカイブを取得できます。企業ネットワークには、AWS への高い帯域幅の AWS DirectConnect 接続があります。クラウドにアップロードする前に、すべてのデータを暗号化する必要がある規制要件があります。どのように高可用性とコスト効率の高い方法でこれを実装するのですか?
    1. 暗号化されたリレーショナルデータベースで、オンプレミスで暗号キーを管理します。ファイルを一時的に保存して Amazon S3 にアップロードするための十分なストレージを備えたオンプレミスサーバーをセットアップし、クライアント側のマスタキーを提供します。(一時的な増加コストを格納し、高可用性オプションではありません)
    2. ハードウェアセキュリティモジュール (HSM) アプライアンスのオンプレミスサーバーで暗号化キーを管理し、ファイルを一時的に Amazon Glacier に直接保存、暗号化、およびアップロードするための十分な記憶域を備えています。(費用効果はありません)
    3. Amazon キーマネージメントサービス(KMS)で暗号化キーを管理し、KMS顧客マスターキーIDを使用してクライアント側の暗号化を使用して Amazonシンプルストレージサービス(s3)にアップロードし、Amazon Glacier のストレージ階層を使用して各オブジェクトを格納するAmazon S3ライフサイクルポリシーを設定します。(CSE-KMS では、オブジェクトが S3 にアップロードされる前にクライアント側で暗号化が行われ、KMS はコスト効果もあります)
    4. AWS CloudHSM アプライアンスで暗号化キーを管理します。従業員のデスクトップにアップロードする前にファイルを暗号化し、Amazon Glacier に直接アップロードする (費用効果はありません)
  7. ユーザーは、S3 でサーバー側の暗号化を有効にしています。ユーザーは、暗号化されたオブジェクトを S3 からダウンロードします。どのようにユーザーがそれを復号化できますか?
    1. S3 はサーバー側の暗号化をサポートしていません。
    2. S3 は、オブジェクトを復号化するサーバー側のキーを提供します。
    3. ユーザーは、独自の秘密キーを使用してオブジェクトを復号化する必要があります。
    4. S3 は自動的に暗号化と復号化を管理
  8. オブジェクトをアップロードするときに、Amazon S3 へのリクエストで、サーバ側に保存されたオブジェクトデータを暗号化するために、どのようなリクエストヘッダを明示的に指定できますか?
    1. x-amz-storage-class
    2. Content-MD5
    3. x-amz-security-token
    4. x-amz-server-side-encryption

Jayendra’s Blog

この記事は自己学習用に「AWS S3 Data Protection – Certification(Jayendra’s Blogより)」を日本語に訳した記事です。