Amazon Athena
ユーザーガイド

保管時の暗号化

同じリージョン内の Amazon S3 の暗号化されたデータに対して Amazon Athena のクエリを実行できます。Amazon S3 のクエリ結果および AWS Glue Data Catalog 内のデータを暗号化することもできます。

Athena の以下のアセットは暗号化できます。

サポートされている Amazon S3 暗号化オプション

Athena は、同じリージョン内の Amazon S3 の暗号化されたデータセットと暗号化されたクエリ結果の両方に対して、以下の Amazon S3 暗号化オプションをサポートしています。

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

  • AWS Key Management Service カスタマー管理キー (SSE-KMS) を使用したサーバー側の暗号化 (SSE)。

  • AWS KMS カスタマー管理キー (CSE-KMS) を使用したクライアント側の暗号化 (CSE)。

注記

SSE-KMS の場合、Athena では、テーブルの作成時にデータの暗号化を指定するように求められません。

Amazon S3 を使用した AWS KMS 暗号化の詳細については、AWS Key Management Service Developer Guide の「AWS Key Management Service とは」と「Amazon Simple Storage Service (Amazon S3) で AWS KMS を使用する方法」を参照してください。

Athena は、お客様が用意したキーを使用した SSE (SSE-C) や、クライアント側のマスターキーを使用したクライアント側の暗号化はサポートしていません。Amazon S3 暗号化オプションを比較するには、Amazon Simple Storage Service 開発者ガイド の「暗号化を使用したデータの保護」を参照してください。

Athena では、異なるリージョンの Amazon S3 に保存済みの暗号化されたデータに対してはクエリを実行できません。

重要

Amazon S3 の暗号化されたデータセットに対してクエリを実行するための設定と、Athena でクエリ結果を暗号化するためのオプションは、独立しています。各オプションは別個に有効化して設定します。それぞれに異なる暗号化方法またはキーを使用できます。つまり、Amazon S3 の暗号化されたデータを読み取ることは、Amazon S3 の Athena クエリ結果を自動的に暗号化することになりません。逆の場合も同様です。Amazon S3 の Athena クエリ結果を暗号化することは、Amazon S3 の基となるデータセットを暗号化することになりません。

Amazon S3 で保管時のデータに暗号化オプションを使用しているかどうかにかかわらず、Transport Layer Security (TLS) では、Athena リソース間および Athena と Amazon S3 間の転送時のオブジェクトが暗号化されます。JDBC または ODBC クライアントにストリーミングされるクエリ結果は、TLS を使用して暗号化されます。

Amazon S3 の暗号化されたデータに対するアクセス許可

Amazon S3 で使用する暗号化のタイプに応じて、Athena で使用するポリシーにアクセス許可の追加が必要になる場合があります。これは「許可」アクションとも呼ばれます。

  • SSE-S3 – 暗号化に SSE-S3 を使用する場合、Athena ユーザーはポリシーで追加のアクセス許可は必要ありません。適切な Amazon S3 の場所および Athena のアクションに対する適切な Amazon S3 アクセス許可を持っているだけで十分です。Athena および Amazon S3 に対する適切なアクセス許可を付与するポリシーの詳細については、「ユーザーアクセス用の IAM ポリシー」と「Amazon S3 アクセス許可」を参照してください。

  • AWS KMS – 暗号化に AWS KMS を使用する場合、Athena ユーザーは、Athena と Amazon S3 に対するアクセス許可のほかに、特定の AWS KMS アクションを実行するためのアクセス許可が必要になります。これらのアクションを許可するには、Amazon S3 のデータの暗号化に使用する AWS KMS カスタマーマスターキー (CMK) のキーポリシーを編集します。これを行う最も簡単な方法としては、IAM コンソールを使用して適切な AWS KMS キーポリシーにキーユーザーを追加します。AWS KMS キーポリシーにユーザーを追加する方法については、AWS Key Management Service Developer Guide の「キーポリシーを変更する方法」を参照してください。

    注記

    高度なキーポリシーの管理者は、キーポリシーを調整できます。kms:Decrypt は Athena ユーザーが暗号化されたデータセットを処理するときに許可される最小限のアクションです。暗号化されたクエリ結果を使用する場合、許可される最小限のアクションは kms:GenerateDataKeykms:Decrypt です。

    Athena でクエリする Amazon S3 のデータセットに大量のオブジェクトが含まれていて、これを AWS KMS で暗号化する場合、AWS KMS はクエリ結果をスロットリングする場合があります。これは通常、多数の小さいオブジェクトがある場合に発生する可能性が高くなります。Athena で再試行リクエストを撤回した後でも、スロットリングエラーになる場合があります。この場合は、AWS サポートセンターにアクセスして制限緩和を求めるケースを作成してください。制限と AWS KMS のスロットリングの詳細については、AWS Key Management Service Developer Guide の「制限」を参照してください。

Amazon S3 に保存されたクエリ結果の暗号化

Athena コンソールを使用して、クエリ結果の暗号化を設定します。ワークグループを使用すると、クエリ結果の暗号化を強制できます。

