データフィルタリングの制限事項
Data Catalog テーブルに対する Lake Formation 許可を付与するときは、クエリ結果、および Lake Formation と統合されたエンジン内の特定のデータへのアクセスを制限するためのデータフィルタリング仕様を含めることができます。Lake Formation は、列レベルのセキュリティ、行レベルのセキュリティ、およびセルレベルのセキュリティを実現するために、データフィルタリングを使用します。ソースデータにネストされた構造が含まれている場合は、ネストされた列にデータフィルターを定義して適用できます。
列レベルのフィルタリングに関する注意点と制限
列フィルタリングを指定する方法は 3 つあります。
-
データフィルターの使用。
-
シンプルな列フィルタリングまたはネストされた列フィルタリングの使用。
-
タグの使用。
シンプルな列フィルタリングは、包含または除外する列のリストを指定するだけです。Lake Formation コンソール、API、AWS CLI のすべてがシンプルな列フィルタリングをサポートします。例については、「Grant with Simple Column Filtering」を参照してください。
以下の注意点と制限が列フィルタリングに適用されます。
-
AWS Glue ETL ジョブは列フィルタリングをサポートしていません。ジョブで参照するテーブルのいずれかに列フィルタリングが適用されていると、ジョブは失敗します。
-
grant オプションと列フィルタリングを伴う
SELECT
を付与するには、除外リストではなく、包含リストを使用する必要があります grant オプションを使用しない場合は、包含リストまたは除外リストのどちらでも使用することができます。 -
テーブルに対する
SELECT
を列フィルタリングと共に付与するには、テーブルに対する grant オプション付きのSELECT
を、行制限なしで付与されている必要があります。すべての行にアクセスできる必要があります。 -
grant オプションと列フィルタリングを伴う
SELECT
をアカウント内のプリンシパルに付与する場合、そのプリンシパルは、別のプリンシパルへの付与時に、同じ列、または付与列のサブセットに対する列フィルタリングを指定する必要があります。grant オプションと列フィルタリングを伴うSELECT
を外部アカウントに付与する場合、外部アカウントのデータレイク管理者は、そのアカウント内の別のプリンシパルに、すべての列に対するSELECT
を付与することができます。ただし、すべての列に対するSELECT
があるとしても、そのプリンシパルに表示されるのは外部アカウントに付与された列のみになります。 -
パーティションキーに列フィルタリングを適用することはできません。
-
テーブル内の列のサブセットに対する
SELECT
許可を持つプリンシパルに、そのテーブルに対するALTER
、DROP
、DELETE
またはINSERT
許可を付与することはできません。テーブルに対するALTER
、DROP
、DELETE
またはINSERT
許可を持つプリンシパルについては、列フィルタリングを伴うSELECT
許可を付与しても、効果はありません。
以下の注意点と制限が、ネストされた列フィルタリングに適用されます。
-
データフィルターでは 5 レベルのネストされたフィールドを含めたり除外したりできます。
Col1.Col1_1.Col1_1_1.Col1_1_1_1.Col1_1_1_1_1
-
パーティション列内のネストされたフィールドに列フィルタリングを適用することはできません。
-
テーブルスキーマに、データフィルター内のネストされたフィールド表現と同じパターンを持つ最上位の列名 ("customer"."address") が含まれている場合 (最上位の列名
customer
とネストされたフィールド名address
を持つネストされた列は、データフィルターで"customer"."address"
として指定されます)、最上位の列とネストされたフィールドは両方とも包含/除外リストの同じパターンを使用するため、最上位の列またはネストされたフィールドへのアクセスを明示的に指定することはできません。これはあいまいであり、最上位の列を指定しているのか、ネストされたフィールドを指定しているのか、Lake Formation は解決できません。 -
最上位の列またはネストされたフィールドの名前に 1 つの二重引用符が含まれている場合、データセルフィルターの包含リストと除外リスト内のネストされたフィールドへのアクセスを指定するときに、2 つ目の二重引用符を含める必要があります。
二重引用符を使用したネストされた列名の例 —
a.b.double"quote
データフィルター内のネストされた列表現の例 —
"a"."b"."double""quote"
セルレベルのフィルタリングの制限
行レベルおよびセルレベルのフィルタリングに関しては、以下の注意点と制限に留意してください。
-
セルレベルのセキュリティは、ネストされた列、ビュー、リソースリンクではサポートされません。
-
最上位の列でサポートされているすべての式は、ネストされた列でもサポートされます。ただし、ネストされた行レベルの式を定義するときは、パーティション列の下のネストされたフィールドを参照しないでください。
-
Athena エンジンバージョン 3 または Amazon Redshift Spectrum を使用すると、すべてのリージョンでセルレベルのセキュリティを利用できます。他のサービスでは、セルレベルのセキュリティは、サポートされるリージョン に記載されているリージョンでのみ利用できます。
-
SELECT INTO
ステートメントはサポートされません。 -
array
およびmap
データ型は、行フィルター式ではサポートされていません。struct
データ型はサポートされています。 -
テーブルに定義できるデータフィルターの数に制限はありませんが、テーブルには、単一のプリンシパルに対してデータフィルター
SELECT
許可 100 個の制限があります。 -
テーブルに対する付与に含めることができるデータフィルターの最大数は 100 個です。
-
行フィルター式があるデータフィルターを適用するには、すべてのテーブル列に対する grant オプション付きの
SELECT
を持っている必要があります。付与が外部アカウントに行われた場合、この制限は外部アカウントの管理者には適用されません。 -
プリンシパルがグループのメンバーであり、プリンシパルとグループの両方に行のサブセットに対する許可が付与されている場合、プリンシパルの有効な行の許可は、プリンシパルの許可とグループの許可を合わせたものになります。
-
行レベルおよびセルレベルのフィルタリングでは、テーブルの以下の列名が制限されています。
ctid
oid
xmin
cmin
xmax
cmax
tableoid
insertxid
deletexid
importoid
redcatuniqueid
-
述語を持つ他のフィルター式と同時に全行フィルター式をテーブルに適用する場合は、全行フィルター式が他のすべてのフィルター式に優先します。
-
行のサブセットに対する許可が外部 AWS アカウントに付与され、外部アカウントのデータレイク管理者がそのアカウント内のプリンシパルにこれらの許可を付与する場合、プリンシパルの有効なフィルター述語は、アカウントの述語とプリンシパルに直接付与された述語の共通部分になります。
例えば、アカウントに述語
dept='hr'
を持つ行の許可があり、プリンシパルにcountry='us'
の許可を別途付与された場合、プリシパルはdept='hr'
とcountry='us'
の行にのみアクセスすることができます。
セルレベルのフィルタリングの詳細については、「Lake Formation でのデータフィルタリングとセルレベルのセキュリティ」を参照してください。