

# 마켓플레이스 배포를 위한 보안 체크리스트
<a name="ecommerce-security-checklist"></a>

전자 상거래 및 마켓플레이스 애플리케이션은 고객 세션, 결제 흐름, 프리미엄 콘텐츠 등 민감한 데이터를 처리합니다. 이 체크리스트는 ElastiCache(Valkey) 캐싱 계층이 포함된 CloudFront 배포와 관련된 보안 제어를 다룹니다. [보안 액세스 구성 및 콘텐츠에 대한 액세스 제한](SecurityAndPrivateContent.md)에 설명된 일반적인 CloudFront 보안 모범 사례 외에도 이러한 제어를 적용합니다.

## 프리미엄 콘텐츠를 위한 서명된 URL 및 쿠키
<a name="ecommerce-sec-signed-urls"></a>

서명된 URL 또는 서명된 쿠키를 사용하여 프리미엄 제품 미리 보기, 구매한 디지털 제품, 기간 한정 프로모션 콘텐츠 또는 판매자별 자산과 같이 권한이 필요한 콘텐츠에 대한 액세스를 제한합니다.


**서명된 URL과 서명된 쿠키 비교**  

| 방법 | 사용 상황 | 전자 상거래 예시 | 
| --- | --- | --- | 
| 서명된 URL | 개별 파일에 대한 액세스 제한 다운로드 링크 공유 쿠키를 지원하지 않는 클라이언트 | 구매한 디지털 제품에 대한 일회성 다운로드 링크 확인된 판매자의 고해상도 제품 이미지에 대한 시간 제한 액세스 | 
| 서명된 쿠키 | 여러 파일에 대한 액세스 권한 제공(예: 프리미엄 계층의 모든 자산) 기존 콘텐츠의 URL 변경 방지 | 디지털 콘텐츠의 전체 카탈로그에 대한 프리미엄 멤버십 액세스 여러 페이지에서 구독자 전용 제품 미리 보기 | 

구성 요구 사항:
+ RSA 퍼블릭 키(최소 2048비트)를 사용하여 키 그룹을 생성합니다. 애플리케이션이 서명을 생성할 수 있도록 프라이빗 키를 AWS Secrets Manager에 저장합니다.
+ 캐시 동작의 **최종 사용자 액세스 제한**을 **예**로 설정하고 키 그룹을 연결합니다.
+ 콘텐츠 유형에 적합한 만료 시간을 설정합니다. 다운로드 링크의 경우 몇 분, 브라우징 세션의 경우 몇 시간, 구독 액세스의 경우 며칠입니다.
+ IP 범위를 기준으로 제한하거나 와일드카드 경로를 허용해야 하는 경우 사용자 지정 정책(준비된 정책 아님)을 사용합니다.

구현 세부 정보는 [서명된 URL과 서명된 쿠키를 사용하여 프라이빗 콘텐츠 제공](PrivateContent.md) 단원을 참조하세요.

## Amazon S3에 대한 오리진 액세스 제어(OAC)
<a name="ecommerce-sec-oac"></a>

오리진 액세스 제어는 사용자가 CloudFront를 우회하여 Amazon S3 버킷에 직접 액세스하는 것을 방지합니다. OAC가 없으면 버킷 URL을 검색하는 모든 사용자가 서명된 URL/쿠키 적용, WAF 규칙 또는 지리적 제한을 거치지 않고도 자산에 액세스할 수 있습니다. 전체 구성 단계는 [AWS 오리진에 대한 액세스 제한](private-content-restricting-access-to-origin.md) 섹션을 참조하세요.

**모든 Amazon S3 오리진에 대해 OAC 활성화**  
OAC를 생성하고 배포의 각 Amazon S3 오리진과 연결합니다. 조건이 배포 ARN과 일치하는 CloudFront 서비스 위탁자(`cloudfront.amazonaws.com`)만 허용하도록 버킷 정책을 업데이트합니다.

**퍼블릭 액세스 제거**  
Amazon Simple Storage Service 콘솔에서 버킷에 대한 Amazon S3 Block Public Access를 활성화합니다. 이는 CloudFront 설정이 아닌 Amazon S3 설정입니다. 버킷 정책은 CloudFront에만 액세스 권한을 부여합니다. 퍼블릭 ACL 또는 정책은 필요하지 않습니다. 자세한 내용은 *Amazon Simple Storage Service* 사용 설명서의 [Amazon S3 스토리지에 대한 퍼블릭 액세스 차단](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-block-public-access.html)을 참조하세요.

**Amazon S3 REST API 엔드포인트 사용**  
Amazon S3 웹 사이트 엔드포인트가 아닌 버킷의 REST API 엔드포인트(`bucket-name.s3.amazonaws.com`)를 사용하여 오리진을 구성합니다. OAC는 REST API 엔드포인트에서만 작동합니다.

## 전송 중 암호화
<a name="ecommerce-sec-encryption-transit"></a>

뷰어에서 CloudFront로, CloudFront에서 오리진으로, 애플리케이션에서 ElastiCache 캐시로 등 요청 경로의 모든 연결을 암호화합니다.


