이 페이지에서는 리전 내부 애플리케이션 부하 분산기의 서비스 비율 제한 정책을 설정하는 방법을 보여줍니다.
시작하기 전에
- 서비스 비율 제한 개요를 숙지합니다 .
-
- 네트워크 보안 API (
networksecurity.googleapis.com) - Network Services API (
networkservices.googleapis.com)
API를 사용 설정하려면 다음 명령어를 실행합니다.
gcloud services enable \ networksecurity.googleapis.com \ networkservices.googleapis.com - 네트워크 보안 API (
아직 리전 내부 애플리케이션 부하 분산기를 구성하지 않은 경우 VM 인스턴스 그룹 백엔드가 있는 리전 내부 애플리케이션 부하 분산기 설정 페이지를 참조하고 하나를 만듭니다.
서비스 비율 제한 정책 만들기
서비스 비율 제한 정책을 만들려면 대상 및 규칙을 정의하는 YAML 파일을 만든 후 gcloud network-security service-rate-limit-policies 명령어를 사용하여 파일을 가져옵니다. 다음 섹션에서는 서비스 비율 제한 정책의 예를 제공합니다.
커스텀 그룹을 기반으로 비율 제한 적용
다음 예에서는 HTTP 헤더의 커스텀 태그인 x-custom-group-tag를 사용하여 group1과 group2라는 두 그룹을 식별합니다. 분당 요청 (RPM)을 group1의 경우 10,000개, group2의 경우 20,000개로 제한합니다.
gcloud
custom-groups-policy.yaml파일을 만들고 정책 매개변수를 지정합니다.$ cat >custom-groups-policy.yaml <<EOF name: projects/PROJECT_ID/locations/LOCATION/rateLimitPolicies/custom-groups-policy description: Rate limit each API key based on custom tags. httpRules: # Match on traffic on the custom tag header. - to: destination: headerSet: headers: - name: "x-custom-group-tag" value: exact: "group1" rateLimitActions: - rateLimitBucket: rl_group1_rpm_limit - to: destination: headerSet: headers: - name: "x-custom-group-tag" value: exact: "group2" rateLimitActions: - rateLimitBucket: rl_group2_rpm_limit rateLimitBuckets: - name: rl_group1_rpm_limit # Set threshold for ALL the traffic matching this bucket. keys: - keyType: ALL defaultLimit: countLimit: count: 10000 interval: 1 intervalUnit: MINUTES - name: rl_group2_rpm_limit # Set threshold for ALL the traffic matching this bucket. keys: - keyType: ALL defaultLimit: countLimit: count: 20000 interval: 1 intervalUnit: MINUTES targets: - resource: projects/PROJECT_ID/regions/LOCATION/forwardingRules/FORWARDING_RULE_NAME EOF다음을 바꿉니다.
PROJECT_ID: Cloud de Confiance 프로젝트의 ID입니다.LOCATION: 전달 규칙의 위치입니다.FORWARDING_RULE_NAME: 전달 규칙의 이름입니다.
이전 단계에서 만든 YAML 파일을 가져와 서비스 비율 제한 정책을 만듭니다.
gcloud network-security service-rate-limit-policies import custom-groups-policy \ --source=custom-groups-policy.yaml \ --location=LOCATION \ --project=PROJECT_ID
다음을 바꿉니다.
PROJECT_ID: Cloud de Confiance 프로젝트의 ID입니다.LOCATION: 전달 규칙의 위치입니다.
모든 클라이언트에 비율 제한 적용
다음 예에서는 모든 클라이언트에 대해 분당 요청을 10,000개로 제한합니다.
gcloud
all-clients-policy.yaml파일을 만들고 정책 매개변수를 지정합니다.$ cat >all-clients-policy.yaml <<EOF name: projects/PROJECT_ID/locations/LOCATION/rateLimitPolicies/all-clients-policy description: Service rate limiting example. httpRules: # Match on all traffic. # Service rate limiting bucket - rateLimitActions: - rateLimitBucket: rl_default_rpm_limit rateLimitBuckets: - name: "rl_default_rpm_limit" # Match on 'ALL' requests for this bucket. keys: - keyType: ALL defaultLimit: countLimit: count: 10000 interval: 1 intervalUnit: MINUTES targets: - resource: projects/PROJECT_ID/regions/LOCATION/forwardingRules/FORWARDING_RULE_NAME EOF다음을 바꿉니다.
PROJECT_ID: 프로젝트 Cloud de Confiance 의 ID입니다.LOCATION: 전달 규칙의 위치입니다.FORWARDING_RULE_NAME: 전달 규칙의 이름입니다.
이전 단계에서 만든 YAML 파일을 가져와 서비스 비율 제한 정책을 만듭니다.
gcloud network-security service-rate-limit-policies import all-clients-policy \ --source=all-clients-policy.yaml \ --location=LOCATION \ --project=PROJECT_ID
다음을 바꿉니다.
PROJECT_ID: Cloud de Confiance 프로젝트의 ID입니다.LOCATION: 전달 규칙의 위치입니다.
호스트 및 API 키를 기반으로 비율 제한 적용
다음 예에서는 x-api-key HTTP 헤더에서 가져온 API 키의 각 고유 값에 대해 5분당 1,000개의 요청으로 호스트 example.com으로 전송되는 API의 비율을 제한합니다. 대신 특수 API 키 abc123은 5분당 10,000개의 요청으로 한도가 증가합니다.
gcloud
host-and-api-key-policy.yaml파일을 만들고 정책 매개변수를 지정합니다.$ cat >host-and-api-key-policy.yaml <<EOF name: projects/PROJECT_ID/locations/LOCATION/rateLimitPolicies/host-and-api-key-policy description: Rate limit each api key. httpRules: # Match on traffic to example.com - to: destination: hosts: - exact: "example.com" rateLimitActions: - rateLimitBucket: rl_default_rpm_limit rateLimitBuckets: - name: rl_default_rpm_limit # Identify API key from its header, say 'x-api-key'. keys: - header: "x-api-key" keyType: HTTP_HEADER defaultLimit: countLimit: count: 1000 interval: 5 intervalUnit: MINUTES # Override the threshold for specific API key 'abc123'. userOverrides: - overrideKey: httpHeaders: - header: "x-api-key" value: "abc123" limit: countLimit: count: 10000 interval: 5 intervalUnit: MINUTES targets: - resource: projects/PROJECT_ID/regions/LOCATION/forwardingRules/FORWARDING_RULE_NAME EOF다음을 바꿉니다.
PROJECT_ID: Cloud de Confiance 프로젝트의 ID입니다.LOCATION: 전달 규칙의 위치입니다.FORWARDING_RULE_NAME: 전달 규칙의 이름입니다.
이전 단계에서 만든 YAML 파일을 가져와 서비스 비율 제한 정책을 만듭니다.
gcloud network-security service-rate-limit-policies import host-and-api-key-policy \ --source=host-and-api-key-policy.yaml \ --location=LOCATION \ --project=PROJECT_ID
다음을 바꿉니다.
PROJECT_ID: Cloud de Confiance 프로젝트의 ID입니다.LOCATION: 전달 규칙의 위치입니다.
URL 경로 및 클라이언트 이름을 기반으로 비율 제한 적용
다음 예에서는 클라이언트 인증서 일반 이름으로 식별되는 각 클라이언트에 대해 /public 경로에서 호스팅되는 API를 분당 100개의 요청으로 제한합니다.
gcloud
path-and-client-name-policy.yaml파일을 만들고 정책 매개변수를 지정합니다.$ cat >path-and-client-name-policy.yaml <<EOF name: projects/PROJECT_ID/locations/LOCATION/rateLimitPolicies/path-and-client-name-policy description: Simple API rate limiting example. httpRules: # Match on traffic to /public . - to: destination: paths: - exact: "/public" # Default RPM bucket rateLimitActions: - rateLimitBucket: rl_default_rpm_limit rateLimitBuckets: - name: "rl_default_rpm_limit" # Identify client by its client cert name keys: - keyType: PRINCIPAL principalType: CLIENT_CERT_COMMON_NAME defaultLimit: countLimit: count: 100 interval: 1 intervalUnit: MINUTES targets: - resource: projects/PROJECT_ID/regions/LOCATION/forwardingRules/FORWARDING_RULE_NAME EOF다음을 바꿉니다.
PROJECT_ID: 프로젝트 Cloud de Confiance 의 ID입니다.LOCATION: 전달 규칙의 위치입니다.FORWARDING_RULE_NAME: 전달 규칙의 이름입니다.
이전 단계에서 만든 YAML 파일을 가져와 서비스 비율 제한 정책을 만듭니다.
gcloud network-security service-rate-limit-policies import path-and-client-name-policy \ --source=path-and-client-name-policy.yaml \ --location=LOCATION \ --project=PROJECT_ID
다음을 바꿉니다.
PROJECT_ID: 프로젝트 Cloud de Confiance 의 ID입니다.LOCATION: 전달 규칙의 위치입니다.