

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 將第三方服務與 整合 Lake Formation
<a name="Integrating-with-LakeFormation"></a>

與 整合AWS Lake Formation可讓第三方服務安全地存取其 Amazon S3 型資料湖中的資料。您可以使用 Lake Formation 做為授權引擎，透過 AWS Glue ETL、Amazon Athena、Amazon EMR 和 Redshift Spectrum 等整合 AWS 服務來管理或強制執行資料湖的許可。Lake Formation 提供兩種整合 服務的選項：

1. Lake Formation 應用程式整合設定：Lake Formation 可根據有效許可，將 AWS STS 權杖形式的縮小範圍臨時憑證提供給已註冊的 Amazon S3 位置，以便授權的應用程式可以代表使用者存取資料。

1.  集中強制執行：Lake Formation[ 查詢 API](https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_StartQueryPlanning.html) 操作從 Amazon S3 擷取資料，並根據有效許可篩選結果。與查詢 API 操作整合的引擎或應用程式可以依賴 Lake Formation 來評估呼叫身分的許可，並根據這些許可安全地篩選資料。第三方查詢引擎只會查看和操作篩選的資料。

 Lake Formation 憑證販賣不會與 spark sql 查詢整合。登入資料販賣僅適用於透過 AWS Glue ETL 程式庫執行的查詢。

**Topics**
+ [使用 Lake Formation 應用程式整合](using-cred-vending.md)

# 使用 Lake Formation 應用程式整合
<a name="using-cred-vending"></a>

Lake Formation 允許第三方服務與 Lake Formation 整合，並使用 [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) 操作，代表其使用者暫時存取 Amazon S3 資料。這可讓第三方服務使用與其他 AWS 分析服務相同的授權和憑證販賣功能。本節說明如何使用這些 API 操作來整合第三方查詢引擎與 Lake Formation。

 這些 API 操作預設為停用。有兩種選項可授權 Lake Formation 整合應用程式：
+ 設定每次呼叫應用程式整合 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)
+ [Lake Formation 應用程式整合 API 操作的工作流程](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/zh_tw/lake-formation/latest/dg/images/credential-vending-new.png)


1. Lake Formation 管理員會執行下列活動：
   + 向 Lake Formation 註冊 Amazon S3 位置，方法是提供具有適當許可的 IAM 角色 （用於販賣登入資料），以存取 Amazon S3 位置內的資料
   + 註冊第三方應用程式，以便能夠呼叫 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) 標籤。接下來，您將定義許可，允許業務分析師存取使用者工作階段資料，但排除標記為*分類 = 敏感*的資料欄。

1. 委託人 （使用者） 向整合服務提交查詢。

1. 整合的應用程式會將請求傳送至 Lake Formation，要求資料表資訊和登入資料來存取資料表。

1. 如果查詢委託人有權存取資料表，Lake Formation 會將登入資料傳回整合式應用程式，以允許資料存取。
**注意**  
傳送登入資料時，Lake Formation 無法存取基礎資料。

1. 整合的服務會從 Amazon S3 讀取資料、根據收到的政策篩選資料欄，並將結果傳回給委託人。

**重要**  
Lake Formation 憑證販賣 API 操作會**啟用分散式強制執行，並明確拒絕失敗 （關閉失敗） 模型。**這引入了客戶、第三方服務和 Lake Formation 之間的第三方安全模型。受信任的整合式服務可正確強制執行Lake Formation許可 （分散式強制執行）。

整合服務負責根據從 傳回的政策篩選從 Amazon S3 讀取的資料，Lake Formation然後再將篩選的資料傳回給使用者。整合式服務遵循關閉失敗模型，這表示如果他們無法強制執行必要的Lake Formation許可，則必須讓查詢失敗。

# Lake Formation 應用程式整合中的角色和責任
<a name="roles-and-responsibilities"></a>

以下是啟用第三方應用程式整合的角色及其相關責任 AWS Lake Formation。


****  

| Role | 責任 | 
| --- | --- | 
| 客戶 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/roles-and-responsibilities.html)  | 
| 第三方 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/roles-and-responsibilities.html)  | 
| AWS Lake Formation |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/roles-and-responsibilities.html)  | 

# Lake Formation 應用程式整合 API 操作的工作流程
<a name="api-overview"></a>

以下是應用程式整合 API 操作的工作流程：

1. 使用者使用整合的第三方查詢引擎提交資料查詢或請求。查詢引擎會擔任代表使用者或使用者群組的 IAM 角色，並擷取呼叫應用程式整合 API 操作時要使用的信任憑證。

1.  查詢引擎會呼叫 `GetUnfilteredTableMetadata`，如果它是分割資料表，則查詢引擎會呼叫 從 Data Catalog `GetUnfilteredPartitionsMetadata`擷取中繼資料和政策資訊。

1.  Lake Formation 會執行請求的授權。如果使用者沒有資料表的適當許可，則會擲回 *AccessDeniedException*。