**전송 중 암호화 구성**  

| 연결 | 설정 | 구성 | 
| --- | --- | --- | 
| 뷰어 → CloudFront | 뷰어 프로토콜 정책: HTTPS 전용 | 모든 캐시 동작에 대해 최종 사용자 프로토콜 정책을 `redirect-to-https` 또는 `https-only`로 설정합니다. TLS 1.2 최소 보안 정책(`TLSv1.2_2021`)을 사용합니다. | 
| CloudFront → S3 오리진 | 오리진 프로토콜: HTTPS | S3 REST API 엔드포인트는 기본적으로 HTTPS를 지원합니다. CloudFront는 REST API 엔드포인트 및 OAC로 오리진을 구성할 때 HTTPS를 사용합니다. | 
| CloudFront → ALB 오리진 | 오리진 프로토콜: HTTPS 전용 | 오리진 프로토콜 정책을 `https-only`로 설정합니다. ALB에 유효한 TLS 인증서를 설치합니다(AWS Certificate Manager 사용). CloudFront는 연결 시 인증서를 검증합니다. | 
| 애플리케이션 → ElastiCache | 전송 중 데이터 암호화: 활성화됨 | ElastiCache 콘솔에서 복제 그룹에 대해 `TransitEncryptionEnabled`를 활성화합니다. 이는 ElastiCache 설정입니다. 애플리케이션 코드에서 TLS 연결을 사용합니다. Valkey 및 Redis OSS 6.0 이상은 기본적으로 전송 중 암호화를 지원합니다. | 

## 캐시 클러스터용 VPC 보안 그룹
<a name="ecommerce-sec-vpc-cache"></a>

ElastiCache 클러스터는 VPC에서 실행되며 애플리케이션 서버의 연결만 수락해야 합니다. 보안 그룹 체이닝을 사용하여 액세스를 제한합니다.


**ElastiCache용 보안 그룹 구성**  

| 보안 그룹 | 인바운드 규칙 | 이론적 근거 | 
| --- | --- | --- | 
| 캐시 클러스터 SG | 애플리케이션 SG의 TCP 6379만 허용 | 애플리케이션 서버만 캐시에 도달할 수 있습니다. 인터넷 액세스는 불가하고, 다른 서비스에서의 액세스도 불가합니다. 포트 6379(기본 Valkey/Redis 포트) 또는 구성된 포트를 사용합니다. | 
| 애플리케이션 SG | ALB SG의 TCP 443만 허용 | 애플리케이션 서버가 ALB의 트래픽만 허용합니다. 캐시 클러스터 SG와 결합하면 CloudFront → ALB → 앱 → 캐시 체인이 형성됩니다. | 

추가 VPC 하드닝:
+ 인터넷 게이트웨이 경로 없이 프라이빗 서브넷에 ElastiCache 클러스터를 배포합니다.
+ 고가용성을 위해 최소 두 개의 가용 영역에 걸쳐 있는 서브넷 그룹을 사용합니다.
+ 보안 그룹 이외의 추가 인증 계층을 위해 ElastiCache 인증 토큰(암호)을 활성화합니다.
+ ElastiCache 클러스터에 대한 퍼블릭 액세스를 비활성화합니다(기본값이지만 확인 필요).

## 추가 보안 제어
<a name="ecommerce-sec-additional"></a>

**ALB 액세스를 CloudFront로만 제한**  
CloudFront가 모든 요청과 함께 보내는 사용자 지정 오리진 헤더(`X-Origin-Verify`)를 추가합니다. 이 헤더를 포함하지 않는 요청을 거부하도록 ALB 또는 애플리케이션을 구성합니다. 헤더 값을 AWS Secrets Manager에 저장하고 주기적으로 교체합니다. 또는 CloudFront 관리형 접두사 목록을 사용하여 ALB 보안 그룹 인바운드 규칙을 CloudFront IP 범위로 제한합니다.

**배포에서 AWS WAF 활성화**  
AWS WAF 웹 ACL을 속도 제한 규칙과 연결하여 장바구니 남용, 로그인 API에 대한 자격 증명 스터핑, 재고 정보 스크래핑으로부터 보호합니다. 일반적인 위협(SQL 인젝션, XSS)에는 관리형 규칙 그룹을 사용하고 애플리케이션별 패턴에는 사용자 지정 규칙을 사용합니다.

**규정 준수를 위한 지리적 제한**  
마켓플레이스가 특정 국가에서 운영되는 경우 판매 또는 배송할 법적 권한이 없는 리전의 요청을 차단하도록 지리적 제한을 활성화합니다. 배포 수준에서 적용합니다. 경로별 지리적 제한의 경우 URL 경로 조건이 있는 웹 ACL 규칙에서 AWS WAF 지리적 일치 조건을 사용합니다.

**액세스 로깅**  
CloudFront 표준 로깅 또는 실시간 로깅을 활성화하여 다운로드 링크 사용량의 갑작스러운 급증, 예상치 못한 리전으로부터의 액세스 또는 API 엔드포인트에서 반복적으로 실패한 인증 시도와 같은 비정상적인 액세스 패턴을 감지합니다.