

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

# Lake Formation アプリケーション統合の使用
<a name="using-cred-vending"></a>

Lake Formationを使用すると、サードパーティのサービスを Lake Formation と統合して、ユーザーに代わって Amazon S3 データに一時的にアクセスできるようになります。これには、[GetTemporaryGlueTableCredentials](https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_GetTemporaryGlueTableCredentials.html) 操作と [GetTemporaryGluePartitionCredentials](https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_GetTemporaryGluePartitionCredentials.html) 操作を使用します。これにより、サードパーティサービスは他の AWS  分析サービスが使用するのと同じ認可および認証情報供給機能を使用できます。このセクションでは、これらの API 操作を使用してサードパーティクエリエンジンを Lake Formation と統合する方法について説明します。

 これらの API 操作はデフォルトでは無効になっています。Lake Formation にアプリケーションの統合を許可するには、次の 2 つのオプションがあります。
+ アプリケーション統合 API 操作が呼び出されるたびに検証される IAM セッションタグを設定する

  詳細については、「[サードパーティのクエリエンジンがアプリケーション統合 API 操作を呼び出すアクセス許可を有効にする](permitting-third-party-call.md)」を参照してください。
+ **[外部エンジンが Amazon S3 ロケーションのデータにフルテーブルアクセスでアクセスするのを許可する]** オプションを有効にする

  このオプションにより、ユーザーがフルテーブルアクセス権を持っている場合、クエリエンジンとアプリケーションは IAM セッションタグなしで認証情報を取得できます。クエリエンジンとアプリケーションのパフォーマンスが向上し、データアクセスが簡単になります。Amazon EC2 での Amazon EMR では、この設定を活用できます。

  詳細については、「[フルテーブルアクセスのためのアプリケーション統合](full-table-credential-vending.md)」を参照してください。

**Topics**
+ [Lake Formation アプリケーション統合の仕組み](how-vending-works.md)
+ [Lake Formation アプリケーション統合におけるロールと責任](roles-and-responsibilities.md)
+ [アプリケーション統合 API 操作の Lake Formation ワークフロー](api-overview.md)
+ [サードパーティークエリエンジンの登録](register-query-engine.md)
+ [サードパーティのクエリエンジンがアプリケーション統合 API 操作を呼び出すアクセス許可を有効にする](permitting-third-party-call.md)
+ [フルテーブルアクセスのためのアプリケーション統合](full-table-credential-vending.md)

# Lake Formation アプリケーション統合の仕組み
<a name="how-vending-works"></a>

このセクションでは、アプリケーション統合 API 操作を使用してサードパーティアプリケーション (クエリエンジン) を Lake Formation と統合する方法について説明します。

![\[Lake Formation data access workflow with user authentication and service integration.\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/credential-vending-new.png)


1. Lake Formation 管理者が以下のアクティビティを実行します。
   + Amazon S3 ロケーション内のデータにアクセスするための適切な許可を持つ IAM ロール (認証情報の供給用) を提供することで、Amazon S3 ロケーションを Lake Formation に登録する。
   + Lake Formation の認証情報供給 API 操作を呼び出すことができるようにサードパーティーアプリケーションを登録する。「[サードパーティークエリエンジンの登録](register-query-engine.md)」を参照してください。
   + データベースとテーブルにアクセスするための許可をユーザーに付与する。

     例えば、個人を特定できる情報 (PII) を示す複数の列が含まれているユーザーセッションデータセットを公開する場合、アクセスを制限するには、これらの列に [LF-TBAC](https://docs.aws.amazon.com/lake-formation/latest/dg/tag-based-access-control.html.html) タグを「classification」という名前および「sensitive」という値で割り当てます。次に、ユーザーセッションデータへのアクセス権をビジネスアナリストに付与するための許可を定義します。ただし、*classification = sensitive* がタグ付けされた列は除きます。

1. プリンシパル (ユーザー) が、統合されたサービスにクエリを送信します。

1. 統合されたアプリケーションが Lake Formation にリクエストを送信し、テーブル情報とテーブルにアクセスするための認証情報を要求します。

1. クエリを実行するプリンシパルにテーブルへのアクセスが認可されている場合は、Lake Formation から統合されたアプリケーションに認証情報を返し、データアクセスを許可します。
**注記**  
Lake Formation は、認証情報を提供するときに基盤のデータにアクセスしません。

1. 統合されたサービスが Amazon S3 からデータを読み取り、受け取ったポリシーに基づいて列をフィルタリングして、結果をプリンシパルに返します。

**重要**  
Lake Formation の認証情報供給 API 操作は、**失敗時における明示的な拒否 (フェイルクローズ) モデルを使用した分散型適用**を有効にします。これにより、顧客、サードパーティーサービス、Lake Formation の間に 3 パーティーセキュリティモデルが導入されます。統合されたサービスでは、Lake Formation 許可が適切に適用 (分散型適用) されます。

統合されたサービスは、Lake Formation から返されたポリシーに基づいて Amazon S3 からデータを読み取ってフィルタリングし、フィルタリングしたデータをユーザーに返す責任があります。統合されたサービスは、フェイルクローズモデルに従います。つまり、適切な Lake Formation 許可を適用できない場合はクエリを失敗させる必要があります。

# Lake Formation アプリケーション統合におけるロールと責任
<a name="roles-and-responsibilities"></a>

以下は、 とのサードパーティーアプリケーション統合を有効にするためのロールとそれに関連する責任です AWS Lake Formation。


****  

| ロール  | 責任 | 
| --- | --- | 
| 顧客 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/roles-and-responsibilities.html)  | 
| サードパーティー |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/roles-and-responsibilities.html)  | 
| AWS Lake Formation |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/roles-and-responsibilities.html)  | 

