BLOG
웹 및 애플리케이션 사용자와 조직은 HTTPS를 사용하여 대부분의 HTTP 통신을 안전하게 수행하고자 하는 욕구가 커지고 있습니다. 애플은 2016년 1월 월드와이드 개발자 컨퍼런스(Worldwide Developers Conference)에서 2017년 1월부터 앱스토어에 제출한 앱이 앱 전송보안(ATS)을 지원해야 한다고 밝혔습니다. ATS를 사용하려면 웹 서비스에 대한 모든 연결이 HTTPS 및 TLS 버전 1.2를 사용해야 합니다. 게다가 구글은 2017년 1월부터 크롬 웹 브라우저의 새로운 버전이 HTTP 웹사이트를 “보안되지 않음”으로 표시할 것이라고 발표했습니다.
이 글에서는 AWS Certificate Manager (ACM)을 사용하여 SSL(Secure Sockets Layer) 또는 TLS(Transport Layer Security) 인증서를 생성하고 Amazon CloudFront 배포 환경에 인증서를 적용하고 HTTPS를 통해 웹 사이트와 API를 제공하는 방법을 설명합니다.
배경
HTTP(Hypertext Transfer Protocol)는 원래 서버 인증 및 전송 암호화와 같은 보안 조치 없이 제안되었습니다. 간단한 문서 검색부터 정교한 웹 애플리케이션 및 API까지 HTTP가 발전함에 따라 보안 문제가 대두되었습니다. 예를 들어 누군가가 웹 사이트의 DNS 이름을 스푸핑할 수 있는 경우(예: DNS 확인자의 구성을 변경함으로써) 사용자를 다른 웹 서버로 지정할 수 있습니다. 사용자가 예상한 대로 브라우저에 표시되는 URL이 나타나기 때문에 사용자는 이 사실을 알지 못합니다. 누군가 클라이언트와 서버 간의 네트워크 트래픽에 액세스할 수 있는 경우, 해당 사용자는 클라이언트나 서버가 이러한 악의적인 활동을 인식하지 않고 HTTP 통신에 엿듣고 내용을 읽거나 수정할 수 있습니다.
HTTP의 보안 버전으로 HTTPS(Hypertext Transfer Protocol Secure)가 도입되었습니다. SSL 또는 TLS 프로토콜을 사용하여 HTTP 통신을 전송할 수 있는 보안 채널을 생성합니다. SSL/TLS를 사용하면 디지털 인증서를 사용하여 서버를 인증할 수 있습니다. 이러한 인증서는 웹 클라이언트가 신뢰하는 CA(인증 기관)에서 디지털 서명될 수 있습니다. 인증서는 웹 사이트 스푸핑을 완화시킬 수 있으며, 이러한 스푸핑은 나중에 CA에 의해 취소될 수 있으며, 추가적인 보안을 제공합니다. 이러한 해지된 인증서는 인증 취소 목록에 있는 기관에서 게시하거나 해당 상태는 OCSP(온라인 인증서 상태 프로토콜) 응답자를 통해 제공됩니다. 보안 채널을 시작하는 SSL/TLS “핸드쉐이크”는 암호화 키를 교환하여 보안 채널을 통해 전송되는 데이터를 암호화합니다.
신뢰할 수 없는 인증서에 대한 클라이언트 응용 프로그램의 경고를 방지하려면 응용 프로그램에서 신뢰하는 CA에 인증서에 서명해야 합니다. CA에서 인증서를 받는 프로세스는 키 쌍과 인증서 서명 요청을 생성하는 것으로 시작됩니다. 인증 기관은 인증서 요청자가 인증서가 요청된 도메인의 소유자인지 확인하기 위해 다양한 방법을 사용합니다. 많은 기관은 증명서의 확인과 생성에 대해 요금을 부과합니다.
ACM 및 CloudFront를 사용하여 HTTPS 웹 사이트 및 API로 제공
웹 사이트 소유자는 인증서를 요청 및 지불하고 안전하게 저장 및 전송하고 갱신 시점에 프로세스를 반복해야 하는 부담을 안고 있습니다. ACM을 사용하면 CloudFront를 비롯한 AWS 서비스에 사용할 SSL/TLS 인증서를 쉽게 프로비저닝, 관리 및 배포할 수 있습니다. ACM은 인증서를 구매, 업로드 및 갱신하는 데 시간이 많이 걸리는 수동 프로세스를 제거합니다. ACM을 사용하면 인증서를 신속하게 요청하여 CloudFront에 배포하고 ACM에서 인증서 갱신을 처리할 수 있습니다. ACM에서 제공하는 SSL/TLS 인증서를 요청하는 것 외에도 AWS 외부에서 획득한 인증서를 가져올 수 있습니다.
CloudFront는 웹 사이트, API, 비디오 컨텐츠 및 기타 웹 자산의 제공을 가속화하는 글로벌 CDN(Content Delivery Network) 서비스입니다. 점점 더 많은 고객이 보안 프로토콜을 사용하여 웹 사이트와 API를 제공함에 따라 HTTPS를 통해 제공되는 CloudFront의 트래픽 비율은 계속 증가하고 있습니다.
CloudFront는 TLS 1.2, 완벽한 전달 보안, 2048비트 Rivest-Shamir-Adleman (RSA) 키를 사용하는 서버 인증서 및 다양한 암호화 옵션에 대한 Apple의 ATS 요구사항을 지원합니다. 자세한 내용은 지원되는 프로토콜 및 암호에서 확인하십시오.
다음 다이어그램은 ACM, CloudFront 배포 및 그 오리진, 그리고 엔드유저와 애플리케이션에 대한 HTTPS 액세스를 제공하기 위해 통합하는 방법을 보여 줍니다.
- ACM은 SSL/TLS 인증서의 생성 및 갱신을 자동화하고 지침에 따라 CloudFront 배포 및 Elastic Load Balancing load balancers와 같은 AWS 리소스에 배포합니다.
- 사용자는 HTTPS를 통해 CloudFront와 통신합니다. CloudFront는 에지 위치에서 SSL/TLS 연결을 종료합니다.
- CloudFront를 구성하여 HTTP 또는 HTTPS를 통해 원본과 통신할 수 있습니다.
CloudFront를 사용하면 HTTPS를 쉽게 적용할 수 있습니다. 기본 *.cloudfront.net 와일드카드 인증서를 제공하고 써드파티 CA에서 생성하거나 ACM에서 생성하고 관리할 수 있는 사용자 지정 인증서를 지원합니다. ACM은 먼저 인증서를 생성하고 각 리뉴얼에 대한 최초의 CloudFront 배포와 연결하는 프로세스를 자동화합니다. CloudFront는 SNI(Server Name Indication) TLS 확장(여러 HTTPS 웹 사이트를 호스팅할 때 IP 주소를 효율적으로 사용할 수 있음) 및 전용 IP SSL/TLS(SNI를 지원하지 않는 이전 브라우저 및 기존 클라이언트의 경우)를 지원합니다.
CloudFront는 HTTPS가 필요로 하는 많은 브라우저의 HTTP/2도 지원합니다. ACM을 사용하여 인증서를 만들고 CloudFront를 사용하여 SNI를 사용하면 추가 비용이 들지 않습니다. 모든 CloudFront 에지 위치는 클라이언트 근처의 SSL/TLS를 종료하고, 확장성이 뛰어나고 성능이 최적화되도록 특별히 설계된 CloudFront의 서버로 암호화를 오프로드합니다. CloudFront는 OCSP 스테이플링 및 SSL/TLS 세션 티켓과 같은 HTTPS 기능을 지원합니다.
그러한 백그라운드 정보를 유의하면서 이제 ACM에서 인증서를 생성하여 CloudFront 배포에 연결하는 방법을 보여 드리겠습니다.
ACM으로 인증서를 생성하여 CloudFront 배포에 연결
애플의 ATS 요구 사항을 준수하는 웹 사이트 및 API를 제공하려면 ACM에서 인증서를 생성하여 CloudFront 배포에 연결할 수 있습니다.
ACM으로 인증서를 생성하여 CloudFront 배포에 연결하려면 다음과 같이 하십시오.
- ACM 콘솔로 이동하여 시작을 클릭합니다.
참고: CloudFront에서 ACM 인증서를 사용하려면 미국 동부(북 버지니아) 리전에서 인증서를 요청하거나 가져와야 합니다. CloudFront 배포와 관련된 이 리전의 ACM 인증서는 해당 배포에 대해 구성된 모든 지리적 위치에 배포됩니다.
- 다음 페이지에서 인증서에 대한 웹 사이트의 도메인 이름을 입력하십시오. 해당하는 경우 여러 도메인에 입력하여 여러 웹 사이트에 동일한 인증서를 사용할 수 있습니다. 제 경우 *.leeatk.com을 입력하여 .leeatk.com으로 끝나는 도메인(제가 소유한 도메인)에 사용할 수 있는 와일드카드 인증서를 생성합니다. 검토 및 요청을 클릭합니다.
- 확정 및 요청을 클릭합니다. 이제 도메인을 소유하고 있는지 확인해야 합니다. ACM은 도메인의 Whois 레코드에 등록된 도메인 등록자, 기술 담당자 및 관리 담당자에 대한 확인 링크가 포함된 이메일을 전송합니다. 또한 ACM은 도메인 관리자(관리자, 호스트 마스터, 우체국장 및 웹 마스터)와 일반적으로 연결된 전자 메일 주소에 확인 링크를 보냅니다. ACM은 도메인 소유자가 하나 이상의 주소를 모니터링할 것으로 예상하여 동일한 확인 이메일을 모든 주소로 보냅니다. 전자 메일의 링크를 사용하여 도메인을 확인할 수 있습니다.
- 인증서의 유효성을 확인할 때까지 인증서의 상태는 보류 중인 유효성 검사를 유지합니다. *.leeatk.com에 대한 이 승인 과정을 거쳤을 때, 다음 스크린샷에 표시된 확인 이메일을 받았습니다. 확인 이메일을 받으면 전자 메일의 링크를 클릭하여 요청을 승인합니다.
- 랜딩 페이지에서 승인합니다를 클릭하면 도메인 이름에 대한 SSL/TLS 인증서를 승인했음을 확인하는 페이지가 표시됩니다.
- ACM 콘솔로 돌아가 인증서 상태가 발급되어야 합니다. 웹 페이지를 새로 고쳐야 할 수도 있습니다.
- 인증서를 생성했으므로 CloudFront 콘솔로 이동하여 인증서를 연결할 배포를 선택합니다.
- 편집을 클릭합니다. 아래로 스크롤하여 SSL 인증서로 이동하고 사용자 지정 SSL 인증서를 선택합니다. 드롭다운 목록에서 ACM에서 제공하는 인증서를 선택합니다. SNI(서버 이름 표시)를 지원하는 클라이언트만 선택합니다. SNI를 지원하지 않는 이전 클라이언트를 지원하려면 모든 클라이언트를 선택할 수 있습니다.
- 페이지 하단에서 예, 편집을 클릭하여 구성을 저장합니다.
- 이제 브라우저에서 웹 사이트를 볼 때(Firefox가 다음 스크린샷에 표시됨) 주소 표시줄에 녹색 자물쇠가 표시되어 이 페이지가 브라우저가 신뢰하는 인증서로 보안되었는지 확인합니다.
CloudFront를 구성하여 HTTP 요청을 HTTPS로 리디렉션
HTTPS를 사용하여 웹 사이트와 API의 보안을 강화할 것을 권장합니다. 따라서 HTTP 요청을 HTTPS로 리디렉션하도록 CloudFront를 구성하는 것이 좋습니다.
CloudFront를 구성하여 HTTP 요청을 HTTPS로 리디렉션하려면 다음과 같이 하십시오.
- CloudFront console로 이동하여 배포를 다시 선택한 다음 캐시 동작을 클릭합니다.
- 제 경우엔, 제 배포에서 하나의 행동을 가집니다. (더 많은 동작이 있으면 HTTP-HTTPS 리디렉션을 사용하려는 각 동작에 대해 프로세스를 반복하고 편집을 클릭합니다.) 그리고 편집을 클릭합니다.
- 뷰어 프로토콜 정책 옆에 있는 HTTP를 HTTPS로 리디렉션을 선택하고 페이지 하단의 예, 편집을 클릭합니다.
또한 웹 사이트에서 HTTP Strict Transport Security (HSTS) 정책을 사용할 수도 있습니다. 이 경우, 브라우저 및 기타 응용프로그램이 헤더 값에 지정된 기간 동안 HTTPS 요청만 하도록 지시하기 위해 원본에 Strict-Transport-Security 응답 헤더를 추가합니다. 이렇게 하면 사용자가 HTTP만 지정하는 URL을 웹 사이트에 제출하면 브라우저가 HTTPS 요청을 하게 됩니다. 또한 HTTP URL을 사용하여 웹 사이트에 연결하는 웹 사이트에도 유용합니다.
요약
CloudFront 및 ACM은 사용자와 웹 사이트 간의 보다 안전한 통신을 지원합니다. CloudFront를 사용하면 웹 사이트 및 API에 HTTPS를 적용할 수 있습니다. ACM은 SSL/TLS 인증서를 요청, 관리 및 갱신하고 이를 CloudFront와 같은 AWS 서비스에 배포하는 간단한 방법을 제공합니다. 모바일 애플리케이션 개발자와 API 제공자는 2017년 1월 마감일인 지금 CloudFront를 사용하여 Apple의 ATS 요구 사항을 보다 쉽게 충족시킬 수 있습니다.
원문 URL: https://aws.amazon.com/ko/blogs/security/how-to-help-achieve-mobile-app-transport-security-compliance-by-using-amazon-cloudfront-and-aws-certificate-manager/
** 메가존클라우드 TechBlog는 AWS BLOG 영문 게재글중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.