Backend/Spring Boot
[Spring Boot] AWS S3 연결이 비공개로 설정되어 있지 않습니다.
lim.dev
2023. 4. 24. 17:12
s3Client.getUrl(bucket, fileName).toString()
위 코드로 file url을 가져왔는데 위와 같은 오류가 뜨는 경우이다.
이 경우 s3클라이언트 생성자 부분에 enablePathStyleAccess 를 넣어 해결할 수 있다.
@Bean(name = "s3Client")
public AmazonS3Client amazonS3Client() {
BasicAWSCredentials awsCreds = new BasicAWSCredentials(accessKey, secretKey);
return (AmazonS3Client) AmazonS3ClientBuilder.standard()
.withRegion(region)
.withCredentials(new AWSStaticCredentialsProvider(awsCreds))
.enablePathStyleAccess()
.build();
}
문제 발생 이유
s3의 보안 인증서는 *.s3.{region-code}.amazonaws.com 에 대해 제공을 합니다. 하지만 와일드카드(*)는 하나의 하위도메인만 취급하기 때문에 lim.ovob.s3.{region-code}.amazonaws.com 과 같은 링크에서는 유효하지 않습니다.
(ovob.s3.{region-code}.amazonaws.com일 경우는 유효)
이를 해결하기 위해서는 virtual hosted-style(가상 호스팅 방식)에서 path-style(경로 스타일 방식)으로 반환 url을 변경해주면 됩니다.
Path-Style format: https://s3.{region-code}.amazonaws.com/{bucket-name}/{key-name}
enablePathStyleAccess