# アプリケーション統合 API 操作の Lake Formation ワークフロー
<a name="api-overview"></a>

アプリケーション統合 API 操作のワークフローは次のとおりです。

1. ユーザーが、統合されたサードパーティークエリエンジンを使用してデータへのクエリまたはリクエストを送信します。クエリエンジンがユーザーまたはユーザーのグループを表す IAM ロールを引き受けて、信頼できる認証情報を取得し、これを使用してアプリケーション統合 API 操作を呼び出します。

1.  クエリエンジンが `GetUnfilteredTableMetadata` (パーティション化されたテーブルの場合は `GetUnfilteredPartitionsMetadata`) を呼び出し、Data Catalog からメタデータとポリシー情報を取得します。

1.  Lake Formation がリクエストの認可を実行します。ユーザーがテーブルに対する適切な許可を持っていない場合は、*AccessDeniedException* がスローされます。

1. リクエストの一部として、クエリエンジンが、サポートするフィルタリングを送信します。配列内で送信できるフラグには、*COLUMN\$1PERMISSIONS* と *CELL\$1FILTER\$1PERMISSION* の 2 つがあります。クエリエンジンがこれらの機能のどちらもサポートしておらず、機能に関するポリシーがテーブルに存在する場合は、*PermissionTypeMismatchException* がスローされ、クエリが失敗します。これは、データ漏洩を防ぐためのものです。

1. 返される応答には以下が含まれます。
   + テーブルの完全なスキーマ。クエリエンジンがこれを使用してストレージからのデータを解析できるようにするためです。
   + ユーザーがアクセスできる認可された列のリスト。認可された列のリストが空の場合は、ユーザーに `DESCRIBE` 許可があっても `SELECT` 許可がないことを示し、クエリが失敗します。
   + `IsRegisteredWithLakeFormation` というフラグ。これは、Lake Formation がこのリソースデータに認証情報を供給できるかどうかを示します。これが false を返す場合、Amazon S3 へのアクセスには顧客の認証情報を使用する必要があります。
   +  データの行に適用する必要がある `CellFilters` のリスト (存在する場合)。このリストには、列と、各行を評価する式が含まれています。これは、*CELL\$1FILTER\$1PERMISSION* をリクエストの一部として送信し、テーブルに対するデータフィルターが呼び出し側のユーザーにある場合にのみ入力されます。

1. メタデータを取得すると、クエリエンジンは `GetTemporaryGlueTableCredentials`または `GetTemporaryGluePartitionCredentials`を呼び出して、Amazon S3 の場所からデータを取得するための AWS 認証情報を取得します。

1. クエリエンジンが Amazon S3 から関連するオブジェクトを読み取り、ステップ 2 で受け取ったポリシーに基づいてデータをフィルタリングして、ユーザーに結果を返します。

