You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置Thanos Sidecar向跨AWS账号S3写入遇权限拒绝问题咨询

跨AWS账号配置Thanos Sidecar写入S3存储桶的解决方案

可行性确认

完全可以实现跨AWS账号将Thanos Sidecar的监控数据写入目标账号的S3存储桶,核心是构建正确的跨账号IAM权限信任链,结合EKS的IRSA(IAM Roles for Service Accounts)实现Pod级别的权限控制。你遇到的Access-denied错误,90%以上是跨账号权限配置不完整导致的。

核心配置步骤

1. 目标账号(S3存储桶所在账号)配置桶策略

在目标账号的S3存储桶上添加桶策略,允许源EKS账号的IAM角色执行Thanos所需的S3操作。示例策略如下:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::[源EKS账号ID]:role/[源账号中给Thanos用的IAM角色名]"
      },
      "Action": [
        "s3:ListBucket",
        "s3:GetObject",
        "s3:PutObject",
        "s3:DeleteObject",
        "s3:GetObjectVersion",
        "s3:DeleteObjectVersion"
      ],
      "Resource": [
        "arn:aws:s3:::[目标存储桶名]",
        "arn:aws:s3:::[目标存储桶名]/*"
      ]
    }
  ]
}

2. 源账号(EKS所在账号)配置IAM角色与IRSA

(1)创建IAM角色,赋予S3访问权限

创建一个IAM角色,权限策略需要包含对目标S3桶的操作权限,示例策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetObject",
        "s3:PutObject",
        "s3:DeleteObject",
        "s3:GetObjectVersion",
        "s3:DeleteObjectVersion"
      ],
      "Resource": [
        "arn:aws:s3:::[目标存储桶名]",
        "arn:aws:s3:::[目标存储桶名]/*"
      ]
    }
  ]
}

(2)配置角色信任策略,允许EKS ServiceAccount Assume该角色

修改上述IAM角色的信任关系,允许源EKS集群中Thanos Sidecar对应的ServiceAccount来扮演这个角色:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::[源EKS账号ID]:oidc-provider/[EKS集群OIDC端点]"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "[EKS集群OIDC端点]:sub": "system:serviceaccount:[Prometheus所在命名空间]:[Thanos Sidecar对应的ServiceAccount名]"
        }
      }
    }
  ]
}

(3)绑定ServiceAccount与IAM角色

在EKS中,给Thanos Sidecar对应的ServiceAccount添加注解,关联上述IAM角色:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: thanos-sidecar
  namespace: monitoring
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::[源EKS账号ID]:role/[源账号中创建的IAM角色名]

3. 配置Prometheus Operator的Thanos Sidecar参数

通过Helm values.yaml配置Prometheus Operator,指定Thanos Sidecar的S3存储配置,指向目标账号的存储桶:

prometheus:
  thanosSidecar:
    enabled: true
    config:
      storage:
        type: S3
        config:
          bucket: "[目标存储桶名]"
          endpoint: "s3.[目标存储桶区域].amazonaws.com"
          region: "[目标存储桶区域]"
          # 无需配置access_key和secret_key,IRSA会自动获取权限

常见排错要点

  • 检查账号ID、角色ARN、存储桶名是否完全匹配,拼写错误是常见原因
  • 验证源账号IAM角色的信任策略是否正确关联了EKS的OIDC提供商和对应的ServiceAccount
  • 确认目标S3桶策略中的Principal是否为源账号的IAM角色ARN,而非用户ARN
  • 使用aws sts assume-role在本地模拟源角色访问目标桶,验证权限是否正常
  • 查看Thanos Sidecar的Pod日志,确认错误细节(比如是列表桶权限不足还是写入权限不足)

内容的提问来源于stack exchange,提问作者Amit Raj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 02:06:34