ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    댓글

Designed by Tistory.