

# 트러스트 스토어 및 인증서 관리
<a name="trust-stores-certificate-management"></a>

트러스트 스토어를 생성하고 구성하는 것은 CloudFront와의 상호 TLS 인증을 구현하기 위한 필수 요구 사항입니다. 트러스트 스토어에는 CloudFront가 인증 프로세스 중에 클라이언트 인증서를 검증하는 데 사용하는 인증 기관(CA) 인증서가 포함되어 있습니다.

## 트러스트 스토어란 무엇인가요?
<a name="what-is-trust-store"></a>

트러스트 스토어는 CloudFront가 상호 TLS 인증 중에 클라이언트 인증서를 검증하는 데 사용하는 CA 인증서의 리포지토리입니다. 트러스트 스토어에는 클라이언트 인증서를 인증하기 위한 신뢰 체인을 구성하는 루트 및 중간 CA 인증서가 포함되어 있습니다.

CloudFront와 상호 TLS를 구현하면 트러스트 스토어는 유효한 클라이언트 인증서를 발급하기 위해 신뢰할 수 있는 인증 기관을 정의합니다. CloudFront는 TLS 핸드셰이크 중에 트러스트 스토어에 대해 각 클라이언트 인증서를 검증합니다. 트러스트 스토어의 CA 중 하나에 연결된 인증서를 제공하는 클라이언트만 성공적으로 인증됩니다.

CloudFront의 트러스트 스토어는 여러 배포와 연결할 수 있는 계정 수준 리소스입니다. 이를 통해 CA 인증서 관리를 간소화하면서 전체 CloudFront 배포에서 일관된 인증서 검증 정책을 유지할 수 있습니다.

## 인증 기관 지원
<a name="ca-support"></a>

CloudFront는 AWS 프라이빗 인증 기관과 타사 프라이빗 인증 기관에서 발급한 인증서를 지원합니다. 이러한 유연성을 통해 기존 인증서 인프라를 사용하거나 조직 요구 사항에 따라 AWS 관리형 인증서 서비스를 활용할 수 있습니다.
+ **AWS 프라이빗 인증 기관:** 관리형 프라이빗 인증 기관 서비스를 제공하는 AWS Private CA에서 발급한 인증서를 사용할 수 있습니다. 이 통합은 인증서 수명 주기 관리를 간소화하고 다른 AWS 서비스와의 원활한 통합을 제공합니다.
+ **타사 프라이빗 인증 기관:** 엔터프라이즈 CA 또는 기타 타사 인증서 공급자를 포함하여 기존 프라이빗 인증 기관 인프라의 인증서를 사용할 수도 있습니다. 이렇게 하면 CloudFront의 mTLS 기능을 추가하면서 현재 인증서 관리 프로세스를 유지할 수 있습니다.

## 인증서 요구 사항 및 사양
<a name="certificate-requirements"></a>

트러스트 스토어에는 포함된 CA 인증서에 대한 특정 요구 사항이 있습니다.

### CA 인증서 형식 요구 사항
<a name="ca-cert-format-requirements"></a>
+ **형식:** PEM(Privacy Enhanced Mail) 형식
+ **콘텐츠 경계:** 인증서는 -----BEGIN CERTIFICATE----- 및 -----END CERTIFICATE----- 경계 내에 묶여야 합니다.
+ **주석:** 앞에는 \# 문자를 붙여야 하며 - 문자를 포함할 수 없습니다.
+ **줄 바꿈:** 인증서 사이에 빈 줄이 허용되지 않습니다.

### 지원되는 인증서 사양
<a name="supported-cert-specs"></a>
+ **인증서 유형:** X.509v3
+ **퍼블릭 키 유형:**
  + RSA 2048, RSA 3072, RSA 4096
  + ECDSA: secp256r1, secp384r1
+ **서명 알고리즘:**
  + RSA를 사용하는 SHA256, SHA384, SHA512
  + EC를 사용하는 SHA256, SHA384, SHA512
  + MGF1 지원 RSASSA-PSS를 사용하는 SHA256, SHA384, SHA512

### 예제 인증서 번들 형식
<a name="example-cert-bundle"></a>

여러 인증서(PEM 인코딩):

```
# Root CA Certificate
-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAKoK/OvD/XqiMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
aWRnaXRzIFB0eSBMdGQwHhcNMTcwNzEyMTU0NzQ4WhcNMjcwNzEwMTU0NzQ4WjBF
MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50
ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
CgKCAQEAuuExKvY1xzHFylsHiuowqpmzs7rEcuuylOuEszpFp+BtXh0ZuEtts9LP
-----END CERTIFICATE-----
# Intermediate CA Certificate
-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAKoK/OvD/XqjMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
aWRnaXRzIFB0eSBMdGQwHhcNMTcwNzEyMTU0NzQ4WhcNMjcwNzEwMTU0NzQ4WjBF
MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50
ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
CgKCAQEAuuExKvY1xzHFylsHiuowqpmzs7rEcuuylOuEszpFp+BtXh0ZuEtts9LP
-----END CERTIFICATE-----
```

