

# 추가 검증 모드
<a name="mtls-validation-modes"></a>

필수 모드는 CloudFront 상호 TLS의 기본값입니다. CloudFront는 모든 클라이언트 인증서를 검증하고 실패한 연결을 거부합니다. 그러나 mTLS 인증 클라이언트와 미인증 클라이언트를 혼합하여 제공하는 애플리케이션 또는 오리진 서버가 자체 mTLS 검증을 수행하는 환경과 같은 추가 사용 사례를 지원하기 위해 CloudFront는 두 가지 추가 모드를 지원합니다.

**선택적 모드**는 클라이언트 모집단이 혼합된 애플리케이션을 위해 설계되었습니다. 예를 들어, API 엔드포인트를 유효한 인증서를 제공하는 클라이언트로 제한하면서 인증되지 않은 브라우저에 퍼블릭 콘텐츠를 제공하는 포털입니다. 또는 클라이언트를 mTLS에 점진적으로 온보딩하고 전환 중에 인증된 연결과 인증되지 않은 연결을 모두 허용해야 하는 마이그레이션 시나리오입니다.

**패스스루 모드**는 오리진 서버가 이미 mTLS 검증을 수행하는 고객을 위해 설계되었습니다. 예를 들어, 인증서 확인을 이미 처리하는 온프레미스 역방향 프록시, 기타 CDN 또는 Application Load Balancer에서 마이그레이션하는 서비스입니다. 패스스루 모드를 사용하면 엣지에서 검증 로직을 다시 구현하지 않고도 애플리케이션 앞에 CloudFront를 배치할 수 있습니다.

## 선택적 모드
<a name="optional-mode-details"></a>

### 클라이언트 인증서 검증 선택적 모드
<a name="optional-mode-overview"></a>

CloudFront는 제공된 클라이언트 인증서를 검증하지만 인증서를 제시하지 않는 클라이언트에 대한 액세스를 허용하는 선택적 클라이언트 인증서 검증 모드를 제공합니다.

### 선택적 모드 동작
<a name="optional-mode-behavior-details"></a>
+ 유효한 인증서가 있는 클라이언트에 대한 연결을 부여합니다(잘못된 인증서는 거부됨).
+ 인증서 없이 클라이언트에 연결을 허용합니다.
+ 단일 배포를 통해 혼합 클라이언트 인증 시나리오를 허용합니다.

선택적 모드는 mTLS 인증으로 점진적으로 마이그레이션하거나, 인증서가 있는 클라이언트 및 인증서가 없는 클라이언트를 지원하거나, 레거시 클라이언트와의 이전 버전 호환성을 유지하는 데 적합합니다.

**참고**  
선택적 모드에서는 클라이언트가 인증서를 제시하지 않더라도 연결 함수가 계속 간접 호출됩니다. 이를 통해 클라이언트 IP 주소 로깅 또는 인증서 제시 여부에 따라 다른 정책 적용과 같은 사용자 지정 로직을 구현할 수 있습니다.

### 선택적 모드를 구성하려면(콘솔)
<a name="configure-optional-mode-console-new"></a>

1. 배포 설정에서 **일반** 탭으로 이동하여 **편집**을 선택합니다.

1. **연결성** 컨테이너 내의 **뷰어 상호 인증(mTLS)** 섹션으로 스크롤합니다.

1. **클라이언트 인증서 검증 모드**에서 **선택 사항**을 선택합니다.

1. 변경 내용을 저장합니다.

### 선택적 모드를 구성하려면(AWS CLI)
<a name="configure-optional-mode-cli-new"></a>

다음 예제에서는 선택적 모드를 구성하는 방법을 보여줍니다.

```
"ViewerMtlsConfig": {
    "Mode": "optional",
    ...other settings
}
```

**인증서 헤더 사용자 지정**

뷰어 요청 CloudFront Functions의 mTLS 헬퍼 함수를 사용하여 요청이 오리진에 도달하기 전에 인증서 헤더의 이름을 바꾸거나, 형식을 바꾸거나, 결합합니다. 이는 다른 헤더 이름 또는 인증서 인코딩 형식을 사용하는 다른 서비스에서 마이그레이션할 때 유용합니다.

## 패스스루 모드
<a name="passthrough-mode-details"></a>

패스스루 모드를 사용하면 오리진에 기존 mTLS 구현이 있는 고객이 CloudFront를 사용할 수 있습니다. CloudFront는 TLS 연결을 종료하고 클라이언트 인증서를 HTTP 헤더로 오리진에 전달합니다. 오리진은 체인 확인, 해지 확인, 사용자 지정 정책 적용 등 모든 인증서 검증을 수행합니다.

