Application Load Balancer에 대한 액세스 제한 - 아마존 CloudFront

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Application Load Balancer에 대한 액세스 제한

Elastic Load Balancing의 Application Load Balancer에서 제공하는 웹 애플리케이션 또는 기타 콘텐츠의 경우, 객체를 캐시하고 사용자 (뷰어) 에게 직접 제공하여 Application Load Balancer의 부하를 줄일 CloudFront 수 있습니다. CloudFront또한 지연 시간을 줄이고 일부 분산 서비스 거부 (DDoS) 공격을 흡수하는 데도 도움이 될 수 있습니다. 하지만 사용자가 Application Load Balancer를 CloudFront 우회하여 직접 액세스할 수 있는 경우에는 이러한 이점을 얻을 수 없습니다. 하지만 Amazon CloudFront 및 애플리케이션 로드 밸런서를 구성하여 사용자가 애플리케이션 로드 밸런서에 직접 액세스하는 것을 방지할 수 있습니다. 이렇게 하면 사용자가 Application Load Balancer를 CloudFront 통해서만 Application Load Balancer에 액세스할 수 있으므로 사용의 이점을 얻을 수 있습니다. CloudFront

사용자가 Application Load Balancer에 직접 액세스하는 것을 방지하고 액세스를 CloudFront 통해서만 허용하려면 다음 상위 단계를 완료하십시오.

  1. Application Load Balancer로 보내는 요청에 사용자 지정 HTTP 헤더를 CloudFront 추가하도록 구성합니다.

  2. 사용자 지정 HTTP 헤더가 포함된 요청만 전달하도록 Application Load Balancer를 구성합니다.

  3. (선택 사항) HTTPS를 사용하도록 하여 이 솔루션의 보안을 강화합니다.

자세한 내용은 다음 항목을 참조하십시오. 이 단계를 완료한 후에는 사용자가 Application Load Balancer를 통해서만 Application Load Balancer에 액세스할 수 있습니다. CloudFront

요청에 사용자 지정 HTTP 헤더를 CloudFront 추가하도록 구성

오리진 (이 경우 Application Load Balancer) 으로 보내는 요청에 사용자 지정 HTTP 헤더를 CloudFront 추가하도록 구성할 수 있습니다.

중요

이 사용 사례에서는 사용자 지정 헤더의 이름과 값을 기밀로 유지해야 합니다. 헤더 이름과 값을 기밀로 유지하지 않으면 다른 HTTP 클라이언트에서 Application Load Balancer로 직접 보내는 요청에 헤더 이름과 값을 포함할 수 있습니다. 이로 인해 Application Load Balancer는 요청이 CloudFront 들어오지 않았는데도 요청이 온 것처럼 동작할 수 있습니다. 이를 방지하려면 사용자 정의 헤더의 이름과 값을 기밀로 유지해야 합니다.

CloudFront콘솔 또는 CloudFront API를 사용하여 원본 요청에 사용자 지정 HTTP 헤더를 CloudFront 추가하도록 구성할 수 있습니다. AWS CloudFormation

사용자 지정 HTTP 헤더를 추가하려면 (CloudFront 콘솔)

CloudFront 콘솔에서 Origin 설정의 Origin 사용자 지정 헤더 설정을 사용하세요. 다음 예에서와 같이 [헤더 이름(Header Name)]과 [값(Value)]을 입력합니다.

참고

이 예제에서 헤더 이름과 값은 데모용입니다. 프로덕션 환경에서는 무작위로 생성된 값을 사용합니다. 헤더 이름과 값은 사용자 이름 및 암호와 같은 보안 자격 증명으로 취급해야 합니다.


                            콘솔의  CloudFrontOrigin 커스텀 헤더 필드.

기존 CloudFront 배포에 대한 오리진을 생성하거나 편집할 때, 그리고 새 배포를 생성할 때 오리진 커스텀 헤더 설정을 수정할 수 있습니다. 자세한 내용은 배포 업데이트배포 생성 섹션을 참조하세요.

사용자 지정 HTTP 헤더 추가(AWS CloudFormation)

AWS CloudFormation 템플릿에서 다음 예제와 같이 OriginCustomHeaders 속성을 사용합니다.

참고

이 예제에서 헤더 이름과 값은 데모용입니다. 프로덕션 환경에서는 무작위로 생성된 값을 사용합니다. 헤더 이름과 값은 사용자 이름 및 암호와 같은 보안 자격 증명으로 취급해야 합니다.

