云上数据安全新范式: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

相关推荐
就叫飞六吧1 小时前
Redis 安装为 Windows 服务开机后台自启
数据库·windows·redis
憧憬成为原神糕手1 小时前
MySql事务(AICD)和其并发场景
数据库·mysql
无限进步_1 小时前
C++初始化列表详解:语法、规则与最佳实践
java·开发语言·数据库·c++·git·github·visual studio
无限进步_1 小时前
C++运算符重载完全指南:从基础到实战应用
开发语言·数据库·c++·windows·git·github·visual studio
正在走向自律1 小时前
电科金仓 KEMCC-V003R002C001B0001 在CentOS7系统环境内测体验:安装部署与功能实操全记录
数据库·国产数据库·电科金仓·kemcc新版本·kemcc
一 乐1 小时前
数码商城系统|电子|基于SprinBoot+vue的数码商城系统(源码+数据库+文档)
java·前端·javascript·数据库·vue.js·springboot
曹牧2 小时前
Oracle:Replace
数据库·oracle
ZeroNews内网穿透2 小时前
公网访问本地搭建开源在线流程图工具Draw.io
服务器·数据库·网络协议·安全·http·流程图·draw.io
m0_488777652 小时前
MySQL数据库管理
数据库·mysql·数据库管理