com.amazonaws.services.s3.model.AmazonS3Exception: доступ запрещен с действительными учетными данными

Я пытаюсь получить список сегментов в моем S3Client, но получаю исключение как com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID). : xxxxxxxxx; Идентификатор расширенного запроса S3: xxxxxx=; xxxxx: xxxxxxx=

[junit] на com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1819)[junit] на com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleServiceClient40 на AmazonRavaError амазонавс. RequestExecutor.doExecute (AmazonHttpClient.java:802)[junit] на com.amazonaws.http.AmazonHttpClient $ RequestExecutor.executeWithTimer (AmazonHttpClient.java:770) [juntt] на com.amazonaws.httpClient. java: 744)[junit] на com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:704)[junit] на com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:686)[junit] на com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient) .java: amazonaws.http.AmazonHttpClient.execute (AmazonHttpClient.java:530) [junit] на com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:5248)[junit] на com.amazonaws.services.s3A. invoke(AmazonS3Client.java:5195)[junit] на com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:5189)[junit] на com.amazonaws.services.s3.AmazonS3Client.listBuckets (AmazonS3Client. 1018) [junit] в com.amazonaws.services.s3.AmazonS3Client.listBuckets (AmazonS3Client.java:1024) [junit] в src.projectname.tst.S3Accessor.test2 (S3Accessor.java:71)выполнить (AmazonHttpClient.java:686) [junit] на com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:550) [junit] на com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient) [junit: ] на com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:5248)[junit] на com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:5195)[junit] на com.amazonaws. services.s3.AmazonS3Client.invoke (AmazonS3Client.java:5189) [junit] на com.amazonaws.services.s3.AmazonS3Client.listBuckets (AmazonS3Client.java:1018) [junit] на com.amazonaws.services.s3.Client. listBuckets (AmazonS3Client.java:1024) [junit] в src.projectname.tst.S3Accessor.test2 (S3Accessor.java:71)выполнить (AmazonHttpClient.java:686) [junit] на com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:550) [junit] на com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient) [junit: ] на com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:5248)[junit] на com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:5195)[junit] на com.amazonaws. services.s3.AmazonS3Client.invoke (AmazonS3Client.java:5189) [junit] на com.amazonaws.services.s3.AmazonS3Client.listBuckets (AmazonS3Client.java:1018) [junit] на com.amazonaws.services.s3.Client. listBuckets (AmazonS3Client.java:1024) [junit] в src.projectname.tst.S3Accessor.test2 (S3Accessor.java:71)выполнить (AmazonHttpClient.java:530) [junit] в com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:5248)[junit] в com.amazonaws.services.s3.AmazonS3Client.invoke (AmazonS3Client.java: 5195) [junit] в com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:5189)[junit] в com.amazonaws.services.s3.AmazonS3Client.listBuckets (AmazonS3Client.java:1018) [junit] в com.amazonaws.services.s3.AmazonS3Client.listBuckets (AmazonS3Client.java:1024) [junit] в src.projectname.tst.S3Accessor.test2 (S3Accessor.java:71)выполнить (AmazonHttpClient.java:530) [junit] в com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:5248)[junit] в com.amazonaws.services.s3.AmazonS3Client.invoke (AmazonS3Client.java: 5195) [junit] в com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:5189)[junit] в com.amazonaws.services.s3.AmazonS3Client.listBuckets (AmazonS3Client.java:1018) [junit] в com.amazonaws.services.s3.AmazonS3Client.listBuckets (AmazonS3Client.java:1024) [junit] в src.projectname.tst.S3Accessor.test2 (S3Accessor.java:71)AmazonS3Client.listBuckets (AmazonS3Client.java:1018) [junit] в com.amazonaws.services.s3.AmazonS3Client.listBuckets (AmazonS3Client.java:1024) [junit] в src.projectname.tst.S3Accessor.test2 (S3 :Accessor.java 71)AmazonS3Client.listBuckets (AmazonS3Client.java:1018) [junit] в com.amazonaws.services.s3.AmazonS3Client.listBuckets (AmazonS3Client.java:1024) [junit] в src.projectname.tst.S3Accessor.test2 (S3 :Accessor.java 71)

Мой код:

      
    public void readBucket() throws IOException {
        String REGION = "us-east-2";
        String bucketName = "bucketName";
        String key = "objectName";
        try {
            AWSCredentials credentials = new BasicAWSCredentials("xxxxxxxx","xxxxxx");

            AmazonS3 s3Client = AmazonS3ClientBuilder
                    .standard()
                    .withCredentials(new AWSStaticCredentialsProvider(credentials))
                    .withRegion(Regions.US_EAST_2)
                    .build();
            if (s3Client.doesBucketExist("bucket name")) {
                System.out.println("Bucket %s already exists.\n");
            }
            List<Bucket> buckets = s3Client.listBuckets();
            System.out.println("Your Amazon S3 buckets are:");
            for (Bucket b : buckets) {
                System.out.println("* " + b.getName());
            }
          }
   }

политика, которую я приложил к пользователю IAM, -

      {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::bucket name",
                "arn:aws:s3:::bucketname/*"
            ]
        }
    ]
}

Я действительно могу проверить, правильно ли существует моя корзина, т.е. мой s3Client обновлен правильно. Может ли кто-нибудь мне с этим помочь. Заранее спасибо!

1 ответ

Решение

Это проблема с разрешением на учетные данные. Попробуйте предоставить полное разрешение S3 роли / пользователю IAM, которое соответствует используемым вами кредитам. После правильной настройки разрешений проблем с запуском операций Amazon S3 с использованием API Amazon S3 Java не возникнет.

Также рассмотрите возможность перехода от старого API V1 к новому API V2:

AWS SDK для Java 2.x - это серьезная переработка кодовой базы версии 1.x. Он построен на базе Java 8+ и добавляет несколько часто запрашиваемых функций. К ним относятся поддержка неблокирующего ввода-вывода и возможность подключения другой реализации HTTP во время выполнения.

Вы можете найти множество примеров кода S3 V2 здесь:

https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javav2/example_code/s3/src/main/java/com/example/s3

Как вы устанавливаете свои разрешения - с помощью настраиваемой политики или с помощью этой?

Другие вопросы по тегам