Amazon Athena
ユーザーガイド

暗号化オプションの設定

Athena では、テーブルの作成時にデータ暗号化を指定することで、Amazon S3 内の暗号化されたデータをクエリできます。Amazon S3 のクエリ結果および AWS Glue データカタログ内のデータを暗号化することもできます。

以下を暗号化できます。

Athena でサポートされた Amazon S3 暗号化オプション

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

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

  • AWS KMS で管理されるキーを使用したサーバー側の暗号化 (SSE-KMS)

  • AWS KMS で管理されるキーを使用したクライアント側の暗号化 (CSE-KMS)

  • 注記

    SSE-KMS の場合、Athena では、テーブルの作成時にデータの暗号化を指定することを要求しません。

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

重要

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

Amazon S3 を使用した AWS KMS 暗号化の詳細については、AWS Key Management Service 開発者ガイドの「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 コンソールを使用します。JDBC ドライバーを使用して接続する場合は、ドライバーオプションを設定します。使用する暗号化のタイプと Amazon S3 ステージングディレクトリの場所を指定します。

Athena がサポートする暗号化プロトコルのいずれかを使用してクエリ結果を暗号化するように JDBC ドライバーを設定するには、JDBC ドライバーを介した Athena の使用を参照してください。

クエリ結果の暗号化の設定は、すべてのクエリに適用されます。この設定を個別のデータベース、テーブル、またはクエリごとに行うことはできません。

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

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

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

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

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

    [SSE-KMS] または [CSE-KMS] を選択した場合は、[Encryption key] で、以下のいずれかを指定します。

    • アカウントに既存の KMS CMK へのアクセス権がある場合は、そのエイリアスを選択します。または [KMS キー ARN を入力] を選択して ARN を入力します。

    • 新規の KMS キーを作成します。[KMS キーの作成] を選択し、IAM コンソールを使用して、キーを作成します。次に、前のステップで説明したとおり、エイリアスまたは ARN でキーを指定するために戻ります。詳細については、AWS Key Management Service 開発者ガイドの「キーの作成」を参照してください。

  5. [Save] を選択します。

Amazon S3 の暗号化されたデータへのアクセス許可

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

  • 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 のデータの暗号化に使用する KMS カスタマーマスターキー (CMK) のキーポリシーを編集します。これを行う最も簡単な方法としては、IAM コンソールを使用して適切な KMS キーポリシーにキーユーザーを追加します。KMS キーポリシーにユーザーを追加する方法については、AWS Key Management Service 開発者ガイドの「キーポリシーを変更する方法」を参照してください。

    注記

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

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

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

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

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

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

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

重要

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

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

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

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

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

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