이 페이지에서는 다양한 유형의 부하 분산기와 보안 정책에 대한 보안 정책 구성 예시를 설명합니다.
외부 애플리케이션 부하 분산기의 보안 정책 구성
다음은 전역 외부 애플리케이션 부하 분산기나 기본 애플리케이션 부하 분산기로의 트래픽을 허용 또는 거부하는 규칙을 사용 설정하도록 Google Cloud Armor 보안 정책을 구성하는 대략적인 단계입니다.
- Google Cloud Armor 보안 정책을 만듭니다.
- IP 주소 목록, 커스텀 표현식 또는 사전 구성된 표현식 세트를 기준으로 보안 규칙을 정책에 추가합니다.
- 액세스를 제어하려는 전역 외부 애플리케이션 부하 분산기 또는 기본 애플리케이션 부하 분산기의 백엔드 서비스에 보안 정책을 연결합니다.
- 필요에 따라 보안 정책을 업데이트합니다.
다음 예시에서는 Google Cloud Armor 보안 정책 두 개를 만들어 서로 다른 백엔드 서비스에 적용합니다.
예시에서 이들은 Google Cloud Armor 보안 정책입니다.
mobile-clients-policy
는games
서비스의 외부 사용자에게 적용됩니다.internal-users-policy
는 조직의test-network
팀에 적용됩니다
백엔드 서비스가 games
인 games
서비스에 mobile-clients-policy
를 적용하고 해당 백엔드 서비스가 test-network
인 테스트팀의 내부 test
서비스에 internal-users-policy
를 적용합니다.
백엔드 서비스의 백엔드 인스턴스가 여러 리전에 있는 경우 서비스와 연결된 Google Cloud Armor 보안 정책은 모든 리전의 인스턴스에 적용됩니다. 앞의 예시에서 보안 정책 mobile-clients-policy
는 us-central
의 인스턴스 1, 2, 3, 4와 더불어 us-east
의 인스턴스 5, 6에 적용됩니다.
예시 만들기
이 안내를 사용하여 이전 섹션에서 설명한 구성 예시를 만듭니다.
콘솔
외부 사용자의 보안 정책을 구성합니다.
Google Cloud 콘솔에서 Google Cloud Armor 정책 페이지로 이동합니다.
정책 만들기를 클릭합니다.
이름 필드에
mobile-clients-policy
를 입력합니다.설명 필드에
Policy for external users
을 입력합니다.기본 규칙 작업에서 거부를 선택합니다.
거부 상태에 404(찾을 수 없음)를 선택합니다.
다음 단계를 클릭합니다.
규칙을 추가합니다.
- 규칙 추가를 클릭합니다.
- 설명 필드에
allow traffic from 192.0.2.0/24
을 입력합니다. - 모드에 기본 모드(IP 주소/범위만)를 선택합니다.
- 일치 필드에
192.0.2.0/24
를 입력합니다. - 작업에 허용을 선택합니다.
- 우선순위 필드에
1000
을 입력합니다. - 완료를 클릭합니다.
- 다음 단계를 클릭합니다.
대상에 정책을 적용합니다.
- 대상 추가를 클릭합니다.
- 대상 목록에서 대상을 선택합니다.
- 완료를 클릭합니다.
- 정책 만들기를 클릭합니다.
원하는 경우 Google Cloud Armor Adaptive Protection을 사용 설정합니다.
- Adaptive Protection을 사용 설정하려면 사용 설정 체크박스를 선택합니다.
내부 사용자의 보안 정책을 구성합니다.
- 정책 만들기를 클릭합니다.
- 이름 필드에
internal-users-policy
를 입력합니다. - 설명 필드에
Policy for internal test users
을 입력합니다. - 기본 규칙 작업에서 거부를 선택합니다.
- 거부 상태에 502(잘못된 게이트웨이)를 선택합니다.
- 다음 단계를 클릭합니다.
규칙을 추가합니다.
- 규칙 추가를 클릭합니다.
- 설명 필드에
allow traffic from 198.51.100.0/24
을 입력합니다. - 모드에 기본 모드(IP 주소/범위만)를 선택합니다.
- 일치 필드에
198.51.100.0/24
를 입력합니다. - 작업에 허용을 선택합니다.
- 미리보기 전용에 사용 설정 체크박스를 선택합니다.
- 우선순위 필드에
1000
을 입력합니다. - 완료를 클릭합니다.
- 다음 단계를 클릭합니다.
대상에 정책을 적용합니다.
- 대상 추가를 클릭합니다.
- 대상 목록에서 대상을 선택합니다.
- 완료를 클릭합니다.
- 정책 만들기를 클릭합니다.
gcloud
Google Cloud Armor 보안 정책을 만듭니다.
gcloud compute security-policies create mobile-clients-policy \ --description "policy for external users"
gcloud compute security-policies create internal-users-policy \ --description "policy for internal test users"
트래픽을 거부하려면 기본 규칙을 보안 정책으로 업데이트합니다.
gcloud compute security-policies rules update 2147483647 \ --security-policy mobile-clients-policy \ --action "deny-404"
gcloud compute security-policies rules update 2147483647 \ --security-policy internal-users-policy \ --action "deny-502"
보안 정책에 규칙을 추가합니다.
gcloud compute security-policies rules create 1000 \ --security-policy mobile-clients-policy \ --description "allow traffic from 192.0.2.0/24" \ --src-ip-ranges "192.0.2.0/24" \ --action "allow"
gcloud compute security-policies rules create 1000 \ --security-policy internal-users-policy \ --description "allow traffic from 198.51.100.0/24" \ --src-ip-ranges "198.51.100.0/24" \ --action "allow"
백엔드 서비스에 보안 정책을 연결합니다.
gcloud compute backend-services update games \ --security-policy mobile-clients-policy
gcloud compute backend-services update test-network \ --security-policy internal-users-policy
선택적으로 Adaptive Protection을 사용 설정합니다.
gcloud compute security-policies update mobile-clients-policy \ --enable-layer7-ddos-defense
gcloud compute security-policies update internal-users-policy \ --enable-layer7-ddos-defense
보안 정책 만들기
Google Cloud 콘솔 또는 gcloud CLI를 사용하여 보안 정책을 만들 수 있습니다. 이 섹션의 안내에서는 기존 전역 외부 애플리케이션 부하 분산기 또는 기본 애플리케이션 부하 분산기 및 백엔드 서비스에 적용할 보안 정책을 구성한다고 가정합니다. 필드를 입력하는 방법에 대한 예시는 예시 만들기를 참조하세요.
콘솔
Google Cloud Armor 보안 정책 및 규칙을 만들고 백엔드 서비스에 보안 정책을 연결합니다.
Google Cloud 콘솔에서 Google Cloud Armor 정책 페이지로 이동합니다.
정책 만들기를 클릭합니다.
이름 필드에 정책 이름을 입력합니다.
원하는 경우 정책 설명을 입력합니다.
정책 유형에서 백엔드 보안 정책 또는 에지 보안 정책을 선택합니다.
기본 규칙 작업에서 액세스를 허용하는 기본 규칙에 허용을 선택하거나 IP 주소나 IP 주소 범위에 대한 액세스를 금지하는 기본 규칙에 거부를 선택합니다.
기본 규칙은 다른 규칙이 적용되지 않는 경우에만 적용되는 우선순위가 가장 낮은 규칙입니다.
거부 규칙을 구성하는 경우 거부 상태 메시지를 선택합니다. 액세스 권한이 없는 사용자가 액세스 권한을 얻으려고 하면 Google Cloud Armor에 표시되는 오류 메시지입니다.
구성할 규칙 유형에 관계없이 다음 단계를 클릭합니다.
규칙을 추가합니다.
- 규칙 추가를 클릭합니다.
- 원하는 경우 규칙 설명을 입력합니다.
모드를 선택합니다.
- 기본 모드: IP 주소 또는 범위를 기준으로 트래픽을 허용하거나 거부합니다.
- 고급 모드: 규칙 표현식을 기준으로 트래픽을 허용하거나 거부합니다.
일치 필드에서 규칙이 적용되는 조건을 지정합니다.
- 기본 모드: 규칙에서 일치시킬 IP 주소 또는 IP 범위를 입력합니다.
- 고급 모드: 들어오는 요청을 평가할 표현식 또는 하위 표현식을 입력합니다. 표현식을 작성하는 방법에 대한 자세한 내용은 커스텀 규칙 언어 속성 구성을 참조하세요.
작업에서 규칙이 일치하는 경우 허용 또는 거부를 선택하여 트래픽을 허용하거나 거부합니다.
미리보기 모드를 사용 설정하려면 사용 설정 체크박스를 선택합니다. 미리보기 모드에서 규칙 작동 방식을 볼 수 있지만 규칙이 사용 설정되어 있지 않습니다.
규칙 우선순위를 입력합니다. 우선순위는 0~2,147,483,646의 양의 정수일 수 있습니다. 평가 순서에 대한 자세한 내용은 규칙 평가 순서를 참조하세요.
완료를 클릭합니다.
규칙을 추가하려면 규칙 추가를 클릭하고 이전 단계를 반복합니다. 그렇지 않으면 다음 단계를 클릭합니다.
대상에 정책을 적용합니다.
- 대상 추가를 클릭합니다.
- 대상 목록에서 대상을 선택합니다.
- 더 많은 대상을 추가하려면 대상 추가를 클릭합니다.
- 완료를 클릭합니다.
- 정책 만들기를 클릭합니다.
gcloud
새 Google Cloud Armor 보안 정책을 만들려면
gcloud compute security-policies create
명령어를 사용합니다.type
필드에서CLOUD_ARMOR
를 사용하여 백엔드 보안 정책을 만들거나CLOUD_ARMOR_EDGE
를 사용하여 에지 보안 정책을 만듭니다.type
플래그는 선택사항입니다. 유형이 지정되지 않으면 백엔드 보안 정책이 기본적으로 생성됩니다.gcloud compute security-policies create NAME \ [--type=CLOUD_ARMOR|CLOUD_ARMOR_EDGE] \ [--file-format=FILE_FORMAT | --description=DESCRIPTION] \ [--file-name=FILE_NAME]
다음을 바꿉니다.
NAME
: 보안 정책의 이름DESCRIPTION
: 보안 정책에 대한 설명
다음 명령어는 이전에 만든 정책을 업데이트하고, JSON 파싱을 사용 설정하고, 로그 수준을
VERBOSE
로 변경합니다.gcloud compute security-policies update my-policy \ --json-parsing=STANDARD \ --log-level=VERBOSE
보안 정책에 규칙을 추가하려면
gcloud compute security-policies rules create PRIORITY
명령어를 사용합니다.gcloud compute security-policies rules create PRIORITY \ [--security-policy POLICY_NAME] \ [--description DESCRIPTION] \ --src-ip-ranges IP_RANGE,... | --expression EXPRESSION \ --action=[ allow | deny-403 | deny-404 | deny-502 ] \ [--preview]
PRIORITY
를 정책의 규칙에 할당된 우선순위로 바꿉니다. 규칙 우선순위의 작동 방식에 대한 자세한 내용은 규칙 평가 순서를 참조하세요.예를 들어 다음 명령어는 IP 주소 범위
192.0.2.0/24
및198.51.100.0/24
에서 트래픽을 차단하는 규칙을 추가합니다. 규칙 우선순위는 1000이며 이 규칙은my-policy
라는 정책의 규칙입니다.gcloud compute security-policies rules create 1000 \ --security-policy my-policy \ --description "block traffic from 192.0.2.0/24 and 198.51.100.0/24" \ --src-ip-ranges "192.0.2.0/24","198.51.100.0/24" \ --action "deny-403"
--preview
플래그를 추가하면 규칙이 정책에 추가되지만 시행되지 않으며 규칙을 트리거하는 트래픽은 로깅만 됩니다.gcloud compute security-policies rules create 1000 \ --security-policy my-policy \ --description "block traffic from 192.0.2.0/24 and 198.51.100.0/24" \ --src-ip-ranges "192.0.2.0/24","198.51.100.0/24" \ --action "deny-403" \ --preview
커스텀 조건을 지정하려면
--expression
플래그를 사용합니다. 자세한 내용은 커스텀 규칙 언어 속성 구성을 참고하세요. 다음 명령어는 IP 주소1.2.3.4
에서 들어오는 트래픽을 허용하고 user-agent 헤더의example
문자열을 포함하는 규칙을 추가합니다.gcloud compute security-policies rules create 1000 \ --security-policy my-policy \ --expression "inIpRange(origin.ip, '1.2.3.4/32') && has(request.headers['user-agent']) && request.headers['user-agent'].contains('example')" \ --action allow \ --description "Block User-Agent 'example'"
다음 명령어는 요청 쿠키에 특정 값이 포함되면 요청을 차단하는 규칙을 추가합니다.
gcloud compute security-policies rules create 1000 \ --security-policy my-policy \ --expression "has(request.headers['cookie']) && request.headers['cookie'].contains('cookie_name=cookie_value')" \ --action "deny-403" \ --description "Cookie Block"
다음 명령어는 리전
AU
의 요청을 차단하는 규칙을 추가합니다.gcloud compute security-policies rules create 1000 \ --security-policy my-policy \ --expression "origin.region_code == 'AU'" \ --action "deny-403" \ --description "AU block"
다음 명령어는 지정된 IP 범위에 없는
AU
리전의 요청을 차단하는 규칙을 추가합니다.gcloud compute security-policies rules create 1000 \ --security-policy my-policy \ --expression "origin.region_code == 'AU' && !inIpRange(origin.ip, '1.2.3.0/24')" \ --action "deny-403" \ --description "country and IP block"
다음 명령어는 정규 표현식과 일치하는 URI가 있는 요청을 차단하는 규칙을 추가합니다.
gcloud compute security-policies rules create 1000 \ --security-policy my-policy \ --expression "request.path.matches('/example_path/')" \ --action "deny-403" \ --description "regex block"
다음 명령어는
user-id
헤더의 Base64 디코딩 값에 특정 값이 포함된 경우 요청을 차단하는 규칙을 추가합니다.gcloud compute security-policies rules create 1000 \ --security-policy my-policy \ --expression "has(request.headers['user-id']) && request.headers['user-id'].base64Decode().contains('myValue')" \ --action "deny-403" \ --description "country and IP block"
다음 명령어는 사전 구성된 표현식 세트를 사용하여 SQLi 공격을 완화하는 규칙을 추가합니다.
gcloud compute security-policies rules create 1000 \ --security-policy my-policy \ --expression "evaluatePreconfiguredExpr('sqli-stable')" \ --action "deny-403"
다음 명령어는 명명된 IP 주소 목록의 모든 IP 주소에서 액세스할 수 있도록 허용하는 사전 구성된 표현식을 사용하는 규칙을 추가합니다.
gcloud compute security-policies rules create 1000 \ --security-policy my-policy \ --expression "evaluatePreconfiguredExpr('sourceiplist-fastly')" \ --action "allow"
리전 외부 애플리케이션 부하 분산기에 대한 보안 정책 구성
이 섹션에는 리전 외부 애플리케이션 부하 분산기를 위한 리전 범위 Google Cloud Armor 보안 정책을 구성하는 방법에 대한 정보가 포함되어 있습니다.
리전별 부하 분산 워크로드 보호
다음 단계를 따라 리전 범위 백엔드 서비스를 보호하는 보안 정책을 구성합니다.
리전 범위 보안 정책을 만듭니다.
gcloud compute security-policies create POLICY_NAME \ --type=CLOUD_ARMOR \ --region=REGION
리전 범위 보안 서비스에 리전 범위 백엔드 서비스를 연결합니다.
BACKEND_NAME
을 기존의 리전 범위 백엔드 서비스 이름으로 바꿉니다.gcloud compute backend-services update BACKEND_NAME \ --security-policy=POLICY_NAME \ --region=REGION
리전 범위 Google Cloud Armor 보안 정책 적용
예를 들어 모든 백엔드 워크로드 및 WAF 규칙이 특정 리전에 배포되는 상주 요구사항을 충족하려는 보안 관리자가 있다고 가정해 보겠습니다. 다음 사항은 이미 완료했다고 가정합니다.
- 이 리전에서 리전 범위의 부하 분산 백엔드 서비스를 만들었습니다.
- 배포에서 기존 전역 범위 보안 정책을 중지했습니다.
- 이전 섹션처럼 동일한 리전에서 리전 범위 보안 정책을 만들고 연결했습니다.
다음 예시 명령어를 사용하여 요구사항을 충족하면서 WAF 규칙 및 기타 고급 규칙을 정책에 추가할 수 있습니다.
정책에 WAF 규칙을 추가합니다.
gcloud compute security-policies rules create 1000 --action=deny-404 \ --expression="evaluatePreconfiguredExpr('xss-v33-stable', ['owasp-crs-v030301-id941100-xss', 'owasp-crs-v030301-id941160-xss'])" \ --security-policy=POLICY_NAME \ --region=REGION
정책에 고급 규칙을 추가합니다.
gcloud compute security-policies rules create 1000 --action=allow \ --expression="has(request.headers['cookie']) && request.headers['cookie'].contains('80=EXAMPLE')" \ --security-policy=POLICY_NAME \ --region=REGION
정책에 비율 제한 규칙을 추가합니다.
gcloud compute security-policies rules create 1000 --action=throttle \ --src-ip-ranges="1.1.1.1/32" \ --rate-limit-threshold-count=1000 \ --rate-limit-threshold-interval-sec=120 \ --conform-action="allow" \ --exceed-action="deny-429" \ --enforce-on-key=IP \ --ban-duration-sec=999 \ --ban-threshold-count=5000 \ --ban-threshold-interval-sec=60 \ --security-policy=POLICY_NAME \ --region=REGION
다음 단계
- Google Cloud Armor 보안 정책 구성
- 비율 제한에 대해 자세히 알아보기