AWS Certificate Manager를 사용한 인증서 관리 - Amazon CloudFront

AWS Certificate Manager를 사용한 인증서 관리

AWS Certificate Manager(ACM)는 상호 TLS(오리진) 인증 중에 CloudFront가 오리진 서버에 제시하는 클라이언트 인증서를 저장합니다.

인증 기관 지원

CloudFront 상호 TLS(오리진)는 TLS 클라이언트 인증을 위해 확장 키 사용(EKU)이 포함된 클라이언트 인증서를 필요로 합니다. 이 요구 사항으로 인해 인증 기관에서 인증서를 발급하고 AWS Certificate Manager로 가져와야 합니다. 상호 TLS(오리진) 클라이언트 인증서에는 ACM의 자동 인증서 프로비저닝 및 갱신 기능을 사용할 수 없습니다. CloudFront 상호 TLS(오리진)는 다음 두 소스의 클라이언트 인증서를 지원합니다.

  • AWS 프라이빗 인증 기관: 확장 키 사용 필드에 TLS 클라이언트 인증이 포함된 인증서 템플릿(예: EndEntityClientAuthCertificate 템플릿)을 사용하여 AWS Private CA에서 인증서를 발급할 수 있습니다. AWS Private CA에서 인증서를 발급한 후에는 미국 동부(버지니아 북부) 리전(us-east-1)의 ACM으로 인증서를 가져와야 합니다. 이 접근 방식을 사용하면 인증서 수명 주기 관리에 대한 제어력을 유지하면서 AWS Private CA의 보안 이점을 누릴 수 있습니다.

  • 서드파티 프라이빗 인증 기관: 기존 프라이빗 인증 기관 인프라에서 인증서를 발급하고 ACM으로 가져올 수도 있습니다. 이렇게 하면 CloudFront의 상호 TLS(오리진) 기능을 활용하면서 현재 인증서 관리 프로세스를 유지할 수 있습니다. 인증서는 확장 키 사용 필드에 TLS 클라이언트 인증을 포함해야 하며 인증서, 프라이빗 키 및 인증서 체인이 포함된 PEM 형식이어야 합니다.

중요

AWS 프라이빗 CA와 서드파티 CA 모두에 대해 인증서 만료 날짜를 모니터링하고 만료 전에 갱신된 인증서를 ACM으로 가져오는 것은 사용자의 책임입니다. ACM의 자동 갱신 기능은 상호 TLS(오리진)에 사용되는 가져온 인증서에는 적용되지 않습니다.

인증서 요구 사항 및 사양

클라이언트 인증서 요구 사항

  • 형식: PEM(Privacy Enhanced Mail) 형식

  • 구성 요소: 인증서, 프라이빗 키 및 인증서 체인

  • 최대 인증서 체인 깊이: 3(리프 인증서 + 중간 인증서 + 루트 인증서)

  • 최대 인증서 체인 크기: 64KB

  • 인증서 크기: 96KB를 초과할 수 없음

  • 최대 프라이빗 키 크기: 5KB(ACM 제한)

  • CloudFront 배포 생성 또는 업데이트 API 직접 호출당 추가하거나 수정할 수 있는 최대 고유 오리진 mTLS 인증서 ARN 수: 5

  • 리전: 인증서는 미국 동부(버지니아 북부) 리전(us-east-1)의 ACM에 저장되어야 합니다.

지원되는 인증서 사양

  • 인증서 유형: X.509v3

  • 퍼블릭 키 알고리즘:

    • RSA: 2048비트

    • ECDSA: P-256

  • 서명 알고리즘:

    • RSA를 사용하는 SHA256, SHA384, SHA512

    • ECDSA를 사용하는 SHA256, SHA384, SHA512

    • MGF1 지원 RSASSA-PSS를 사용하는 SHA256, SHA384, SHA512

  • 확장 키 사용(필수): 인증서는 mTLS 용도로 사용하기 위해 TLS 클라이언트 인증으로 설정된 확장 키 사용(EKU) 확장 기능을 필요로 합니다.

서버 인증서 요구 사항

오리진 서버는 상호 TLS 핸드셰이크 중에 공개적으로 신뢰할 수 있는 인증 기관의 인증서를 제시해야 합니다. 오리진 서버 인증서 요구 사항에 대한 자세한 내용은 CloudFront에서 SSL/TLS 인증서를 사용하기 위한 요구 사항을 참조하세요.

