방화벽으로 액세스 제어

방화벽을 이용하면 App Engine 앱에 대한 액세스를 ID에 상관없이 제어할 수 있습니다. App Engine 방화벽을 사용하면 최대 1,000개의 개별 규칙을 정의할 수 있으므로 특정 IP 주소와 서브넷 범위를 허용하거나 제한할 수 있습니다.

방화벽을 구성하려면 우선순위 값, 허용 또는 거부할 IP 주소 범위, 선택적 설명을 지정하는 규칙을 정의해야 합니다.

앱을 안전하게 구성하고 적절한 액세스 수준을 설정했는지 확인하려면 애플리케이션 보안액세스 제어를 검토하세요.

방화벽 규칙 구성

App Engine 방화벽은 특정 IP 주소나 범위의 앱 액세스를 허용하거나 거부할 수 있는 정렬된 규칙 목록으로 구성됩니다. 이 규칙은 App Engine 애플리케이션의 모든 리소스에 적용됩니다.

방화벽 규칙은 중요도에 따라 정렬되며, 이는 각 규칙의 우선순위에 숫자 값으로 정의됩니다. 각 규칙에 고유한 우선순위 값을 지정해야 하는데, 이는 방화벽 내 다른 규칙들과 비교해 중요도가 정의되기 때문입니다. 규칙의 우선순위 값은 가장 중요한 1부터 가장 중요하지 않은 2147483647까지 가능합니다.

각 방화벽은 우선순위 2147483647로 자동 생성되며 앱의 전체 IP 범위에 적용되는 default 규칙을 포함합니다. default 규칙은 항상 방화벽의 다른 모든 규칙 이후에 평가되고 모든 IP 주소의 모든 요청에 적용됩니다.

방화벽은 우선순위가 가장 높은 규칙을 먼저 평가합니다. 방화벽의 나머지 모든 규칙은 해당 요청의 IP 범위와 일치하는 규칙이 나올 때까지 순차적으로 평가됩니다. 일치하는 규칙이 발견되면 연결이 허용되거나 거부되고 방화벽의 나머지 모든 규칙을 건너뜁니다. 방화벽에 수동으로 정의된 규칙 중 어떤 것도 요청과 일치하지 않으면 default 규칙이 평가됩니다.

예를 들어 우선순위가 1인 규칙을 만들면 이 규칙이 항상 먼저 평가됩니다. 들어오는 요청이 우선순위가 1인 규칙과 일치하면 해당 규칙만 평가되고 default 규칙을 포함한 방화벽의 다른 모든 규칙을 건너뜁니다.

아래의 방화벽 예시에서는 규칙 우선순위가 방화벽 동작을 어떻게 변경하는지 보여줍니다.

시작하기 전에

앱을 위한 방화벽을 만들려면 먼저 방화벽 규칙을 만들거나 수정하는 데 필요한 권한이 있는 다음 App Engine IAM 역할 중 하나가 있어야 합니다.

  • App Engine 관리자
  • 편집자
  • 소유자

gcloud 도구 또는 Admin API를 사용하려면 먼저 해당 도구를 설치하고 구성해야 합니다.

  • gcloud 도구를 사용하려면 Google Cloud SDK를 다운로드하고 설치한 다음 초기화합니다.

    SDK 다운로드 및 설치

  • GCP 프로젝트 및 필요한 사용자 인증 정보를 설정하는 방법에 대한 자세한 내용은 Admin API 액세스를 참조하세요.

캐시 처리된 콘텐츠에 대한 액세스 방지

App Engine 방화벽에는 웹 프록시, 브라우저와 같이 콘텐츠를 캐시하는 메커니즘이 적용됩니다. 캐시된 콘텐츠는 만료될 때까지 특정 URL에서 공개적으로 제공되며, 새 방화벽 규칙을 만든 후에도 액세스될 수 있습니다.

Cache-ControlExpires HTTP 응답 헤더를 사용하면 콘텐츠가 캐시 처리되지 않도록 할 수 있습니다. 캐싱을 제어하는 방법을 비롯해 이러한 HTTP 헤더에 대한 자세한 내용은 캐싱 방지를 참조하세요.

서비스 요청 허용