## 트러스트 스토어 생성
<a name="create-trust-store"></a>

트러스트 스토어를 생성하기 전에 PEM 형식의 CA 인증서 번들을 Amazon S3 버킷에 업로드해야 합니다. 인증서 번들에는 클라이언트 인증서를 검증하는 데 필요한 신뢰할 수 있는 모든 루트 및 중간 CA 인증서가 포함되어야 합니다.

CA 인증서 번들은 트러스트 스토어를 생성할 때 S3에서 한 번만 읽습니다. CA 인증서 번들을 나중에 변경하는 경우 트러스트 스토어를 수동으로 업데이트해야 합니다. 트러스트 스토어와 S3 CA 인증서 번들 간에 동기화가 유지되지 않습니다.

### 사전 조건
<a name="trust-store-prerequisites"></a>
+ Amazon S3 버킷에 업로드된 인증 기관(CA)의 인증서 번들
+ CloudFront 리소스를 생성하는 데 필요한 권한

### 트러스트 스토어를 생성하려면(콘솔)
<a name="create-trust-store-console"></a>

1. AWS Management Console에 로그인한 다음 [https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)에서 CloudFront 콘솔을 엽니다.

1. 탐색 창에서 **트러스트 스토어**를 선택합니다.

1. **트러스트 스토어 생성**을 선택합니다.

1. **트러스트 스토어 이름**에 트러스트 스토어의 이름을 입력합니다.

1. **인증 기관(CA) 번들**의 경우 PEM 형식 CA 인증서 번들에 Amazon S3 경로를 입력합니다.

1. **트러스트 스토어 생성**을 선택합니다.

### 트러스트 스토어를 생성하려면(AWS CLI)
<a name="create-trust-store-cli"></a>

```
aws cloudfront create-trust-store \
  --name MyTrustStore \
  --ca-certificates-bundle-source '{"CaCertificatesBundleS3Location":{"Bucket":"my-bucket","Key":"ca-bundle.pem","Region":"{{bucket-region}}"}}' \
  --tags Items=[{Key=Environment,Value=Production}]
```

## 트러스트 스토어를 배포와 연결
<a name="associate-trust-store"></a>

트러스트 스토어를 생성한 후에는 이를 CloudFront 배포와 연결하여 상호 TLS 인증을 활성화해야 합니다.

### 사전 조건
<a name="associate-prerequisites"></a>
+ HTTPS 전용 뷰어 프로토콜 정책이 활성화되고 HTTP3 지원이 비활성화된 기존 CloudFront 배포입니다.

### 트러스트 스토어를 연결하려면(콘솔)
<a name="associate-trust-store-console"></a>

CloudFront 콘솔 내에서 트러스트 스토어 세부 정보 페이지 또는 배포 설정 페이지를 통해 트러스트 스토어를 연결할 수 있는 두 가지 방법이 있습니다.

**트러스트 스토어 세부 정보 페이지를 통해 트러스트 스토어 연결:**

1. AWS Management Console에 로그인한 다음 [https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)에서 CloudFront 콘솔을 엽니다.

1. 탐색 창에서 **트러스트 스토어**를 선택합니다.

1. 연결할 트러스트 스토어의 이름을 선택합니다.

1. **배포에 연결**을 선택합니다.

1. 사용 가능한 뷰어 mTLS 옵션을 구성합니다.
   + **클라이언트 인증서 검증 모드:** 필수 모드와 선택 모드 중에서 선택합니다. 필수 모드에서는 모든 클라이언트가 인증서를 제시해야 합니다. 선택적 모드에서는 인증서를 제공하는 클라이언트가 검증되는 반면, 인증서를 제공하지 않는 클라이언트는 액세스가 허용됩니다.
   + **트러스트 스토어 CA 이름 알림:** TLS 핸드셰이크 중에 트러스트 스토어의 CA 이름을 클라이언트에 알릴지 여부를 선택합니다.
   + **인증서 만료 날짜 무시:** 만료된 인증서와의 연결을 허용할지 여부를 선택합니다(다른 검증 기준은 계속 적용됨).
   + **연결 함수:** 선택적 연결 함수를 연결하여 다른 사용자 지정 기준에 따라 연결을 허용/거부할 수 있습니다.

1. 트러스트 스토어와 연결할 배포를 하나 이상 선택합니다. HTTP3가 비활성화되고 HTTPS 전용 캐시 동작이 있는 배포만 뷰어 mTLS를 지원할 수 있습니다.

1. **연결**을 선택합니다.

**배포 설정 페이지를 통해 트러스트 스토어 연결:**

1. AWS Management Console에 로그인한 다음 [https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)에서 CloudFront 콘솔을 엽니다.

