CloudFront 연결 함수 및 KVS를 사용한 해지
CloudFront 연결 함수를 KeyValueStore와 결합하여 상호 TLS 인증에 대한 인증서 해지 확인을 구현할 수 있습니다. 이 접근 방식은 CloudFront의 기본 제공 인증서 검증을 보완하는 확장형 실시간 인증서 해지 메커니즘을 제공합니다.
연결 함수는 CloudFront 엣지 로케이션에서 TLS 연결 설정 중에 실행되는 JavaScript 함수로, mTLS 인증을 위한 사용자 지정 인증서 검증 로직을 구현할 수 있습니다. 연결 함수에 대한 자세한 내용은 CloudFront 연결 함수 연결 섹션을 참조하세요.
연결 함수에서 인증서 해지 작동 방식
CloudFront의 표준 인증서 검증은 인증서 체인, 서명 및 만료를 확인하지만 내장 인증서 해지 확인은 포함하지 않습니다. 연결 함수를 사용하면 TLS 핸드셰이크 중에 사용자 지정 해지 확인을 구현할 수 있습니다.
인증서 해지 프로세스는 다음과 같이 작동합니다.
-
해지된 인증서 일련 번호를 CloudFront KeyValueStore에 저장합니다.
-
클라이언트가 인증서를 제시하면 연결 함수가 간접 호출됩니다.
-
함수는 KeyValueStore에 대해 인증서의 일련 번호를 확인합니다.
-
스토어에서 일련 번호를 찾으면 인증서가 해지됩니다.
-
함수는 해지된 인증서에 대한 연결을 거부합니다.
이 접근 방식은 CloudFront의 글로벌 엣지 네트워크에서 해지 확인을 실시간에 가깝게 제공합니다.
해지된 인증서에 대한 KeyValueStore 설정
먼저 KeyValueStore를 생성하여 해지된 인증서의 일련 번호를 저장합니다.
KeyValueStore를 생성하는 방법(콘솔)
AWS Management 콘솔에 로그인한 다음 https://console.aws.amazon.com/cloudfront/v4/home
에서 CloudFront 콘솔을 엽니다. -
탐색 창에서 키 값 스토어를 선택합니다.
-
키 값 스토어 생성을 선택합니다.
-
키 값 스토어의 이름(예: revoked-certificates)을 입력합니다.
-
(선택 사항) 설명을 추가합니다.
-
키 값 스토어 생성을 선택합니다.
KeyValueStore를 생성하려면(AWS CLI)
다음 예제에서는 KeyValueStore를 생성하는 방법을 보여줍니다.
aws cloudfront create-key-value-store \ --name "revoked-certificates" \ --comment "Store for revoked certificate serial numbers"
해지된 인증서 일련 번호 가져오기
KeyValueStore를 생성한 후 해지된 인증서의 일련 번호를 가져와야 합니다.
해지 데이터 준비
해지된 인증서 일련 번호를 사용하여 JSON 파일을 생성합니다.
{ "data": [ { "key": "ABC123DEF456", "value": "" }, { "key": "789XYZ012GHI", "value": "" } ] }
S3에서 가져오기
-
이 JSON 파일을 S3 버킷에 업로드합니다.
-
파일을 KeyValueStore로 가져옵니다.
aws cloudfront create-key-value-store \ --name "revoked-certificates" \ --import-source '{ "SourceType": "S3", "SourceARN": "arn:aws:s3:::amzn-s3-demo-bucket1/revoked-serials.json" }'
해지 확인을 위한 연결 함수 생성
KeyValueStore에 대해 인증서 일련 번호를 확인하는 연결 함수를 생성합니다.
연결 함수 코드 예제
다음 예제에서는 인증서 해지 확인을 수행하는 연결 함수를 보여줍니다.
import cf from 'cloudfront'; async function connectionHandler(connection) { const kvsHandle = cf.kvs(); // Get client certificate serial number const clientSerialNumber = connection.clientCertificate.certificates.leaf.serialNumber; // Check if the serial number exists in the KeyValueStore const isRevoked = await kvsHandle.exists(clientSerialNumber.replaceAll(':', '')); if (isRevoked) { console.log(`Certificate ${clientSerialNumber} is revoked. Denying connection.`); connection.logCustomData(`REVOKED:${clientSerialNumber}`); connection.deny(); } else { console.log(`Certificate ${clientSerialNumber} is valid. Allowing connection.`); connection.allow(); } }
연결 함수를 생성하려면(AWS CLI)
다음 예제에서는 KeyValueStore 연결을 사용하여 연결 함수를 생성하는 방법을 보여줍니다.
aws cloudfront create-connection-function \ --name "revocation-checker" \ --connection-function-config '{ "Comment": "Certificate revocation checking function", "Runtime": "cloudfront-js-2.0", "KeyValueStoreAssociations": { "Quantity": 1, "Items": [ { "KeyValueStoreARN": "arn:aws:cloudfront::123456789012:key-value-store/revoked-certificates" } ] } }' \ --connection-function-code fileb://revocation-checker.js
함수를 배포에 연결합니다.
연결 함수를 생성하고 게시한 후 CloudFront 연결 함수 연결 섹션에 설명된 대로 mTLS 지원 CloudFront 배포와 연결합니다.