AWS S3 Java SDK - 拒绝访问

 _子竹_ 发布于 2023-01-10 10:15

我正在尝试使用AWS SDK访问存储桶及其所有对象,但在运行代码时,我收到错误,因为线程"main"中存在异常 com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: X), S3 Extended Request ID: Y=

请建议,我缺少的地方以及为什么访问被拒绝错误正在发生,尽管我已经获得了以下所有权限:

s3:GetObject
s3:GetObjectVersion
s3:GetObjectAcl
s3:GetBucketAcl
s3:GetBucketCORS
s3:GetBucketLocation
s3:GetBucketLogging
s3:ListBucket
s3:ListBucketVersions
s3:ListBucketMultipartUploads
s3:GetObjectTorrent
s3:GetObjectVersionAcl

代码如下:

AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
ClientConfiguration clientConfig = new ClientConfiguration();
clientConfig.setProtocol(Protocol.HTTP);
AmazonS3 conn = new AmazonS3Client(credentials, clientConfig);
conn.setEndpoint(bucketName);
Bucket bucket = conn.createBucket(bucketName);
ObjectListing objects = conn.listObjects(bucket.getName());
do {
    for (S3ObjectSummary objectSummary : objects.getObjectSummaries()) {
            System.out.println(objectSummary.getKey() + "\t" +
                    objectSummary.getSize() + "\t" +
                    StringUtils.fromDate(objectSummary.getLastModified()));
    }
    objects = conn.listNextBatchOfObjects(objects);
} while (objects.isTruncated());

Naveen Vijay.. 25

转到IAM并检查用于API的用户[访问密钥和密钥]是否具有使用S3 Based API的优先权.

将S3策略附加到指定用户 - 尝试使用S3 Full Access ; 一旦工作,你可以细化访问.更多信息请查看此链接[ 管理IAM策略 ]

2 个回答
  • 转到IAM并检查用于API的用户[访问密钥和密钥]是否具有使用S3 Based API的优先权.

    将S3策略附加到指定用户 - 尝试使用S3 Full Access ; 一旦工作,你可以细化访问.更多信息请查看此链接[ 管理IAM策略 ]

    2023-01-10 10:16 回答
  • 问题现在解决了.代码存在以下问题:

      终点不正确,应该有一个正确的终点.

      对桶没有足够的许可.在AWS SDK中使用存储桶之前,应该先获得完整权限列表.

    下面是正确的代码

    AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
    ClientConfiguration clientConfig = new ClientConfiguration();
    clientConfig.setProtocol(Protocol.HTTP);
    AmazonS3 conn = new AmazonS3Client(credentials, clientConfig);
    conn.setEndpoint("correct end point");
    Bucket bucket = conn.createBucket(bucketName);
    ObjectListing objects = conn.listObjects(bucket.getName());
    do {
        for (S3ObjectSummary objectSummary : objects.getObjectSummaries()) {
                System.out.println(objectSummary.getKey() + "\t" +
                        objectSummary.getSize() + "\t" +
                        StringUtils.fromDate(objectSummary.getLastModified()));
        }
        objects = conn.listNextBatchOfObjects(objects);
    } while (objects.isTruncated());
    

    2023-01-10 10:17 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有