JDBC または ODBC ドライバーを使用して接続する場合は、ドライバーオプションの設定で、使用する暗号化のタイプと Amazon S3 ステージングディレクトリの場所を指定します。Athena がサポートする暗号化プロトコルのいずれかを使用してクエリ結果を暗号化するように JDBC または ODBC ドライバーを設定するには、「ODBC および JDBC ドライバーを使用した Amazon Athena への接続」を参照してください。

クエリ結果の暗号化は、以下の 2 つの方法で設定できます。

  • [Client-side settings (クライアント側設定)] – コンソールまたは API オペレーションで [Settings (設定)] を使用してクエリ結果を暗号化することを示す場合、これはクライアント側設定の使用と呼ばれます。クライアント側設定には、クエリ結果の場所と暗号化が含まれます。指定した場合は、ワークグループの設定によって上書きされない限り、それらの設定が使用されます。

  • [Workgroup settings (ワークグループ設定)] – ワークグループを作成または編集して [Override client-side settings (クライアント側の設定の上書き)] フィールドを選択すると、このワークグループで実行されるすべてのクエリでワークグループ設定が使用されます。詳細については、「ワークグループ設定がクライアント側設定を上書きする」を参照してください。ワークグループ設定には、クエリ結果の場所と暗号化が含まれます。

コンソールを使用して Amazon S3 に保存されているクエリ結果を暗号化するには

重要

ワークグループで [Override client-side settings (クライアント側設定の上書き)] フィールドを選択している場合、クエリではワークグループ設定が使用されます。[Settings (設定)] に一覧表示されている暗号化設定およびクエリ結果の場所、API オペレーション、ドライバーは使用されません。詳細については、「ワークグループ設定がクライアント側設定を上書きする」を参照してください。

  1. Athena コンソールで、[設定] を選択します。

  2. [Query result location] で、カスタム値を入力するか、デフォルト値を受け入れます。これは、クエリ結果が保存される Amazon S3 ステージングディレクトリです。

  3. [Encrypt query results] を選択します。

  4. [Encryption type] で、[CSE-KMS]、[SSE-KMS]、[SSE-S3] のいずれかを選択します。

  5. [SSE-KMS] または [CSE-KMS] を選択した場合は、[暗号化キー] を指定します。

    • アカウントに既存の AWS KMS カスタマー管理キー (CMK) がある場合は、そのエイリアスを選択するか、[KMS キー ARN を入力] を選択して ARN を入力します。

    • アカウントに既存の AWS KMS カスタマー管理キー (CMK) へのアクセス権限がない場合は、[KMS キーの作成] を選択し、[AWS KMS コンソール] を開きます。ナビゲーションペインで、[AWS managed keys (AWS 管理型のキー)] を選択します。 詳細については、AWS Key Management Service Developer Guideの「キーの作成」を参照してください。

  6. Athena コンソールに戻り、前のステップで説明しているように、エイリアスまたは ARN 別にキーを指定します。

  7. [Save (保存)] を選択します。

Amazon S3 の暗号化されたデータセットに基づくテーブルの作成

テーブルを作成するときに、Athena にデータセットが Amazon S3 で暗号化されていることを示します。これは、SSE-KMS を使用するときは必要ありません。SSE-S3 と AWS KMS の両暗号化の場合、Athena はデータセットの復号とテーブルの作成に必要な適切なマテリアルを判断できるため、キー情報を提供する必要はありません。

テーブルを作成するユーザーを含めて、クエリを実行するユーザーは、このトピックで前述した適切なアクセス許可を持っている必要があります。

重要

EMRFS と Amazon EMR を一緒に使用して、暗号化された Parquet ファイルをアップロードする場合は、fs.s3n.multipart.uploads.enabledfalse に設定して、マルチパートアップロードを無効にする必要があります。これを行わないと、Athena は Parquet ファイルの長さを判断できず、HIVE_CANNOT_OPEN_SPLIT エラーが発生します。詳細については、Amazon EMR 管理ガイドの「Amazon S3 用のマルチパートアップロードを設定する」を参照してください。

以下のいずれかの方法で Amazon S3 のデータセットを暗号化することを指示します。SSE-KMS を使用する場合、このステップは不要です。

  • CREATE TABLE ステートメントの TBLPROPERTIES 句で 'has_encrypted_data'='true' を指定します。

  • JDBC ドライバーで、statement.executeQuery() を使用して CREATE TABLE を実行するときに、TBLPROPERTIES 値を前の例で示したように設定します。

  • Athena コンソールの [テーブルの追加] ウィザードで、[入力データセットの場所] の値を指定するときに [暗号化されたデータセット] を選択します。

Amazon S3 の暗号化されたデータに基づくテーブルが [データベース] リストに暗号化アイコンと共に表示されます。

AWS Glue データカタログの暗号化されたメタデータに対するアクセス許可

AWS Glue データカタログのメタデータを暗号化する場合は、"kms:GenerateDataKey""kms:Decrypt""kms:Encrypt" アクションを、Athena にアクセスするために使用するポリシーに追加する必要があります。詳細については、「AWS Glue データカタログの暗号化されたメタデータへのアクセス」を参照してください。