-
ALB에 ACM으로 생성한 공인 인증서 적용 절차(feat.terraform)AWS 2023. 3. 21. 00:20
이 글에서는 Amazon Web Services(AWS) Application Load Balancer(ALB)에 HTTPS를 추가하는 방법을 설명합니다.
이를 위해 ACM(AWS Certificate Manager)에서 SSL/TLS 인증서를 발급하고, ALB에 리스너를 추가하는 과정을 다룹니다.
1. ACM에서 인증서 발급
먼저, 필요한 도메인에 대해 SSL/TLS 인증서를 발급받아야 합니다.
여기서는 *.dev.example.com를 등록하고, dev.example.com 도메인도 사용하기 위해
dev.examle.com은 SAN(Subject Alternative Name)으로 등록하여 인증서를 발급받습니다.
인증서를 발급받을 때, 검증 방식으로 DNS 검증을 선택합니다.
2. Route 53에 CNAME 레코드 등록ACM에서 인증서 발급 절차를 진행하면, DNS 검증을 위한 CNAME 레코드 정보를 얻을 수 있습니다.
미리 생성해 둔 Route 53 호스팅 영역에 이 정보를 사용하여 CNAME 레코드를 등록합니다.
3. 인증서 유효성 검사CNAME 레코드가 올바르게 추가되었는지 확인하기 위해 ACM에서 인증서 유효성 검사를 진행합니다.
DNS 레코드가 올바르게 설정되면 인증서의 상태가 '발급됨(Issued)'으로 변경됩니다.
4. ALB에 HTTPS 리스너 추가인증서가 발급되면, 이제 ALB에 HTTPS 리스너를 추가할 차례입니다. ALB 설정 페이지에서 리스너를 추가하고,
프로토콜을 HTTPS로 설정합니다.
발급받은 인증서를 선택하고 리스너를 생성합니다.
이제 ALB에 HTTPS가 추가되었으며, 해당 도메인으로 HTTPS 통신이 가능합니다.이렇게 AWS ALB에 HTTPS를 추가하는 방법을 통해 보안을 강화하고, 사용자에게 안전한 연결을 제공할 수 있습니다.
다음은 Terraform code입니다.
// ACM에서 공인인증서 생성 resource "aws_acm_certificate" "cert" { domain_name = "*.${var.subdomain}.${data.aws_route53_zone.domain.name}" subject_alternative_names = ["${var.subdomain}.${data.aws_route53_zone.domain.name}"] validation_method = "DNS" tags = var.tags lifecycle { create_before_destroy = true } } // Route53에 ACM에서 생성한 CNAME 레코드를 추가 resource "aws_route53_record" "cert" { for_each = { for dvo in aws_acm_certificate.cert.domain_validation_options : dvo.domain_name => { name = dvo.resource_record_name record = dvo.resource_record_value type = dvo.resource_record_type } } allow_overwrite = true name = each.value.name records = [each.value.record] ttl = 60 type = each.value.type zone_id = data.aws_route53_zone.domain.zone_id } // 인증서 유효성 검사 - cert에서 생성한 레코드들이 모두 들어 있는지 확인 resource "aws_acm_certificate_validation" "cert" { certificate_arn = aws_acm_certificate.cert.arn validation_record_fqdns = [for record in aws_route53_record.cert : record.fqdn] } // HTTPS Listener에 인증서 추가하기 resource "aws_lb_listener" "alb-https" { load_balancer_arn = aws_lb.lb.arn port = 443 protocol = "HTTPS" default_action { type = "forward" target_group_arn = aws_lb_target_group.alb-http.arn } certificate_arn = aws_acm_certificate.cert.arn tags = var.tags }
참고로 저도 잘 모르기 때문에 틀린 내용이 있을 수 있습니다.
반응형'AWS' 카테고리의 다른 글
다중 AWS Profile 사용 (0) 2023.10.31 ECS Fargate 환경에서 JMX Exporter 이용한 prometheus metric 수집 (0) 2023.06.25 AWS Auto Scaling 실습 (0) 2021.08.02 NAT Instance port-forwarding (0) 2021.08.01 AWS ELB(ALB, NLB) 실습 (0) 2021.07.30