云上数据安全新范式:Apache Doris IAM Assume Role 解锁无密钥访问 AWS S3 数据

一、传统 AK/SK 方式访问 AWS 资源存在的问题

密钥管理困境:

■ **长期暴露风险:**静态 AK/SK 需硬编码于配置文件中,一旦因代码泄露、误提交或恶意窃取导致密钥扩散,攻击者可永久获得等同于密钥所有者的完整权限,引发持续性的数据泄露、资源篡改及资金损失风险;

■ **审计盲区:**多用户 / 多服务共享同一组密钥时,云操作日志仅记录密钥身份而无法关联具体使用者,无法追溯真实责任人或业务模块;

■ **运维成本高:**密钥轮换灾难,需手动轮换业务模块密钥,容易出错触发服务中断;

■ **权限管理失控:**账户管理不清晰,授权无法满足服务 / 实例级的最小权限管控需求。

二、AWS IAM Assume Role 机制介绍

AWS Assume Role 是一种安全身份切换机制,允许一个可信实体(如 IAM 用户、EC2 实例或外部账号)通过 STS(安全令牌服务)临时获取目标角色的权限。其运作流程如下:

使用 AWS IAM Assume Role 方式访问的优点:

■ 动态令牌机制(15 分钟~12 小时有效期)替代永久密钥

■ 通过 External ID 实现跨账号安全隔离,并且可通过 AWS 后台服务进行审计

■ 基于角色的最小权限原则(Principle of Least Privilege)

AWS IAM Assume Role 访问 S3 Bucket 的鉴权过程:

阶段 1:源用户身份验证

1、权限策略检查

■ 源用户发起 AssumeRole 请求时,源账户的 IAM 策略引擎首先验证:该用户是否被授权调用 sts:AssumeRole 操作?

■ 检查依据:附着在源用户身份上的 IAM Permissions Policies

2、信任关系校验

■ 通过 STS 服务向目标账户发起请求:源用户是否在目标角色的信任策略白名单中?

■ 检查依据:目标角色绑定的 IAM Trust Relationships Policies(明确允许哪些账号 / 用户担任该角色)

阶段 2:目标角色权限激活

3、临时凭证生成

■ 若信任关系验证通过,STS 生成三要素临时凭证

复制代码
{  "AccessKeyId": "ASIA***",   "SecretAccessKey": "***",   "SessionToken": "***" // 有效期 15min-12h }

4、目标角色权限验证

■ 目标角色使用临时凭证访问 AWS S3 前,目标账户的 IAM 策略引擎校验:该角色是否被授权执行请求的 S3 操作? (如 s3:GetObject、s3:PutObject 等)

■ 检查依据:附着在目标角色上的 IAM Permissions Policies(定义角色能做什么)

阶段 3:资源操作执行

5、访问存储桶

■ 全部验证通过后,目标角色才可执行 S3 API 操作。

三、Apache Doris 如何应用 AWS IAM Assume Role 鉴权机制

1、Doris 通过将 FE、BE 进程所部署的 AWS EC2 Instances 绑定到 Source Account ,利用 AWS IAM 的 Assume Role 功能获取跨账户访问权限,从而安全地访问目标账户中的 AWS 资源。具体配置可参考文末的官网文档,主要流程如下图所示:

2、完成配置后 Doris FE/BE 进程会自动获 EC2 Instance 的 Profile 进行执行 Assume Role 操作和访问 Bucket 操作,扩容时 BE 节点会自动检测新的 EC2 Instance 是否成功绑定 IAM Role,防止出现漏配的情况;

3、Doris 的 S3 Load、TVF、Export、Resource、Repository、Storage Vault 等功能在 3.0.6 版本之后均支持了 AWS Assume Role 的方式使用,并且在创建时会进行连通性检测,S3 Load SQL 举例如下:

复制代码
 LOAD LABEL s3_load_demo_202508  (  DATA INFILE("s3://your_bucket_name/s3load_example.csv")  INTO TABLE test_s3load  COLUMNS TERMINATED BY ","  FORMAT AS "CSV"  (user_id, name, age)  )  WITH S3  (  "provider" = "S3",  "s3.endpoint" = "s3.us-east-1.amazonaws.com",  "s3.region" = "us-east-1",  "s3.role_arn" = "arn:aws:iam::543815668950:role/test-role1",  "s3.external_id" = "1001" -- 可选参数  )  PROPERTIES  (  "timeout" = "3600"  ); 

其中 "s3.role_arn" 对应填入 AWS IAM Account2 下的 Iam role2 的 arn 值,"s3.external_id" 对应填入 Trust Relationships Policies 中配置的 externalId 的值(可选配置)。

4、Doris 当前仅支持了 AWS IAM Assume Role 的机制,未来会逐步实现其他云厂商的类似鉴权机制。

# 参考资料

■ 官网文档:++https://doris.apache.org/zh-CN/docs/3.0/admin-manual/auth/integrations/aws-authentication-and-authorization++

■ 演示视频:++https://www.bilibili.com/video/BV1U3uezjEPW/++

相关推荐
_lst_39 分钟前
linux进程控制
linux·运维·服务器
BD_Marathon39 分钟前
【JavaWeb】HTML_常见标签_布局相关标签
前端·html
小时候没少挨打39 分钟前
从0到1安装NVIDIA驱动(NVSwitch+Driver+IB网络驱动)
运维·服务器·数据库
m0_7400437341 分钟前
Vue 组件中获取 Vuex state 数据的三种核心方式
前端·javascript·vue.js
Hashan42 分钟前
基于Vue3完成动态组件库建设
前端
爱吃香菜i44 分钟前
基于Vant的移动端公共选人/选部门组件设计文档
前端
Jingyou1 小时前
JavaScript 封装无感 token 刷新
前端·javascript
quan26311 小时前
20251204,vue列表实现自定义筛选和列
前端·vue.js·elementui
蜗牛攻城狮1 小时前
JavaScript `Array.prototype.reduce()` 的妙用:不只是求和!
前端·javascript·数组