云上数据安全新范式: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. 权限策略检查
    1. 源用户发起 AssumeRole 请求时,源账户的 IAM 策略引擎首先验证: 该用户是否被授权调用 sts:AssumeRole 操作?
    2. 检查依据:附着在源用户身份上的 IAM Permissions Policies
  2. 信任关系校验
    1. 通过 STS 服务向目标账户发起请求: 源用户是否在目标角色的信任策略白名单中?
    2. 检查依据:目标角色绑定的 IAM Trust Relationships Policies(明确允许哪些账号/用户担任该角色)

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

  1. 临时凭证生成

    1. 若信任关系验证通过,STS 生成三要素临时凭证
    JSON 复制代码
    {
      "AccessKeyId": "ASIA***",  
      "SecretAccessKey": "***",  
      "SessionToken": "***" // 有效期 15min-12h
    }
  2. 目标角色权限验证

    1. 目标角色使用临时凭证访问 AWS S3 前,目标账户的 IAM 策略引擎校验: 该角色是否被授权执行请求的S3操作? (如s3:GetObject、s3:PutObject等)
    2. 检查依据:附着在目标角色上的 IAM Permissions Policies(定义角色能做什么)

阶段 3:资源操作执行

  1. 访问存储桶
    1. 全部验证通过后,目标角色才可执行 S3 API 操作。

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

  1. Doris 通过将 FE、BE 进程所部署的 AWS EC2 Instances 绑定到 Source Account 来使用 AWS IAM Assume Role 的功能,主要的流程如下图所示,具体的配置可参照官网文档和视频
  1. 完成配置后 Doris FE/BE 进程会自动获 EC2 Instance 的 Profile 进行执行 Assume Role 操作访问 Bucket 操作,扩容时 BE 节点会自动检测新的 EC2 Instance 是否成功绑定 IAM Role,防止出现漏配的情况;

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

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 的值(可选配置)。

更多功能 SQL 语句详细参考: Doris 官网文档

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

Reference

相关推荐
银发控、4 小时前
MySQL联合索引
数据库·mysql
予枫的编程笔记4 小时前
【MySQL修炼篇】从踩坑到精通:事务隔离级别的3大异常(脏读/幻读/不可重复读)解决方案
数据库·mysql·后端开发·数据库事务·事务隔离级别·rr级别·脏读幻读不可重复读
一起养小猫5 小时前
Flutter for OpenHarmony 实战:记账应用数据统计与可视化
开发语言·jvm·数据库·flutter·信息可视化·harmonyos
世界尽头与你5 小时前
(修复方案)CVE-2023-22047: Oracle PeopleSoft Enterprise PeopleTools 未授权访问漏洞
数据库·安全·oracle·渗透测试
韩立学长5 小时前
【开题答辩实录分享】以《智能大学宿舍管理系统的设计与实现》为例进行选题答辩实录分享
数据库·spring boot·后端
Henry Zhu1235 小时前
数据库(五):反规范化
数据库
Mr_Xuhhh6 小时前
MySQL函数详解:日期、字符串、数学及其他常用函数
java·数据库·sql
he___H7 小时前
Redis高级数据类型
数据库·redis·缓存
霖霖总总7 小时前
[小技巧60]深入解析 MySQL Online DDL:MySQL Online DDL、pt-osc 与 gh-ost 机制与最佳实践
数据库·mysql
爱学习的阿磊7 小时前
使用PyTorch构建你的第一个神经网络
jvm·数据库·python