博客 / 詳情

返回

雲上數據安全新範式: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 機制介紹.PNG

使用 AWS IAM Assume Role 方式訪問的優點:

  • 動態令牌機制(15 分鐘~12 小時有效期)替代永久密鑰
  • 通過External ID實現跨賬號安全隔離,並且可通過 AWS 後台服務進行審計
  • 基於角色的最小權限原則(Principle of Least Privilege)

AWS IAM Assume Role 訪問 S3 Bucket 的鑑權過程:

二、AWS IAM Assume Role 機制介紹-1.PNG

階段 1:源用户身份驗證

  1. 權限策略檢查

    1. 源用户發起 AssumeRole 請求時,源賬户的 IAM 策略引擎首先驗證: 該用户是否被授權調用 sts:AssumeRole 操作?
    2. 檢查依據:附着在源用户身份上的 IAM Permissions Policies
  2. 信任關係校驗

    1. 通過 STS 服務向目標賬户發起請求: 源用户是否在目標角色的信任策略白名單中?
    2. 檢查依據:目標角色綁定的 IAM Trust Relationships Policies(明確允許哪些賬號/用户擔任該角色)

階段 2:目標角色權限激活

  1. 臨時憑證生成

    1. 若信任關係驗證通過,STS 生成三要素臨時憑證
    2. {
        "AccessKeyId": "ASIA***",  
        "SecretAccessKey": "***",  
        "SessionToken": "***" // 有效期 15min-12h
  2. 目標角色權限驗證

    1. 目標角色使用臨時憑證訪問 AWS S3 前,目標賬户的 IAM 策略引擎校驗: 該角色是否被授權執行請求的S3操作? (如s3:GetObject、s3:PutObject等)
    2. 檢查依據:附着在目標角色上的 IAM Permissions Policies(定義角色能做什麼)

    階段 3:資源操作執行

  3. 訪問存儲桶

    1. 全部驗證通過後,目標角色才可執行 S3 API 操作。

    三、Apache Doris 如何應用 AWS IAM Assume Role 鑑權機制

  4. Doris 通過將 FE、BE 進程所部署的 AWS EC2 Instances 綁定到 Source Account 來使用 AWS IAM Assume Role 的功能,主要的流程如下圖所示,具體的配置可參照官網文檔和視頻 :

    三、Apache Doris 如何應用 AWS IAM Assume Role ​鑑權機制.PNG

  5. 完成配置後 Doris FE/BE 進程會自動獲 EC2 Instance 的 Profile 進行執行 Assume Role 操作訪問 Bucket 操作,擴容時 BE 節點會自動檢測新的 EC2 Instance 是否成功綁定 IAM Role,防止出現漏配的情況;
  6. 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 的值(可選配置)。

更多功能 SQL 語句詳細參考: [Doris 官網文檔](https://doris.apache.org/zh-CN/docs/3.0/admin-manual/auth/integrations/aws-authentication-and-authorization);

1. Doris 當前僅支持了 AWS IAM Assume Role 的機制,未來會逐步實現其他雲廠商的類似鑑權機制。

## Reference

- 官網文檔 https://doris.apache.org/zh-CN/docs/3.0/admin-manual/auth/integrations/aws-authentication-and-authorization
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.