

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 为第三方查询引擎启用调用应用程序集成 API 操作所需的权限
<a name="permitting-third-party-call"></a>

按照以下步骤允许第三方查询引擎通过 Amazon Lake Formation控制台、 Amazon CLI 或 API/SDK 调用应用程序集成 API 操作。

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

**注册您的账户以进行外部数据筛选：**

1. 登录并打开 Lake Amazon Web Services 管理控制台 Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.amazonaws.cn/lakeformation/)。

1. 在左侧导航中，展开**管理**，然后选择**应用程序集成设置**。

1. 在**应用程序集成设置**页面上，选择**允许外部引擎筛选在 Lake Formation 中注册的 Amazon S3 位置处的数据**。

1. 输入您为第三方引擎创建的会话标签。有关会话标签的信息，请参阅*Amazon Identity and Access Management 用户指南*[中的在 Amazon STS 中传递会话标签](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_session-tags.html)。

1. 输入可使用第三方引擎访问未经过筛选的元数据信息的用户账户 IDs ，以及当前账户中资源的数据访问凭证。

   您也可以使用 Amazon 账户 ID 字段配置跨账户访问权限。  
![屏幕截图显示了 Lake Formation 的应用程序集成设置页面。允许外部引擎筛选在 Lake Formation 中注册的 Amazon S3 位置处的数据选项处于选中状态。对于会话标签值，文本框为空，但字段下方显示了六个标签，其值分别为：“engine1、“engine2”、“engine3”、“session1”、“session2”和“session3”。最后一个字段显示该 Amazon Web Services 账户 IDs 字段。文本字段为空，但该字段下方显示了三个带有账户的标签 IDs。账户 ID 值已被修订。](http://docs.amazonaws.cn/lake-formation/latest/dg/images/cred-vending-external-data-filtering.png)

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

使用 `put-data-lake-settings` CLI 命令可设置以下参数。

使用此 Amazon 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));
}
```

------