이 페이지에는 제한 또는 비율 기반 차단 작업을 구성하여 클라이언트별 비율 제한을 적용하도록 Google Cloud Armor 규칙을 구성하는 방법에 대한 정보가 포함되어 있습니다. 비율 제한을 구성하기 전에 비율 제한 개요의 정보를 숙지해야 합니다.
시작하기 전에
다음 섹션에서는 Google Cloud Armor 보안 정책을 구성하는 데 필요한 모든 Identity and Access Management(IAM) 역할 및 권한을 설명합니다. 이 문서의 사용 사례에서는 compute.securityPolicies.create
권한만 필요합니다.
Google Cloud Armor 보안 정책의 IAM 권한 설정
다음 작업에는 Identity and Access Management(IAM) Compute 보안 관리자 역할(roles/compute.securityAdmin
)이 필요합니다.
- Google Cloud Armor 보안 정책 구성, 수정, 업데이트, 삭제
- 다음 API 메서드 사용:
SecurityPolicies insert
SecurityPolicies delete
SecurityPolicies patch
SecurityPolicies addRule
SecurityPolicies patchRule
SecurityPolicies removeRule
Compute 네트워크 관리자 역할(roles/compute.networkAdmin
)이 있는 사용자는 다음 작업을 수행할 수 있습니다.
- 백엔드 서비스의 Google Cloud Armor 보안 정책 설정
- 다음 API 메서드 사용:
BackendServices setSecurityPolicy
BackendServices list
(gcloud
만)
보안 관리자 역할(roles/iam.securityAdmin
) 및 Compute 네트워크 관리자 역할이 있는 사용자는 SecurityPolicies
API 메서드 get
, list
, getRule
을 사용하여 Google Cloud Armor 보안 정책을 볼 수 있습니다.
커스텀 역할에 대한 IAM 권한 설정
다음 표에는 IAM 역할의 기본 권한과 관련 API 메서드가 나와 있습니다.
IAM 권한 | API 메서드 |
---|---|
compute.securityPolicies.create |
SecurityPolicies insert |
compute.securityPolicies.delete |
SecurityPolicies delete |
compute.securityPolicies.get |
SecurityPolicies get SecurityPolicies getRule |
compute.securityPolicies.list |
SecurityPolicies list |
compute.securityPolicies.use |
BackendServices setSecurityPolicy |
compute.securityPolicies.update |
SecurityPolicies patch SecurityPolicies addRule SecurityPolicies patchRule SecurityPolicies removeRule |
compute.backendServices.setSecurityPolicy |
BackendServices setSecurityPolicy |
비율 기반 제한 규칙
비율 기반 제한 규칙의 형식은 Google Cloud CLI에서 다음과 같습니다.
gcloud compute security-policies rules create PRIORITY \ --security-policy=SECURITY_POLICY \ {--expression=EXPRESSION | --src-ip-ranges=SRC_IP_RANGE} \ --action "throttle" \ --rate-limit-threshold-count=RATE_LIMIT_THRESHOLD_COUNT \ --rate-limit-threshold-interval-sec=RATE_LIMIT_THRESHOLD_INTERVAL_SEC \ --conform-action=[allow] \ --exceed-action=[deny-403|deny-404|deny-429|deny-502|redirect] \ --exceed-redirect-type=[google-recaptcha|external-302] \ --exceed-redirect-target=REDIRECT_URL \ --enforce-on-key=[IP | ALL | HTTP-HEADER | XFF-IP | HTTP-COOKIE | HTTP-PATH | SNI | REGION-CODE] \ --enforce-on-key-name=[HTTP_HEADER_NAME|HTTP_COOKIE_NAME]
단일 키의 비율 제한
예를 들어 다음 gcloud CLI 명령어는 1.2.3.0/24
의 각 IP 주소에 대해 60초당 요청 100개의 비율 제한을 사용하여 우선순위 105
로 throttle
규칙을 만듭니다. 제한 한도를 초과하는 요청은 429
오류 코드를 반환합니다.
gcloud compute security-policies rules create 105 \ --security-policy SECURITY_POLICY \ --src-ip-ranges="1.2.3.0/24" \ --action=throttle \ --rate-limit-threshold-count=100 \ --rate-limit-threshold-interval-sec=60 \ --conform-action=allow \ --exceed-action=deny-429 \ --enforce-on-key=IP
예를 들어 다음 gcloud CLI 명령어는 1.2.3.0/24
의 IP 주소에서 수신되는 모든 요청에서 HTTP 헤더 User-Agent
의 고유한 값마다 60초당 요청 10개의 비율 제한을 사용하여 우선순위 110
으로 throttle
규칙을 만듭니다. 제한 한도를 초과하는 요청은 429
오류 코드를 반환합니다.
gcloud compute security-policies rules create 110 \ --security-policy SECURITY_POLICY \ --src-ip-ranges="1.2.3.0/24" \ --action=throttle \ --rate-limit-threshold-count=10 \ --rate-limit-threshold-interval-sec=60 \ --conform-action=allow \ --exceed-action=deny-429 \ --enforce-on-key=HTTP-HEADER \ --enforce-on-key-name='User-Agent'
마지막으로 유효한 reCAPTCHA 예외 쿠키가 있는 사용자에게 비율 기반 차단을 적용할 수 있습니다. 예를 들어 다음 gcloud CLI 명령어는 유효한 reCAPTCHA 예외 쿠키가 있는 모든 요청에서 고유한 reCAPTCHA 예외 쿠키마다 5분당 요청 20개의 비율 제한을 사용하여 우선순위 115
로 throttle
규칙을 만듭니다. 제한 한도를 초과하는 요청은 reCAPTCHA 평가로 리디렉션됩니다. 예외 쿠키 및 reCAPTCHA 평가에 대한 자세한 내용은 봇 관리 개요를 참조하세요.
gcloud compute security-policies rules create 115 \ --security-policy SECURITY_POLICY \ --expression="token.recaptcha_exemption.valid" \ --action=throttle \ --rate-limit-threshold-count=20 \ --rate-limit-threshold-interval-sec=300 \ --conform-action=allow \ --exceed-action=redirect \ --exceed-redirect-type=google-recaptcha \ --enforce-on-key=HTTP-COOKIE \ --enforce-on-key-name="recaptcha-ca-e"
JA3 디지털 지문 기반의 비율 제한
JA3 지문을 비율 제한 키로 사용할 수 있습니다. 다음 예시에서는 우선순위가 1000
인 throttle
규칙을 만듭니다. 이 규칙은 5분당 20개 요청으로 비율이 제한됩니다. 특히 /login
경로를 사용하는 요청에 해당하며, 클라이언트 JA3 디지털 지문을 기반으로 합니다. 제한 한도를 초과하는 요청은 거부됩니다.
gcloud compute security-policies rules create 1000 \ --security-policy SECURITY_POLICY \ --expression "request.path.matches('/login')" \ --action throttle \ --rate-limit-threshold-count 20 \ --rate-limit-threshold-interval-sec 300 \ --conform-action allow \ --exceed-action deny-429 \ --enforce-on-key-configs tls-ja3-fingerprint
사용자 IP 주소 기반의 비율 제한
업스트림 프록시를 통해 들어오는 요청이 수신될 때는 시작 클라이언트의 IP 주소를 기반으로 비율 제한을 적용할 수 있습니다. 다음 예시에서는 우선순위가 1000
인 throttle
규칙을 만듭니다. 이 규칙은 5분당 20개 요청으로 비율이 제한됩니다. 특히 /login
경로를 사용하는 요청에 해당하며, 시작 클라이언트 IP 주소를 기반으로 합니다. 제한 한도를 초과하는 요청은 거부됩니다.
gcloud compute security-policies rules create 1000 \ --security-policy SECURITY_POLICY --expression "request.path.matches('/login')" --action throttle --rate-limit-threshold-count 20 --rate-limit-threshold-interval-sec 300 --conform-action allow --exceed-action deny-429 --enforce-on-key-configs user-ip
사용자 IP 주소 지원에 대한 자세한 내용은 규칙 언어 참조를 확인하세요.
여러 키 기반의 비율 제한
enforce-on-key-configs
플래그를 사용하여 여러 비율 제한 키를 기준으로 트래픽을 제한할 수도 있습니다. 이 플래그는 enforce-on-key
플래그와 enforce-on-key-name
플래그를 모두 바꿉니다. enforce-on-key-configs
플래그는 쉼표로 구분된 KEY=NAME
쌍의 목록이 필요합니다. 일부 키는 이름을 제공할 필요가 없습니다.
다음 예시에서는 1.2.3.0/24
의 IP 주소에서 수신되는 모든 요청에서 각 HTTP-PATH
와 site_id
조합에 60초마다 100개 요청의 비율 제한을 사용하여 POLICY_NAME 정책의 throttle
규칙을 우선순위 105
로 만듭니다. 제한 한도를 초과하는 요청은 429
오류 코드를 반환합니다.
gcloud compute security-policies rules create 105 \ --security-policy=POLICY_NAME \ --src-ip-ranges="1.2.3.0/24" \ --action=throttle \ --rate-limit-threshold-count=100 \ --rate-limit-threshold-interval-sec=60 \ --conform-action=allow \ --exceed-action=deny-429 \ --enforce-on-key-configs="HTTP-PATH,HTTP-COOKIE=site_id"
비율 기반 차단 규칙
비율 기반 차단 규칙의 형식은 gcloud CLI에서 다음과 같습니다.
gcloud compute security-policies rules create PRIORITY \ --security-policy=SECURITY_POLICY \ {--expression=EXPRESSION | --src-ip-ranges=SRC_IP_RANGE} \ --action "rate-based-ban" \ --rate-limit-threshold-count=RATE_LIMIT_THRESHOLD_COUNT \ --rate-limit-threshold-interval-sec=RATE_LIMIT_THRESHOLD_INTERVAL_SEC \ --ban-duration-sec=BAN_DURATION_SEC \ --ban-threshold-count=BAN_THRESHOLD_COUNT \ --ban-threshold-interval-sec=BAN_THRESHOLD_INTERVAL_SEC \ --conform-action=[allow] \ --exceed-action=[deny-403|deny-404|deny-429|deny-502|redirect] \ --exceed-redirect-type=[google-recaptcha|external-302] \ --exceed-redirect-target=REDIRECT_URL \ --enforce-on-key=[IP | ALL | HTTP-HEADER | XFF-IP | HTTP-COOKIE | HTTP-PATH | SNI | REGION-CODE] \ --enforce-on-key-name=[HTTP_HEADER_NAME|HTTP_COOKIE_NAME]
예를 들어 다음 gcloud CLI 명령어는 요청이 tuna
값이 있는 fish
헤더와 일치하는 IP 주소마다 우선순위 100
으로 비율 기반 차단 규칙을 만들고 비율이 120초당 요청 50개 한도를 초과하면 300초 동안 차단합니다. 차단된 요청은 404
오류 코드를 반환합니다.
gcloud compute security-policies rules create 100 \ --security-policy=sec-policy \ --expression="request.headers['fish'] == 'tuna'" \ --action=rate-based-ban \ --rate-limit-threshold-count=50 \ --rate-limit-threshold-interval-sec=120 \ --ban-duration-sec=300 \ --conform-action=allow \ --exceed-action=deny-404 \ --enforce-on-key=IP
예를 들어 다음 gcloud CLI 명령어는 우선순위 101
로 비율 기반 차단 규칙을 만들어 리전 코드가 US
와 일치하는 모든 요청을 60초당 요청 10개로 제한합니다. 또한 이 규칙은 비율이 600초당 요청 1,000개 한도를 초과하면 300초 동안 US
리전의 요청을 차단합니다.
차단된 요청은 403
오류 코드를 반환합니다.
gcloud compute security-policies rules create 101 \ --security-policy sec-policy \ --expression "origin.region_code == 'US'" \ --action rate-based-ban \ --rate-limit-threshold-count 10 \ --rate-limit-threshold-interval-sec 60 \ --ban-duration-sec 300 \ --ban-threshold-count 1000 \ --ban-threshold-interval-sec 600 \ --conform-action allow \ --exceed-action deny-403 \ --enforce-on-key ALL
예를 들어 다음 gcloud CLI 명령어는 우선순위 102
로 비율 기반 차단 규칙을 만들어 모든 소스 IP 주소 범위의 모든 요청을 60초당 요청 20개로 제한합니다. 또한 이 규칙은 요청 비율이 400초당 요청 500개 한도를 초과하면 모든 소스 IP 주소 범위의 요청을 600초 동안 차단합니다. 차단된 요청은 429
오류 코드를 반환합니다.
gcloud compute security-policies rules create 102 \ --security-policy sec-policy \ --src-ip-ranges="*" \ --action rate-based-ban \ --rate-limit-threshold-count 20 \ --rate-limit-threshold-interval-sec 60 \ --ban-duration-sec 600 \ --ban-threshold-count 500 \ --ban-threshold-interval-sec 400 \ --conform-action allow \ --exceed-action deny-429 \ --enforce-on-key ALL
제한 규칙을 비율 기반 차단 규칙으로 변경
다음 명령어를 사용하여 기존 규칙 작업을 제한 작업에서 비율 기반 차단 작업으로 변경할 수 있습니다.
gcloud compute security-policies rules update 105 \ --action=rate-based-ban \ --security-policy=sec-policy \ --ban-duration-sec=600
기존 규칙의 작업을 비율 기반 차단 작업에서 제한 작업으로 변경할 수는 없습니다.