Inflearn brand logo image

인프런 커뮤니티 질문&답변

blackhole124님의 프로필 이미지
blackhole124

작성한 질문수

비전공자도 이해할 수 있는 AWS 입문/실전

[실습] 4. 도메인 연결하기, HTTPS 적용하기

CloudFront 질문 있습니다

해결된 질문

작성

·

53

0

안녕하세요, 강의 잘 보고 있는 학생입니다.

다름이 아니라 서버 배포 관련해서 궁금한 점이 있어 문의드립니다.

현재 저는 EC2 인스턴스에 Java Spring, MySQL, Redis를 Docker로 구성하여 서버를 구축해둔 상태입니다. 그리고 Nginx를 이용해 리버스 프록시 및 HTTPS 설정까지 완료한 상황입니다.

이제 프론트엔드 웹 애플리케이션을 AWS S3 + CloudFront를 통해 배포하려고 합니다.

이와 관련해서 궁금한 점이 있습니다.
CloudFront에서도 HTTPS를 사용하려면 SSL/TLS 인증서(ACM)를 새로 발급받아야 하는데,
이미 EC2(Nginx) 쪽에서 HTTPS를 위해 인증서를 설정한 상태라,
이처럼 인증서를 각각(중복으로) 발급받아 사용하는 것이 맞는 건지,
그리고 전체적인 연결 구조 흐름이 정확히 어떻게 되는지 잘 이해가 되지 않아 질문드립니다.

혹시 이 부분에 대해 설명을 부탁드릴 수 있을까요?

감사합니다.

답변 2

0

JSCODE 박재성님의 프로필 이미지
JSCODE 박재성
지식공유자

안녕하세요 ! 강의 잘 봐주셔서 정말 감사합니다ㅎㅎ

질문해주신 EC2 + S3 + CloudFront + HTTPS 인증서 구성 흐름에 대해 설명드려볼게요 !

 

"EC2 쪽에서는 이미 Nginx + HTTPS 구성이 되어 있는데, S3 정적 웹사이트 배포를 위해 CloudFront에서도 SSL 인증서(ACM)를 또 발급받아야 하나요 ?"

-> 네 맞습니다 ! CloudFront를 통해 S3 웹사이트에 HTTPS를 적용하려면, CloudFront 전용으로 별도로 ACM 인증서가 필요해요 ~

 

"전체적인 연결 구조 흐름에 대해 설명을 듣고싶습니다."

-> 우선 백엔드에서 아래와 같은 부분은 이미 EC2에서 Nginx + SSL 인증서 적용 완료하신 대로 잘 되어 있습니다!

[사용자 브라우저] ->  [https://api.example.com] ->    [Nginx (HTTPS)]  ->  [Spring / Docker]  

프론트엔드 (S3 + CloudFront)는 아래와 같은 구조를 가지게 되요 ~

[사용자 브라우저]  ->  [https://www.example.com]  ->  [CloudFront (HTTPS)] -> [S3 정적 웹사이트]

여기서 중요한 건, CloudFront는 S3 앞단의 프록시 역할을 하기 때문에,

사용자가 보게 될 HTTPS 연결은 CloudFront에서 처리하게 되요 ~

그래서 CloudFront에서 사용할 ACM 인증서를 꼭 발급받아야 해요 !

 

더 궁금하신 점 있으시면 언제든지 질문 남겨주세요😊

blackhole124님의 프로필 이미지
blackhole124
질문자

감사합니다 !

0

안녕하세요, 인프런 AI 인턴입니다. blackhole124님.

AWS 인프라 구성을 진행 중이시군요. EC2와 CloudFront를 모두 사용하는 경우의 인증서 적용 방법에 대해 설명드리겠습니다.

CloudFront와 인증서

  1. SSL/TLS 인증서의 발급:

    • CloudFront에서 HTTPS를 사용하기 위해서는 AWS Certificate Manager(ACM)를 통해 SSL/TLS 인증서를 발급받아야 합니다. 이는 클라이언트(브라우저)와 CloudFront 간의 요청을 HTTPS로 보장하기 위함입니다.
    • 반면, EC2 인스턴스에서의 Nginx에서는 이미 다른 인증서를 사용중이시라면, CloudFront와 EC2 간에는 별도의 SSL/TLS 인증이 필요하지 않을 수 있습니다.
  2. 인증서의 중복 발급:

    • 각각의 컴포넌트가 SSL을 사용하도록 독립적으로 설정해야 하므로, ACM으로 CloudFront의 인증서를 별도로 발급받아 사용하세요. 즉, 브라우저부터 CloudFront, 그리고 CloudFront에서 Nginx(EC2)까지의 연결이 암호화(HTTPS)를 지원하므로, 각 구성 요소 간에는 HTTPS 연결이 올바르게 구성되어야 합니다.

연결 구조 흐름

  • 사용자가 웹사이트에 접근할 경우:

    1. 사용자의 브라우저는 CloudFront 도메인으로 접근합니다.
    2. CloudFront는 S3 버킷에 저장된 정적 컨텐츠를 제공하고, HTTPS를 통해 사용자의 브라우저에 해당 컨텐츠를 전송합니다.
    3. 만약 해당 요청이 API 요청이라면, CloudFront는 Nginx가 운영되고 있는 EC2 인스턴스에 요청을 전달합니다. 이때는 내부적으로 HTTPS가 필요할 수 있으며, 필요시 자체적으로 인증서를 설정할 수 있습니다.
  • 전체적인 흐름:

    • 사용자의 브라우저 <-> CloudFront (HTTPS)
    • CloudFront <-> EC2의 Nginx (HTTP 또는 HTTPS)

이처럼, 각각의 서비스는 독립적으로 SSL/TLS 인증서를 적용하여 클라이언트의 보안을 강화할 수 있습니다. CloudFront를 통해 프론트엔드를 배포하고, 사용자의 요청 흐름을 최적화하며 성능을 높일 수 있습니다.

더 자세한 설정 예제 및 각 컴포넌트의 배포 사례는 아래의 링크에서 확인해 주세요:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

blackhole124님의 프로필 이미지
blackhole124

작성한 질문수

질문하기