[AWS SAA-C03] AWS CloudFront 보안

CloudFront 보안

  • CloudFront 보안은 여러가지 특징을 가진다.
    = 유휴상태 및 전송 시 암호화 지원
    = 특정 지리적 위치의 사용자가 콘텐츠에 액세스하지 못하도록 방지
    = HTTPS 연결 구성
    = 서명된 URL 또는 쿠키를 사용하여 선택한 사용자의 액세스를 제한
    = 오리진 액세스 ID(OAI)를 사용하여 S3 버킷의 콘텐츠에 대한 액세스를 제한하여 사용자가 파일의 직접 URL을 사용하지 못하도록 한다.
    = 특정 내용 필드에 대한 필드 수준 암호화 설정
    = AWS WAF 웹 ACL을 사용하여 웹 액세스 제어 목록(웹 ACL)을 작성하여 내용에 대한 액세스를 제한
    = 특정 지리적 위치의 사용자가 CloudFront 배포를 통해 제공되는 콘텐츠에 액세스하지 못하도록하려면 지리적 제한(geoblocking)을 설정
    = 디도스 공격으로부터 보호하기 위한 AWS Shield와의 통합

데이터 보호

  • CloudFront는 중지 시 암호화와 전송 시 암호화를 모두 지원한다.
  • CloudFront는 전송 중 암호화 기능을 제공하며 구성할 수 있다.
    = CloudFront가 뷰어와 통신할 때 연결이 암호화되도록 뷰어가 HTTPS를 사용하여 파일을 요청하도록 요구한다.
    = HTTPS를 사용하여 오리진에서 파일을 가져오므로 CloudFront가 오리진과 통신할 때 연결이 암호화된다.
    = HTTPS는 뷰어 프로토콜 정책 및 오리진 프로토콜 정책을 사용하여 시행할 수 있다.
  • CloudFront는 유휴 상태의 암호화 기능을 제공한다.
    = POP(Edge Location Point of Presense)용으로 암호화된 SSD와 REC(Regional Edge Cache)용으로 암호화된 EBS 볼륨을 사용한다.
    = 함수 코드 및 구성은 항상 암호화된 SSD의 에지 위치 및 POP 및 CloudFront에서 사용하는 다른 저장 위치에 암호화된 형식으로 저장된다.

뷰어 액세스 제한

