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

EKS部署中Java API访问S3失败但AWS CLI可正常访问故障排查

EKS IRSA对接S3报KMS权限错误修复方案

核心问题本质是AWS Java SDK与AWS CLI的S3 KMS加密默认行为不一致,当前ServiceAccount配置本身没有问题,问题出在加密配置与KMS权限匹配上。

场景差异说明

  • 执行的AWS CLI命令显式加了--sse aws:kms参数,该模式默认调用AWS托管的S3服务自带KMS密钥(别名为aws/s3),这类AWS托管密钥默认对同账号内的授权主体开放基础加密/解密权限,不需要额外配置KMS权限即可正常使用。
  • 报错信息显示Java SDK调用时,实际请求的是客户自管理的KMS CMK密钥(ARN为arn:aws:kms:eu-west-2:xxxxx:key/dcb9dcc5-0141-4f02-a9e4-bc8a1925e8a1),这类用户自创建的KMS密钥默认不开放任何权限,需要同时配置IAM身份策略和KMS密钥策略才能调用。

修复步骤

  • 第一步:校验Pod的IRSA注入是否正常
    进入Java应用所在Pod执行环境变量查询,确认IRSA配置生效:

    kubectl exec -it <Java应用Pod名称> -n <Pod所在命名空间> -- env | grep AWS
    

    返回结果中存在AWS_ROLE_ARN=arn:aws:iam::xxxxx:role/yyyyyy、AWS_WEB_IDENTITY_TOKEN_FILE两个变量,说明ServiceAccount的IRSA注入正常,不需要修改ServiceAccount YAML。

  • 第二步:根据业务加密需求调整配置

    • 如果业务不需要使用自定义KMS密钥加密S3对象:直接修改Java代码中S3客户端的加密配置,移除显式指定自定义KMS密钥ID的参数,配置为使用AWS托管的S3 KMS密钥,和CLI行为保持一致即可,不需要额外加权限。
    • 如果业务必须使用报错中的自定义CMK密钥:
      1. 给绑定ServiceAccount的IAM角色yyyyyy添加如下内嵌权限策略,允许角色调用该KMS密钥的加密解密相关接口:
      {
          "Effect": "Allow",
          "Action": [
              "kms:GenerateDataKey",
              "kms:Decrypt"
          ],
          "Resource": "arn:aws:kms:eu-west-2:xxxxx:key/dcb9dcc5-0141-4f02-a9e4-bc8a1925e8a1"
      }
      
      1. 进入KMS控制台,找到对应ID的自定义密钥,在密钥策略中添加上述IAM角色的kms:GenerateDataKey、kms:Decrypt权限——客户自管理KMS密钥需要IAM身份策略、KMS密钥策略双重放通才会生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:06:23