データフィルタリングの制限事項 - AWS Lake Formation

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

データフィルタリングの制限事項

Data Catalog テーブルに対する Lake Formation 許可を付与するときは、クエリ結果、および Lake Formation と統合されたエンジン内の特定のデータへのアクセスを制限するためのデータフィルタリング仕様を含めることができます。Lake Formation は、列レベルのセキュリティ、行レベルのセキュリティ、およびセルレベルのセキュリティを実現するために、データフィルタリングを使用します。ソースデータにネストされた構造が含まれている場合は、ネストされた列にデータフィルターを定義して適用できます。

列レベルのフィルタリングに関する注意点と制限

列フィルタリングを指定する方法は 3 つあります。

  • データフィルターを使用する

  • シンプルな列フィルタリングまたはネストされた列フィルタリングの使用。

  • を使用するTAGs。

シンプルな列フィルタリングは、包含または除外する列のリストを指定するだけです。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 許可を持つプリンシパルに、そのテーブルに対する ALTERDROPDELETE または INSERT 許可を付与することはできません。テーブルに対する ALTERDROPDELETE または 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"

セルレベルのフィルタリングの制限

行レベルおよびセルレベルのフィルタリングに関しては、以下の注意点と制限に留意してください。

  • ネストされた列、ビュー、リソースリンクでは、セルレベルのセキュリティはサポートされていません。

  • 最上位の列でサポートされているすべての式は、ネストされた列でもサポートされます。ただし、ネストされた行レベルの式を定義するときは、パーティション列のネストされたフィールドを参照NOTする必要があります。

  • Athena エンジンバージョン 3 または Amazon Redshift Spectrum を使用すると、すべてのリージョンでセルレベルのセキュリティを利用できます。他のサービスでは、セルレベルのセキュリティは、サポートされるリージョン に記載されているリージョンでのみ利用できます。

  • SELECT INTO ステートメントはサポートされません。

  • array および map データ型は、行フィルター式ではサポートされていません。struct データ型はサポートされています。

  • テーブルに定義できるデータフィルターの数に制限はありませんが、テーブルには、単一のプリンシパルに対してデータフィルター SELECT 許可 100 個の制限があります。

  • テーブルに対する付与に含めることができるデータフィルターの最大数は 10 個です。

  • 行フィルター式があるデータフィルターを適用するには、すべてのテーブル列に対する grant オプション付きの SELECT を持っている必要があります。付与が外部アカウントに行われた場合、この制限は外部アカウントの管理者には適用されません。

  • プリンシパルがグループのメンバーであり、プリンシパルとグループの両方に行のサブセットに対する許可が付与されている場合、プリンシパルの有効な行の許可は、プリンシパルの許可とグループの許可を合わせたものになります。

  • 行レベルおよびセルレベルのフィルタリングでは、テーブルの以下の列名が制限されています。

    • ctid

    • oid

    • xmin

    • cmin

    • xmax

    • cmax

    • tableoid

    • insertxid

    • deletexid

    • importoid

    • redcatuniqueid

  • 述語を持つ他のフィルター式と同時に全行フィルター式をテーブルに適用する場合は、全行フィルター式が他のすべてのフィルター式に優先します。

  • 行のサブセットに対するアクセス許可が外部 AWS アカウントに付与され、外部アカウントのデータレイク管理者がそのアカウントのプリンシパルにこれらのアクセス許可を付与する場合、プリンシパルの有効なフィルター述語は、アカウントの述語とプリンシパルに直接付与された述語の交差点です。

    例えば、アカウントに述語 dept='hr' を持つ行の許可があり、プリンシパルに country='us' の許可を別途付与された場合、プリシパルは dept='hr'country='us' の行にのみアクセスすることができます。

セルレベルのフィルタリングの詳細については、「Lake Formation でのデータフィルタリングとセルレベルのセキュリティ」を参照してください。