규칙을 만들 때 다음 사항을 고려해야 합니다.

  • 기본적으로는 규칙과 일치하지 않는 모든 요청이 앱에 액세스할 수 있습니다. 특정 규칙과 일치하지 않는 요청을 모두 차단하려면 default 규칙을 deny로 설정해야 합니다.
  • default 규칙이 deny로 설정된 경우라도 태스크 큐와 크론 트래픽은 방화벽에서 허용됩니다.
  • 다른 App Engine 앱 또는 서비스 요청의 액세스를 제어하려면 서비스 간 통신에 사용되는 IP 주소를 수용할 규칙을 만들어야 할 수 있습니다. 앱이 App Engine의 다른 앱이나 서비스와 통신하는 경우 다음 IP 주소의 요청을 어떻게 처리할지 생각해 보아야 합니다.

    • URL 가져오기 서비스의 요청: 0.1.0.40
      • 표준 환경에서 받은 요청: 0.1.0.40
      • 가변형 환경에서 받은 요청: 0.1.0.4010.0.0.1
    • Blobstore 또는 Cloud Storage의 요청: 0.1.0.30
    • 표준 환경에서만 받은 요청:
      • 앱 배포 요청: 10.1.0.41

    앱에 표준 환경(backend_std)에서 실행되는 백엔드 서비스가 있습니다. 이 서비스는 URL Fetch 서비스를 사용하여 backend_flex와 통신합니다.

    요청을 허용하려면 다음과 같은 2개의 방화벽 규칙을 만들어야 합니다.

    • 0.1.0.40 - backend_flexbackend_std에서 URL Fetch 요청을 받을 수 있도록 허용하는 규칙
    • 10.0.0.1 - backend_flex에서의 URL Fetch 요청을 위해 서비스 간 통신을 허용하는 규칙

방화벽 규칙 만들기

다음 방법 중 하나를 사용하여 방화벽 규칙을 만듭니다. 규칙을 더 추가하려면 다음 단계를 반복합니다.

Console

GCP Console의 방화벽 규칙 페이지를 사용하여 방화벽 규칙을 만듭니다.

  1. GCP Console의 방화벽 규칙 만들기 페이지로 이동합니다.

    방화벽 규칙 만들기 페이지로 이동

  2. 방화벽 규칙의 세부정보를 지정합니다.

    1. 우선순위에서 규칙의 상대적 중요도를 지정하고 규칙을 언제 평가할지 순서를 정의하는 정수를 입력합니다.

      유효한 값은 1~2147483646입니다. 우선순위 1은 가장 먼저 평가되는 규칙입니다. 우선순위 2147483647은 마지막에 평가되는 규칙이며, `default` 규칙을 위해 예약되어 있습니다.

    2. 일치 시 작업에서 규칙과 일치하는 요청에 대한 액세스를 허용 또는 거부할지 여부를 지정합니다. allow로 설정된 규칙은 요청을 앱에 전달합니다. deny로 설정된 규칙은 403 Forbidden 오류를 반환합니다.
    3. IP 범위에서 규칙에 적용되는 IP 주소 범위를 정의합니다. IP 주소 범위는 CIDR 표기법으로 정의되어야 하고, 서브넷 마스크를 포함할 수 있으며, IPv4와 IPv6를 모두 지원합니다.
    4. 선택사항: 설명에서 규칙에 대한 설명을 100자 이내로 입력합니다.
  3. 저장을 클릭하여 규칙을 만듭니다.
  4. 규칙을 테스트하여 우선순위와 작업이 예상대로 작동하는지 확인합니다.
    1. IP 주소 테스트를 클릭합니다.
    2. 유효성을 검사할 IP 주소를 입력한 후 테스트를 클릭하여 해당 규칙이 올바르게 평가되는지 확인합니다.
gcloud

다음 gcloud app firewall-rules 명령어를 실행하여 방화벽 규칙을 만듭니다.

  1. 다음 명령어를 실행하여 방화벽 규칙을 만듭니다.

    gcloud app firewall-rules create PRIORITY --action ALLOW_OR_DENY --source-range IP_RANGE --description DESCRIPTION
    각 항목의 의미는 다음과 같습니다.
    • PRIORITY는 규칙을 평가하기 위해 규칙의 중요도 및 순서를 정의하는 1~2147483646 사이의 정수입니다. 우선순위 1은 가장 먼저 평가되는 규칙입니다. 우선순위 2147483647은 마지막에 평가되는 규칙이며, `default` 규칙을 위해 예약되어 있습니다.
    • ALLOW_OR_DENY는 규칙과 일치하는 요청에 대한 액세스를 허용 또는 거부할지 여부를 지정합니다. 유효한 값은 allow 또는 deny입니다. allow로 설정된 규칙은 요청을 앱에 전달합니다. deny로 설정된 규칙은 403 Forbidden 오류를 반환합니다.
    • IP_RANGE는 규칙에 적용되는 IP 주소 범위를 정의합니다. IP 범위는 CIDR 표기법으로 정의되어야 하고, 서브넷 마스크를 포함할 수 있으며, IPv4와 IPv6를 모두 지원합니다.
    • DESCRIPTION은 선택사항이며 100자 이내의 규칙 설명입니다.
  2. 다음 명령어를 실행하여 규칙을 테스트하고 우선순위와 작업이 예상대로 작동하는지 확인합니다.
    gcloud app firewall-rules test-ip IP_ADDRESS
    여기서 IP_ADDRESS는 방화벽을 대상으로 테스트할 IP 주소입니다.
  3. 다음 명령어를 실행하여 기존 규칙 목록을 확인합니다.
    gcloud app firewall-rules list
  4. 다음 명령어를 실행하여 기존 규칙을 삭제합니다.
    gcloud app firewall-rules delete PRIORITY
    여기에서 PRIORITY는 삭제하려는 규칙의 우선순위 값입니다.
