Post

[AWS-Security] 7.4. 전송 데이터 보안

[AWS-Security] 7.4. 전송 데이터 보안

1. 개요

데이터가 클라이언트와 서버 사이, 혹은 내부 리소스 간에 네트워크를 타고 이동할 때는 중간자 공격(MiTM)이나 패킷 스니핑 등을 통해 탈취되거나 변조될 위험이 있다. 이를 막기 위한 핵심은 보안 전송 프로토콜(TLS/HTTPS)의 적용네트워크 접근 제어다.

  • 중간자 공격 (MiTM) : 공격자가 클라이언트(앨리스)와 서버 사이의 통신을 중간에서 가로채어, 양측 모두 정상적으로 통신하고 있다고 착각하게 만든 뒤 데이터를 도청하거나 변조하는 공격이다.
  • 보안의 황금룰 (Golden Rule) : 절대 자신만의 암호화 프로토콜을 직접 만들지 않아야 한다. 발견하지 못한 제로데이 취약점으로 인해 통신 전체가 위험해질 수 있다. 반드시 이미 확립된 검증된 프로토콜을 사용해야 한다.

2. IAM 조건을 사용한 강제 적용

가장 일반적인 방법으로, S3 버킷 정책에 특정 조건을 추가하여 암호화되지 않은 HTTP 접근을 원천 차단한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 모든 작업에 대한 보안 전송을 강제 적용하는 S3 버킷 정책
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "s3:*",
      "Effect": "Deny",                  // 조건을 충족하는 모든 접근을 거부
      "Principal": "*",
      "Resource": [
        "arn:aws:s3:::MyBucket",         // 여러분의 버킷 ARN으로 교체 (버킷 자체)
        "arn:aws:s3:::MyBucket/*"        // 버킷  객체 (2개의 리소스 라인이 모두 필요)
      ],
      "Condition": {
        "Bool": {
          // 보안 전송 프로토콜(HTTPS)을 사용하지 '않은(false)' 요청 필터링
          "aws:SecureTransport": "false" 
        }
      }
    }
  ]
}

3. AWS Certificate Manager (ACM)를 활용한 TLS 인증서 관리

전송 중인 데이터를 암호화하려면 양단 간에 암호화 키를 안전하게 교환할 수 있게 해주는 TLS(Transport Layer Security) 인증서가 필수적이다.

  • ACM의 역할 : AWS Certificate Manager(ACM)는 이러한 SSL/TLS 인증서를 무료로 발급하고, 관리하며, 갱신까지 자동으로 처리해 주는 매우 유용한 서비스이다.
  • 인증서 발급 방식 : 도메인(ex. api.example.com)을 소유하고 있음을 증명하기 위해, 주로 Route53 등의 DNS 레코드에 특정 검증용 CNAME 값을 추가하는 ‘DNS 검증(DNS Validation)’ 방식을 사용하여 인증서를 발급 받는다.

4. 엔드포인트에 암호화 적용 및 HTTPS 강제

발급 받은 ACM 인증서는 EC2 인스턴스에 직접 설치하여 관리하기보다는, EC2 앞단의 위치한 ALB, CloudFront, API Gateway 등에 연결하는 것이 모범 사례다.

  • HTTPS 리스너 연결 : ALB에 포트 443(HTTPS)을 수신하는 리스너(Listener)를 생성하고, ACM에서 발급받은 인증서를 연결한다. 이를 통해 클라이언트와 ALB 구간의 통신이 완벽하게 암호화된다.
  • HTTP -> HTTPS 리다이렉션 강제 : 사용자가 실수로 안전하지 않은 HTTP(80 포트)로 접속할 경우를 위해 필요한 설정이다. ALB 리스너 규칙을 통해, 80 포트로 들어오는 모든 요청을 443 포트(HTTPS)로 자동 리다이렉션(Redirection) 하도록 강제한다.

5. 네트워크 제어를 통한 최소 권한 적용 (심층 방어)

프로토콜 수준에서 HTTPS를 강제했다면, 네트워크 계층(방화벽)에서도 한 번 더 잠금 장치를 걸어 심층 방어를 구현해야 한다.

  • Security Group 제어 : 애플리케이션이 오직 HTTPS 통신만 처리해야 한다면, ALB나 EC2의 Security Group 인바운드 규칙에서도 포트 80(HTTP)에 대한 허용 규칙을 제거한다.
  • 실수로 리다이렉션 규칙이 풀리더라도, 네트워크 단에서 포트 80(HTTP) 접속을 차단할 수 있다.

6. AWS WAF 및 애플리케이션 별 구성을 통한 강제 적용

  • 특정 포트(80)를 완전히 닫는 대신, 애플리케이션 앞단에 있는 AWS WAF를 사용하여 HTTP를 통한 트래픽을 명시적으로 차단하는 규칙을 구성할 수 있다.
  • 또는 RDS PostgreSQL 같은 개별 데이터베이스 엔진의 설정 파일에서 ‘SSL/TLS 연결만 허용’하도록 자체적인 보안 전송을 강제할 수도 있다.
This post is licensed under CC BY 4.0 by the author.