### 패스스루 모드 작동 방식
<a name="passthrough-how-it-works"></a>

1. 클라이언트는 CloudFront에 연결하고 TLS 핸드셰이크 중에 클라이언트 인증서를 제시합니다.

1. CloudFront는 트러스트 스토어에 대해 인증서를 검증하지 않고 TLS 핸드셰이크를 완료합니다.

1. CloudFront는 클라이언트 인증서와 인증서 체인을 요청에 HTTP 헤더로 추가합니다.

1. 요청이 오리진으로 전달됩니다. 캐싱된 콘텐츠가 없습니다.

1. 오리진은 인증서를 검증하고 요청을 처리합니다.

클라이언트는 인증서를 제시하지 않고도 연결할 수도 있습니다. 오리진 또는 연결 함수는 빈 인증서 시나리오를 처리합니다.

**참고**  
패스스루 모드에서는 클라이언트가 인증서를 제시하지 않더라도 연결 함수가 계속 간접 호출됩니다. 이를 통해 클라이언트 IP 주소 로깅 또는 인증서 제시 여부에 따라 다른 정책 적용과 같은 사용자 지정 로직을 구현할 수 있습니다.

### 구성 요구 사항
<a name="passthrough-configuration-requirements"></a>
+ **트러스트 스토어 없음** - 배포에는 제로 트러스트 스토어 연결이 있어야 합니다.
+ **캐싱 비활성화됨** - 모든 캐시 동작은 관리형 `CachingDisabled` 캐시 정책을 사용해야 합니다.
+ **Origin Shield 금지됨** - Origin Shield를 활성화할 수 없습니다.
+ **Lambda@Edge 금지됨** - Lambda@Edge 함수 연결은 허용되지 않습니다.
+ **오리진 요청 정책 필요** - 오리진이 수신하려면 오리진 요청 정책의 `Client-Cert` 및 `Client-Cert-Chain` 헤더를 허용 목록에 추가해야 합니다.
+ **Certificate-chain-depth** - CloudFront를 사용하면 클라이언트 인증서 체인을 오리진으로 전달할 수 있는 최대 깊이가 4입니다.

### 패스스루 모드 활성화
<a name="enable-passthrough-mode"></a>

#### 콘솔
<a name="enable-passthrough-console"></a>

1. 관리형 캐시 정책을 사용하도록 모든 `CachingDisabled` 캐시 동작을 업데이트합니다.

1. CloudFront 콘솔을 열고 배포를 선택합니다.

1. **일반** 탭을 선택한 후 설정 아래의 **편집**을 선택합니다.

1. **최종 사용자 상호 인증(mTLS)**에서 **패스스루**를 선택합니다.

1. **변경 사항 저장**을 선택합니다.

#### AWS CLI
<a name="enable-passthrough-cli"></a>

모든 캐시 동작이 관리형 `CachingDisabled` 정책을 참조하는지 확인한 다음 배포 구성을 업데이트합니다.

```
{
  "ViewerMtlsConfig": {
    "Mode": "passthrough"
  }
}
```

### 오리진으로 전달된 헤더
<a name="passthrough-headers-forwarded"></a>

CloudFront는 오리진으로 전송된 요청에 다음 헤더를 추가합니다.
+ `Client-Cert` - 클라이언트가 제공하는 최종 엔터티(리프) 인증서로, base64로 인코딩됩니다.
+ `Client-Cert-Chain` - 구조화된 필드 목록으로서 인증서 체인(리프 제외)입니다. 각 인증서는 base64로 인코딩됩니다. `Client-Cert-Chain`은 목록 유형 헤더입니다. 요청에 여러 번 나타날 수 있습니다. 모든 값을 연결하면 원래 체인 순서가 유지됩니다. 클라이언트가 단일 인증서만 제시하면 `Client-Cert-Chain`이 생략됩니다.

CloudFront는 실제 인증서 데이터를 추가하기 전에 클라이언트 요청에서 수신 `Client-Cert` 또는 `Client-Cert-Chain` 헤더를 삭제합니다. 이렇게 하면 헤더 스푸핑이 방지됩니다.

**인증서 헤더 사용자 지정**

뷰어 요청 CloudFront Functions의 mTLS 헬퍼 함수를 사용하여 요청이 오리진에 도달하기 전에 인증서 헤더의 이름을 바꾸거나, 형식을 바꾸거나, 결합합니다. 이는 다른 헤더 이름 또는 인증서 인코딩 형식을 사용하는 다른 서비스에서 마이그레이션할 때 유용합니다.