【问题标题】:Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: xxxxxxxxxxxxx)拒绝访问(服务:Amazon S3;状态代码:403;错误代码:AccessDenied;请求 ID:xxxxxxxxxxxxx)
【发布时间】:2016-09-26 11:58:18
【问题描述】:

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

我可以看到很多与此相关的帖子,但看起来他们中的大多数都抱怨没有适当的访问权限。我可以正确访问所有存储桶,我可以使用 jenkins s3 插件等不同的应用程序从另一个应用程序上传文件,而不会出现任何问题。我不知道为什么这只适用于部署在 tomcat 上的 java web 应用程序。我已经确认了以下事情。

  1. ec2 实例是使用 IAM 角色创建的。
  2. IAM 角色对存储桶具有写入权限。木偶脚本能够写入存储桶。
  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 (AmazonClientException s3Ex) {
        LOG.warn("Write permissions not available!", s3Ex.getMessage());
        LOG.error("Write permissions not available!", s3Ex);
    }
    return hasWritePermissions;
}

com.amazonaws.services.s3.model.AmazonS3Exception:访问被拒绝(服务:Amazon S3;状态代码:403;错误代码:AccessDenied;请求 ID:xxxxxxxxxxxxxx)。

【问题讨论】:

  • “据我了解...它将采用 IAM 角色身份验证。” 我们是否应该由此假设您的实例实际上具有 IAM 角色,并且该角色有写入桶的权限吗?
  • 是的,此实例是使用 IAM 角色创建的,并且它具有对存储桶的写入权限。木偶脚本能够与桶对话。问题在于使用 aws jdk。我试图检查的是当我实例化 S3 客户端 AmazonS3Client amazonS3Client=new AmazonS3Client();如果我没有提及任何身份验证,则使用的默认身份验证将基于 IAM 角色?
  • 这个问题你解决了吗?
  • 解决了这个问题?
  • 您解决了这个问题吗?

标签: java amazon-web-services amazon-s3


【解决方案1】:

不确定您是否已经解决了这个问题;但是,如果您在存储桶上使用自定义 KMS 密钥,并且您尝试访问的文件已使用自定义密钥加密,那么也会引发此错误。

这个问题有时会因为您仍然可以列出 S3 存储桶中的对象而隐藏。确保您的 IAM 政策包含 kms 解密权限。

【讨论】:

    猜你喜欢
    • 2023-02-21
    • 2022-12-30
    • 2021-12-13
    • 2022-12-11
    • 2016-01-18
    • 1970-01-01
    • 2018-06-01
    • 2022-11-28
    • 1970-01-01
    相关资源
    最近更新 更多