예:
다음은 방화벽을 만드는 데 도움이 될 수 있는 예입니다.
  • IPv6 주소와 서브넷 마스크를 허용하는 규칙을 추가한 후 테스트하여 이 규칙이 다른 규칙보다 먼저 평가되는지 확인합니다.

    gcloud app firewall-rules create 123 --source-range fe80::3636:3bff:fecc:8778/128 --action allow
    gcloud app firewall-rules test-ip fe80::3636:3bff:fecc:8778
  • IPv4 주소와 서브넷 마스크를 거부하는 규칙을 추가한 후 테스트하여 이 규칙이 적절하게 평가되는지 확인합니다.

    gcloud app firewall-rules create 123456 --source-range "74.125.0.0/16" --action deny
    gcloud app firewall-rules test-ip 74.125.0.8
  • 기본 규칙을 업데이트한 후 테스트하여 이 규칙이 다른 규칙과 일치하지 않는 모든 IP 주소를 제한하는지 확인합니다.

    gcloud app firewall-rules update default --action deny
    gcloud app firewall-rules test-ip 123.456.7.89
API

Admin API에서 apps.firewall.ingressRules 메서드를 사용하여 App Engine 앱의 방화벽 규칙을 프로그래매틱 방식으로 만들 수 있습니다.

apps.firewall.ingressRules.list 메서드를 사용하고 matchingAddress 매개변수에 테스트할 IP 주소를 지정하면 방화벽 규칙을 테스트하고 우선순위와 작업이 예상대로 동작하는지 확인할 수 있습니다.

방화벽 예시

한 회사에서 사내 네트워크에 개발 중인 앱에 엔지니어링팀의 액세스 권한을 부여하기 위해 방화벽을 설정해야 한다는 예를 들어 보겠습니다. 이 회사의 방화벽 규칙은 늘어날 규칙에 대비해 각 우선순위 사이에 큰 간격을 두고 생성되었습니다.

우선순위 작업 IP 범위 설명
1000 거부 192.0.2.1 DoS 공격자의 액세스를 거부합니다.
2000 허용 198.51.100.2 지국에 있는 엔지니어의 액세스를 허용합니다.
3000 거부 198.51.100.0/24 엔지니어링과 관련되지 않은 모든 건물의 액세스를 거부합니다.
5000 허용 203.0.113.0/24 본관 네트워크의 액세스를 허용합니다.
2147483647 거부 * 기본 작업

방화벽을 만든 후에는 다음 요청을 샘플 앱으로 보냈다고 가정하고 앱의 응답을 확인합니다.

  • 198.51.100.2의 요청은 우선순위가 2000인 규칙과 일치하므로 허용됩니다.
  • 198.51.100.100의 요청은 우선순위가 3000인 규칙과 일치하므로 거부됩니다.
  • 203.0.113.54의 요청은 우선순위가 5000인 규칙과 일치하므로 허용됩니다.
  • 45.123.35.242의 요청은 기본 규칙과 일치하므로 거부됩니다.

충돌하는 규칙 해결

회사 방화벽의 두 우선순위가 서로 바뀌었다고 가정해 보겠습니다. 우선순위 2000과 3000에 대한 규칙이 바뀐 경우 의도하지 않은 동작이 나타납니다.

우선순위 작업 IP 범위 설명
1000 거부 192.0.2.1 DoS 공격자의 액세스를 거부합니다.
2000 거부 198.51.100.0/24 엔지니어링과 관련되지 않은 모든 건물의 액세스를 거부합니다.
3000 허용 198.51.100.2 지국에 있는 엔지니어의 액세스를 허용합니다.
5000 허용 203.0.113.0/24 본관 네트워크의 액세스를 허용합니다.
2147483647 거부 * 기본 작업

규칙의 새 우선순위에 따라 해당 규칙은 평가가 될 수 없으므로 지국 엔지니어는 회사 앱에 액세스할 수 없습니다. 엔지니어의 IP 주소 198.51.100.2는 엔지니어의 IP 주소의 액세스를 허용하는 규칙 이전에 198.51.100.0/24 범위의 모든 비엔지니어를 거부하는 규칙과 일치합니다.

이 문제를 해결하려면 198.51.100.2에 액세스를 허용하는 규칙의 우선순위를 IP 범위 198.51.100.0/24에서 액세스를 거부하는 규칙보다 높게 설정해야 합니다.

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

.NET용 App Engine 가변형 환경 문서