1. 연결하려는 배포를 선택합니다.

1. **일반** 탭의 **설정** 컨테이너에서 오른쪽 상단 모서리에 있는 **편집**을 선택합니다.

1. 페이지 하단까지 아래로 스크롤하여 **연결** 컨테이너 내에서 **뷰어 mTLS** 스위치를 켭니다.

1. 사용 가능한 뷰어 mTLS 옵션을 구성합니다.
   + **클라이언트 인증서 검증 모드:** 필수 모드와 선택 모드 중에서 선택합니다. 필수 모드에서는 모든 클라이언트가 인증서를 제시해야 합니다. 선택적 모드에서는 인증서를 제공하는 클라이언트가 검증되는 반면, 인증서를 제공하지 않는 클라이언트는 액세스가 허용됩니다.
   + **트러스트 스토어 CA 이름 알림:** TLS 핸드셰이크 중에 트러스트 스토어의 CA 이름을 클라이언트에 알릴지 여부를 선택합니다.
   + **인증서 만료 날짜 무시:** 만료된 인증서와의 연결을 허용할지 여부를 선택합니다(다른 검증 기준은 계속 적용됨).
   + **연결 함수:** 선택적 연결 함수를 연결하여 다른 사용자 지정 기준에 따라 연결을 허용/거부할 수 있습니다.

1. 오른쪽 하단 모서리에서 **변경 사항 저장**을 선택합니다.

### 트러스트 스토어를 연결하려면(AWS CLI)
<a name="associate-trust-store-cli"></a>

트러스트 스토어는 DistributionConfig.ViewerMtlsConfig 속성을 통해 배포에 연결할 수 있습니다. 즉, 먼저 배포 구성을 가져온 다음 후속 UpdateDistribution 요청에서 ViewerMtlsConfig를 제공해야 합니다.

```
// First fetch the distribution
aws cloudfront get-distribution {DISTRIBUTION_ID}

// Update the distribution config, for example:
Distribution config, file://distConf.json: 
{
  ...other fields,
  ViewerMtlsConfig: {
    Mode: 'required',
    TrustStoreConfig: {
        AdvertiseTrustStoreCaNames: false,
        IgnoreCertificateExpiry: true,
        TrustStoreId: {TRUST_STORE_ID}
    }
  }
}

aws cloudfront update-distribution \
   --id {DISTRIBUTION_ID} \
   --if-match {ETAG} \
   --distribution-config file://distConf.json
```

## 트러스트 스토어 관리
<a name="manage-trust-stores"></a>

### 트러스트 스토어 세부 정보 보기
<a name="view-trust-store-details"></a>

1. AWS Management Console에 로그인한 다음 [https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)에서 CloudFront 콘솔을 엽니다.

1. 탐색 창에서 **트러스트 스토어**를 선택합니다.

1. 트러스트 스토어 이름을 선택하여 세부 정보 페이지를 봅니다.

세부 정보 페이지에는 다음이 표시됩니다.
+ 트러스트 스토어 이름 및 ID
+ CA 인증서 수
+ 생성 날짜 및 마지막 수정 날짜
+ 연결된 배포
+ Tags

### 트러스트 스토어 수정
<a name="modify-trust-store"></a>

CA 인증서 번들을 교체하려면:

1. AWS Management Console에 로그인한 다음 [https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)에서 CloudFront 콘솔을 엽니다.

1. 탐색 창에서 **트러스트 스토어**를 선택합니다.

1. 트러스트 스토어의 이름을 선택합니다.

1. **작업**을 선택한 다음 **편집**을 선택합니다.

1. **인증 기관(CA) 번들**에 업데이트된 CA 번들 PEM 파일의 Amazon S3 위치를 입력합니다.

1. **트러스트 스토어 업데이트**를 선택합니다.

### 트러스트 스토어 삭제
<a name="delete-trust-store"></a>

**사전 조건:** 먼저 모든 CloudFront 배포에서 트러스트 스토어의 연결을 해제해야 합니다.

1. AWS Management Console에 로그인한 다음 [https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)에서 CloudFront 콘솔을 엽니다.

1. 탐색 창에서 **트러스트 스토어**를 선택합니다.

1. 트러스트 스토어의 이름을 선택합니다.

1. **트러스트 스토어 삭제**를 선택합니다.

1. [**삭제**]를 선택하여 확인합니다.

### 다음 단계
<a name="trust-store-next-steps"></a>

트러스트 스토어를 생성하고 CloudFront 배포와 연결한 후 배포에서 상호 TLS 인증을 활성화하고 인증서 헤더를 오리진에 전달하는 등의 추가 설정을 구성할 수 있습니다. 배포에서 mTLS를 활성화하는 방법에 대한 자세한 지침은 [CloudFront 배포에 상호 TLS 활성화](enable-mtls-distributions.md) 섹션을 참조하세요.