Lake Formation のアプリケーション統合 API 操作には、サードパーティクエリエンジンとの統合を設定するための追加のコンテンツが含まれています。操作の詳細については、「[認証情報供給 API 操作](aws-lake-formation-api-credential-vending.md)」セクションを参照してください。

 `QuerySessionContext` は、これらのアプリケーション統合 API オペレーションLake Formationのためにクエリエンジンが追加で に送信できる構造です。これにより、 Lake Formation は特定のクエリに追加のコンテキストを保存して使用できます。[QuerySessionContext](https://docs.aws.amazon.com/glue/latest/webapi/API_QuerySessionContext.html) の使用方法の例を次に示します。

1. クエリエンジンは`GetInternalUnfilteredMetadata`呼び出しを行い、リクエストに一意のクエリ ID を含む QSC 構造を渡します。

   ```
   {
       "QuerySessionContext": {
           "QueryId": "your-unique-identifier-here"
       }
   }
   ```

1. `GetInternalUnfilteredMetadata` 呼び出しはレスポンスで`QueryAuthorizationId`文字列を返します。入力で QSC 構造を受け入れる次の (およびそれ以降の) クエリ呼び出しでは、クエリエンジンは によって`QueryAuthorizationId`返される も含む同じ QSC 構造を渡しますLake Formation。次の呼び出しが であるとします`GetTemporaryGlueTableCredentials`。リクエストには以下が含まれます。

   ```
   {
       "QuerySessionContext": {
           "QueryAuthorizationId": "lf-returned-query-authz-id-here",
           "QueryId": "your-unique-identifier-here"
       },
   }
   ```

# サードパーティークエリエンジンの登録
<a name="register-query-engine"></a>

サードパーティクエリエンジンがアプリケーション統合 API 操作を使用するには、クエリエンジンがユーザーに代わって API 操作を呼び出すアクセス許可を明示的に有効にする必要があります。これを行うには、以下のステップに従います。

1. Lake Formation コンソール、、 AWS CLI または API/SDK を使用して AWS アプリケーション統合 API オペレーションを呼び出すアクセス許可が必要な AWS アカウントと IAM セッションタグを指定する必要があります。

1. サードパーティーのクエリエンジンがアカウントで実行ロールを引き受ける場合、クエリエンジンは、Lake Formation に登録されている、サードパーティーエンジンを表すセッションタグをアタッチする必要があります。Lake Formation は、このタグを使用して、承認されたエンジンからのリクエストであるかどうかを検証します。セッションタグの詳細については、「IAM ユーザーガイド」の[セッションタグ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html)に関するセクションを参照してください。

1. サードパーティクエリエンジンの実行ロールを設定する場合は、IAM ポリシーに少なくとも以下の一連の許可が必要です。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": {"Effect": "Allow",
       "Action": [
         "lakeformation:GetDataAccess",      
         "glue:GetTable",
         "glue:GetTables",
         "glue:GetDatabase",
         "glue:GetDatabases",
         "glue:CreateDatabase",
         "glue:GetUserDefinedFunction",
         "glue:GetUserDefinedFunctions",
         "glue:GetPartition",
         "glue:GetPartitions"
       ],
       "Resource": "*"
     }
   }
   ```

------

1. クエリエンジンの実行ロールにロール信頼ポリシーを設定して、このロールにどのセッションタグのキーバリューペアをアタッチできるかを細かくアクセス制御します。次の例で、このロールはセッションタグのキーとして `"LakeFormationAuthorizedCaller"`、セッションタグのバリューとして `"engine1"` をアタッチすることのみが許可され、他のセッションタグのキーバリューペアは許可されません。

   ```
   {
       "Sid": "AllowPassSessionTags",
       "Effect": "Allow",
       "Principal": {
           "AWS": "arn:aws:iam::111122223333:role/query-execution-role"
       },
       "Action": "sts:TagSession",
       "Condition": {
       "StringLike": {
           "aws:RequestTag/LakeFormationAuthorizedCaller": "engine1"        }
       }
   }
   ```

`LakeFormationAuthorizedCaller` が、STS:AssumeRole API 操作を呼び出してクエリエンジンが使用する認証情報を取得する場合ば、セッションタグを [AssumeRole リクエスト](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html#id_session-tags_adding-assume-role)に含める必要があります。返された一時的な認証情報を使用して、Lake Formation アプリケーション統合 API リクエストを実行することができます。

Lake Formation アプリケーション統合 API 操作では、呼び出し元プリンシパルが IAM ロールである必要があります。この IAM ロールには、Lake Formation に登録されている定義済みの値を持つセッションタグを含める必要があります。このタグにより、Lake Formation は、アプリケーション統合 API 操作の呼び出しに使用されたロールが、この呼び出しを行う許可を得ていることを確認できます。

# サードパーティのクエリエンジンがアプリケーション統合 API 操作を呼び出すアクセス許可を有効にする
<a name="permitting-third-party-call"></a>

サードパーティーのクエリエンジンがコンソール、、 AWS CLI または API/SDK を介してアプリケーション統合 API オペレーションを AWS Lake Formation呼び出せるようにするには、次の手順に従います。

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

**外部データフィルタリングのためのアカウントを登録するには**

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

1. 左側のナビゲーションで、**[管理]** を展開し、**[アプリケーション統合設定]** を選択します。

1. **[アプリケーション統合設定]** ページで、**[外部エンジンが Lake Formation に登録された Amazon S3 ロケーション内のデータをフィルタリングすることを許可する]** オプションを選択します。

1. サードパーティエンジン用に作成したセッションタグを入力します。セッションタグの詳細については、「 *AWS Identity and Access Management ユーザーガイド*[」の AWS 「STS でのセッションタグの受け](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html)渡し」を参照してください。

1. サードパーティーエンジンを使用して現在のアカウントにあるリソースのフィルタリングされていないメタデータ情報やデータアクセス認証情報にアクセスできるユーザーのアカウント ID を入力します。

    AWS アカウント ID フィールドを使用して、クロスアカウントアクセスを設定することもできます。  
![\[スクリーンショットは、Lake Formation の [アプリケーション統合設定] ページを示しています。[Allow external engines to filter data in Amazon S3 locations registered with Lake Formation](外部エンジンが Lake Formation に登録された Amazon S3 ロケーション内のデータをフィルタリングすることを許可する) オプションが選択されています。[Session tag values] (セッションタグ値) のテキストボックスは空ですが、フィールドの下に 6 つのタグが「engine1」、「engine2」、「engine3」、「session1」、「session2」、および「session3」の値で表示されています。最後のフィールドには、 AWS アカウント IDsフィールドが表示されます。テキストフィールドは空ですが、このフィールドの下にアカウント ID のタグが 3 個表示されています。アカウント ID の値はマスキング処理されています。\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/cred-vending-external-data-filtering.png)

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

`put-data-lake-settings` CLI コマンドを使用して以下のパラメータを設定します。

この AWS CLI コマンドを使用する際に設定するフィールドは 3 つあります。
+ `allow-external-data-filtering ` – (ブール) サードパーティーエンジンが、現在のアカウントにあるリソースのフィルタリングされていないメタデータ情報とデータアクセス認証情報にアクセスできることを示します。
+ `external-data-filtering-allow-list` – (配列) サードパーティーエンジンの使用時に、現在のアカウントにあるリソースのフィルタリングされていないメタデータ情報とデータアクセス認証情報にアクセスできるアカウント ID のリストです。AllowExternalDataFiltering が true に設定されている場合、ExternalDataFilteringAllowList プロパティには少なくとも 1 つのアカウント ID を含める必要があります。空のリストは使用できません。
+ `authorized-sessions-tag-value-list` – (配列) 認可されたセッションタグ値 (文字列) のリストです。IAM ロールの認証情報に認可されたキーバリューペアがアタッチされている場合、セッションタグがリストに含まれていると、現在のアカウントにあるリソースのフィルタリングされていないメタデータ情報とデータアクセス認証情報に対するアクセス権がセッションに付与されます。認可されたセッションタグキーは `*LakeFormationAuthorizedCaller*` として定義されます。
+ `AllowFullTableExternalDataAccess` - (ブール値) 呼び出し元が完全なデータアクセスアクセス許可を持っている場合に、サードパーティのクエリエンジンがセッションタグなしでデータアクセス認証情報を取得することを許可するかどうか。

例えば、次のようになります。

```
aws lakeformation put-data-lake-settings --cli-input-json file://datalakesettings.json

