跳至主要内容

安全访问 S3 数据

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

简介

在深入了解安全 S3 访问的设置之前,了解其工作原理非常重要。以下是 ClickHouse 服务如何通过假定客户 AWS 帐户中角色的身份来访问私有 S3 存储桶的概述。

secures3

这种方法允许客户在一个地方(假定角色的 IAM 策略)管理对 S3 存储桶的所有访问,而无需遍历所有存储桶策略来添加或删除访问权限。

设置

获取 ClickHouse 服务 IAM 角色 ARN

1 - 登录您的 ClickHouse 云帐户。

2 - 选择您要创建集成的 ClickHouse 服务。

3 - 选择“设置”选项卡。

4 - 向下滚动到页面底部的“关于此服务”部分。

5 - 复制服务所属的“IAM 角色”值,如下所示。

s3info

设置 IAM 假定角色

选项 1:使用 Cloudformation 堆栈部署

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

2 - 访问此 URL 以填充 Cloudformation 堆栈。

3 - 输入(或粘贴)ClickHouse 服务所属的“IAM 角色”。

4 - 配置 Cloudformation 堆栈。以下是有关这些参数的其他信息。

参数默认值描述
RoleNameClickHouseAccess-001ClickHouse Cloud 将用于访问您的 S3 存储桶的新角色的名称。
Role Session Name*Role Session Name 可用作共享密钥,以进一步保护您的存储桶。
ClickHouse 实例角色可以使用此安全 S3 集成的 ClickHouse 服务 IAM 角色的逗号分隔列表。
Bucket Access读取设置所提供存储桶的访问级别。
Bucket Names此角色将有权访问的存储桶名称的逗号分隔列表。

注意:不要输入完整的存储桶 ARN,而只需输入存储桶名称。

5 - 选择“我承认 AWS CloudFormation 可能会创建具有自定义名称的 IAM 资源。”复选框。

6 - 点击右下角的“创建堆栈”按钮。

7 - 确保 CloudFormation 堆栈完成且没有错误。

8 - 选择 Cloudformation 堆栈的“输出”。

9 - 复制此集成的“RoleArn”值。这是访问您的 S3 存储桶所需的。

s3info

选项 2:手动创建 IAM 角色。

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

2 - 浏览到 IAM 服务控制台。

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

信任策略(请将 {ClickHouse_IAM_ARN} 替换为您 ClickHouse 实例所属的 IAM 角色 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 角色 ARN”。这是访问您的 S3 存储桶所需的。

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

ClickHouse Cloud 具有一个新功能,允许您将 extra_credentials 指定为 S3 表函数的一部分。以下是如何使用上面新创建的角色运行查询的示例。

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 定价