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

如何通过org.apache.hadoop.fs.s3a.S3AFileSystem访问带KMS加密的AWS S3

问题根因与解决方案

根因

你遇到的403 AccessDenied错误与S3权限无关,是KMS密钥操作权限缺失导致:

  • S3A的mkdirs方法本质是在对应路径下创建1个0字节的占位对象,因为你配置了SSE-KMS加密,创建该对象时需要调用KMS接口生成加密用的数据密钥
  • 你当前的KMS策略仅开放了密钥的查询、管理类权限,缺少S3做SSE-KMS加密/解密必须的核心操作权限
  • delete操作仅需要S3的删除权限,不需要调用KMS接口,因此可以正常执行

修复步骤

  1. 修改你使用的KMS密钥的策略,在Action列表中补充以下3个必要权限:
"kms:GenerateDataKey",
"kms:Decrypt",
"kms:DescribeKey"

修改完成后的KMS策略示例:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:CreateAlias",
                "kms:CreateKey",
                "kms:DeleteAlias",
                "kms:Describe*",
                "kms:GenerateRandom",
                "kms:Get*",
                "kms:List*",
                "kms:TagResource",
                "kms:UntagResource",
                "iam:ListGroups",
                "iam:ListRoles",
                "iam:ListUsers",
                "kms:GenerateDataKey",
                "kms:Decrypt",
                "kms:DescribeKey"
            ],
            "Resource": "*"
        }
    ]
}
  1. (可选,针对hadoop-aws 2.9.2版本兼容性问题)如果修改KMS策略后依然报错,在core-site.xml中补充以下配置:
<property>
    <name>fs.s3a.server-side-encryption.enabled</name>
    <value>true</value>
</property>
  1. 配置修改后无需重启EC2实例,重新调用mkdirs方法即可正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 06:45:03