

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

# データフィルターの管理
<a name="managing-filters"></a>

列レベル、行レベル、およびセルレベルのセキュリティを実装するには、データフィルターを作成して維持することができます。各データフィルターは、Data Catalog テーブルに属します。テーブル用に複数のデータフィルターを作成してから、そのテーブルに対する許可を付与するときに 1 つ、または複数のデータフィルターを使用できます。また、`struct` データ型を持つネストされた列にデータフィルターを定義して適用し、ネストされた列のサブ構造のみへのアクセスをユーザーに許可することもできます。

データフィルターを作成または表示するには、grant オプション付きの `SELECT` 許可が必要です。アカウントのプリンシパルがデータフィルターを表示して使用できるようにするには、そのデータフィルターに対する `DESCRIBE` 許可を付与することができます。

**注記**  
Lake Formation は、別のアカウントから共有されているデータフィルターへの `Describe` アクセス許可の付与をサポートしていません。

データフィルターは、 AWS Lake Formation コンソール、 API、または AWS Command Line Interface () を使用して管理できますAWS CLI。

データフィルターについては、「[Lake Formation でのデータフィルター](data-filtering.md#data-filters-about)」を参照してください。

# データフィルターの作成
<a name="creating-data-filters"></a>

Data Catalog テーブルごとに、1 つ、または複数のデータフィルターを作成できます。

**Data Catalog テーブルのデータフィルターを作成する (コンソール)**

1. Lake Formation コンソール (‭‬[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)‬) を開きます。

   データレイク管理者、ターゲットテーブル所有者、またはターゲットテーブルに対する Lake Formation 許可を持つプリンシパルとしてサインインします。

1. ナビゲーションペインの **[Data catalog]** で **[Data filters]** (データフィルター) を選択します。

1. **[Data filters]** (データフィルター) ページで、**[Create new filter]** (新しいフィルターを作成) を選択します。

1. **[Create data filter]** (データフィルターの作成) ダイアログボックスで、以下の情報を入力します。
   + [Data filter name] (データフィルター名) 
   + [Target database] (ターゲットデータベース) – テーブルが含まれるデータベースを指定します。
   + [Target table] (ターゲットテーブル) 
   + [Column-level access] (列レベルのアクセス) – 行フィルターのみを指定する場合は、**[Access to all columns]** (すべての列にアクセス) のままにしておきます。列またはセルフィルタリングを指定する場合は、**[Include columns]** (列を含める) または**[Exclude columns]** (列を除外する) を選択してから、含める列、または除外する列を指定します。

     ネストされた列 — ネストされた列を含むテーブルにフィルターを適用する場合、データフィルター内でネストされた構造体列のサブ構造を明示的に指定できます。

     このフィルターでプリンシパルに SELECT アクセス許可を付与すると、次のクエリを実行するプリンシパルには、`customer.customerName` のデータのみが表示され、`customer.customerId` のデータは表示されません。

     ```
     SELECT "customer" FROM "example_db"."example_table";
     ```  
![\[Column-level access settings with options to include specific columns and filter rows.\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/nested-column-filter.png)

      `customer` 列にアクセス許可を付与すると、プリンシパルは、列とその列の下にネストされたフィールド (`customerName` と `customerID`) へのアクセス権を受け取ります。
   + [Row filter expression] (行フィルター式) – 行またはセルフィルタリングを指定するフィルター式を入力します。サポートされるデータ型と演算子については、「[行フィルター式での PartiQL のサポート](partiql-support.md)」を参照してください。**[すべての行へのアクセス]** を選択して、すべての行に対するアクセスを許可します。

     ネストされた列の一部の列構造を行フィルター式に含めて、特定の値を含む行をフィルターできます。

     行フィルター式 `Select * from example_nestedtable where customer.customerName <>'John'` を使用してテーブルに対するアクセス許可をプリンシパルに付与し、**列レベル**のアクセスを **[すべての列へのアクセス]** に設定すると、クエリ結果には `customerName <>'John'` が true と評価された行のみが表示されます。

   次のスクリーンショットは、セルフィルタリングを実装するデータフィルターを示しています。`orders` テーブルに対するクエリでは、`customer_name` 列へのアクセスが拒否され、`product_type` 列に 'pharma' がある行のみが表示されます。  
![\[データフィルターウィンドウには、縦向きに配置された [Data filter name] (データフィルター名)、[Target database] (ターゲットデータベース)、[Target table] (ターゲットテーブル)、[Access to all columns] (すべての列にアクセス) と [Include columns] (列を含める) と [Exclude columns] (列を除外する) のオプションがあるオプションボタンのグループ、[Select columns] (列の選択) (ドロップダウンリスト)、および [Row filter expression] (行フィルター式) (複数行のテキストボックス) のフィールドが含まれています。[Exclude columns] (列を除外する) オプションが選択され、customer_name 列が除外対象として選択されて、[Row filter expression] (行フィルター式) フィールドには product_type='pharma' が表示されています。\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/data-filter-sample-pharma.png)

1. **[Create filter]** (フィルターを作成) を選択します。

**ネストされたフィールドでセルフィルターポリシーを使用してデータフィルターを作成するには**

 このセクションでは、次のサンプルスキーマを使用してデータセルフィルターを作成する方法を示します。

```
[
    { name: "customer", type: "struct<customerId:string,customerName:string>" },
    { name: "customerApplication", type: "struct<appId:string>" },
    { name: "product", type: "struct<offer:struct<prodId:string,listingId:string>,type:string>" },
    { name: "purchaseId", type: "string" },
]
```

1. **[データフィルターを作成]** ページで、データフィルターの名前を入力します。

1.  次に、ドロップダウンを使用してデータベース名とテーブル名を選択します。

1. **[列レベルのアクセス]** セクションで、[含まれる列] を選択し、ネストされた列 (`customer.customerName`) を選択します。

1. **[行レベルのアクセス]** セクションで、**[すべての行へのアクセス]** オプションを選択します。

1. **[フィルターを作成]** をクリックします。

   このフィルターで `SELECT` アクセス許可を付与すると、プリンシパルは `customerName` 列内のすべての行にアクセスできるようになります。

1. 次に、同じデータベース/テーブルに別のデータフィルターを定義します。

1. **[列レベルのアクセス]** セクションで、[含まれる列] を選択し、別のネストされた列 (`customer.customerid`) を選択します。

1. **[行レベルのアクセス]** セクションで、**[行をフィルタリングする]** を選択し、**[行フィルター式]** (`customer.customerid <> 5`) を入力します。

1. **[フィルターを作成]** をクリックします。

   このフィルターで `SELECT` アクセス許可を付与すると、プリンシパルは、`customerName` フィールドと `customerId` フィールド (`customerId` 列の値が 5 であるセルを除く) のすべての行にアクセスできるようになります。

# データフィルターの許可の付与
<a name="granting-filter-perms"></a>

プリンシパルには、データフィルターに対する `SELECT`、`DESCRIBE`、および `DROP` Lake Formation 許可を付与することができます。

当初、テーブル用に作成したデータフィルターを表示できるのは、作成したユーザーだけです。別のプリンシパルがデータフィルターを表示して、そのデータフィルターを伴う Data Catalog 許可を付与できるようにするには、以下のいずれかを実行する必要があります。
+ テーブルに対する grant オプション付きの `SELECT` をプリンシパルに付与し、その付与にデータフィルターを適用する。
+ データフィルターに対する `DESCRIBE` または `DROP` 許可をプリンシパルに付与する。

外部 AWS アカウントに アクセス`SELECT`許可を付与できます。付与後、そのアカウントのデータレイク管理者は、アカウント内の他のプリンシパルにその許可を付与できるようになります。外部アカウントに付与するときは、外部アカウントの管理者がそのアカウント内の他のユーザーに許可をさらにカスケードできるように、grant オプションを含める必要があります。アカウント内のプリンシパルに付与するときの grant オプションを伴う付与はオプションです。

 AWS Lake Formation コンソール、API、または AWS Command Line Interface () を使用して、データフィルターに対するアクセス許可を付与および取り消すことができますAWS CLI。

------
#### [ Console ]

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) で Lake Formation コンソールを開きます。

1. ナビゲーションペインの **[Permissions]** (許可) で **[Data lake permissions]** (データレイクの許可) を選択します。

1. **[Permissions]** (許可) ページの **[Data permissions]** (データの許可) セクションで、**[Grant]** (付与) を選択します。

1. **[Grant data permissions]** (データ許可の付与) ページで、許可を付与するプリンシパルを選択します。

1. [LF-Tags or catalog resources] (LF タグまたはカタログリソース) セクションで、**[Named data catalog resources]** (名前付きの Data Catalog リソース) を選択します。次に、許可を付与するデータベース、テーブル、およびデータフィルターを選択します。  
![\[\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/grant-data-filter-perms-step2.png)

1. **[Data filter permissions]** (データフィルターの許可) セクションで、選択したプリンシパルに付与する許可を選択します。  
![\[\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/grant-perms-on-filters.png)

------
#### [ AWS CLI ]
+ `grant-permissions` のコマンドを入力します。`resource` 引数に `DataCellsFilter` を指定し、`Permissions` 引数、およびオプションで `PermissionsWithGrantOption` 引数に、`DESCRIBE` または `DROP` を指定します。

  以下の例は、データフィルター `restrict-pharma` ( AWS アカウント 1111-2222-3333 内の `sales` データベースにある `orders` テーブルの属するもの) に対する grant オプション付きの `DESCRIBE` をユーザー `datalake_user1` に付与します。

  ```
  aws lakeformation grant-permissions --cli-input-json file://grant-params.json
  ```

  以下は、ファイル `grant-params.json` の内容です。

  ```
  {
      "Principal": {"DataLakePrincipalIdentifier": "arn:aws:iam::111122223333:user/datalake_user1"},
      "Resource": {
          "DataCellsFilter": {
              "TableCatalogId": "111122223333",
              "DatabaseName": "sales",
              "TableName": "orders",
              "Name": "restrict-pharma"
          }
      },
      "Permissions": ["DESCRIBE"],
      "PermissionsWithGrantOption": ["DESCRIBE"]
  }
  ```

------

# データフィルターが提供するデータの許可の付与
<a name="granting-data-perms-for-filters"></a>

データフィルターは、テーブル内のデータのサブセットを表します。プリンシパルにデータアクセスを提供するには、これらのプリンシパルに `SELECT` 許可を付与する必要があります。この許可により、プリンシパルは以下を実行できます。
+ プリンシパルのアカウントと共有されているテーブルのリストで実際のテーブル名を表示する。
+ 共有テーブルでデータフィルターを作成し、これらのデータフィルターに対する許可をユーザーに付与します。

------
#### [ Console ]

**SELECT 許可を付与する**

1. Lake Formation コンソールで **[Permissions]** (許可) ページに移動し、**[Grant]** (付与) を選択します。  
![\[\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/permissions-grant-action.png)

1. アクセス権を付与する先のプリンシパルを選択し、**[Named data catalog resources]** (名前付きの Data Catalog リソース) を選択します。  
![\[\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/grant-data-filter-perms-step2.png)

1. フィルターが表すデータへのアクセス権を提供するには、**[Data filter permissions]** (データフィルターの許可) で **[Select]** (選択) を選択します。  
![\[\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/grant-data-filter-perms-step3.png)

------
#### [ CLI ]

`grant-permissions` のコマンドを入力します。Resource 引数に `DataCellsFilter` を指定し、Permissions 引数に `SELECT` を指定します。

次の例では`restrict-pharma`、 `SELECT`の`sales`データベースの `orders`テーブルに属するデータフィルター `datalake_user1`のユーザーに grant オプションを使用して を付与します AWS アカウント `1111-2222-3333`。

```
aws lakeformation grant-permissions --cli-input-json file://grant-params.json 
```

以下は、ファイル `grant-params.json` の内容です。

```
{
    "Principal": {
        "DataLakePrincipalIdentifier": "arn:aws:iam::111122223333:user/datalake_user1"
    },
    "Resource": {
        "DataCellsFilter": {
            "TableCatalogId": "111122223333", 
            "DatabaseName": "sales", 
            "TableName": "orders", 
            "Name": "restrict-pharma"
        }
    },
    "Permissions": ["SELECT"]
}
```

------

# データフィルターの表示
<a name="view-data-filters"></a>

Lake Formation コンソール AWS CLI、または Lake Formation API を使用して、データフィルターを表示できます。

データフィルターを表示するには、Data Lake 管理者であるか、データフィルターに対する必要な許可を持っている必要があります。

------
#### [ Console ]

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) で Lake Formation コンソールを開きます。

1. ナビゲーションペインの **[Data catalog]** で **[Data filters]** (データフィルター) を選択します。

   このページには、アクセスできるデータフィルターが表示されます。  
![\[[Data filters] (データフィルター) ページには、[Filter name] (フィルター名)、[Table] (テーブル)、[Database] (データベース)、および [Table catalog ID] (テーブルカタログ ID) 列がある利用可能なデータフィルターが表示されます。スクリーンショットには、test-df、cloudtrailtest_cloudTrail、lakeformation_cloudTrail、および編集されたアカウント ID の値を持つ単一のデータフィルターが表示されています。テーブルの上には、左から右に、更新/再ロードボタンと、[View] (表示) (グレー表示)、[Delete] (削除) (グレー表示)、[Create new filter] (新しいフィルターを作成) ボタンの 4 つのボタンがあります。空の検索フィールドもあります。\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/list-data-filters.jpg)

1. データフィルターの詳細を表示するには、データフィルターを選択してから [View] (表示) を選択します。データフィルターの詳細情報が記載された新しいウィンドウが開きます。  
![\[[View data filter] (データフィルターの表示) ウィンドウには、選択されたデータフィルターに関する追加情報が表示されます。表示されている情報には、[Name] (名前)、[Database] (データベース)、[Table] (テーブル)、[Column-level access] (列レベルのアクセス)、[Row filter expression] (行フィルター式)、および [Columns] (列) が含まれます。\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/list-data-filters-details.jpg)

------
#### [ AWS CLI ]

`list-data-cells-filter` コマンドを入力して、テーブルリソースを指定します。

以下の例は、`cloudtrailtest_cloudtrail` テーブルのデータフィルターをリストします。

```
aws lakeformation list-data-cells-filter --table '{ "CatalogId":"123456789012", 
"DatabaseName":"lakeformation_cloudtrail", "Name":"cloudtrailtest_cloudtrail"}'
```

------
#### [ API/SDK ]

`ListDataCellsFilter` API を使用して、テーブルリソースを指定します。

以下の例は、Python を使用して `myTable` テーブルの最初 20 個のデータフィルターをリストします。

```
response = client.list_data_cells_filter(
    Table = {
        'CatalogId': '111122223333',
        'DatabaseName': 'mydb',
        'Name': 'myTable'
    },
    MaxResults=20
)
```

------

# データフィルターの許可の表示
<a name="listing-filter-perms"></a>

Lake Formation コンソールを使用して、データフィルターに対して付与された許可を表示できます。

データフィルターに対する許可を表示するには、Data Lake 管理者であるか、データフィルターに対する必要な許可を持っている必要があります。

------
#### [ Console ]

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) で Lake Formation コンソールを開きます。

1. ナビゲーションペインの **[Permissions]** (許可) で **[Data permissions]** (データの許可) を選択します。

1. **[Data permissions]** (データの許可) ページで検索フィールドをクリックまたはタップし、**[Properties]** (プロパティ) メニューで **[Resource type]** (リソースタイプ) を選択します。

1. **[Resource type]** (リソースタイプ) メニューで **[Resource type: Data cell filter]** (リソースタイプ: データセルフィルター) を選択します。

   許可を持っているデータフィルターがリストされます。**[Permissions]** (許可) と **[Grantable]** (付与可能) 列を見るには、水平方向にスクロールする必要がある場合があります。  
![\[[Data Permissions] データの許可ページには、[Principal] (プリンシパル)、[Resource type] (リソースタイプ)、[Database] (データベース)、[Table] (テーブル)、[Resource] (リソース)、[Catalog] (カタログ)、および [Permissions] (許可) の列がある許可の表が表示されます。[Resource type] (リソースタイプ) 列には、4 行すべてに「Data cell filter」(データセルフィルター) が表示されています。1 行目と 2 行目の [Permissions] (許可) は、[Describe] (記述)、[Drop] (ドロップ)、および [Select] (選択) です。3 行目の許可は [Describe] (記述) です。表の上には、[Clear filter] (フィルターをクリア) ボタンと、現在の検索が [Resource type: Data cell filter] (リソースタイプ:データセルフィルター) のためのものであることを示すタイルがあります。それらの上には検索 (テキスト) フィールドがあり、その上には更新ボタンと、[Revoke] (取り消す) および [Grant] (付与) ボタンがあります。\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/data-permissions-cell-filters.png)

------
#### [ AWS CLI ]
+ `list-permissions` のコマンドを入力します。`resource` 引数に `DataCellsFilter` を指定し、`Permissions` 引数、およびオプションで `PermissionsWithGrantOption` 引数に、`DESCRIBE` または `DROP` を指定します。

  以下の例は、データフィルター `restrict-pharma` に対する grant オプション付きの `DESCRIBE` 許可をリストします。結果は、 AWS アカウント 1111-2222-3333 の`sales`データベース内のプリンシパル`datalake_user1`と`orders`テーブルに付与されたアクセス許可に限定されます。

  ```
  aws lakeformation list-permissions --cli-input-json file://list-params.json
  ```

  以下は、ファイル `grant-params.json` の内容です。

  ```
  {
      "Principal": {"DataLakePrincipalIdentifier": "arn:aws:iam::111122223333:user/datalake_user1"},
      "Resource": {
          "DataCellsFilter": {
              "TableCatalogId": "111122223333",
              "DatabaseName": "sales",
              "TableName": "orders",
              "Name": "restrict-pharma"
          }
      },
      "Permissions": ["DESCRIBE"],
      "PermissionsWithGrantOption": ["DESCRIBE"]
  }
  ```

------