1. 作為請求的一部分，查詢引擎會傳送其支援的篩選。陣列中可以傳送兩個旗標：*COLUMN\$1PERMISSIONS* 和 *CELL\$1FILTER\$1PERMISSION*。如果查詢引擎不支援任何這些功能，且該功能的資料表上存在政策，則會擲回 *PermissionTypeMismatchException*，且查詢會失敗。這是為了避免資料外洩。

1. 傳回的回應包含下列項目：
   + 資料表的整個結構描述，以便查詢引擎可以使用它從儲存體剖析資料。
   + 使用者可存取的授權資料欄清單。如果授權資料欄清單是空的，則表示使用者具有`DESCRIBE`許可，但沒有`SELECT`許可，且查詢失敗。
   + 標記 `IsRegisteredWithLakeFormation`，指出 Lake Formation 是否可以將登入資料提供給此資源資料。如果傳回 false，則應該使用客戶的登入資料來存取 Amazon S3。
   +  如果`CellFilters`有任何 應套用至資料列的 清單。此清單包含要評估每一列的資料欄和表達式。只有在 *CELL\$1FILTER\$1PERMISSION* 作為請求的一部分傳送，且對呼叫使用者的資料表有資料篩選條件時，才應填入此項目。

1. 擷取中繼資料之後，查詢引擎會呼叫 `GetTemporaryGlueTableCredentials`或 `GetTemporaryGluePartitionCredentials` 以取得 AWS 登入資料，以從 Amazon S3 位置擷取資料。

1. 查詢引擎會從 Amazon S3 讀取相關物件，根據其在步驟 2 中收到的政策篩選資料，並將結果傳回給使用者。

的應用程式整合 API 操作Lake Formation包含用於設定與第三方查詢引擎整合的其他內容。您可以在[登入資料販賣 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. 您需要指定 AWS 帳戶和 IAM 工作階段標籤，這些標籤需要透過 AWS Lake Formation 主控台、 AWS CLI 或 API/SDK 呼叫應用程式整合 API 操作的許可。

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. 在查詢引擎執行角色上設定角色信任政策，以對可連接到此角色的工作階段標籤金鑰值對進行精細存取控制。在下列範例中，此角色只允許`"engine1"`連接工作階段標籤索引鍵`"LakeFormationAuthorizedCaller"`和工作階段標籤值，不允許其他工作階段標籤索引鍵值對。

   ```
   {
       "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 AWS Lake Formation呼叫應用程式整合 API 操作。

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

**若要註冊您的帳戶以進行外部資料篩選：**

1. 登入 AWS 管理主控台，並在 https：//[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) 開啟 Lake Formation 主控台。

1. 在左側導覽中，展開**管理**，然後選擇**應用程式整合設定**。

1. 在**應用程式整合設定**頁面上，選擇**允許外部引擎篩選向 註冊之 Amazon S3 位置中的資料Lake Formation**。

1. 輸入您為第三方引擎建立的工作階段標籤。如需工作階段標籤的資訊，請參閱*AWS Identity and Access Management 《 使用者指南*》中的在 [AWS STS 中傳遞工作階段標籤](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html)。

1. 輸入可使用第三方引擎存取未篩選中繼資料資訊的使用者的帳戶 IDs，以及目前帳戶中資源的資料存取憑證。

   您也可以使用 AWS 帳戶 ID 欄位來設定跨帳戶存取。  
![\[螢幕擷取畫面顯示 的應用程式整合設定頁面Lake Formation。選項 已選取允許外部引擎篩選向 註冊的 Amazon S3 位置中的資料Lake Formation。對於工作階段標籤值，文字方塊是空的，但欄位下方顯示六個標籤，其值為「engine1、「engine2」、「engine3」、「session1」、「session2」和「session3」。最後一個欄位顯示 AWS 帳戶 IDs 欄位。文字欄位是空的，但此欄位下方顯示三個標籤，其中包含帳戶 IDs。帳戶 ID 值會遭到修訂。\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/cred-vending-external-data-filtering.png)

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

使用 `put-data-lake-settings` CLI 命令來設定下列參數。

使用此 AWS CLI 命令時，需要設定三個欄位：
+ `allow-external-data-filtering ` – （布林值） 表示第三方引擎可以存取目前帳戶中資源的未篩選中繼資料資訊和資料存取憑證。
+ `external-data-filtering-allow-list` – （陣列） 使用第三方引擎時，可存取目前帳戶中資源未篩選中繼資料資訊和資料存取憑證的帳戶 IDs 清單。當 AllowExternalDataFiltering 設為 true 時，ExternalDataFilteringAllowList 屬性必須至少包含一個帳戶 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 操作時，需要設定三個欄位：
+ `AllowExternalDataFiltering` – （布林值） 指出第三方引擎是否可以存取目前帳戶中資源的未篩選中繼資料資訊和資料存取憑證。
+ `ExternalDataFilteringAllowList` – （陣列） 可使用第三方引擎存取未篩選中繼資料資訊的帳戶 IDs 清單，以及目前帳戶中資源的資料存取憑證。
+ `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：//[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/zh_tw/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
    }
}
```

------