최근 아키텍처를 설계해야 하는 일이 있어서 위와 같이 Cloud Front를 앞단에 두고, ELB에 요청을 전달해서 EC2로 가는 방향으로 설계를 했습니다.
예상했던 결과대로 서버 도메인을 입력하면 API 서버에 접근할 수 있었습니다. 하지만, 원하는 결과와는 조금 다르게 ELB의 DNS 서버로도 아무나 접근이 가능했습니다.
서버에 접근하는 경로는 단 하나만 있는 게 보안상으로도 좋을 거 같아서 ELB(Origin)에서는 내가 배포한 Cloud Front에서 오는 요청만 받고, 나머지 요청은 모두 403 Forbbiden으로 처리하도록 하고자 했습니다.
1. Cloud Front에 등록된 Origin(ELB)로 보내는 요청에 헤더 추가하기
위에서는 헤더 이름을 "X-Custom-Access-Token"이라고 했지만, 본인이 원하는 이름으로 하면 됩니다.
기존에 사용되는 통상적인 헤더 이름은 피해 주시는 것이 좋습니다.
값도 본인이 원하는 값으로 입력합니다. 값을 정하기 어렵다면 여기를 눌러서 한번 Random한 Key 값을 만들어보세요.
모두 입력했으면 이제 변경 사항 저장을 눌러서 저장해 줍니다.
2. ELB(Elastic Load Balancer) 리스너 및 규칙 추가하기
이제 Cloud Front에서 보내는 커스텀 헤더를 받아서 내 Cloud Front에서 온 요청이구나를 알 수 있도록 로드 밸런서(ELB)의 리스너 규칙을 편집해줘야 합니다. 위에 파란 부분은 최종 결과물입니다. 저는 이미 설정을 해뒀었기 때문에 저렇게 뜨니 참고만 해주시면 될 거 같습니다.
여기서 입력할 때는 1번에서 Cloud Front 원본(Origin)에 설정했던 헤더의 이름과 값을 입력해줘야 합니다.
이제 확인을 누르고 쭉쭉쭉 넘겨서 대상 그룹(EC2 인스턴스 그룹)을 선택하고, 규칙을 저장합니다.
규칙을 저장하면 이제 내가 만든 규칙이 뜨는 것을 확인할 수 있습니다. 이제 거의 다 왔습니다.
처음 ELB를 만들면 "기본값"으로 규칙이 하나 추가됩니다.
보면 "다른 규칙이 적용되지 않는 경우"에는 대상 그룹으로 전달된다고 되어 있습니다.
이렇게 되면 내가 정해둔 조건 이외의 어떤 요청이 오더라도 대상 그룹으로 전달되어 처음과 달라지는 것이 없습니다.
그렇기 때문에 기본값의 작업 내용을 바꿔줘야 합니다.
기존에 "대상 그룹으로 전달"로 되어 있는 선택지를 "고정 응답 반환"으로 변경합니다.
응답 코드는 어떤 걸로 입력해도 상관없습니다. 저는 Forbidden으로 사용하기 위해서 403을 입력해 줬습니다.
응답 본문은 선택 내용입니다. 저는 "Access denied"라고 뜰 수 있도록 설정해 뒀습니다.
이제 변경 내용 저장을 눌러줍니다.
이제 서버 도메인으로 한번 접근을 해보겠습니다. (Cloud Front을 통해서 접근하는 방법)
이 부분도 사실 추후에 Client가 완성되면 Cors에 등록해서 외부 접근은 막아 주는 것이 좋습니다.
이제 ELB의 DNS로 접근을 한번 해보겠습니다. (Elastic Load Balancer에 직접 접근하는 방법)
모두 의도한 대로 설정에 성공했습니다!
![](https://t1.daumcdn.net/keditor/emoticon/face/large/008.png)
'🧑🏻💻 Dev > Infra' 카테고리의 다른 글
[Jenkins] ERROR: script returned exit code 255 (1) | 2024.01.10 |
---|---|
[Github Actions x Docker] 자동화 배포 환경 도커로 변경하기 (1) | 2024.01.08 |