小编Har*_*rry的帖子

拒绝访问(服务:Amazon S3;状态代码:403;错误代码:AccessDenied;请求ID:xxxxxxxxxxxxx)

我正在尝试使用部署在运行在ec2上的tomcat上的应用程序来访问我的s3存储桶.

我可以看到很多与此相关的帖子,但看起来大多数人抱怨没有适当的访问权限.我可以正确访问所有存储桶,我可以使用不同的应用程序(如jenkins s3插件)从其他应用程序上传文件而不会出现任何问题.我无能为力,为什么只有在tomcat上部署的java Web应用程序才会发生这种情况.我已经确认了下面的事情.

  1. ec2实例是使用IAM角色创建的.
  2. IAM角色具有对桶的写访问权.puppet脚本能够写入存储桶.
  3. 尝试使用其他应用程序来检查IAM角色,它可以解决任何问题.

根据我的理解,如果在创建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 …
Run Code Online (Sandbox Code Playgroud)

java amazon-s3 java-ee amazon-web-services

7
推荐指数
1
解决办法
7630
查看次数

标签 统计

amazon-s3 ×1

amazon-web-services ×1

java ×1

java-ee ×1