인증서 요청 또는 가져오기

상호 TLS(오리진)를 활성화하기 전에 ACM에서 사용할 수 있는 클라이언트 인증서가 있어야 합니다.

AWS Private CA에서 인증서 요청 및 가져오기

사전 조건:

  • 계정에 구성된 AWS Private Certificate Authority

  • AWS Private CA에서 인증서를 발급할 수 있는 권한

  • ACM으로 인증서를 가져올 수 있는 권한

  • 사용 사례에 적합한 Extended key usage:TLS web client authentication이 포함된 인증서 템플릿 ARN

  • OpenSSL, AWS CLI 및 jq(JSON 구문 분석용)를 설치합니다.

PCA에서 인증서를 요청하고 ACM으로 가져오는 방법(AWS CLI)
  1. 쉽게 재사용할 수 있도록 변수에 프라이빗 CA ARN을 설정합니다.

    PCA_ARN="arn:aws:acm-pca:region:account:certificate-authority/12345678..."
  2. OpenSSL을 사용하여 ECDSA P-256 프라이빗 키(prime256v1 곡선) 및 인증서 서명 요청(CSR)을 생성하고, ACM 가져오기에 필요한 대로 프라이빗 키를 암호화되지 않은 상태로 유지하기 위해 -node 플래그를 사용합니다.

    openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -nodes \ -keyout private.key \ -out request.csr \ -subj "/CN=client.example.com"
  3. AWS Private CA에 CSR을 제출하여 인증서를 발급하면 새로 발급된 인증서의 ARN이 반환됩니다.

    CERT_ARN=$(aws acm-pca issue-certificate \ --certificate-authority-arn "$PCA_ARN" \ --csr fileb://request.csr \ --signing-algorithm "SHA256WITHECDSA" \ --validity Value=365,Type="DAYS" \ --template-arn arn:aws:acm-pca:::template/EndEntityCertificate/V1 \ --query 'CertificateArn' --output text)
  4. get-certificate 명령을 사용하여 AWS PCA에서 인증서 번들을 검색합니다. 이 명령은 리프 인증서와 체인을 모두 반환합니다. 그런 다음 jq를 사용하여 이들을 별도의 파일로 분리합니다.

    # Retrieve the full certificate bundle in JSON format aws acm-pca get-certificate \ --certificate-authority-arn "$PCA_ARN" \ --certificate-arn "$CERT_ARN" \ --output json > full_cert.json # Split into Leaf and Chain jq -r '.Certificate' full_cert.json > leaf_cert.pem jq -r '.CertificateChain' full_cert.json > cert_chain.pem
  5. CLI에서 이진 파일 데이터를 올바르게 처리하도록 fileb:// 프로토콜을 사용하여 암호화되지 않은 프라이빗 키, 리프 인증서 및 인증서 체인을 AWS ACM으로 가져옵니다.

    aws acm import-certificate \ --certificate fileb://leaf_cert.pem \ --private-key fileb://private.key \ --certificate-chain fileb://cert_chain.pem \ --region us-east-1 \ --query 'CertificateArn' \ --output text

서드파티 CA에서 인증서 가져오기

사전 조건:

  • 인증 기관에서 발급한 인증서, 암호화되지 않은 프라이빗 키 및 인증서 체인(PEM 형식)

  • 인증서에는 TLS 클라이언트 인증을 위한 확장 키 사용이 포함되어야 함

  • ACM으로 인증서를 가져올 수 있는 권한

인증서를 ACM으로 가져오는 방법(AWS CLI)
aws acm import-certificate \ --certificate fileb://certificate.pem \ --private-key fileb://private-key.pem \ --certificate-chain fileb://certificate-chain.pem \ --region us-east-1 \ --query 'CertificateArn' \ --output text

다음 단계

ACM에서 클라이언트 인증서를 획득하거나 가져온 후에는 오리진 서버에서 상호 TLS 인증을 요구하도록 구성하고 CloudFront 배포에서 상호 TLS(오리진)를 활성화할 수 있습니다. CloudFront에서 상호 TLS(오리진)를 활성화하는 방법에 대한 지침은 다음 섹션인 "CloudFront 배포에 상호 TLS(오리진) 활성화"를 참조하세요.