본문 바로가기

AWS

ACM 멀티 인증서 적용하기

ACM은 AWS안에서 ALB, Cloudfront 등 웹을 통해 https를 통해 들어오는 경우 제공해주는 인증서 서비스이다.

https://docs.aws.amazon.com/ko_kr/acm/latest/userguide/acm-overview.html

 

AWS Certificate Manager이란 무엇입니까? - AWS Certificate Manager

AWS Certificate Manager이란 무엇입니까? AWS Certificate Manager(ACM)는 AWS 웹 사이트와 애플리케이션을 보호하는 퍼블릭 및 프라이빗 SSL/TLS X.509 인증서와 키를 만들고, 저장하고, 갱신하는 복잡성을 처리합

docs.aws.amazon.com

 

ACM의 장점

- 외부에서 구매시 비싼 인증서를 AWS 리소스 안에서 무료로 사용할 수 있게 해준다.

- 여러 리소스에 붙일 수 있기 때문에 관리가 수월하다.

- 최대 100개까지의 레코드를 제공하여 여러 도메인을 한 인증서에서 관리가 가능하다.

 

ACM의 단점

- AWS 리소스 밖을 벗어나면 쓸 수가 없다.

- 생성 후 레코드 추가 및 수정이 되지않아 수정이 필요시 재 생성 후 일일이 수정해 주어야 함.

 

일반적으로 도메인을 등록시 아래와 같은 형태로 등록을 진행한다.

- test.com

- *.test.com

 

하지만 서비스 자체가 여러 도메인을 사용하게 되는 경우 ACM을 도메인 하나씩 만들다 보면 문제가 발생한다.

- ALB 최대 ACM 추가는 50 max

- rule set은 최대 100개 (이론상 500 도메인)

https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-limits.html

 

Quotas for your Application Load Balancers - Elastic Load Balancing

Quotas for your Application Load Balancers Your AWS account has default quotas, formerly referred to as limits, for each AWS service. Unless otherwise noted, each quota is Region-specific. You can request increases for some quotas, and other quotas cannot

docs.aws.amazon.com

 

하지만 나의 경우엔 200+ 도메인을 해결해야 하는 상황이다.

 

ACM 인증서는 Web Console에서도 한땀 한땀 추가해가며 넣을 수 있다.

그렇게 하는 것도 가능하겠지만, ACM 하나당 total 50개가 넘는 도메인에 wild card 도메인까지 처리하려면 손으로 넣다보면 분명 휴먼 에러가 생긴다. (오타 및 누락 등등)

실수하면 다시 만들어야 하기 때문에 도저히 이걸 손으로 할 수는 없었다.

 

그래서 AWS Cli를 사용하여 처리하기로 했다.

 

1. 먼저 엑셀에 적용할 고객사 레코드 정리

2. 다른 시트에 cli용 스크립트 작성

aws acm request-certificate --domain-name cert1.test.com --subject-alternative-names \
'test.com' \
'test1.com' \
'test2.com' \
'*.test.com' \
'*.test1.com' \
'*.test2.com' \
--validation-method DNS \
--region {region_code}

완성하면 위와 같은 스크립트로 만들어진다.

 

기존에 ACM 레코드용 DNS가 세팅 되어 있다면 문제 없이 자동으로 등록이 되지만 재수가 없으면 일부 레코드들이 변경 되는 케이스가 있을 수 있다.

그 경우 일일이 하나씩 레코드를 찾아서 고객사 DNS를 수정하여 다시 설정해야만 한다.

 

모든 도메인이 성공해야 ACM이 attach할 수 있도록 설정 된다.

 

이런 방식으로 하여 cert1, cert2, cert3 여러개 인증서를 만들고 ALB에 Attach하면, Multi ACM으로 50개의 도메인이 아닌 최대 2500개의 도메인을 한 ALB에서 감당할 수 있다.

 

ACM 전체 카운트 : ((루트 + 와일드카드) * 49)+cert# 도메인 => ACM당 49개 고객사 도메인 처리 가능

 

단, 모든 고객사가 루트 도메인을 www로 돌리는 방법을 사용할 수는 없다.

왜냐 하면 ALB당 rule set이 100개 밖에 적용되지 않고 한 rule set 당 5개를 받아들이기 때문이다.

 

루트 도메인을 www 도메인으로 돌리는 트래픽을 고객사의 외부 DNS에서 돌리도록 할 수 있다면 충분히 여러개를 사용할 것으로 보이지만 기본적으로는 안된다고 봐야 하는 것이 맞을 것으로 보인다.

 

하지만 관리의 문제로 변경한 뒤 기존의 인증서는 삭제하는 것이 편할 것이다.

 

나의 경우, 테라폼으로 인프라 코드를 이전하며 ACM 또한 관리영역에 포함했다.

좀 더 편하게 작업할 수 있게 되긴 했지만, 결국 ACM 도메인 목록도 별도로 엑셀 시트로 관리하고 있다...

 

주의 : 브라우저에서 ssl 인증서를 클릭해서 열면 멀티로 연결된 도메인 리스트가 같이 나오는 문제가 발생할 수 있어서 도메인이 노출이 보안에 위협이 될 수 있는 사항이라면 해당 기능을 사용하지 말아야 함.