[AWS] Secrets Manager와 ACM을 활용한 안전한 비밀 관리 및 HTTPS 설정

궁금하면 500원·2024년 12월 1일
0

데브옵스

목록 보기
13/36

AWS Secrets Manager와 Certificate Manager(ACM)을 활용한 안전한 비밀 관리 및 HTTPS 설정

오늘은 AWS에서 제공하는 두 가지 중요한 서비스인 AWS Secrets Manager와 AWS Certificate Manager (ACM)에 대해 알아보겠습니다.

이 서비스들은 각각 비밀 관리와 TLS 인증서 관리를 담당하며, 안전한 애플리케이션 운영을 지원합니다.

또한, API Gateway와의 연동을 통해 HTTPS를 설정하는 방법도 함께 소개하겠습니다.

✨ AWS Secrets Manager란?

AWS Secrets Manager는 애플리케이션에서 사용하는 민감한 정보를 안전하게 저장하고 관리하는 서비스입니다.

예를 들어, 데이터베이스 연결 정보나 API 키와 같은 중요한 데이터를 저장할 수 있습니다.

주요 기능

  • 시크릿 로테이션

매일 자동으로 시크릿이 변경되도록 로테이션을 돌릴 수 있습니다.
이를 위해 AWS Lambda를 활용하여 자동화된 로테이션 작업을 설정할 수 있습니다.

  • KMS를 통한 암호화

저장되는 모든 시크릿은 AWS KMS(Key Management Service)를 사용하여 암호화됩니다. 이로 인해 민감한 정보가 유출되지 않도록 보호할 수 있습니다.

  • 리전 간 시크릿 복제

AWS Secrets Manager는 리전 간에 시크릿을 복제할 수 있어 여러 지역에서 동일한 시크릿을 사용할 수 있습니다.

예를 들어, ap-northeast-2 리전에서 생성된 Primary 시크릿을 us-west-2 리전에서 읽기 전용 레플리카로 사용할 수 있습니다.

AWS Secrets Manager 예시 코드 (시크릿 로테이션)

import boto3
from botocore.exceptions import ClientError

def rotate_secret():
    client = boto3.client('secretsmanager')

    try:
        # 시크릿을 조회합니다
        response = client.get_secret_value(SecretId='your-secret-id')
        print("Secret Value:", response['SecretString'])
        
        # 새 시크릿 값 생성 (예: 새로운 DB 비밀번호)
        new_secret_value = generate_new_secret()
        
        # 시크릿을 업데이트합니다
        client.update_secret(SecretId='your-secret-id', SecretString=new_secret_value)
        print("Secret updated successfully.")
    
    except ClientError as e:
        print("Error rotating secret:", e)

def generate_new_secret():
    # 새로운 시크릿 값 생성 로직 (예: 랜덤 비밀번호)
    return "new_random_secret_value"

🔐 AWS Certificate Manager(ACM)란?

AWS Certificate Manager (ACM)은 TLS(Transport Layer Security) 인증서를 쉽게 제공하고 관리하는 서비스입니다.

HTTPS 통신을 설정하려면 인증서를 발급받아야 하는데, ACM은 이를 간편하게 처리합니다.

주요 기능

  • 자동 갱신
    퍼블릭 TLS 인증서는 ACM을 통해 무료로 제공되며, 만료 60일 전 자동으로 갱신됩니다.
    만약 자동 갱신을 하지 않으면, 새로운 인증서를 수동으로 가져와야 합니다.

  • 지원하는 서비스
    ACM은 ALB(Application Load Balancer), NLB(Network Load Balancer), CloudFront, API Gateway와 쉽게 통합할 수 있습니다.
    하지만 EC2와는 직접 연동할 수 없습니다.

TLS 인증서 발급 예시 (ACM)

1. 도메인 이름 인증

  • FQDN (Fully Qualified Domain Name) 또는 Wildcard Domain을 사용하여 인증서를 요청합니다.

    	예: corp.example.com 또는 *.example.com.

2.Validation 방법

  • DNS Validation(자동으로 도메인 소유권을 인증하는 방법)을 선호합니다.
  • Email Validation(WHOIS DB에 등록된 이메일 주소로 인증 요청)이 가능합니다.

🌐 AWS API Gateway와 ACM의 연동

API Gateway는 API를 호스팅하는 서비스로, HTTPS 요청을 안전하게 처리하려면 TLS 인증서가 필요합니다. ACM과 연동하여 이를 손쉽게 설정할 수 있습니다.

API Gateway 엔드포인트 타입

1. 엣지-최적화(Edge-optimized)

글로벌 클라이언트를 위한 최적화된 타입으로, CloudFront를 통해 요청을 라우팅하여 지연을 완화할 수 있습니다.

2. Regional

같은 리전 내에서만 사용할 수 있는 타입으로, 더 많은 제어가 가능합니다.

3. Private

특정 VPC나 VPC 엔드포인트에서만 접근할 수 있는 엔드포인트입니다.

ACM과 API Gateway 연동 예시

1. 커스텀 도메인 생성

먼저 API Gateway에 커스텀 도메인을 생성하고, ACM에서 발급한 TLS 인증서를 연동합니다.

2. CNAME 또는 A 레코드 설정

Route 53에서 CNAME 또는 A-Alias 레코드를 설정하여 도메인을 API Gateway와 연결합니다.

# Route 53에서 CNAME 레코드 설정 예시
CNAME api.example.com -> your-api-id.execute-api.region.amazonaws.com

3. API Gateway의 TLS 인증서

인증서는 API Gateway와 동일한 리전에서 가져와야 하며, API Stage에 연결해야 합니다.

📌 결론

AWS Secrets Manager와 Certificate Manager(ACM)은 각기 다른 역할을 하며, 애플리케이션 보안과 운영을 강화하는 중요한 도구입니다.

Secrets Manager는 민감한 정보를 안전하게 저장하고 관리하며, ACM은 HTTPS 통신을 위한 인증서를 자동으로 발급하고 갱신합니다.

API Gateway와의 연동을 통해 안전하고 효율적인 HTTPS 설정이 가능합니다.

참고자료

profile
꾸준히, 의미있는 사이드 프로젝트 경험과 문제해결 과정을 기록하기 위한 공간입니다.

0개의 댓글