授权

Presto 可以配置为为 HTTP 端点启用授权支持,以允许系统管理员控制对 Presto 中不同 HTTP 端点的访问。

基于角色的访问控制

Presto 中的每个 HTTP 端点都由一组角色保护,并且只能由属于其中一个角色的身份访问。Presto 中定义了三个角色

  • user: 应该能够访问外部端点的用户,例如启动查询、检查状态、获取输出数据和为 UI 提供数据所需的端点。

  • internal: Presto 的内部组件(如协调器和工作器),它们将能够访问端点,例如在工作器上启动任务和从另一个工作器获取交换数据。

  • admin: 系统管理员,他们将能够访问内部服务端点,例如获取节点状态的端点。

启用授权

为了启用授权,需要采取以下步骤

启用身份验证

Presto 授权需要身份验证来获取访问者的主体,因此请确保您已启用身份验证。

  • 如果 TLS/SSL 配置正确,我们可以直接使用证书来识别访问者。

    http-server.authentication.type=CERTIFICATE
    
  • 还可以指定其他身份验证类型,例如 KERBEROSPASSWORDJWT。可能需要其他配置。

    node.internal-address=<authentication type>
    

配置授权器

要启用授权,必须实现并绑定接口 com.facebook.airlift.http.server.Authorizer。它根据传入请求的主体和所请求端点的允许角色执行实际的授权检查。

您可以使用预设的 ConfigurationBasedAuthorizer 或实现您自己的授权器。

基于配置的授权器

此插件允许您通过指定从角色到匹配身份的正则表达式的映射来打开授权支持。按照以下步骤开始使用基于配置的授权器

  1. 创建一个角色到身份正则表达式映射,并将其存储在一个文件中。

    user=.*
    internal=coordinator
    admin=su.*
    
  2. config.properties 文件中指定映射文件的路径

    configuration-based-authorizer.role-regex-map.file-path=<path to mapping file>
    
  3. 安装 Guice 模块 com.facebook.airlift.http.server.ConfigurationBasedAuthorizerModule

配置授权设置

授权设置在 config.properties 文件中配置。工作器和协调器节点上的授权使用相同的属性集进行配置。

以下是需要添加到 config.properties 文件中的属性示例

http-server.authorization.enabled=true
http-server.authorization.default-policy=ALLOW
http-server.authorization.default-allowed-roles=USER,ADMIN
http-server.authorization.allow-unsecured-requests=false

属性

描述

http-server.authorization.enabled

为 Presto 启用授权。应设置为 true。默认值为 false

http-server.authorization.default-policy

默认授权策略适用于未指定允许角色的端点。可以设置为 ALLOWDENYDEFAULT_ROLES

http-server.authorization.default-allowed-roles

当 default-policy 设置为 DEFAULT_ROLES 时,允许访问未明确指定的端点的角色。

http-server.authorization.allow-unsecured-requests

跳过对不安全的请求的授权检查。默认值为 false

警告

http-server.authorization.allow-unsecured-requests 提供了一种从 HTTP 迁移到 HTTPS 以及授权的方法,它是一个安全漏洞,因为它允许未经身份验证的请求跳过授权检查。仅在迁移期间启用此设置,并在完成迁移到使用 HTTPS 后禁用此设置。