Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

Terraform으로 ACM 인증서 생성하기

AWS의 ACM(AWS Certificate Manager)은 AWS에서 SSL/TLS 인증서를 무료로 사용할 수 있는 서비스다. 요즘은 Let's Encrypt가 있지만, 일반적으로 SSL/TLS 인증서 비용이 꽤 크기 때문에 서비스를 AWS에서 제공하고 있다면 ACM을 이용하지 않을 이유가 없다.

내 기억이 맞는다면 예전에는 Terraform으로 ACM을 이용할 때 Data Source로만 사용할 수 있었다. 즉, AWS 웹 관리 콘솔에서 ACM 인증서를 발급하고 승인한 뒤에 이를 aws_acm_certificate 데이터 소스로 가져와서 CloudFront나 ELB 등에 연결해서 사용했다.

그러다가 최근에 AWS를 사용하다 보니 ACM을 Terrafrom에서 직접 생성할 수 있게 된 것을 발견했다.

resource "aws_acm_certificate" "demo_sideeffect_kr" {
  domain_name       = "demo.sideeffect.kr"
  validation_method = "EMAIL"
}

다른 리소스처럼 aws_acm_certificate를 이용해서 생성할 수 있다. 인증서는 승인을 해야 하는데 도메인으로 승인하거나 이메일에서 승인할 수 있다. 도메인 승인은 개인적으로 더 복잡하다고 느껴서 여기서는 이메일로 승인하는 방법을 사용했다.

ACM은 리전 내에서 생성되지만 CloudFront에서 사용하려면 버지니아 북부(us-east-1)에 인증서를 생성해야 한다. 이미 Terraform에서 사용하는 리전이 있다면 아래처럼 버지니아 북부를 위한 프로바이더를 추가하고 alias를 추가해야 한다.

provider "aws" {
  version = "~> 1.33"
  region  = "ap-northeast-1"
}

provider "aws" {
  alias   = "virginia"
  region  = "us-east-1"
}

이렇게 생성한 aliasprovider로 지정하면 이 ACM은 지정한 리전에 생성되게 된다.

resource "aws_acm_certificate" "demo_sideeffect_kr" {
  provider          = "aws.virginia"

  domain_name       = "demo.sideeffect.kr"
  validation_method = "EMAIL"
}

terraform apply로 적용하고 나면 아래처럼 인증서의 승인을 요청하는 이메일이 등록된 이메일로 전달된다.

ACM 승인 메일

이메일을 승인하면 인증서 발급이 완료된다. 이렇게 생성한 인증서를 aws_acm_certificate.demo_sideeffect_kr.id 등으로 가져와서 사용할 수 있다. 문서에 따르면 EMAIL을 승인 대신 DOMAIN 승인을 이용하면 Terraform을 이용해서 바로 Route53 레코드를 생성해서 승인할 수도 있지만, 개인적으로 Route53에 불필요한 레코드가 생성되는 걸 좋아하지 않는 편이라 그냥 이메일 승인을 사용하고 있다.

ACM과 관련해서 aws_acm_certificate_validation도 있는데 이는 해당 ACM이 승인되는지 기다리는 역할을 한다. 도메인 인증을 사용한다면 레코드를 생성하고 DOMAIN으로 승인되는 과정을 확인하게 되겠지만 EMAIL 승인을 사용한다면 메일에서 확인할 때까지 그냥 계속 기다리게 된다. 그래서 EMAIL 승인을 사용하는 경우에는 굳이 aws_acm_certificate_validation를 사용할 필요 없이 aws_acm_certificate만 사용하고 이메일로 승인하는 것으로 충분해 보인다.

2018/08/28 02:08 2018/08/28 02:08