自带您的委托令牌

您可以为 Vertica 提供一个 Hadoop 委托令牌以供使用,而不是创建代理用户并授予其访问 HDFS 以与 doAs 一起使用的权限。您必须从 Hadoop 名称节点获取此委托令牌。在此模型中,安全性完全在 Hadoop 端处理,Vertica 只传递一个令牌。Vertica 可能会或可能不会进行 Kerberize。

典型的工作流是:

  • 在 ETL 前端,用户提交查询。

  • ETL 系统使用身份验证和授权服务验证用户是否有足够的权限来运行查询。

  • ETL 系统从名称节点为用户请求一个委托令牌。

  • ETL 系统与 Vertica 建立客户端连接,为会话设置委托令牌,然后运行查询。

使用委托令牌时,客户端可以作为任何 Vertica 用户进行连接。不需要代理用户。

在下图中,Bob 有一个 Hadoop 颁发的委托令牌。他连接到 Vertica,Vertica 使用该委托令牌访问 HDFS 中的文件。

会话配置

设置 HadoopImpersonationConfig 会话参数以指定委托令牌和 HDFS 群集。Vertica 将使用该委托令牌访问 HDFS,直到会话结束、令牌过期或您更改参数为止。

此会话参数的值是 JSON 对象的集合。每个对象指定一个 WebHDFS 格式的委托令牌(“令牌”)和一个 HDFS 名称服务或名称节点。 HadoopImpersonationConfig 格式 描述了完整的 JSON 语法。

以下示例显示了代表两个不同用户的访问权限。用户 "stephanie" 和 "bob" 是 Hadoop 用户,而不是 Vertica 用户。"dbuser1" 是没有特殊权限的 Vertica 用户。

$ vsql -U dbuser1

=> ALTER SESSION SET
   HadoopImpersonationConfig ='[{"authority":"hadoop1:50070","token":"JAAGZGJldGwxBmRiZXRsMQCKAWDXJgB9igFg-zKEfY4gao4BmhSJYtXiWqrhBHbbUn4VScNg58HWQxJXRUJIREZTIGRlbGVnYXRpb24RMTAuMjAuMTAwLjU0OjgwMjA"}]';
=> COPY nation FROM 'webhdfs:///user/stephanie/nation.dat';

=> ALTER SESSION SET
   HadoopImpersonationConfig ='[{"authority":"hadoop1:50070","token":"HgADdG9tA3RvbQCKAWDXJgAoigFg-zKEKI4gaI4BmhRoOUpq_jPxrVhZ1NSMnodAQnhUthJXRUJIREZTIGRlbGVnYXRpb24RMTAuMjAuMTAwLjU0OjgwMjA"}]';
=> COPY nation FROM 'webhdfs:///user/bob/nation.dat';

您可以使用 WebHDFS REST API 获取委托令牌:

$ curl -s --noproxy "*" --negotiate -u: -X GET "http://hadoop1:50070/webhdfs/v1/?op=GETDELEGATIONTOKEN"

Vertica 不会也不能在授权令牌到期时更新它们。您必须保持会话短于令牌生命周期,或实施更新方案。

委托令牌和 HCatalog 连接器

HiveServer2 对委派令牌使用不同的格式。因此,要使用 HCatalog 连接器,您必须设置两个委托令牌,一个用于往常用途(授权),一个用于 HiveServer2(架构)。HCatalog 连接器使用架构令牌访问元数据,使用授权令牌访问数据。架构名称与您在 CREATE HCATALOG SCHEMA 中指定的 Hive 架构相同。以下示例显示了如何使用这两个委托令牌。

$ vsql -U dbuser1

-- set delegation token for user and HiveServer2
=> ALTER SESSION SET
   HadoopImpersonationConfig='[
     {"nameservice":"hadoopNS","token":"JQAHcmVsZWFzZQdyZWxlYXNlAIoBYVJKrYSKAWF2VzGEjgmzj_IUCIrI9b8Dqu6awFTHk5nC-fHB8xsSV0VCSERGUyBkZWxlZ2F0aW9uETEwLjIwLjQyLjEwOTo4MDIw"},
     {"schema":"access","token":"UwAHcmVsZWFzZQdyZWxlYXNlL2hpdmUvZW5nLWc5LTEwMC52ZXJ0aWNhY29ycC5jb21AVkVSVElDQUNPUlAuQ09NigFhUkmyTooBYXZWNk4BjgETFKN2xPURn19Yq9tf-0nekoD51TZvFUhJVkVfREVMRUdBVElPTl9UT0tFThZoaXZlc2VydmVyMkNsaWVudFRva2Vu"}]';

-- uses HiveServer2 token to get metadata
=> CREATE HCATALOG SCHEMA access WITH hcatalog_schema 'access';

-- uses both tokens
=> SELECT * FROM access.t1;

--uses only HiveServer2 token
=> SELECT * FROM hcatalog_tables;

HiveServer2 不像 WebHDFS 那样为委派令牌提供 REST API。请参阅获取 HiveServer2 委托令牌了解一些提示。

测试配置

您可以使用 HADOOP_IMPERSONATION_CONFIG_CHECK 函数测试 HDFS 委托令牌,使用 HCATALOGCONNECTOR_CONFIG_CHECK 测试 HCatalog 连接器委托令牌。