翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Lake Formation でのデータフィルタリングとセルレベルのセキュリティ
Data Catalog テーブルに対する Lake Formation 許可を付与するときは、クエリ結果、および Lake Formation と統合されたエンジン内の特定のデータへのアクセスを制限するためのデータフィルタリング仕様を含めることができます。Lake Formation は、列レベルのセキュリティ、行レベルのセキュリティ、およびセルレベルのセキュリティを実現するために、データフィルタリングを使用します。ソースデータにネストされた構造が含まれている場合は、ネストされた列にデータフィルターを定義して適用できます。
Lake Formation のデータフィルタリング機能により、以下のレベルのデータセキュリティを実装することができます。
列レベルのセキュリティ
列レベルのセキュリティ (列フィルタリング) を使用して Data Catalog テーブルに対するアクセス許可を付与すると、ユーザーはそのテーブル内でアクセスが許可されている特定の列とネストされた列のみを表示できます。大規模な多地域通信会社向けの複数のアプリケーションで使用される persons
テーブルについて考えてみましょう。列フィルタリングを使用して Data Catalog テーブルに対するアクセス許可を付与すると、人事部門に勤務していないユーザーが、社会保障番号や生年月日などの個人を特定できる情報 (PII) を表示できなくなる可能性があります。セキュリティポリシーを定義して、ネストされた列の一部のサブ構造のみへのアクセスを許可することもできます。
行レベルのセキュリティ
Data Catalog テーブルに対する行レベルのセキュリティ (行フィルタリング) を伴う許可の付与は、ユーザーがそのテーブル内でアクセス権を持っている特定のデータの行のみを表示できるようにします。フィルタリングは、1 つ、または複数の列の値に基づいて行われます。行フィルター式を定義するときに、ネストされた列構造を含めることができます。例えば、この通信会社の異なる地域支社にそれぞれ独自の人事部門がある場合、人事部門の従業員が表示できる個人情報記録を、その地域の従業員の記録のみに制限することができます。
セルレベルのセキュリティ
セルレベルのセキュリティは、柔軟性に優れた許可モデルのために、行フィルタリングと列フィルタリングを組み合わせます。テーブルの行と列をグリッドとして考えると、セルレベルのセキュリティを使用することによって、行と列の二次元上にあれば、どこでもグリッドの個々の要素 (セル) へのアクセスを制限することができます。つまり、行に応じて異なる列へのアクセスを制限することができます。これは、制限された列に色が付けられた以下の図に表されています。
個人情報テーブルの例を引き続き使用すると、国の列が「英国」に設定されている行の住所列へのアクセスを制限するが、国の列が「米国」に設定されている行の住所列へのアクセスは許可するというデータフィルターをセルレベルで作成することができます。
フィルターは読み取り操作のみに適用されます。このため、付与できるのはフィルターを伴う SELECT
Lake Formation 許可のみになります。
ネストされた列のセルレベルのセキュリティ
Lake Formationでは、ネストされた列のセルレベルのセキュリティを使用してデータフィルターを定義して適用できます。ただし、Amazon Athena 、Amazon 、Amazon Redshift Spectrum などの統合分析エンジンはEMR、行および列レベルのセキュリティを備えた Lake Formation マネージドネストテーブルに対するクエリの実行をサポートしています。
制限事項については、「データフィルタリングの制限事項」を参照してください。
Lake Formation でのデータフィルター
データフィルターを作成することで、列レベル、行レベル、およびセルレベルのセキュリティを実装することができます。データフィルターは、テーブルに対する SELECT
Lake Formation 許可を付与する時に選択します。テーブルにネストされた列構造が含まれている場合は、子列を含めるか除外するかしてデータフィルターを定義できます。また、ネストされた属性に対して行レベルのフィルター式を定義できます。
各データフィルターは、Data Catalog 内の特定のテーブルに属します。データフィルターには、以下の情報が含まれています。
-
フィルター名
-
フィルターに関連付けられたテーブルIDsのカタログ
-
テーブル名
-
テーブルが含まれるデータベースの名前
-
列の指定 – クエリ結果に含めたり、クエリ結果から除外したりする列およびネストされた列 (
struct
データ型) のリスト。 -
行フィルター式 – クエリ結果に含める行を指定する式。制限はいくつかありますが、この式には PartiQL 言語の
WHERE
句の構文があります。すべての行を指定するには、コンソールで行レベルのアクセスですべての行へのアクセスを選択するか、API通話AllRowsWildcard
で を使用します。行フィルター式で何がサポートされるかに関する詳細については、「行フィルター式での PartiQL のサポート」を参照してください。
得られるフィルターのレベルは、データフィルターの設定方法に応じて異なります。
-
「全列」ワイルドカードを指定して、行フィルター式を提供する場合は、行レベルのセキュリティ (行フィルタリング) のみを確立することになります。
-
特定の列およびネストされた列を含めるか除外し、全行ワイルドカードを使用して「すべての行」を指定すると、列レベルのセキュリティ (列フィルタリング) のみを設定することになります。
-
特定の列を包含または除外するとともに、行フィルタリング式も指定するという場合は、セルレベルのセキュリティ (セルフィルタリング) を確立することになります。
Lake Formation コンソールからの以下のスクリーンショットは、セルレベルのフィルタリングを実行するデータフィルターを示しています。これは、orders
テーブルに対するクエリについて、customer_name
列へのアクセスを制限し、クエリ結果は product_type
列に 'pharma' が含まれる行のみを返します。
文字列リテラルを囲むための一重引用符の使用 ('pharma'
) に注意してください。
Lake Formation コンソールを使用してこのデータフィルターを作成するか、次のリクエストオブジェクトを CreateDataCellsFilter
API オペレーションに指定できます。
{ "Name": "restrict-pharma", "DatabaseName": "sales", "TableName": "orders", "TableCatalogId": "111122223333", "RowFilter": {"FilterExpression": "product_type='pharma'"}, "ColumnWildcard": { "ExcludedColumnNames": ["customer_name"] } }
テーブルには、必要な数だけデータフィルターを作成できます。これには、テーブルに対する grant オプション付きの SELECT
許可が必要です。データレイク管理者はデフォルトで、そのアカウント内のすべてのテーブルに対してデータフィルターを作成する許可を持っています。通常、テーブルに対する許可をプリンシパルに付与するときは、使用可能なデータフィルターのサブセットのみを使用します。例えば、データフィルターであるorders
テーブルの 2 番目の row-security-only データフィルターを作成できます。上記のスクリーンショットを参考にすると、[Access to all columns] (すべての列にアクセス) オプションを選択して、product_type<>pharma
という行フィルター式を含めることができます。このデータフィルターの名前は no-pharma
にすることができます。これは、product_type
列が 'pharma' に設定されているすべての行に対するアクセスを制限します。
このデータフィルターの CreateDataCellsFilter
APIオペレーションのリクエストオブジェクトは次のとおりです。
{ "Name": "no-pharma", "DatabaseName": "sales", "TableName": "orders", "TableCatalogId": "111122223333", "RowFilter": {"FilterExpression": "product_type<>'pharma'"}, "ColumnNames": ["customer_id", "customer_name", "order_num" "product_id", "purchase_date", "product_type", "product_manufacturer", "quantity", "price"] }
その後、orders
テーブルに対する restrict-pharma
データフィルターを伴う SELECT
を管理者ユーザーに、orders
テーブルに対する no-pharma
データフィルターを伴う SELECT
を非管理者ユーザーに付与することができます。ヘルスケア部門のユーザーの場合は、orders
テーブルに対するすべての行と列への完全なアクセス権を伴う (データフィルターなし) SELECT
を付与するか、料金設定情報へのアクセスを制限する別のデータフィルターを使用するものを付与こともできます。
データフィルター内に列レベルと行レベルのセキュリティを指定する際に、ネストされた列を含めるか除外することができます。次の例では、修飾列名 (二重引用符で囲まれた列名) を使用して product.offer
フィールドへのアクセスを指定しています。これは、ネストされたフィールドにとって、列名に特殊文字が含まれている場合にエラーが発生するのを防ぎ、最上位の列レベルのセキュリティ定義との下位互換性を維持するために重要です。
{ "Name": "example_dcf", "DatabaseName": "example_db", "TableName": "example_table", "TableCatalogId": "111122223333", "RowFilter": { "FilterExpression": "customer.customerName <> 'John'" }, "ColumnNames": ["customer", "\"product\".\"offer\""] }