{
  "DataLakeSettings": {
    "DataLakeAdmins": [
      {
        "DataLakePrincipalIdentifier": "arn:aws:iam::111111111111:user/lakeAdmin"
      }
    ],
    "CreateDatabaseDefaultPermissions": [],
    "CreateTableDefaultPermissions": [],
    "TrustedResourceOwners": [],
    "AllowExternalDataFiltering": true,
    "ExternalDataFilteringAllowList": [
        {"DataLakePrincipalIdentifier": "111111111111"}
        ],
    "AuthorizedSessionTagValueList": ["engine1"],
    "AllowFullTableExternalDataAccess": false
    }
    

}
```

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

`PutDataLakeSetting` API 操作を使用して以下のパラメータを設定します。

この API 操作を使用する場合は、以下の 3 つのフィールドを設定します。
+ `AllowExternalDataFiltering` – (ブール) サードパーティーエンジンが、現在のアカウントにあるリソースのフィルタリングされていないメタデータ情報とデータアクセス認証情報にアクセスできるかどうかを示します。
+ `ExternalDataFilteringAllowList` – (配列) サードパーティーエンジンを使用して、現在のアカウントにあるリソースのフィルタリングされていないメタデータ情報とデータアクセス認証情報にアクセスできるアカウント ID のリストです。
+ `AuthorizedSectionsTagValueList` – (配列) 認可されたタグ値 (文字列) のリストです。IAM ロールの認証情報に認可済みのタグがアタッチされている場合は、設定されたアカウントにあるリソースのフィルタリングされていないメタデータ情報とデータアクセス認証情報に対するアクセス権がセッションに付与されます。認可済みのセッションタグキーは `*LakeFormationAuthorizedCaller*` として定義されます。
+  `AllowFullTableExternalDataAccess` - (ブール値) 呼び出し元が完全なデータアクセスアクセス許可を持っている場合に、サードパーティのクエリエンジンがセッションタグなしでデータアクセス認証情報を取得することを許可するかどうか。

例えば、次のようになります。

```
//Enable session tag on existing data lake settings
public void sessionTagSetUpForExternalFiltering(AWSLakeFormationClient lakeformation) {
    GetDataLakeSettingsResult getDataLakeSettingsResult = lfClient.getDataLakeSettings(new GetDataLakeSettingsRequest());
    DataLakeSettings dataLakeSettings = getDataLakeSettingsResult.getDataLakeSettings();
    
    //set account level flag to allow external filtering
    dataLakeSettings.setAllowExternalDataFiltering(true);
    
    //set account that are allowed to call credential vending or Glue GetFilteredMetadata API
    List<DataLakePrincipal> allowlist = new ArrayList<>();
    allowlist.add(new DataLakePrincipal().withDataLakePrincipalIdentifier("111111111111"));
    dataLakeSettings.setWhitelistedForExternalDataFiltering(allowlist);
    
    //set registered session tag values
    List<String> registeredTagValues = new ArrayList<>();
    registeredTagValues.add("engine1");
    dataLakeSettings.setAuthorizedSessionTagValueList(registeredTagValues);

    lakeformation.putDataLakeSettings(new PutDataLakeSettingsRequest().withDataLakeSettings(dataLakeSettings));
}
```

------

# フルテーブルアクセスのためのアプリケーション統合
<a name="full-table-credential-vending"></a>

以下の手順に従って、サードパーティのクエリエンジンが IAM セッションタグの検証なしでデータにアクセスできるようにします。

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

1. Lake Formation コンソール ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)) にサインインします。

1. 左側のナビゲーションで、**[管理]** を展開し、**[アプリケーション統合設定]** を選択します。

1. **[アプリケーション統合設定]** ページで、**[外部エンジンがフルテーブルアクセスで Amazon S3 ロケーション内のデータにアクセスすることを許可する]** オプションを選択します。

   このオプションを有効にすると、Lake Formation は IAM セッションタグの検証なしに、認証情報をクエリ元のアプリケーションに直接返します。

![\[スクリーンショットは、Lake Formation の [アプリケーション統合設定] ページを示しています。[外部エンジンがフルテーブルアクセスで Amazon S3 ロケーションのデータにアクセスするのを許可する] オプションが選択されています。\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/cred-vending-external-full-table.png)


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

`put-data-lake-settings` CLI コマンドを使用して、`AllowFullTableExternalDataAccess` パラメータを設定します。

```
aws lakeformation put-data-lake-settings —cli-input-json file://put-data-lake-settings.json —region ap-northeast-1 
{
    "DataLakeSettings": {
        "DataLakeAdmins": [
            {
                "DataLakePrincipalIdentifier": "arn:aws:iam::111111111111:user/lakeAdmin"
            }
        ],
        "AllowFullTableExternalDataAccess": true
    }
}
```

------