App Engine 방화벽 규칙 만들기

App Engine에서는 IP 주소 및 서브넷 범위를 허용하거나 제한하는 방화벽을 만들 때 개별 규칙으로 최대 1,000개의 우선순위를 지정할 수 있습니다. 앱은 방화벽에서 허용되는 요청에만 응답합니다.

App Engine 방화벽의 작동 방식을 배우려면 방화벽 이해를 참조하세요.

시작하기 전에

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

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

방화벽 규칙 만들기

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

Console

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

  1. Google Cloud 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 주소를 지정하면 방화벽 규칙을 테스트하고 우선순위와 작업이 예상대로 동작하는지 확인할 수 있습니다.

App Engine 방화벽 규칙 이해

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

방화벽 규칙 우선순위

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

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

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

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

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

방화벽 예시

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

우선순위 작업 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에서 액세스를 거부하는 규칙보다 높게 설정해야 합니다.

다음 단계

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