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

SpringBoot服务未使用Helm部署绑定的IAM角色,S3访问遭403拒绝

问题解答

不需要在服务中手动实现STSAssumeRole,IRSA(IAM Roles for Service Accounts)机制已经自动完成了临时凭证的获取流程。结合你的情况,以下是可能遗漏的配置点和排查方向:

  • 检查AWS SDK版本兼容性
    Java SDK v1需升级到1.11.700及以上版本,Java SDK v2需2.10.0及以上版本。老版本SDK不会自动识别AWS_ROLE_ARN和AWS_WEB_IDENTITY_TOKEN_FILE环境变量,导致无法通过IRSA获取凭证。

  • 验证Pod中Token文件的访问权限
    默认token文件路径为/var/run/secrets/eks.amazonaws.com/serviceaccount/token,需确保容器运行用户对该文件有读取权限。可进入Pod执行ls -l /var/run/secrets/eks.amazonaws.com/serviceaccount/token检查权限,若使用非root用户,可能需要调整ServiceAccount的automountServiceAccountToken或容器的securityContext配置。

  • 排查IAM角色的权限边界
    若IAM角色设置了权限边界(Permission Boundary),即使附加了S3全访问策略,权限边界也可能限制实际操作权限。需确认权限边界策略允许S3相关操作。

  • 检查S3桶的Bucket Policy
    桶自身的Bucket Policy可能存在拒绝规则,或未明确允许你的IAM角色访问。例如,桶策略中需包含允许<你的IAM角色ARN>执行s3:*操作的语句,避免出现优先级更高的拒绝规则。

  • 手动验证IRSA凭证获取流程
    在Pod内安装AWS CLI,执行以下命令测试是否能获取临时凭证:

    aws sts assume-role-with-web-identity \
      --role-arn arn:aws:iam::123456789:role/my-role \
      --role-session-name test-session \
      --web-identity-token file:///var/run/secrets/eks.amazonaws.com/serviceaccount/token
    

    若能成功返回临时凭证,再用该凭证测试S3访问:

    # 将返回的AccessKeyId、SecretAccessKey、SessionToken填入环境变量
    export AWS_ACCESS_KEY_ID=<临时密钥ID>
    export AWS_SECRET_ACCESS_KEY=<临时密钥>
    export AWS_SESSION_TOKEN=<临时会话Token>
    aws s3 ls s3://<你的桶名>
    

    这一步能区分是IRSA配置问题,还是服务代码的AWS客户端配置问题。

  • 检查SpringBoot的硬编码AWS凭证
    若application.properties或application.yaml中手动配置了aws.access-key、aws.secret-key等参数,会覆盖IRSA的自动凭证获取逻辑,需删除这些硬编码配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 00:07:34