이번 포스팅에서는 AWS의 다양한 서비스 중 하나인 ACM(Amazon Certificate Manager)의 인증서 갱신, 발급 과정에 대해 포스팅해보려고 합니다.
ACM이란?
ACM은 간단하게 말하면, SSL/TLS 인증서를 손쉽게 관리하고, 배포, 갱신할 수 있는 AWS 서비스입니다.
이 글을 작성하게 된 계기
작년 이맘때쯤 AWS서비스를 이용해서 배포한 웹 애플리케이션의 인증서가 만료된다는 이메일을 받았습니다.
이메일을 요약해보자면 이렇습니다.
- 너의 인증서가 2022년 2월 13일 만료된다.
- AWS ACM이 인증서를 자동으로 갱신하는걸 실패했으니 스스로 갱신해라.
- 기존에 이메일 검증 방식으로 인증서를 발급 받았으니, 이번에도 이메일 검증 방식 사용해라.
- DNS 검증 방식 사용하고 싶으면 DNS 검증 방식 인증서로 대체해도 된다.
- 제 시간안에 갱신 못하면 웹 애플리케이션에 접속 못할 것이다.
위 이메일을 받고, AWS Console 에 접속해서 인증서를 확인해보니, 작년 이맘때쯤 배포할 때 사용한 인증서가 "검증 대기 중" 및 "확인 대기 중"상태가 되어있는걸 봤습니다.
이번 포스팅에서는 기존에 이메일 검증 방식으로 사용 중이던 ACM 인증서를, DNS 검증 방식으로 발급받은 ACM 인증서로 교체하는 작업에 대해 기록하려 합니다.
DNS 검증 방식
DNS 검증 방식을 통해 인증서를 발급 받으려면, 사용자가 사용하려는 도메인 CNAME을 도메인 데이터베이스에 보유하고 있어야 합니다. 저 같은 경우는 도메인 데이터베이스를 AWS Route53을 사용 중입니다.
Route53에 등록되어있는 도메인은, 유일한 key-value형태로 AWS에서 부여해줍니다.
이 유일한 key-value값은 해당 CNAME 도메인 레코드가 사용자에게 소유권이 있다는 걸 증명합니다.
예를 들어 example.com 도메인과, www.example.com 도메인 2개에 대해 ACM 인증서를 요청하면, ACM은 이 2개의 도메인에 대해 각각 2개의 CNAME 레코드를 생성해줍니다. 이 각각의 CNAME 레코드는 유일한 key-value값으로 사용자의 도메인에 대한 소유권을 증명해줍니다.
ACM이 DNS검증 방식으로 이 도메인에 대한 인증서를 발급하기 위해선, 해당 CNAME 레코드는 도메인 데이터베이스, 저 같은 경우에는 Route53에 등록되어있어야 합니다.
그러면 ACM이 자동으로 30분 정도 후에 인증서를 발급해 줍니다.
이메일 검증으로 그냥 갱신하면 되지, 왜 DNS 검증 방식 인증서로 교체하려고 하나?
AWS에서는 다음과 같은 이유로 DNS검증 방식을 권장하고 있습니다.
- Route 53으로 퍼블릭 DNS 레코드를 관리하는 경우, ACM이 직접 레코드를 업데이트할 수 있음
- ACM은 인증서가 사용 중이고, DNS 레코드가 Route53 같은 도메인 데이터베이스에 잘 유지되어있으면, 인증서를 자동으로 갱신해줌
- 이메일 검증 인증서를 갱신하려면, 도메인 소유자의 작업이 필요함
2번째, 3번째 이유가 현재 글을 포스팅하는 계기가 되었습니다.
이메일 검증 방식으로 인증서를 발급받으면, 사용자가 직접 갱신해야 하고, DNS 검증 방식으로 인증서를 발급받았었으면, ACM이 자동으로 갱신을 해주기 때문입니다.
그럼, 이메일 검증 방식은 언제 사용하나요?
이메일 검증 방식은 대체로 Route53 같은 도메인 데이터베이스에 사용자의 권한이 충분하지 않거나, DNS레코드를 다루기 곤란한 상황일 때 사용하시면 됩니다.
DNS 검증 기반의 인증서로 교체하기
본격적으로 인증서 교체 작업을 위해 다음 프로세스를 진행하였습니다.
- DNS 검증을 기반으로 하는 새로운 인증서 요청하기
- 기존 인증서의 동일한 도메인(사용 중인 도메인)으로 DNS 검증 요청
- 새로운 인증서가 발급되면, ALB(Application Load Balancer)의 443 포트 리스너에서 새로운 인증서로 교체
- 정상 접속이 잘 되면, 구 인증서 삭제
1. DNS 검증을 기반으로 하는 새로운 인증서 요청하기
AWS Console -> AWS Certificate Manager에서 인증서 요청을 합니다.
퍼블릭 인증서 요청을 선택합니다.
도메인 이름에, 기존에 사용하던 도메인을 동일하게 작성합니다.
검증 방법에서 "DNS 검증"을 선택합니다.
(DNS 검증 방식을 권장하는 것을 볼 수 있습니다)
요청을 완료하면 새로운 인증서가 "검증 대기 중"이고, "사용 중 : 아니요", "부적격" 상태임을 확인할 수 있습니다.
2. 기존 인증서의 동일한 도메인(사용 중인 도메인)으로 DNS 검증 요청
해당 인증서 ID를 클릭하면, 요청한 두 도메인에 대해 AWS가 CNAME key-value값을 부여한 것을 확인할 수 있습니다.
이 값들이 추후 사용자가 이 도메인에 대한 소유권이 있다는 걸 증명하는 값입니다.
Route53에 레코드 생성을 통해 두 도메인을 도메인 데이터베이스에 등록합니다.
여기까지 하면, Route53에 해당 도메인에 대한 CNAME 레코드가 생성되고, 30분 정도 지나면 DNS검증이 완료됩니다.
구 인증서 (이메일 검증)은 상태가 발급됨, 사용 중, 갱신 자격 적격으로 되어있고,
신 인증서 (DNS 검증)은 상태가 발급됨, 사용중 X, 갱신 자격 부적격으로 되어있으면 정상입니다.
참고
이전에 DNS 검증이 안되고, 계속 "검증 대기 중"이라는 상태가 3일 이상 유지됐던 경험이 있습니다.
이 이슈는 해당 도메인에 대해 소유권을 증명하지 못해서 DNS 검증을 하지 못한 상태입니다.
하지만 기존에 이메일 방식으로 사용하던 인증서와 동일한 도메인을 작성해주신다면, 이 이슈는 발생하지 않습니다.
새로 DNS 검증 방식으로 인증서를 발급받으시는 분들은 이러한 현상이 있을 수 있으니, nslookup 명령어 등으로 해당 도메인이 사용 중인지 한번 확인해보시기 바랍니다.
3. 새로운 인증서가 발급되면, ALB(Application Load Balancer)의 443 포트 리스너에서 새로운 인증서로 교체
여태까지 잘 따라오셨다면, 새로운 인증서가 발급되고, 사용 중이지 않고, 갱신 자격이 부적격인 상태로 되어있을 것입니다.
그럼 현재 사용 중인 EC2 서비스의, 로드밸런서로 가서 443 포트 리스터를 편집해주면 됩니다.
로드밸런서의 443 리스너의 SSL 인증서 부분을 보면 구 인증서(email 검증)의 ID가 들어가 있습니다.
"인증서 보기/편집"을 클릭해줍니다.
443 리스너에 등록된 인증서를 보면 2022년 2월 14일 만료 예정인 구 인증서(email검증)가 등록되어있습니다.
상단에 + 버튼을 클릭해 방금 발급받은 신 인증서(DNS검증)를 등록해 줍니다.
신 인증서 등록을 마치면, 다시 로드밸런서 대시보드에서 443 리스너 편집을 하면 됩니다.
443 리스터 페이지 하단에 Default SSL Certificate 부분을 신 인증서(DNS 검증) ID를 선택해 등록해주면 됩니다.
리스너의 SSL 인증서 편집을 완료하고, 웹 애플리케이션에 접속하니, 접속이 잘 되는 것을 확인했습니다.
4. 정상 접속이 잘 되면, 구 인증서 삭제
정상 접속 확인을 완료해서, 구 인증서(email 인증)를 삭제해주겠습니다.
아까와 같은 443 리스너 "인증서 보기/편집"을 선택하고, - 표시를 클릭해 만료 예정인 인증서를 제거해줍니다.
그리고 AWS ACM(AWS Certificate Manager) 페이지로 이동해 구 인증서(email 검증)를 삭제해주시면 됩니다.
'AWS' 카테고리의 다른 글
[AWS] 키 페어 PEM ←→ PPK 변환 방법 (0) | 2021.01.10 |
---|
댓글