创建阿里云存储连接

本步骤的目标是:允许 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 对象挂在对象存储的路径。

联系我们
预约咨询
微信咨询
电话咨询