

# Lake Formation に登録されたデータのクエリに関する考慮事項と制限
<a name="lf-athena-limitations"></a>

Athena を使用して Lake Formation に登録されたデータをクエリするときは、以下の点を考慮します。詳細については、「AWS Lake Formation デベロッパーガイド」の「[AWS Lake Formation の既知の問題](https://docs.aws.amazon.com/lake-formation/latest/dg/limitations.html)」を参照してください。

**Topics**
+ [一部の状況で、列に対するデータ許可がないユーザーに列メタデータが表示される](#lf-athena-limitations-column-metadata)
+ [ビューに対する Lake Formation 許可の使用](#lf-athena-limitations-permissions-to-views)
+ [Iceberg DDL サポート](#lf-athena-limitations-iceberg-ddl-operations)
+ [Lake Formation のきめ細かなアクセス制御と Athena ワークグループ](#lf-athena-limitations-fine-grained-access-control)
+ [Lake Formation に登録されていない Amazon S3 の Athena クエリ結果の場所](#lf-athena-limitations-query-results-location)
+ [Athena Workgroups を使用してクエリ履歴へのアクセスを制限する](#lf-athena-limitations-use-workgroups-to-limit-access-to-query-history)
+ [Lake Formation に登録された CSE-KMS Simple Storage Service (Amazon S3) を Athena でクエリできない](#lf-athena-limitations-cse-kms)
+ [Lake Formation に登録されているパーティションされたデータの場所がテーブルのサブディレクトリ内にある必要がある](#lf-athena-limitations-partioned-data-locations)
+ [Create Table As Select (CTAS) クエリに Simple Storage Service (Amazon S3) の書き込み許可が必要になる](#lf-athena-limitations-ctas-queries)
+ [デフォルトデータベースに DESCRIBE 許可が必要になる](#lf-athena-limitations-describe-default)

## Avro とカスタム SerDe を使用する一部の状況で、許可されていないユーザーに列メタデータが表示される
<a name="lf-athena-limitations-column-metadata"></a>

Lake Formation の列レベルの承認は、ユーザーが Lake Formation の許可がない列のデータにアクセスできないようにします。ただし、特定の状況では、ユーザーがデータに対する許可がない列を含めた、テーブル内のすべての列を説明するメタデータにアクセスできます。

これは、Apache Avro ストレージ形式を使用するか、SerDe 定義と共にテーブルプロパティにテーブルスキーマが定義されているカスタムシリアライザー/デシリアライザー (SerDe) を使用して、列メタデータがテーブルのテーブルプロパティに保存されたときに発生します。Athena で Lake Formation を使用するときは、Lake Formation に登録するテーブルプロパティの内容を確認し、可能な場合はテーブルプロパティに保存される情報を制限して、機密のメタデータがユーザーに表示されないようにすることをお勧めします。

## Lake Formation とビューを理解する
<a name="lf-athena-limitations-permissions-to-views"></a>

Lake Formation に登録されたデータについて、Athena ユーザーが `VIEW` を作成できるのは、`VIEW` の基礎であるテーブル、列、および Simple Storage Service (Amazon S3) のソースデータの場所に対する Lake Formation の許可がある場合のみです。`VIEW` が Athena で作成されたら、Lake Formation 許可を `VIEW` に適用できます。列レベルのアクセス許可は、`VIEW` では使用できません。`VIEW` に対する Lake Formation の許可はあるが、ビューの基礎であるテーブルと列に対する許可はないというユーザーは、データのクエリに `VIEW` を使用できません。ただし、この許可の組み合わせを持つユーザーは、`DESCRIBE VIEW`、`SHOW CREATE VIEW`、および `SHOW COLUMNS` を使用して `VIEW` メタデータを表示できます。このため、各 `VIEW` に対する Lake Formation 許可は、基盤となるテーブルの許可と合致させておくようにしてください。テーブルで定義されているセルフィルターは、そのテーブルの `VIEW` に適用されません。リソースリンク名は、元となるアカウントのリソースと同じ名前である必要があります。クロスアカウント設定でビューを操作するとき、他にも制限があります。アカウント間での共有ビューの許可のセットアップの詳細については、「[データカタログへのクロスアカウントアクセスを設定する](lf-athena-limitations-cross-account.md)」を参照してください。

## Iceberg DDL サポート
<a name="lf-athena-limitations-iceberg-ddl-operations"></a>

Athena は現在、場所が Lake Formation で登録されている Iceberg テーブルに対する DDL オペレーションをサポートしていません。これらの Iceberg テーブルのいずれかに対して DDL クエリを実行しようとすると、Amazon S3 アクセス拒否エラーが返されたり、クエリタイムアウトで失敗したりする可能性があります。Iceberg テーブルに対する DDL オペレーションでは、ユーザーは、Iceberg テーブルの場所に対する Amazon S3 ダイレクトアクセスが可能である必要があります。

## Lake Formation のきめ細かなアクセス制御と Athena ワークグループ
<a name="lf-athena-limitations-fine-grained-access-control"></a>

同じ Athena ワークグループのユーザーは、Lake Formation のきめ細かなアクセス制御によりワークグループがアクセスできるように設定したデータを見ることができます。Lake Formation でのきめ細かいアクセス制御の使用について詳しくは、「AWS ビッグデータブログ」の「[AWS Lake Formation を使用したきめ細かなアクセス制御の管理](https://aws.amazon.com/blogs/big-data/manage-fine-grained-access-control-using-aws-lake-formation/)」を参照してください。

## Lake Formation に登録されていない Amazon S3 の Athena クエリ結果の場所
<a name="lf-athena-limitations-query-results-location"></a>

Amazon S3 にある Athena のクエリ結果の場所を Lake Formation に登録することはできません。Lake Formation 許可は、これらの場所へのアクセスを制限しません。アクセスを制限しない限り、Athena ユーザーはデータに対する Lake Formation の許可がなくてもクエリ結果ファイルとメタデータにアクセスできます。この問題を回避するには、ワークグループを使用してクエリ結果の場所を指定し、ワークグループのメンバーシップを Lake Formation の許可と合致させることが推奨されます。その後、IAM 許可ポリシーを使用して、クエリ結果の場所へのアクセスを制限できます。クエリ結果の詳細については、「[クエリ結果と最近のクエリを操作する](querying.md)」を参照してください。

## Athena Workgroups を使用してクエリ履歴へのアクセスを制限する
<a name="lf-athena-limitations-use-workgroups-to-limit-access-to-query-history"></a>

Athena クエリ履歴は、保存されたクエリと完全なクエリ文字列のリストを公開します。ワークグループを使用してクエリ履歴へのアクセスを分離しない限り、Lake Formation のデータをクエリする権限がない Athena ユーザーが、列名や選択条件などを含めた、そのデータに対して実行されるクエリ文字列を表示することができます。ワークグループを使用してクエリ履歴を分離し、Athena ワークグループのメンバーシップを Lake Formation 許可に合致させてアクセスを制限することが推奨されます。詳細については、「[ワークグループを使用してクエリのアクセスとコストを制御する](workgroups-manage-queries-control-costs.md)」を参照してください。

## Lake Formation に登録されている CSE\$1KMS 暗号化テーブルをクエリする
<a name="lf-athena-limitations-cse-kms"></a>

以下の特性を持つ Apache Iceberg などの Open Table Format (OTF) テーブルを Athena でクエリすることはできません。
+ テーブルが Lake Formation 登録済みの Amazon S3 の場所に基づいている。
+ Amazon S3 内のオブジェクトがクライアント側の暗号化 (CSE) を使用して暗号化されている。
+ 暗号化が AWS KMS カスタマーマネージドキー (`CSE_KMS`) を使用している。

`CSE_KMS` キーで暗号化されている OTF 以外のテーブルをクエリするには、CSE 暗号化に使用している AWS KMS キーのポリシーに、以下のブロックを追加します。*<KMS\$1KEY\$1ARN>* は、データを暗号化する AWS KMS キーの ARN です。*<IAM-ROLE-ARN>* は、Lake Formation で Amazon S3 を登録する IAM ロールの ARN です。

```
{
    "Sid": "Allow use of the key",
    "Effect": "Allow",
    "Principal": {
        "AWS": "*"
    },
    "Action": "kms:Decrypt",
    "Resource": "<KMS-KEY-ARN>",
    "Condition": {
        "ArnLike": {
            "aws:PrincipalArn": "<IAM-ROLE-ARN>"
        }
    }
}
```

## Lake Formation に登録されているパーティションされたデータの場所がテーブルのサブディレクトリ内にある必要がある
<a name="lf-athena-limitations-partioned-data-locations"></a>

Lake Formation に登録されているパーティションされたテーブルは、パーティションされたデータが Amazon S3 にあるテーブルのサブディレクトリであるディレクトリに置かれている必要があります。例えば、場所が `s3://amzn-s3-demo-bucket/mytable` で、パーティションが `s3://amzn-s3-demo-bucket/mytable/dt=2019-07-11`、`s3://amzn-s3-demo-bucket/mytable/dt=2019-07-12` などにあるテーブルは、Lake Formation に登録し、Athena を使用してクエリできます。反対に、場所が `s3://amzn-s3-demo-bucket/mytable` で、パーティションが `s3://amzn-s3-demo-bucket/dt=2019-07-11`、`s3://amzn-s3-demo-bucket/dt=2019-07-12` などにあるテーブルを Lake Formation に登録することはできません。このようなパーティションは `s3://amzn-s3-demo-bucket/mytable` のサブディレクトリではなく、それらを Athenaから読み込むこともできないからです。

## Create Table As Select (CTAS) クエリに Simple Storage Service (Amazon S3) の書き込み許可が必要になる
<a name="lf-athena-limitations-ctas-queries"></a>

Create Table As Statements (CTAS) には、テーブルの Amazon S3 の場所への書き込みアクセス権が必要です。Lake Formation に登録されたデータに対して CTAS クエリを実行するには、Athena ユーザーに、データの場所を読み込むための適切な Lake Formation 許可に加えて、テーブルの Amazon S3 の場所に書き込むための IAM 許可が必要です。詳細については、「[クエリ結果からテーブルを作成する (CTAS)](ctas.md)」を参照してください。

## デフォルトデータベースに DESCRIBE 許可が必要になる
<a name="lf-athena-limitations-describe-default"></a>

Lake Formation が `default` データベースを表示できるようにするには、そのデータベースで Lake Formation `DESCRIBE` 許可が必要です。以下の AWS CLI コマンドの例では、AWS アカウント `111122223333` のユーザー `datalake_user1` に、`default` データベースに対する `DESCRIBE` アクセス許可を付与しています。

```
aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "DESCRIBE" --resource '{ "Database": {"Name":"default"}}
```

詳細については、「AWS Lake Formation デベロッパーガイド」の「[DESCRIBE](https://docs.aws.amazon.com/lake-formation/latest/dg/lf-permissions-reference.html#perm-describe)」を参照してください。