AWSTemplateFormatVersion: '2010-09-09' Resources: TestDistribution: Type: 'AWS::CloudFront::Distribution' Properties: DistributionConfig: Origins: - DomainName: app-load-balancer.example.com Id: Example-ALB CustomOriginConfig: OriginProtocolPolicy: https-only OriginSSLProtocols: - TLSv1.2 OriginCustomHeaders: - HeaderName: X-Custom-Header HeaderValue: random-value-1234567890 Enabled: 'true' DefaultCacheBehavior: TargetOriginId: Example-ALB ViewerProtocolPolicy: allow-all CachePolicyId: 658327ea-f89d-4fab-a63d-7e88639e58f6 PriceClass: PriceClass_All ViewerCertificate: CloudFrontDefaultCertificate: 'true'

자세한 내용은 AWS CloudFormation사용 설명서의 OriginOriginCustomHeader속성을 참조하십시오.

사용자 지정 HTTP 헤더 (CloudFront API) 를 추가하려면

CloudFront API에서 내부 CustomHeaders 객체를 사용합니다Origin. 자세한 CreateDistribution내용은 Amazon CloudFront API 레퍼런스 및 SDK 또는 기타 API 클라이언트 설명서를 참조하십시오. UpdateDistribution

오리진 사용자 지정 헤더로 지정할 수 없는 헤더 이름이 몇 개 있습니다. 자세한 설명은 오리진 요청에 추가할 CloudFront 수 없는 사용자 지정 헤더 섹션을 참조하세요.

특정 헤더가 포함된 요청만 전달하도록 Application Load Balancer 구성

Application Load Balancer로 보내는 요청에 사용자 지정 HTTP 헤더를 CloudFront 추가하도록 구성한 후 (이전 섹션 참조), 이 사용자 지정 헤더가 포함된 요청만 전달하도록 로드 밸런서를 구성할 수 있습니다. 새 규칙을 추가하고 로드 밸런서의 리스너에서 기본 규칙을 수정하면 됩니다.

필수 조건

다음 절차를 사용하려면 리스너가 하나 이상인 Application Load Balancer가 필요합니다. 아직 생성하지 않은 경우 애플리케이션 로드 밸런서 사용 설명서의 애플리케이션 로드 밸런서 생성을 참조하십시오.

다음 절차에서는 HTTPS 수신기를 수정합니다. 동일한 프로세스를 사용하여 HTTP 수신기를 수정할 수 있습니다.

