Backend/Spring Boot

[Spring Boot] AWS S3 연결이 비공개로 설정되어 있지 않습니다.

lim.dev 2023. 4. 24. 17:12

NET::ERR_CERT_COMMON_NAME_INVALID

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