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

在AWS EKS中通过Strimzi KafkaConnect访问S3 Bucket遇403权限错误

问题场景

在AWS EKS环境中通过Strimzi KafkaConnect访问S3 Bucket时,触发以下错误:

Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID:

已关联Strimzi服务账号,但访问S3时请求似乎使用的是节点级服务角色而非指定的IAM角色,需排查问题原因。


已配置的IAM策略

{
    "Statement": [
        {
            "Action": [
                "s3:PutObject",
                "s3:ListBucket",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::MY-Bucket/*",
                "arn:aws:s3:::MY-Bucket"
            ]
        }
    ],
    "Version": "2012-10-17"
}

IAM角色信任关系

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<my-aws-account>:root"
            },
            "Action": "sts:AssumeRole",
            "Condition": {}
        },
        {
            "Effect": "Allow",
            "Principal": {
                "Federated": "arn:aws:iam::<my-aws-account>:oidc-provider/oidc.eks.us-west-2.amazonaws.com/id/<ID>"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
                "StringEquals": {
                    "oidc.eks.us-west-2.amazonaws.com/id/<id>:sub": "system:serviceaccount:<namespace>:<KafkaConnect name>-connect",
                    "oidc.eks.us-west-2.amazonaws.com/id/<id>:aud": "sts.amazonaws.com"
                }
            }
        }
    ]
}

Kafka Connect配置

spec:
  template:
    serviceAccount:
      metadata:
        annotations:
          eks.amazonaws.com/role-arn: arn:aws:iam::<my-aws-account>:role/<My role name>

注:服务账号名称为<KafkaConnect name>-connect,已附加上述注解和IAM角色。


排查步骤
  • 验证OIDC提供商匹配度:确认EKS集群的OIDC提供商已正确创建,信任关系中的Federated ARN需与集群OIDC提供商ARN完全一致,注意<ID>和<id>的大小写(OIDC ID区分大小写)。
  • 检查ServiceAccount注解有效性:通过kubectl describe serviceaccount <KafkaConnect name>-connect -n <namespace>命令,确认服务账号是否存在eks.amazonaws.com/role-arn注解,且ARN中的账号ID、角色名称无拼写错误。
  • 核对信任关系Subject字段:确认信任关系中sub字段格式为system:serviceaccount:<namespace>:<serviceaccount-name>,其中<namespace>和服务账号名称需与实际环境完全匹配。
  • 检查Pod身份注入状态:进入Kafka Connect Pod执行kubectl exec -it <kafka-connect-pod-name> -n <namespace> -- env | grep AWS,查看是否存在AWS_ROLE_ARN和AWS_WEB_IDENTITY_TOKEN_FILE环境变量,若缺失则说明EKS Pod Identity Webhook未正常工作。
  • 排查IAM权限边界限制:检查目标IAM角色是否附加了权限边界,权限边界可能覆盖或限制了角色对S3的访问权限。
  • 验证S3 Bucket策略:确认S3 Bucket本身无拒绝该IAM角色访问的策略(Bucket策略优先级高于IAM角色策略)。
  • 模拟身份测试权限:使用aws sts assume-role-with-web-identity命令模拟Pod身份获取临时凭证,再用该凭证尝试访问S3,验证权限是否正常。

内容的提问来源于stack exchange,提问作者Gurpreet Singh Sran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 00:12:47