aws cloudfront와 ec2 연동후 post 요청 403 오류 해결하기

2025. 3. 31. 09:53개발 스토리

반응형

사이드프로젝트를 진행하면서 사이트를 구축했다.

ssl 세팅을 ec2안에 웹서버를 세팅하고 certbot으로 인증서를 발급받아 적용했다.

이후에 인증서 기간이 만료됐는지 사이트 접속시  아래와 같이 브라우저에 표시됐다

 

다시 ssl인증서 세팅을 하려다가 기존에 세팅한 방식이 마음에 안들어 다른 방법을 찾아봤다.

aws 인증서관리에서 인증서를 발급받아 cloudfront와 ec2를 연동하여 ssl인증할수 있었다.

인증서 발급, cloudfront와 ec2연동을 완료하고 사이트 접속하니 정상적으로 사이트의 ssl인증이 적용되었다.

 

하지만 문제가 발생했다. get방식의 요청을 정상적으로 응답을 받는데 post나 put등 다른 api 요청방식에서 403오류가 발생한다.

 

 

cloudfront 설정에서 허용된 http방법 항목이 get,head로 선택되어 있길래 get,head,options...로 선택해도 보고

 

캐시 키 및 원본요청 항목들도 이것저것 변경해보고 바꿔봤지만 안된다.

 

 

예전에 웹서버에서 cors를 허용하고 was에서도 cors를 허용하면서 브라우저에서 비정상 응답으로 처리하여 cors허용적용이 정상적으로 안됐던 일이 있었다.

 

기존 cors설정을 was에 처리하였는데 cloudfront에서 적용된 cors설정과 출동하고 있는데 아닌가 생각이 들었다.

그래서 was의 cors 설정 코드를 제거해보기로 했다.

@Override
	public void addCorsMappings(CorsRegistry registry) {
	//	registry.addMapping("/**")
	//			.allowedOrigins(corsOrigin)
	//			.allowedMethods(
	//					HttpMethod.GET.name(),
	//					HttpMethod.HEAD.name(),
	//					HttpMethod.POST.name(),
	//					HttpMethod.PUT.name(),
	//					HttpMethod.DELETE.name());
	}

 

다시 was를 재실행해서 확인해본결과 내가 역시나 403오류가 발생했다.

일단 허용원격지를 모두 허용하도록 설정해보았다. 아래와 같이 코드를 적용하고 was를 재실행하니 

드디어 403 오류가 발생되지 않았다.

그렇다면 문제는 허용 원격지가 잘못지정되어있다는 소리 같은데... aws cloudfront에 지정되어 있는 도메인을 넣어도 403오류가 발생한다.

 

@Override
public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/**")
            .allowedOrigins("*")
            .allowedMethods(
                    HttpMethod.GET.name(),
                    HttpMethod.HEAD.name(),
                    HttpMethod.POST.name(),
                    HttpMethod.PUT.name(),
                    HttpMethod.DELETE.name());
}

 

 

결국은 사이트의 도메인을 원격지로 넣어주니 해결됐다. ec2에서 도메인을 바라보는게 아닌 cloudfront에서 도메인을 바라보고 있기 때문에 ec2에 세팅되어 있는 was에서 사이트의 도메인을 cors 허용원격지로 넣어줘야 cors가 허용된다.

반응형