서비스 비율 제한 정책 설정

이 페이지에서는 리전 내부 애플리케이션 부하 분산기의 서비스 비율 제한 정책을 설정하는 방법을 보여줍니다.

시작하기 전에

서비스 비율 제한 정책 만들기

서비스 비율 제한 정책을 만들려면 대상 및 규칙을 정의하는 YAML 파일을 만든 후 gcloud network-security service-rate-limit-policies 명령어를 사용하여 파일을 가져옵니다. 다음 섹션에서는 서비스 비율 제한 정책의 예를 제공합니다.

커스텀 그룹을 기반으로 비율 제한 적용

다음 예에서는 HTTP 헤더의 커스텀 태그인 x-custom-group-tag를 사용하여 group1과 group2라는 두 그룹을 식별합니다. 분당 요청 (RPM)을 group1의 경우 10,000개, group2의 경우 20,000개로 제한합니다.

gcloud

  1. 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: 전달 규칙의 이름입니다.
  2. 이전 단계에서 만든 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

  1. 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: 전달 규칙의 이름입니다.
  2. 이전 단계에서 만든 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

  1. 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: 전달 규칙의 이름입니다.
  2. 이전 단계에서 만든 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

  1. 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: 전달 규칙의 이름입니다.
  2. 이전 단계에서 만든 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: 전달 규칙의 위치입니다.

다음 단계