개인 컨텐츠 제공(Serving Private Content)

  • CloudFront를 사용하여 개인 컨텐츠를 안전하게 제공하려면
    = 사용자에게 다음 제한 사항이 있는 특별한 CloudFront 서명 URL 또는 서명된 쿠키를 사용하여 개인 컨텐츠에 액세스하도록 요구
    . URL이 더 이상 유효하지 않은 종료 날짜 및 시간
    . URL이 유효해지는 날짜 및 시간
    . URL이 액세스할 IP 주소 또는 주소 범위
    = 사용자가 S3 URL이 아닌 CloudFront URL만을 사용하여 S3 콘텐츠에 액세스하도록 요구한다. CloudFront URL을 요구하는 것은 필수가 아니지만, 사용자가 서명된 URL이나 서명된 쿠키에 지정된 제한을 무시하는 것을 방지하는 것을 권장한다.
  • 서명된 URL 또는 서명된 쿠키는 HTTP 서버를 오리진으로 사용하여 CloudFront와 함께 사용할 수 있다. 콘텐츠에 공개적으로 액세스할 수 있어야 하며 콘텐츠의 직접 URL을 공유하지 않도록 주의해야 한다.
  • Origin 제한은 다음과 같이 적용할 수 있다.
    = S3의 경우 OAI(Origin Access ID)를 사용하여 버킷 정책 또는 개체 ACL을 사용하여 CloudFront 액세스만 허용하고 다른 액세스 권한은 제거한다.
    = 로드 밸런서 또는 HTTP 서버의 경우 Origin에서 요청이 CloudFront에서 왔는지 확인하는 데 사용할 수 있는 CloudFront에서 사용자 지정 헤더를 추가할 수 있다.
    = 사용자 지정 오리진은 CloudFront IP로부터의 트래픽만 허용하도록 구성할 수도 있다. CloudFront 관리 접두사 목록을 사용하여 CloudFront의 오리진 방향 서버에서만 오리진으로 들어오는 인바운드 트래픽을 허용하여 비 CloudFront 트래픽이 오리진으로 도달하는 것을 방지할 수있다.
  • 신뢰할 수 있는 서명자(Trusted Signer)
    = 서명된 URL 또는 서명된 쿠키를 만드려면 활성 CloudFront 키 쌍이 있는 하나 이상의 AWS 계정(신뢰할 수 있는 서명자)가 필요하다.
    = AWS 계정이 배포에 신뢰할 수 있는 서명자로 추가되면 CloudFront는 사용자가 서명된 URL 또는 서명된 쿠키를 사용하여 개체에 액세스하도록 요구하기 시작한다.
    = 신뢰할 수 있는 서명자의 키 쌍에서 URL 또는 큌의 일부에 서명하는 개인 키. 누군가 제한된 개체를 요청하면 CloudFront는 URL 또는 쿠키의 서명된 부분과 서명되지 않은 부분을 비교하여 URL 또는 쿠키가 변조되지 않았는지 확인한다. CloudFront는 또한 만료 날짜와 시간이 지나지 않은 경우 등에 대해 URL 또는 쿠키가 유효한지 확인한다.
    = CloudFront 서명된 URL 또는 서명된 쿠키를 만드는 데 사용되는 각 Trusted 서명자 AWS 계정에는 고유한 활성 CloudFront 키 쌍이 있어야 한다. 이 키 쌍은 자주 순환해야 한다.
    각 캐시 동작 또는 RTMP 배포에 대해 최대 5개의 신뢰할 수 있는 서명자를 할당할 수 있다.

서명된 URLs vs. 서명된 Cookies

  • CloudFront 서명된 URL과 서명된 쿠키는 콘텐츠를 보호하고 콘텐츠에 액세스할 수 있는 사용자를 결정하는 제어 기능을 제공한다.
  • 다음의 경우 서명된 URL을 사용한다.
    = 개별 파일(예: 응용프로그램에 대한 설치 다운로드)에 대한 액세스를 제한한다.
    = 쿠키를 지원하지 않는 사용자 지정 HTTP 클라이언트와 같은 클라이언트를 사용하는 사용자
  • 다음의 경우 서명된 쿠키를 사용한다.
    = HLS형식의 모든 비디오 파일 또는 웹 사이트의 가입자 영역에 있는 모든 파일과 같은 여러 제한된 파일에 대한 액세스를 제공한다.
    = 현재 URL을 변경하지 않는다.
    = 서명된 URL이 서명된 쿠키보다 우선하다. 서명된 URL과 서명된 쿠키가 모두 동일한 파일에 대한 액세스를 제어하는 데 사용되고 서명된 URL을 요청하는 경우 CloudFront는 서명된 URL만 기반으로 파일을 뷰어로 반환할 지 여부를 결정한다.

사용자 지정 정책과 캔(Canned)정책 비교

  • 사용자 지정 정책 또는 캔 정책은 서명된 URL에서 사용하는 정책 문으로, 만료 날짜 및 시간과 같은 제한 사항을 정의하는 데 큰 도움이 된다.
