创建STORAGE CONNECTION
Storage Connection 主要用于存储第三方存储服务的身份认证信息,使 Lakehouse 能够安全地访问和管理这些存储服务中的数据。
- 目前支持对象存储、Kafka、HDFS。其中对象存储包括腾讯云COS、阿里云OSS和AWS S3。
- 目前不支持跨云厂商创建。比如您的 Lakehouse 实例运行在阿里云上,无法访问腾讯云的 COS 数据。
创建阿里云存储连接
本步骤的目标是:允许 Lakehouse 实例通过 VOLUME 对象,处理阿里云对象存储 OSS中的数据。为了完成这个目标,可以通过阿里云提供的两种身份认证方式:访问密钥 和 角色授权。
基于AK密钥方式:
仅需提供带有访问 OSS 权限的账号的 AccessKey ID 和 AccessKey Secret 信息,利用这些信息创建 存储连接(Storage Connection) 对象,示例如下:
基于角色授权方式(RoleARN)
需要创建一个角色和权限策略:权限策略代表OSS 服务的访问策略,将这个策略授权给创建的角色。
以下主要讲述 角色授权方式(RoleARN) 的具体操作步骤:
- 阿里云侧操作:在阿里云 RAM 控制台中创建权限策略 (CzUdfOssAccess ):注意:需要用户具有RAM权限
- 访问阿里云访问控制(RAM)产品控制台
- 左侧导航栏 权限管理 -> 权限策略,在权限控制界面选择 创建权限策略
- 在创建权限策略页面选择 脚本编辑 的页签,将下面
[bucket_name_1|2|3]
替换为实际的 OSS bucket 名称。注意:按照阿里云OSS 的约定,相同的bucket 需要有两条Resource条目:"acs:oss:*:*:bucket_name_1"
与"acs:oss:*:*:bucket_name_1/*"
同时存在才能达到授权效果:
- 阿里云侧:在阿里云 RAM 中创建角色CzUDFRole:
-
在阿里云访问控制(RAM)控制台左侧导航栏 身份管理 -> 角色,创建角色
-
在 创建角色 页面中,选择类型为 阿里云账号, 配置角色中填写自定义角色名称(如 CzUDFRole ),在选择信任的云账号 中选择 其他云账号,并写入:1384322691904283,点击完成
-
创建完成之后,点击为角色授权: 在自定义策略中,将刚创建的策略(CzUdfOssAccess)授权给该角色。在角色 CzUDFRole 详情页中,获取该角色的 RoleARN 信息:
'acs:ram::1222808864xxxxxxx:role/czudfrole'
- Lakehouse 侧:创建 Connection
- 在 Studio 或者 Lakehouse JDBC 客户中执行以下命令:
- 执行
desc connection
获取external ID
信息:本实例中,external ID 为:O0lQUogDJajHqnAQ
- 客户侧:在阿里云 RAM -> 角色-> 信任策略中,修改 CzUDFRole 的信任策略:
"sts:ExternalId"
部分
创建腾讯云存储连接
本步骤的目标是:允许 Lakehouse 集群访问腾讯上的对象存储 COS。为了完成这个目标,可以通过腾讯云访问管理提供的两种身份认证方式:访问密钥 和 角色授权。
基于AK密钥方式
参数:
-
TYPE:为对象存储类型,腾讯云应填写
COS
(大小写不限) -
ACCESS_KEY / SECRET_KEY:为腾讯云的访问密钥,获取方式参考:访问密钥
-
REGION:指腾讯云对象存储 COS 的数据中心所在的地域。相同地域内云器Lakehouse访问腾讯云COS时,COS服务将自动路由至内网访问。具体取值请参考腾讯云文档:地域和访问域名。
-
APP_ID:腾讯云存储桶的命名由存储桶名称(BucketName)和 APPID 两部分组成,两者以中划线“-”相连。例如
examplebucket-1310000503
,其中examplebucket
为用户自定义,1310000503
为系统生成数字串(APPID)。
基于角色授权
STEP1: 数据创建权限策略 (LakehouseAccess ):
- 登录腾讯云,进入访问管理产品控制台
- 在访问管理页面左侧导航栏进入策略,在权限控制界面选择 新建自定义策略 -> 按策略生成器创建 -> 可视化策略生成器。
- 在可视化策略生成器页签中:服务(Service): 选择 对象存储(cos);操作(Action):选择全部操作(可根据实际需要的操作,做更细粒度的选择);资源(Resource):根据需要选择全部资源或者特定资源。本示例中选择特定资源,为上海区的
cz-volume-sh-1311343935
- 点击下一步,填写策略名称为 LakehouseAccess 和描述后,点击完成
STEP2:客户侧创建角色(LakehouseRole)
- 进入腾讯云访问管理产品控制台
- 在访问管理页面左侧导航栏进入角色 -> 新建角色 -> 腾讯云账户, 选择其他主账号,在 账号ID 中输入
100029595716
(云器的腾讯云主账号),其它选项保持默认,点击下一步 - 在配置角色策略配置中,将刚才新建的 LakehouseAccess 自定义策略授权给当前角色。点击下一步,在角色命名中填写
LakehouseRole
完成创建。 - 创建成功后,在角色列表中,进入角色
LakehouseRole
的详情页,获取该角色的 RoleARN 信息:qcs::cam::uin/1000*******:roleName/LakehouseRole
STEP3:Lakehouse 侧创建 Connection
- 在 Studio 或者 Lakehouse JDBC 客户端中执行以下命令:
- 注意:为了防止 ROLE_ARN 被第三方获取进行未授权的数据访问,可以使用
EXTENRAL ID
作为一种额外的验证层,确保只有当请求中包含了预设的EXTERNAL ID
时,这一访问才会被允许。这意味着即使第三方知道了其他一些访问信息(如角色ARN),没有正确的EXTERNAL ID
也无法访问资源。 - 在创建存储连接的过程中,Lakehouse 会生成此EXTERNAL ID,可以将此EXTERNAL ID 配置到 COS 账号的角色校验中实现访问控制:
- 客户侧:进入腾讯云访问管理控制台中,角色 -> LakehouseRole -> 角色载体-> 管理载体,选择 添加账户 -> 选择当前主账号,并填写主账号ID:
100029595716
(云器的腾讯云主账号),并勾选开启校验,输入刚才 DESC 结果中的 EXTERNAL_ID,点击 确定-> 更新
创建亚马逊云存储连接
本步骤的目标是:允许 Lakehouse 集群访问亚马逊云(AWS)的对象存储 S3。为了完成这个目标,可以通过AWS 的身份与访问管理(IAM) 产品提供的两种身份认证方式:访问密钥 和 角色授权。
基于访问密钥
参数:
- TYPE:为对象存储类型,AWS 应填写 S3(大小写不限)
- ACCESS_KEY / SECRET_KEY:为AWS 的访问密钥,获取方式参考:访问密钥
- ENDPOINT: S3 的服务地址,AWS 中国区分为北京区和宁夏区,北京区的S3 的服务地址为
s3.cn-north-1.amazonaws.com.cn
, 宁夏区s3.cn-northwest-1.amazonaws.com.cn
,可参考:中国区终端节点 分别找到北京区域和宁夏区域的终端节点 -> Amazon S3 对应的终端节点 - REGION:AWS 中国区分为北京区和宁夏区,区域值为:北京区
cn-north-1
, 宁夏区cn-northwest-1
,可参考:中国区终端节点
基于角色授权
需要在目标云对象存储 S3 所属的账号,在 IAM 中创建一个权限策略和角色:权限策略代表访问AWS S3 数据的规则,将这个策略授权给创建的角色。云器 Lakehouse 通过扮演这个角色来实现与 S3 中数据的读写操作。
STEP1: AWS侧创建权限策略 (LakehouseAccess ):
- 登录AWS 云平台,进入身份与访问管理(IAM) 产品控制台
- 在 IAM 页面左侧导航栏进入 账户设置,在 Security Token Service (STS) 中的 终端节点 列表中,找到当前实例对应云器Lakehouse 的区域,如果 STS 状态 的状态为未开启请开启。
- 在 IAM 页面左侧导航栏进入 策略,在 策略 界面选择 创建策略,在策略编辑器中选择 JSON 方式
- 将要添加允许云器Lakehouse 访问 S3 bucket 和目录的策略。下面是策略的样例,请用实际的bucket 和路径前缀名称替换
<bucket>
和<perfix>
名称 - 注意:请将
"s3:prefix"
项中填写:["*"]
or["<path>/*"]
分别代表授予对指定 bucket 或 bucket 中路径中的所有前缀的访问权限。
- 选择 下一步,输入策略名称如,(LakehouseAccess)和描述(选填)
- 点击创建策略完成策略创建
STEP2: AWS侧创建角色 (LakehouseVolumeRole):
- 登录AWS 云平台,进入身份与访问管理(IAM) 产品控制台
- 在 IAM 页面左侧导航栏进入角色 -> 创建角色 -> AWS账户,选择 另一个AWS账户,在 Account ID 输入
028022243208
- 选择下一步,在添加权限(Add permissions)页面,选择STEP1 中创建的策略
LakehouseAccess
后,选择下一步 - 填写 Role name (例:
LakehouseVolumeRole
) 和描述,点击 创建角色 完成角色创建 - 在角色详情页中,获取 Role ARN 的值,用来创建 STORAGE CONNECTION
STEP3: 云器 Lakehouse 侧创建 STORAGE CONNECTION :
- 在 Studio 或者 Lakehouse JDBC 客户端中执行以下命令:
- 在创建存储连接的过程中,Lakehouse 会生成此EXTERNAL ID,可以将此EXTERNAL ID 配置到 STEP2创建的 AWS IAM 角色(
LakehouseVolumeRole
)的 Trust Policy 中,实现附加的访问控制:
- 在AWS IAM 的控制台,左侧导航栏中进入角色 Roles,找到 STEP2 中创建的角色并进入角色详情页面,在 Trust relationships 中将
sts:ExternalId
的值000000
替换为 DESC 结果中的EXTERNAL_ID
。点击更新 完成角色策略更新。
创建Kafka存储连接
Kafka连接主要是用于Kafka外部表,可以方便地从 Kafka 中读取数据流,并将这些数据流作为表进行查询和分析。
语法
参数说明
- connection_name: 连接的名称,用于后续引用。
- TYPE: 连接类型,此处为
kafka
。 - BOOTSTRAP_SERVERS: Kafka 集群的地址列表,格式为
['host1:port1', 'host2:port2', ...]
。 - SECURITY_PROTOCOL: 安全协议,可以是
PLAINTEXT
等。
示例
创建 HDFS 连接
Hdfs连接主要是用于Lakehuse联邦查询,可以方便读取Hdfs中的数据
语法
参数说明
<connection_name>
:自定义的连接名称,用于标识该 HDFS 连接,例如hdfs_conn
。TYPE HDFS
:指定连接类型为 HDFS。NAME_NODE
:对应 HDFS 配置中的dfs.nameservices
,是 HDFS 集群的逻辑名称,例如zetta-cluster
。NAME_NODE_RPC_ADDRESSES
:对应 HDFS 配置中的dfs.namenode.rpc-address
,是 NameNode 的 RPC 地址,格式为[<host>:<port>]
,例如['11.110.239.148:8020']
。