Application Load Balancer 수신기의 규칙을 업데이트하려면
  1. Amazon EC2 콘솔에서 [로드 밸런서(Load Balancers] 페이지를 엽니다.

  2. CloudFront 배포의 오리진인 로드 밸런서를 선택한 다음 리스너 탭을 선택합니다.

  3. 수정할 리스너에 대해 [규칙 보기/편집(View/edit rules)]을 선택합니다.

    
                        Amazon EC2 콘솔에서 로드 밸런서에 대한 규칙 링크를 보거나 편집합니다.
  4. 아이콘을 선택하여 규칙을 추가합니다.

    
                        Amazon EC2 콘솔에서 로드 밸런서에 규칙 추가.
  5. [Insert Rule]을 선택합니다.

    
                        Amazon EC2 콘솔에서 로드 밸런서에 규칙 삽입.
  6. 새 규칙에 대해 다음을 수행합니다.

    1. [조건 추가(Add condition)]를 선택한 다음 [Http 헤더(Http header)]를 선택합니다. 에서 원본 사용자 지정 헤더로 추가한 HTTP 헤더 이름과 값을 지정합니다. CloudFront

    2. [작업 추가(Add action)]를 선택한 다음 [전달 대상(Forward to)]을 선택합니다. 요청을 전달할 대상 그룹을 선택합니다.

    3. [저장(Save)]을 선택하여 규칙을 생성합니다.

    
                        Amazon EC2 콘솔의 로드 밸런서에 있는 새 규칙.
  7. 아이콘을 선택하여 규칙을 편집합니다.

    
                        Amazon EC2 콘솔에서 로드 밸런서에 대한 규칙 편집.
  8. 기본 규칙에 대한 편집 아이콘을 선택합니다.

    
                        Amazon EC2 콘솔에서 로드 밸런서에 대한 기본 규칙 편집.
  9. 기본 규칙에 대해 다음을 수행합니다.

    1. 기본 작업을 삭제합니다.

      
                                Amazon EC2 콘솔에서 로드 밸런서에 대한 기본 규칙 삭제.
    2. [작업 추가(Add action)]를 선택한 다음 [고정 응답 반환(Return fixed response)]을 선택합니다.

    3. [응답 코드(Response code)]에 403을 입력합니다.

    4. [응답 본문(Response body)]에 Access denied를 입력합니다.

    5. [업데이트(Update)]를 선택하여 기본 규칙을 업데이트합니다.

    
                        Amazon EC2 콘솔에서 로드 밸런서에 대한 기본 규칙 업데이트.

이 단계를 완료하면 다음 그림과 같이 2개의 규칙이 로드 밸런서 리스너에 추가됩니다. 첫 번째 규칙은 HTTP 헤더가 포함된 요청 (에서 오는 요청 CloudFront) 을 전달합니다. 두 번째 규칙은 다른 모든 요청 (발신자가 아닌 요청 CloudFront) 에 고정된 응답을 보냅니다.


                Amazon EC2 콘솔에서 로드 밸런서에 대한 규칙이 업데이트됨.

CloudFront 배포에 요청을 보내고 Application Load Balancer에 요청을 보내 솔루션이 작동하는지 확인할 수 있습니다. 웹 애플리케이션 또는 콘텐츠를 CloudFront 반환하라는 요청과 Application Load Balancer로 직접 전송된 요청은 일반 텍스트 403 메시지가 포함된 응답을 반환합니다. Access denied

(선택 사항) 이 솔루션의 보안 강화

이 솔루션의 보안을 강화하기 위해 Application Load Balancer에 요청을 보낼 때 항상 HTTPS를 사용하도록 CloudFront 배포를 구성할 수 있습니다. 이 솔루션이 작동하려면 사용자 지정 헤더 이름과 값을 기밀로 유지해야 합니다. HTTPS를 사용하면 도청자가 헤더 이름과 값을 검색할 수 없습니다. 또한 헤더 이름과 값을 주기적으로 교체하는 것이 좋습니다.

오리진 요청에 HTTPS 사용

원본 요청에 HTTPS를 사용하도록 CloudFront 구성하려면 원본 프로토콜 정책 설정을 HTTPS 전용으로 설정합니다. 이 설정은 CloudFront 콘솔 및 API에서 사용할 수 있습니다. AWS CloudFormation CloudFront 자세한 설명은 프로토콜(사용자 지정 오리진만 해당) 섹션을 참조하세요.

원본 요청에 CloudFront HTTPS를 사용하도록 구성하는 경우 Application Load Balancer에 HTTPS 리스너가 있는지 확인해야 합니다 (이전 섹션 참조). 그러려면 Application Load Balancer로 라우팅되는 도메인 이름과 일치하는 SSL/TLS 인증서가 필요합니다. 자세한 내용은 애플리케이션 로드 밸런서 사용 설명서의 HTTPS 수신기 생성을 참조하십시오.

웹 애플리케이션의 최종 사용자 (뷰어 또는 클라이언트라고도 함) 가 HTTPS를 사용할 수 있는 경우 최종 사용자의 HTTPS 연결을 선호 (또는 필수) CloudFront 하도록 구성할 수도 있습니다. 이렇게 하려면 [뷰어 프로토콜 정책(Viewer Protocol Policy)] 설정을 사용 합니다. 최종 사용자를 HTTP에서 HTTPS로 리디렉션하거나 HTTP를 사용하는 요청을 거부하도록 설정할 수 있습니다. 이 설정은 CloudFront 콘솔AWS CloudFormation, 및 API에서 사용할 수 있습니다. CloudFront 자세한 설명은 뷰어 프로토콜 정책 섹션을 참조하세요.

헤더 이름과 값 교체

HTTPS를 사용하는 것에 더해 헤더 이름과 값을 주기적으로 교체하는 것이 좋습니다. 이 작업을 수행하는 간략한 단계는 다음과 같습니다.

  1. Application Load Balancer로 보내는 요청에 추가 사용자 지정 HTTP 헤더를 CloudFront 추가하도록 구성합니다.

  2. 추가 사용자 지정 HTTP 헤더가 포함된 요청만 전달하도록 Application Load Balancer 리스너 규칙을 업데이트합니다.

  3. Application Load Balancer로 보내는 요청에 원래 사용자 지정 HTTP 헤더를 더 이상 추가하지 않도록 구성합니다 CloudFront .

  4. 원래 사용자 지정 HTTP 헤더가 포함된 요청을 전달하지 않도록 Application Load Balancer 리스너 규칙을 업데이트합니다.

이러한 단계를 수행하는 방법에 대한 자세한 내용은 이전 섹션을 참조하세요.