Har*_*rry 7 java amazon-s3 java-ee amazon-web-services
我正在尝试使用部署在运行在ec2上的tomcat上的应用程序来访问我的s3存储桶.
我可以看到很多与此相关的帖子,但看起来大多数人抱怨没有适当的访问权限.我可以正确访问所有存储桶,我可以使用不同的应用程序(如jenkins s3插件)从其他应用程序上传文件而不会出现任何问题.我无能为力,为什么只有在tomcat上部署的java Web应用程序才会发生这种情况.我已经确认了下面的事情.
根据我的理解,如果在创建S3存储桶客户端(AmazonS3Client)时未指定任何凭据,则会将IAM角色身份验证作为默认值.
这是我为测试权限而编写的示例函数.
public boolean checkWritePermission(String bucketName) {
AmazonS3Client amazonS3Client=new AmazonS3Client();
LOG.info("Checking bucket write permission.....");
boolean hasWritePermissions = false;
final ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(0);
// Create empty content
final InputStream emptyContent = new ByteArrayInputStream(new byte[0]);
// Create a PutObjectRequest with test object
final PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName,
"TestDummy.txt", emptyContent, metadata);
try {
if (amazonS3Client.putObject(putObjectRequest) != null) {
LOG.info("Permissions validated!");
// User has write permissions, TestPassed.
hasWritePermissions = true;
}
}
catch (AmazonClientException s3Ex) {
LOG.warn("Write permissions not available!", s3Ex.getMessage());
LOG.error("Write permissions not available!", s3Ex);
}
return hasWritePermissions;
}
Run Code Online (Sandbox Code Playgroud)
com.amazonaws.services.s3.model.AmazonS3Exception:拒绝访问(服务:Amazon S3;状态代码:403;错误代码:AccessDenied;请求ID:xxxxxxxxxxxxxx).
小智 2
不确定您是否已经解决了这个问题;但是,如果您在存储桶上使用自定义 KMS 密钥,并且您尝试访问的文件是使用自定义密钥加密的,那么也会引发此错误。
有时,您仍然可以列出 S3 存储桶中的对象,这一事实掩盖了此问题。确保您的 IAM 策略包含 kms 解密权限。
| 归档时间: |
|
| 查看次数: |
7630 次 |
| 最近记录: |