跳到主要内容
跳到主要内容

安全访问 S3 数据

本文演示 ClickHouse Cloud 客户如何利用基于角色的访问控制与 Amazon Simple Storage Service (S3) 进行身份验证,并安全地访问其数据。

介绍

在开始配置安全的 S3 访问之前,先了解其工作原理非常重要。下面概述了 ClickHouse 服务如何通过在客户的 AWS 账户中承担一个角色来访问私有 S3 存储桶。

ClickHouse 安全访问 S3 的总体概览

这种方式使客户可以在一个集中位置(被承担角色的 IAM 策略)统一管理对其 S3 存储桶的所有访问权限,而无需逐一修改所有存储桶策略来添加或移除访问权限。

设置

获取 ClickHouse 服务 IAM 角色 ARN

1 - 登录到你的 ClickHouse Cloud 账户。

2 - 选择你要为其创建集成的 ClickHouse 服务。

3 - 选择 Settings 选项卡。

4 - 向下滚动到页面底部的 Network security information 部分。

5 - 复制该服务对应的 Service role ID (IAM) 值,如下所示。

获取 ClickHouse 服务 IAM 角色 ARN

配置 IAM Assume Role

选项 1:使用 CloudFormation 堆栈部署

1 - 在浏览器中使用具有创建和管理 IAM 角色权限的 IAM 用户登录到你的 AWS 账户。

2 - 访问 此 URL 来创建 CloudFormation 堆栈。

3 - 输入(或粘贴)属于 ClickHouse 服务的 IAM Role

4 - 配置 CloudFormation 堆栈。以下是这些参数的补充说明。

ParameterDefault ValueDescription
RoleNameClickHouseAccess-001ClickHouse Cloud 将使用的新角色名称,用于访问你的 S3 bucket
Role Session Name*Role Session Name 可用作共享密钥,以进一步保护你的 bucket。
ClickHouse Instance Roles允许使用此 Secure S3 集成的 ClickHouse 服务 IAM 角色列表,使用逗号分隔。
Bucket AccessRead为提供的 buckets 设置访问级别。
Bucket Names此角色可访问的 bucket 名称 列表,使用逗号分隔。

注意:不要填写完整的 bucket ARN,只需填写 bucket 名称本身。

5 - 勾选 I acknowledge that AWS CloudFormation might create IAM resources with custom names. 复选框。

6 - 点击右下角的 Create stack 按钮。

7 - 确认 CloudFormation 堆栈已成功完成且没有错误。

8 - 选择 CloudFormation 堆栈的 Outputs

9 - 复制此集成的 RoleArn 值。该值用于访问你的 S3 bucket。

CloudFormation 堆栈输出中显示 IAM Role ARN

选项 2:手动创建 IAM 角色

1 - 在浏览器中使用具有创建和管理 IAM 角色权限的 IAM 用户登录到你的 AWS 账户。

2 - 进入 IAM 服务控制台。

3 - 使用以下 IAM 策略和 Trust policy 创建一个新的 IAM 角色。

Trust policy(请将 {ClickHouse_IAM_ARN} 替换为你的 ClickHouse 实例对应的 IAM Role ARN):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "{ClickHouse_IAM_ARN}"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

IAM 策略(请将 {BUCKET_NAME} 替换为您的存储桶名称):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::{BUCKET_NAME}"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Resource": [
                "arn:aws:s3:::{BUCKET_NAME}/*"
            ],
            "Effect": "Allow"
        }
    ]
}

4 - 创建完成后,复制新的 IAM Role Arn。它将用于访问你的 S3 bucket。

使用 ClickHouseAccess 角色访问你的 S3 存储桶

ClickHouse Cloud 提供了一项新功能,允许你在使用 S3 表函数时指定 extra_credentials。下面是一个示例,展示如何使用上文创建并复制的角色来运行查询。

DESCRIBE TABLE s3('https://s3.amazonaws.com/BUCKETNAME/BUCKETOBJECT.csv','CSVWithNames',extra_credentials(role_arn = 'arn:aws:iam::111111111111:role/ClickHouseAccessRole-001'))

下面是一个示例查询,它使用 role_session_name 作为共享密钥来查询存储桶中的数据。如果 role_session_name 不正确,此操作将会失败。

DESCRIBE TABLE s3('https://s3.amazonaws.com/BUCKETNAME/BUCKETOBJECT.csv','CSVWithNames',extra_credentials(role_arn = 'arn:aws:iam::111111111111:role/ClickHouseAccessRole-001', role_session_name = 'secret-role-name'))
注意

我们建议将源 S3 存储桶部署在与 ClickHouse Cloud 服务相同的区域,以降低数据传输成本。有关更多信息,请参阅 S3 定价