it-roy-ru.com

AWS S3 Java SDK - доступ запрещен

Я пытаюсь получить доступ к корзине и всем ее объектам, используя 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());
19
gkbstar

Проблема сейчас решена. Были следующие проблемы с кодом:

  1. Конечная точка не была правильной, должна быть правильная конечная точка.
  2. Не было достаточно разрешения, данного ведру. Список полных разрешений должен быть получен до использования корзины в 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());
7
gkbstar

Перейдите к IAM и проверьте, имеет ли пользователь [Ключ доступа и Секретный ключ], который используется для API, привилегии использовать API на основе S3.

Прикрепленная политика S3 для указанного пользователя - попробуйте с S3 Full Access; вы можете детализировать доступ, как только это сработает . Для получения дополнительной информации проверьте эту ссылку [ Управление политиками IAM ]

23
Naveen Vijay

На вкладке разрешения ведра я снимаю флажок:

  • Управление списками контроля доступа (ACL) для этого сегмента 
  • Блокировка новых общедоступных списков ACL и загрузка общедоступных объектов (рекомендуется)

и проблема ушла.

0
phongnt