CloudFront 배포에 상호 TLS 활성화
사전 조건 및 요구 사항
CloudFront의 상호 TLS 확인 모드에서는 모든 클라이언트가 TLS 핸드셰이크 중에 유효한 인증서를 제시하고 유효한 인증서가 없는 연결을 거부해야 합니다. CloudFront 배포에서 상호 TLS를 활성화하기 전에 다음을 확인해야 합니다.
인증 기관 인증서로 트러스트 스토어를 생성함
트러스트 스토어가 CloudFront 배포와 연결됨
모든 배포 캐시 동작이 HTTPS 전용 뷰어 프로토콜 정책을 사용함
배포에서 HTTP/2를 사용하고 있음(기본 설정, HTTP/3에서는 뷰어 mTLS가 지원되지 않음)
참고
상호 TLS 인증에는 뷰어와 CloudFront 간의 HTTPS 연결이 필요합니다. HTTP 연결을 지원하는 캐시 동작이 있는 배포에서는 mTLS를 활성화할 수 없습니다.
상호 TLS 활성화(콘솔)
새 배포의 경우
CloudFront 콘솔에서 새 배포를 생성하는 과정에서는 뷰어 mTLS를 구성할 수 없습니다. 먼저 모든 방법(콘솔, CLI, API)으로 배포를 생성한 다음 배포 설정을 편집하여 아래 기존 배포 지침에 따라 뷰어 mTLS를 활성화합니다.
기존 배포의 경우
AWS Management Console에 로그인한 다음 https://console.aws.amazon.com/cloudfront/v4/home
에서 CloudFront 콘솔을 엽니다. -
배포 목록에서 수정하려는 배포를 선택합니다.
-
모든 캐시 동작의 뷰어 프로토콜 정책을 HTTP를 HTTPS로 리디렉션 또는 HTTPS 전용으로 설정해야 합니다. (캐시 동작 탭을 선택하여 HTTP 프로토콜 정책으로 캐시 동작을 보고 업데이트할 수 있습니다.)
-
일반 탭을 선택합니다.
-
설정 섹션에서 편집을 선택합니다.
-
연결성 섹션에서 뷰어 상호 인증(mTLS)을 찾습니다.
-
상호 인증 활성화를 켜기로 전환합니다.
-
클라이언트 인증서 검증 모드에서 필수(모든 클라이언트가 인증서를 제시해야 함) 또는 선택 사항(클라이언트가 선택적으로 인증서를 제공할 수 있음)을 선택합니다.
-
트러스트 스토어에서 이전에 생성한 트러스트 스토어를 선택합니다.
-
(선택 사항) TLS 핸드셰이크 중에 CloudFront가 클라이언트에 CA 이름을 보내도록 하려면 트러스트 스토어 CA 이름 알리기를 전환합니다.
-
(선택 사항) 만료된 인증서와의 연결을 허용하려면 인증서 만료 날짜 무시를 전환합니다.
-
변경 사항 저장을 선택합니다.
상호 TLS 활성화(AWS CLI)
새 배포의 경우
다음 예제에서는 mTLS 설정을 포함하는 배포 구성 파일(distribution-config.json)을 생성하는 방법을 보여줍니다.
{ "CallerReference": "cli-example-1", "Origins": { "Quantity": 1, "Items": [ { "Id": "my-origin", "DomainName": "example.com", "CustomOriginConfig": { "HTTPPort": 80, "HTTPSPort": 443, "OriginProtocolPolicy": "https-only" } } ] }, "DefaultCacheBehavior": { "TargetOriginId": "my-origin", "ViewerProtocolPolicy": "https-only", "MinTTL": 0, "ForwardedValues": { "QueryString": false, "Cookies": { "Forward": "none" } } }, "ViewerCertificate": { "CloudFrontDefaultCertificate": true }, "ViewerMtlsConfig": { "Mode": "required", "TrustStoreConfig": { "TrustStoreId": {TRUST_STORE_ID}, "AdvertiseTrustStoreCaNames": true, "IgnoreCertificateExpiry": true } }, "Enabled": true }
다음 예제 명령을 사용하여 mTLS가 활성화된 배포를 생성합니다.
aws cloudfront create-distribution --distribution-config file://distribution-config.json
기존 배포의 경우
다음 예제 명령을 사용하여 현재 배포 구성을 가져옵니다.
aws cloudfront get-distribution-config --id E1A2B3C4D5E6F7 --output json > dist-config.json
파일을 편집하여 mTLS 설정을 추가합니다. 배포 구성에 다음 예제 섹션을 추가합니다.
"ViewerMtlsConfig": { "Mode": "required", "TrustStoreConfig": { "TrustStoreId": {TRUST_STORE_ID}, "AdvertiseTrustStoreCaNames": true, "IgnoreCertificateExpiry": true } }
파일에서 ETag 필드를 제거하되 값을 별도로 저장합니다.
다음 예제 명령을 사용하여 배포를 새 구성으로 업데이트합니다.
aws cloudfront update-distribution \ --id E1A2B3C4D5E6F7 \ --if-match YOUR-ETAG-VALUE \ --distribution-config file://dist-config.json
뷰어 프로토콜 정책
상호 TLS를 사용하는 경우 모든 배포 캐시 동작을 HTTPS 전용 뷰어 프로토콜 정책으로 구성해야 합니다.
-
HTTP를 HTTPS로 리디렉션 - 인증서 검증을 수행하기 전에 HTTP 요청을 HTTPS로 리디렉션합니다.
-
HTTPS 전용 - HTTPS 요청만 수락하고 인증서 검증을 수행합니다.
참고
HTTP 연결은 인증서 검증을 수행할 수 없으므로 HTTP 및 HTTPS 뷰어 프로토콜 정책은 상호 TLS에서 지원되지 않습니다.
다음 단계
CloudFront 배포에서 뷰어 TLS를 활성화한 후 연결 함수를 연결하여 사용자 지정 인증서 검증 로직을 구현할 수 있습니다. 연결 함수를 사용하면 사용자 지정 검증 규칙, 인증서 해지 확인 및 로깅을 통해 기본 제공 mTLS 인증 기능을 확장할 수 있습니다. 연결 함수 생성 및 연결에 대한 자세한 내용은 CloudFront 연결 함수 연결 섹션을 참조하세요.