创建阿里云存储连接
本步骤的目标是:允许 Lakehouse 集群访问阿里云上的对象存储 OSS。为了完成这个目标,可以通过阿里云提供的两种身份认证方式:访问密钥 和 角色授权。
方式1:访问密钥(AK信息):
仅需提供带有访问 OSS 权限的账号的 AccessKey ID 和 AccessKey Secret 信息,利用这些信息创建 存储连接(Storage Connection) 对象,示例如下:
CREATE STORAGE CONNECTION IF NOT EXISTS hz_conn_ak
TYPE oss
ENDPOINT = 'oss-cn-hangzhou.aliyuncs.com'
ACCESS_ID = 'LTAI5tMmbq1Ty1xxxxxxxxx'
ACCESS_KEY = '0d7Ap1VBuFTzNg7gxxxxxxxxxxxx'
COMMENTS = 'OSS public endpoint';
方式2:角色授权(RoleARN):
需要创建一个角色和权限策略:权限策略代表OSS 服务的访问策略,将这个策略授权给创建的角色。
以下主要讲述 角色授权方式(RoleARN) 的具体操作步骤:
1. 阿里云侧操作:在阿里云 RAM 控制台中创建权限策略 (CzUdfOssAccess ):
- 访问阿里云访问控制(RAM)产品控制台
- 左侧导航栏 权限管理 -> 权限策略,在权限控制界面选择 创建权限策略
- 在创建权限策略页面选择 脚本编辑 的页签,将下面
[bucket_name_1|2|3]
替换为实际的 OSS bucket 名称。注意:按照阿里云OSS 的约定,相同的bucket 需要有两条Resource条目:"acs:oss:*:*:bucket_name_1"
与 "acs:oss:*:*:bucket_name_1/*"
同时存在才能达到授权效果:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"oss:GetObject",
"oss:ListObjects",
"oss:PutObject",
"oss:DeleteObject"
],
"Resource": [
"acs:oss:*:*:bucket_name_1",
"acs:oss:*:*:bucket_name_1/*",
"acs:oss:*:*:bucket_name_2",
"acs:oss:*:*:bucket_name_2/*",
"acs:oss:*:*:bucket_name_3",
"acs:oss:*:*:bucket_name_3/*"
]
}
]
}

2. 阿里云侧:在阿里云 RAM 中创建角色CzUDFRole:
- 在阿里云访问控制(RAM)控制台左侧导航栏 身份管理 -> 角色,创建角色
- 在 创建角色 页面中,选择类型为 阿里云账号, 配置角色中填写自定义角色名称(如 CzUDFRole ),在选择信任的云账号 中选择 其他云账号,并写入:1384322691904283,点击完成
{
"Version": "1",
"Statement": [
{
"Action": "fc:*",
"Resource": "*",
"Effect": "Allow"
},
{
"Action": "ram:PassRole",
"Resource": "*",
"Effect": "Allow",
"Condition": {
"StringEquals": {
"acs:Service": "fc.aliyuncs.com"
}
}
}
]
}
- 创建完成之后,点击为角色授权: 在自定义策略中,将刚创建的策略(CzUdfOssAccess)授权给该角色。在角色 CzUDFRole 详情页中,获取该角色的 RoleARN 信息:
'acs:ram::1222808864xxxxxxx:role/czudfrole'

3. Lakehouse 侧:创建 Connection
- 在 Studio 或者 Lakehouse JDBC 客户中执行以下命令:
CREATE STORAGE CONNECTION hz_oss_conn_rolearn
TYPE oss
REGION = 'cn-hangzhou'
ROLE_ARN = 'acs:ram::1222808864467016:role/czudfrole'
ENDPOINT = 'oss-cn-hangzhou-internal.aliyuncs.com';
- 执行 desc connection 获取 external ID 信息:本实例中,external ID 为:
O0lQUogDJajHqnAQ

4. 客户侧:在阿里云 RAM -> 角色-> 信任策略中,修改 CzUDFRole 的信任策略:
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "O0lQUogDJajHqnAQ"
}
},
"Effect": "Allow",
"Principal": {
"RAM": [
"acs:ram::1384322691904283:root"
]
}
}
],
"Version": "1"
}
创建完成后,可以在常见外部 volume 的语句中,使用该 storage connection 对象挂在对象存储的路径。