

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

# 用于 Ranger 与 Amazon EMR 集成的 Trino 插件
<a name="emr-ranger-trino"></a>

Trino（原 PrestoSQL）是一个 SQL 查询引擎，您可以用来对 HDFS、对象存储、关系数据库和 NoSQL 数据库等数据来源运行查询。这样就不需要将数据迁移到中心位置，并可以随时随地查询数据。Amazon EMR 提供了一个 Apache Ranger 插件，为 Trino 提供精细访问控制。该插件与开源 Apache Ranger Admin 服务器版本 2.0 及更高版本兼容。

**Topics**
+ [支持的功能](#emr-ranger-trino-features)
+ [安装服务配置](#emr-ranger-trino-service-config)
+ [创建 Trino 策略](#emr-ranger-trino-create-policies)
+ [注意事项](#emr-ranger-trino-considerations)
+ [限制](#emr-ranger-trino-limitations)

## 支持的功能
<a name="emr-ranger-trino-features"></a>

Trino 查询引擎受精细访问控制的保护，Amazon EMR 上 Trino 的 Apache Ranger 插件支持该引擎的所有功能。这包括数据库、表、列级别的访问控制以及行筛选和数据掩码。Apache Ranger 策略可以包括对用户和组的授予策略和拒绝策略。审计事件也会提交到 CloudWatch日志。

## 安装服务配置
<a name="emr-ranger-trino-service-config"></a>

安装 Trino 服务定义要求设置 Ranger Admin 服务器。要设置 Ranger Admin 服务器，请参阅 [设置 Ranger Admin 服务器，以便与 Amazon EMR 集成](emr-ranger-admin.md)。

按照以下步骤安装 Trino 服务定义。

1. SSH 进入 Apache Ranger Admin 服务器。

   ```
   ssh ec2-user@ip-xxx-xxx-xxx-xxx.ec2.internal
   ```

   

1. 卸载 Presto 服务器插件（如有）。运行如下命令。如果出现“Service not found（未找到服务）”错误，则意味着您的服务器上未安装 Presto 服务器插件。继续执行下一步骤。

   ```
   curl -f -u *<admin users login>*:*_<_**_password_ **_for_** _ranger admin user_**_>_* -X DELETE -k 'https://*<RANGER SERVER ADDRESS>*:6182/service/public/v2/api/servicedef/name/presto'
   ```

1. 下载服务定义和 Apache Ranger Admin 服务器插件。在临时目录中，下载服务定义。此服务定义由 Ranger 2.x 版本支持。

   ```
   wget https://s3.amazonaws.com/elasticmapreduce/ranger/service-definitions/version-2.0/ranger-servicedef-amazon-emr-trino.json
   ```

1. 注册 Amazon EMR 的 Apache Trino 服务定义。

   ```
   curl -u *<admin users login>*:*_<_**_password_ **_for_** _ranger admin user_**_>_* -X POST -d @ranger-servicedef-amazon-emr-trino.json \
   -H "Accept: application/json" \
   -H "Content-Type: application/json" \
   -k 'https://*<RANGER SERVER ADDRESS>*:6182/service/public/v2/api/servicedef'
   ```

   如果此命令成功运行，您会在 Ranger Admin UI 中看到一个名为 `TRINO` 的新服务，如下图所示。  
![\[Ranger Admin 创建服务。\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/images/ranger-create-service-trino.png)

1. 创建 `TRINO` 应用程序的实例，输入以下信息。

   **Service Name**（服务名称）：您将使用的服务名称。建议的值为 `amazonemrtrino`。请记下此服务名称，创建 Amazon EMR 安全配置时将要用到。

   **Display Name (显示名称)：**要为此实例显示的名称。建议的值为 `amazonemrtrino`。  
![\[Ranger Admin 显示名称。\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/images/ranger-display-name-trino.png)

   **jdbc.driver。 ClassName**: 用于 Trino 连接的 JDBC 类的类名。您可以使用默认值。

   **jdbc.url**：连接到 Trino 协调器时要使用的 JDBC 连接字符串。

   **Common Name For Certificate (凭证的公用名称)**：凭证中的 CN 字段，用于从客户端插件连接到管理服务器。此值必须与为插件创建的 TLS 凭证中的 CN 字段匹配。  
![\[Ranger Admin 通用名称。\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/images/ranger-common-name-trino.png)

   请注意，此插件的 TLS 凭证应该已在 Ranger Admin 服务器的信任库中注册。有关更多信息，请参阅 [TLS 证书](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-ranger-admin-tls.html)。

## 创建 Trino 策略
<a name="emr-ranger-trino-create-policies"></a>

创建新策略时，请填写以下字段。

**Policy Name (策略名称)**：此策略的名称。

**Policy Label (策略标注)**：您可以在此策略上放置的标注。

**Catalog**（目录）：应用此策略的目录。通配符“\$1”表示所有目录。

**Schema**（架构）：应用此策略的架构。通配符“\$1”表示所有架构。

**Table（表）**：应用此策略的表。通配符“\$1”表示所有表。

**Column**（列）：应用此策略的列。通配符“\$1”表示所有列。

**Description (描述)**：策略的描述。

还存在其他类型的适用于 **Trino 用户**（用于用户模拟访问）、**Trino 系统/会话属性**（用于更改引擎系统或会话属性）、**函数/过程**（用于允许函数或过程调用）和 **URL**（用于向数据位置上的引擎授予读/写访问权限）的策略。

![\[Ranger Admin 创策略详细信息。\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/images/ranger-create-policy-details-trino.png)


要向特定用户和组授予权限，请输入用户和组。您还可以指定 **allow**（允许）条件和 **deny**（拒绝）条件的排除项。

![\[Ranger Admin 策略详细信息允许拒绝条件。\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/images/ranger-create-policy-allow-conditions-trino.png)


指定允许和拒绝条件后，选择 **Save**（保存）。

## 注意事项
<a name="emr-ranger-trino-considerations"></a>

在 Apache Renger 中创建 Trino 策略时，需要谨记一些使用注意事项。

**Hive 元数据服务器**

Hive 元数据服务器只能由受信任的引擎（特别是 Trino 引擎）访问，以防未经授权的访问。Hive 元数据服务器也可以通过集群上的所有节点访问。所需的端口 9083 为所有节点提供了主节点的访问权限。

**身份验证**

默认情况下，Trino 配置为使用 Amazon EMR 安全配置中配置的 Kerberos 进行身份验证。

**需要传输中加密**

Trino 插件要求您在 Amazon EMR 安全配置中启用传输中加密。要启用加密，请参阅 [传输中加密](emr-data-encryption-options.md#emr-encryption-intransit)。

## 限制
<a name="emr-ranger-trino-limitations"></a>

以下是 Trino 插件的当前限制：
+ Ranger Admin 服务器不支持自动完成。