メニュー
Amazon Athena
ユーザーガイド

暗号化オプションの設定

Athena では、テーブルの作成時にデータ暗号化を指定することで、Amazon S3 内の暗号化されたデータをクエリできます。Amazon S3 のすべてのクエリ結果を暗号化し、Athena で S3 ステージングディレクトリと呼ばれる場所に保存することもできます。基となるデータセットが Amazon S3 で暗号化されているかどうかに関係なく、Amazon S3 に保存されたクエリ結果を暗号化できます。クエリ結果の暗号化を設定するには、Athena コンソールを使用します。または、JDBC ドライバーを使用して接続する場合は、ドライバーオプションを設定します。使用する暗号化のタイプと Amazon S3 ステージングディレクトリの場所を指定します。クエリ結果の暗号化は、すべてのクエリに適用されます。

暗号化オプションは、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 の基となるデータセットを暗号化することになりません。

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

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

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

    注記

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

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

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 に保存済みの暗号化されたデータに対してはクエリを実行できません。

データを暗号化/復号するためのアクセス許可

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

AWS KMS を使用してデータを暗号化する場合、Athena ユーザーは Athena と 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 開発者ガイドの「制限」を参照してください。

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

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

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

重要

Amazon EMR と EMRFS を使用して、暗号化された 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 コンソールの [Add table] ウィザードで、[Location of input data set] の値を指定するときに [Encrypted data set] を選択します。

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

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

Athena コンソールまたは JDBC ドライバーのプロパティを使用し、Athena で S3 ステージングディレクトリに保存するクエリ結果を Amazon S3 で暗号化するよう設定します。この設定は、すべての Athena クエリ結果に適用されます。この設定を個別のデータベース、テーブル、またはクエリごとに行うことはできません。

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

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

  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 へのアクセス権がある場合は、そのエイリアスを選択します。

    • [Enter a KMS key ARN] を選択して ARN を入力します。

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

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

JDBC ドライバーによる Amazon S3 内に保存されているクエリ結果の暗号化

Athena がサポートする暗号化プロトコルのいずれかを使用してクエリ結果を暗号化するように JDBC ドライバーを設定できます。詳細については、「JDBC ドライバーのインストールおよび設定ガイド」を参照してください。以前のバージョンのドライバーを使用している場合は、「以前のバージョンの JDBC ドライバーで Athena を使用する」を参照してください。