安全地访问 S3 数据
本文演示了 ClickHouse Cloud 客户如何利用基于角色的访问权限,通过 Amazon Simple Storage Service (S3) 进行身份验证,并安全地访问他们的数据。
简介
在深入了解安全 S3 访问的设置之前,重要的是要理解其工作原理。以下概述了 ClickHouse 服务如何通过代入客户 AWS 账户中的角色来访问私有 S3 存储桶。
这种方法允许客户在一个地方(代入角色的 IAM 策略)管理对其 S3 存储桶的所有访问权限,而无需遍历所有存储桶策略来添加或删除访问权限。
设置
获取 ClickHouse 服务 IAM 角色 Arn
1 - 登录您的 ClickHouse Cloud 账户。
2 - 选择您要创建集成的 ClickHouse 服务
3 - 选择 “设置” 选项卡
4 - 滚动到页面底部的 “关于此服务” 部分
5 - 复制属于该服务的 “IAM 角色” 值,如下所示。
设置 IAM 代入角色
选项 1:使用 CloudFormation 堆栈部署
1 - 使用有权创建和管理 IAM 角色的 IAM 用户登录到 Web 浏览器中的 AWS 账户。
2 - 访问 此 URL 以填充 CloudFormation 堆栈。
3 - 输入(或粘贴)属于 ClickHouse 服务的 IAM 角色
4 - 配置 CloudFormation 堆栈。以下是关于这些参数的更多信息。
参数 | 默认值 | 描述 |
---|---|---|
角色名称 | ClickHouseAccess-001 | ClickHouse Cloud 将用于访问您的 S3 存储桶的新角色的名称 |
角色会话名称 | * | 角色会话名称可以用作共享密钥,以进一步保护您的存储桶。 |
ClickHouse 实例角色 | 可以使用此安全 S3 集成的 ClickHouse 服务 IAM 角色的逗号分隔列表。 | |
存储桶访问权限 | 读取 | 设置所提供存储桶的访问级别。 |
存储桶名称 | 此角色将有权访问的存储桶名称的逗号分隔列表。 |
注意:不要放置完整的存储桶 Arn,而只需放置存储桶名称即可。
5 - 选中 “我确认 AWS CloudFormation 可能会创建具有自定义名称的 IAM 资源。” 复选框
6 - 单击右下角的 “创建堆栈” 按钮
7 - 确保 CloudFormation 堆栈完成且没有错误。
8 - 选择 CloudFormation 堆栈的 “输出”
9 - 复制此集成的 “RoleArn” 值。这是访问您的 S3 存储桶所需的凭证。
选项 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 定价