설명 Canned 정책 사용자 지정 정책
하나의 정책 구문을 다양한 객체에 할당 가능한지 여부 No Yes
사용자가 콘텐츠에 액세스할 수 있는 날짜 및 시간 지정 가능 여부  No  Yes(Optional)
사용자가 콘텐츠를 사용하지 않을 때 접근의 해제 가능 여부 Yes Yes
콘텐츠에 접근가능한 IP 및 IP 범위 설정 가능 여부 No Yes(optional)
서명된 URL에는 정책의 Base64 인코딩 버전이 포함되어 있으며, 대기 URL 생성여부 No Yes
  • CloudFront는 이벤트 시작 시 만료 시간을 확인한다.
  • 사용자가 용량이 큰 개체를 다운로드하고 있고 URL이 만료된 경우라도 다운로드는 계속되며 RTMP 배포의 경우도 동일하다.
  • 그러나 사용자가 범위 GET을 요청하거나 비디오를 스트리밍하는 동안 다른 이벤트를 트리거할 수 있는 다른 위치로 건너뛰는 경우 요청이 실패한다.

S3 Origin Accss Identity(OAI)

  • OAI(Origin Access Identity)를 사용하여 사용자가 S3에서 개체에 직접 액세스하는 것을 방지할 수 있다.
  • S3 오리진 객체는 공개 읽기 권한을 부여받아야 하므로 객체는 S3와 CloudFront에서 모두 접근할 수 있다.
  • CloudFront는 기본 S3 URL을 노출하지 않지만, 직접 공유하거나 애플리케이션에서 사용하면 사용자에게 공개될 수 있다.
  • CloudFront 서명된 URL 또는 서명된 쿠키를 사용하려면 사용자가 S3 객체에 직접 액세스하는 것을 방지해야 한다.
  • S3 객체에 직접 액세스하려면 사용자는 다음을 준수해야 한다.
    = 사용자가 더 이상 콘텐츠에 액세스할 수 없고 IP 주소를 사용하여 콘텐츠에 액세스할 수 있는 날짜 시간 제어와 같은 CloudFront 서명된 URL 또는 서명된 쿠키에서 제공하는 제어를 무시한다.
    = CloudFront 액세스 로그는 불완전하기 때문에 유용하지 않다.
  • 특별한 CloudFront 사용자인 오리진 액세스 ID를 생성하고 배포와 연결할 수 있다.
  • S3 버킷/개체 사용 권한은 OAI에만 액세스할 수 있도록 구성해야 한다.
  • 사용자가 CloudFront에서 객체에 액세스할 때 S3 객체의 직접 액세스가 제한되는 동안 OAI를 사용하여 사용자를 대신하여 콘텐츠를 가져온다.

Custom Header

  • 사용자 지정 헤더는 Origin에서 CloudFront에서 요청이 왔는지 확인하는 데 사용할 수 있으며 CloudFront에서 추가할 수 있다.
  • 뷰어는 웹 사이트 또는 응용 프로그램에 액세스하고 이미지 파일 및 HTML 파일과 같은 하나 이상의 파일을 요청한다.
  • DNS는 요청을 가장 잘 처리할 수 있는 CloudFront Edge Location(일반적으로 대기 시간 측면에서 가장 가까운 Edge location)으로 라우팅한다.
  • edge location에서 AWS WAF는 구성된 웹 ACL 규칙에 따라 수신 요청을 검사한다.
  • edge location에서 CloudFront는 요청된 콘텐츠에 대한 캐시를 확인한다.
    = 콘텐츠가 캐시에 있으면 CloudFront가 사용자에게 반환된다.
    = 콘텐츠가 캐시에 없는 경우 CloudFront는 사용자 지정 헤더인 X-Origin-Verify를 Secrets Manager의 비밀 값과 함께 추가하고 요청을 오리진으로 전달한다.
  • 오리진 ALB에서 ALB 규칙 또는 AWS WAF는 수신 요청 헤더인 X-Origin-Verify를 검사하고 문자열 값이 유효한 경우 요청을 허용한다. 헤더가 올바르지 않으면 AWS WAF가 요청을 차단한다.
  • 구성된 간격에서 Secrets Manager는 사용자 지정 헤더 값을 자동으로 순환(rotates)하고 오리진 AWS WAF및 CloudFront 구성을 업데이트한다.

출처: https://jayendrapatil.com/aws-cloudfront-security/

 

반응형