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
'Backend > Spring Boot' 카테고리의 다른 글
[자바 ORM 표준 JPA 프로그래밍] 7장 (0) | 2023.05.23 |
---|---|
[자바 ORM 표준 JPA 프로그래밍] 6장 (0) | 2023.05.02 |
[Spring Boot] AWS S3 연결 - 다중 파일 업로드 (0) | 2023.04.20 |
[Spring Boot] @modelAttribute로 여러 개의 파일과 단일 데이터 바인딩 (1) | 2023.04.19 |
[자바 ORM 표준 JPA 프로그래밍] 4장 (0) | 2023.04.11 |