[AWS] S3 Error Code: PermanentRedirect

hjin·2023년 7월 22일
0

AWS S3로 이미지 업로드하는 기능을 실행했을 때 아래와 같은 에러 로그가 출력되었다.

The bucket you are attempting to access must be addressed using the specified endpoint.
Please send all future requests to this endpoint.
(Service: Amazon S3; Status Code: 301; Error Code: PermanentRedirect; Request ID:)
AWS Error Code: PermanentRedirect

AWS S3 Client 를 이용할 경우 Region 이 일치하지 않을 때 발생하는 에러.




1. region 확인

application.yml에 ap-northeast-2로 잘 설정되어있음.

cloud:
  aws:
    region:
      static: ap-northeast-2

2. 버킷의 정책설정 확인

putObject에서 에러가나길래 버킷의 정책 설정에 putObject가 추가되어있는지 확인. 이상없음.

"Action": [
  "s3:DeleteObject",
  "s3:GetObject",
  "s3:PutObject"
            ],

3. 디버깅

region이 us-west-2로 나옴. application.yml에 설정한 region을 못가져오는 이유는?

의존성 주입은 AmazonS3Client인데

private final AmazonS3Client amazonS3Client;

config에서는 리턴타입이 AmazonS3로 되어있었던 것.

@Bean
    public AmazonS3 amazonS3Client() {
        BasicAWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey);
        return AmazonS3ClientBuilder.standard()
                .withCredentials(new AWSStaticCredentialsProvider(awsCredentials))
                .withRegion(region)
                .build();
    }

리턴타입을 AmazonS3Client로 바꾸고나니 에러가 해결되었다.

@Bean
    public AmazonS3Client amazonS3Client() {
        BasicAWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey);
        return (AmazonS3Client)AmazonS3ClientBuilder.standard()
                .withCredentials(new AWSStaticCredentialsProvider(awsCredentials))
                .withRegion(region)
                .build();
    }

1개의 댓글

comment-user-thumbnail
2023년 7월 22일

버킷 정책 설정과 region 확인하는 과정이 인상깊었습니다. 문제 해결 방법을 잘 설명해주셔서 감사합니다!

답글 달기