

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

# 啟用第三方查詢引擎呼叫應用程式整合 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));
}
```

------