【发布时间】:2021-06-17 06:48:31
【问题描述】:
我已经配置了 EC2
<property>
<name>fs.s3a.aws.credentials.provider</name>
<value>com.amazonaws.auth.InstanceProfileCredentialsProvider</value>
</property>
<property>
<name>fs.s3a.server-side-encryption-algorithm</name>
<value>SSE-KMS</value>
</property>
<property>
<name>fs.s3a.server-side-encryption.key</name>
<value>arn:aws:kms:zz-jjbbcc-1:123432:key/AABBCC</value>
</property>
使用 core-site.xml 中的此配置,我可以轻松地在 S3 中放置文件和创建文件夹(通过 aws cli),而无需提供我已经在 core-site 中配置的任何身份验证详细信息.xml
现在我想使用 S3AFileSystem 访问 S3 存储桶并创建文件夹,但是当我调用时
S3AFileSystem fs
fs.mkdirs(somepath); // this will create folder in S3.
Its throwing Accessdenied 403 Exception.
java.nio.file.AccessDeniedException: s3a://xxx-xxx/xxx/.FolderIwantToCreate: innerMkdirs on s3a://xxx-xxx/xxx/.FolderIwantToCreate: com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: XXXXXXX; S3 Extended Request ID: xxxxxxxxxxxxx=), S3 Extended Request ID: /XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=
at org.apache.hadoop.fs.s3a.S3AUtils.translateException(S3AUtils.java:174) ~[hadoop-aws-2.9.2.jar:?]
at org.apache.hadoop.fs.s3a.S3AUtils.translateException(S3AUtils.java:117) ~[hadoop-aws-2.9.2.jar:?]
at org.apache.hadoop.fs.s3a.S3AFileSystem.mkdirs(S3AFileSystem.java:1683) ~[hadoop-aws-2.9.2.jar:?]
at org.apache.hadoop.fs.FileSystem.mkdirs(FileSystem.java:2216) ~[hadoop-common-2.9.2.jar:?]
但是在调试的时候,我试过了
((S3AFileSystem) fs).delete(path,true)
路径有 s3://MyBUCKET/SOMEFOLDER/ 令人惊讶的是 SOMEFOLDER 被删除了
我错过了任何配置吗? S3(启用了 KMS)并且没有任何存储桶策略,IAM 对 S3 具有完全访问权限。
EC2 具有 IAM 角色,该角色具有以下策略:
S3 访问:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
]
}
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"
],
"Resource": "*"
}
]
}
【问题讨论】:
-
您的 EC2 实例是否附加了角色?它是否有权访问 S3?不确定 S3AFileSystem 本身,但您应该确保它能够自动收集凭据(例如,像 s3 客户端一样)或手动传递凭据...
-
@StefanN 是的 EC2 具有 S3Full 和 KMS 完全访问权限
-
您能否也发布您的相关 IAM 和 S3 政策?另外,您如何将凭据传递给您的 S3 客户端?
-
@StefanN 更新了问题,我没有将凭据传递给您的 S3 客户端,我希望它会自动获取(就像 cli 一样)
-
请正确格式化代码sn-ps!很难阅读,但我在您的 IAM 政策中看到了一个错误。指定操作的正确方法是
"Action": "s3:*"(您的策略缺少“*”)
标签: amazon-web-services amazon-s3 amazon-ec2 aws-java-sdk amazon-kms