속도 제한 구성

이전 버전의 속도 제한 규칙은 더 이상 사용되지 않습니다. 이전 버전에서 적용 중이던 규칙은 더 이상 작동하지 않습니다.

속도 제한(Enterprise 플랜 전용)은 서비스 거부(DoS) 공격, 무차별 대입공격 로그인 시도 및 애플리케이션 계층을 대상으로 하는 기타 유형의 악용 동작으로부터 보호합니다.

콘솔에서 사용자 지정 속도 제한 규칙 생성하기

사용자 지정 속도 제한 규칙을 생성하려면 다음 단계를 따르십시오:

  1. Cloud Internet Services (CIS) 콘솔에서 [ 보안 ] > [속도 제한 ]으로 이동한 다음, [규칙 생성 ]을 클릭합니다.
  2. 규칙의 이름을 입력하십시오.
  3. 규칙에 대한 일치 조건을 정의하십시오:
    1. 요청 필드(예: URI 경로, HTTP 메서드 또는 헤더)를 선택하십시오.
    2. 연산자(예: 등호, 포함, 일치 등)를 선택하세요.
    3. 값을 입력하거나 선택하세요.
    4. 선택 사항: 표현식 작성기를 사용하여 더 복잡한 일치 논리를 위한 사용자 지정 표현식을 만들 수 있습니다.
    5. 선택 사항: ‘And’‘Or’ 연산자를 사용하여 여러 조건을 결합해 복합 규칙을 만들 수 있습니다.
    6. 선택 사항: 속도 제한 규칙이 오리진 서버에 도달한 요청만 고려하도록 하려면 ‘캐시 상태’를 비활성화하십시오. 기본적으로 캐시된 요청은 요청 빈도 계산에 포함됩니다.
  4. 동일한 특성을 지닌 에서, ‘ Cloud Internet Services (CIS) ’가 일치하는 요청을 식별하는 데 사용하는 특성을 선택하십시오. 일반적인 옵션으로는 IP 주소, NAT를 지원하는 IP, 세션, 헤더, 쿠키, 쿼리 문자열, 또는 JA3 지문 등이 있습니다.
  5. 선택 사항: 사용자 정의 집계 표현식을 정의하려면:
    1. '사용자 지정 계산식 사용'을 활성화합니다.
    2. 계산식을 입력하세요. 기본적으로 카운팅 표현식은 규칙 표현식과 일치합니다. 사용자 정의 집계 표현식을 사용하면 요청이 일치하는 방식과는 다르게 요청 수를 집계할 수 있습니다.
  6. '속도가 초과할 경우'에서 요청 임계값을 구성하십시오:
    1. 허용되는 최대 요청 횟수를 입력하십시오.
    2. Cloud Internet Services (CIS) 가 요청 빈도를 평가하는 데 사용하는 기간을 선택하십시오(예: 10초, 1분 또는 1시간).
  7. '조치 실행'에서 임계값을 초과했을 때 적용할 조치를 선택합니다. 사용 가능한 옵션으로는 차단 (요청 거부), 챌린지 ( CAPTCHA 제시), JS 챌린지 ( JavaScript 챌린지 제시), 기록 (조치 없이 기록), 또는 관리형 챌린지 (클라이언트 특성에 따라 적절한 챌린지 제시)가 있습니다. 예를 들어, ‘Block’을 선택하면 Cloud Internet Services (CIS) 은 설정된 속도 제한을 초과하는 요청을 거부합니다.
  8. '다음 동작'에서 완화 동작을 선택하십시오:
    1. 임계값을 초과한 후 지정된 기간 동안(예: 1분, 10분 또는 1시간) 요청을 차단할 완화 시간 제한을 선택하십시오.
    2. 요율 제한 애드온을 사용하는 엔터프라이즈 고객은 구성된 조치를 적용하는 대신 ‘ 구성된 최대 전송 속도를 초과하는 스로틀 요청 ’을 선택하여 요청을 제한할 수 있습니다.
  9. ~에 위치 에서 규칙 순서를 선택합니다. 규칙은 순서대로 평가되므로, 일반적인 규칙보다 더 구체적인 규칙을 먼저 배치하십시오.
  10. 배치를 클릭하십시오.

속도 제한 규칙이 생성 및 배포되었습니다. 이 규칙은 즉시 적용되며, 사용자의 설정에 따라 트래픽 모니터링을 시작합니다.

콘솔에서 속도 제한 규칙 업데이트하기

속도 제한 규칙을 업데이트하려면 다음 단계를 따르십시오

  1. Cloud Internet Services (CIS) 콘솔에서 [ 보안 ] > [ 속도 제한 ]으로 이동합니다.
  2. 속도 제한 규칙 집합 표에서 수정하려는 규칙을 찾으십시오.
  3. 행 오른쪽에 있는 ‘작업’ 메뉴를 클릭한 다음 ‘편집’을 선택합니다.
  4. 필요에 따라 규칙 설정을 수정하십시오.
  5. ‘저장’을 클릭하여 규칙을 업데이트하세요.

콘솔에서 속도 제한 규칙 삭제하기

콘솔에서 속도 제한 규칙을 삭제하려면 다음 단계를 따르세요:

  1. Cloud Internet Services (CIS) 콘솔에서 [ 보안 ] > [ 속도 제한 ]으로 이동합니다.
  2. 속도 제한 규칙 표에서 삭제하려는 규칙을 찾으십시오.
  3. 규칙의 ‘작업’ 메뉴를 클릭한 다음 ‘삭제’를 선택합니다.
  4. 확인 메시지를 확인한 후 ‘삭제’를 클릭하여 확인하십시오.

응답 구성

나열된 조치에서 선택하고 제한시간을 지정하십시오. 이 경우 제한시간은 조치 발생 금지 기간을 나타냅니다. 60초 타임아웃은 해당 조치가 60초 동안 적용된다는 것을 의미합니다.

요금 제한 조치
조치 설명
블록 임계값이 초과하면 429 오류 발생
인증 확인 사용자는 다음 단계로 진행하기 전에 Google 에서 제공하는 reCAPTCHA 챌린지를 통과해야 합니다. 성공하면 요청이 승인됩니다. 그렇지 않으면 요청은 차단됩니다.
JS 인증 확인 사용자는 다음 단계로 진행하기 전에 ‘ JavaScript ’ 챌린지를 통과해야 합니다. 성공하면 요청이 승인됩니다. 그렇지 않으면 요청은 차단됩니다.
시뮬레이션 이 옵션을 사용하여 라이브 환경에서 기타 옵션을 적용하기 전에 규칙을 테스트할 수 있습니다.

API에 대한 속도 제한 규칙 엔트리포인트 가져오기

모든 속도 제한 규칙 API 작업은 속도 제한 규칙 단계에 대한 엔트리포인트 규칙 집합의 가 RULESET_ID 필요합니다. 이 엔트리포인트 규칙 세트는 이미 존재할 수도 있고, 존재하지 않는 경우 새로 생성해야 할 수도 있습니다.

다음 단계를 따라 속도 제한 규칙 엔트리포인트 규칙 집합을 얻으십시오:

  1. 올바른 변수로 API 환경을 설정하십시오.

  2. API 명령에 사용할 변수에 다음 값을 저장하십시오.

    CRN: 서비스 인스턴스의 전체 URL-인코딩된 클라우드 리소스 이름(CRN)입니다.

    ZONE_ID: 도메인 ID.

  3. 모든 변수가 초기화되면, 진입점 규칙 세트를 가져옵니다:

    curl -X GET "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/phases/http_ratelimit/entrypoint" \
    --header "X-Auth-User-Token: Bearer <API_TOKEN>" \
    --header "Content-Type: application/json"
    

    규칙 집합 ID는 성공적인 요청의 응답에 있습니다. 앞의 호출이 404 찾을 수 없음 응답을 반환하는 경우 다음 API를 사용하여 비율 제한 규칙 단계의 진입점 규칙 집합을 생성합니다:

    curl -x POST https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets \
    --header "X-Auth-User-Token: Bearer <API_TOKEN>" \
    --header "Content-Type: application/json" \
    --data '{
      "name": "Zone-level phase entrypoint",
      "kind": "zone",
      "description": "Rate-limting rule entrypoint ruleset.",
      "phase": "http_ratelimit"
    }'
    

API를 사용하여 속도 제한 규칙 생성하기

API를 사용하여 요금 제한 규칙을 만들려면 다음 단계를 따르세요:

  1. 올바른 변수로 API 환경을 설정하십시오.

  2. API 명령에 사용할 변수에 다음 값을 저장하십시오.

    CRN: 서비스 인스턴스의 전체 URL-인코딩된 클라우드 리소스 이름(CRN)입니다.

    ZONE_ID: 도메인 ID.

    RULESET_ID: 속도 제한 규칙 진입점 규칙 집합의 ID입니다.

  3. 모든 변수가 초기화되면, 속도 제한 규칙을 생성합니다:

    curl -X POST "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \
    --header "X-Auth-User-Token: Bearer <API_TOKEN>" \
    --header "Content-Type: application/json" \
    --data '{
      "description": "My rate limiting rule",
      "expression": "(http.request.uri.path matches \"^/api/\")",
      "action": "block",
      "ratelimit": {
        "characteristics": [
          "cf.colo.id",
          "ip.src"
        ],
        "period": 60,
        "requests_per_period": 100,
        "mitigation_timeout": 600
      }
    }'
    

API로 요금 제한 규칙 업데이트하기

API를 사용하여 기존 요금 제한 규칙을 업데이트하려면 다음 단계를 따르세요:

  1. 올바른 변수로 API 환경을 설정하십시오.

  2. API 명령에 사용할 변수에 다음 값을 저장하십시오.

    CRN: 서비스 인스턴스의 전체 URL-인코딩된 클라우드 리소스 이름(CRN)입니다.

    ZONE_ID: 도메인 ID.

    RULESET_ID: 속도 제한 규칙 진입점 규칙 집합의 ID입니다.

    RULE_ID: 수정할 요금 제한 규칙의 ID입니다.

  3. 모든 변수가 초기화되면, 속도 제한 규칙을 업데이트합니다:

    curl -X PATCH "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/$RULESET_ID/rules/$RULE_ID" \
    --header "X-Auth-User-Token: Bearer <API_TOKEN>" \
    --header "Content-Type: application/json" \
    --data '{
      "enabled": true,
      "description": "rate limit IPs for API"
    }'
    

API로 요금 제한 규칙 삭제하기

API를 사용하여 기존 요금 제한 규칙을 삭제하려면 다음 단계를 따르세요:

  1. 올바른 변수로 API 환경을 설정하십시오.

  2. API 명령에 사용할 변수에 다음 값을 저장하십시오.

    CRN: 서비스 인스턴스의 전체 URL-인코딩된 클라우드 리소스 이름(CRN)입니다.

    ZONE_ID: 도메인 ID.

    RULESET_ID: 속도 제한 규칙 진입점 규칙 집합의 ID입니다.

    RULE_ID: 수정할 요금 제한 규칙의 ID입니다.

  3. 모든 변수의 초기화가 완료되면, 속도 제한 규칙을 삭제하십시오:

    curl -X DELETE "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/$RULESET_ID/rules/$RULE_ID" \
    --header "X-Auth-User-Token: Bearer <API_TOKEN>" \
    --header "Content-Type: application/json"
    

HTTP 상태를 사용하여 속도 제한 규칙 및 응답 일관성 확인

웹 주소나 서비스에 속도 제한 규칙을 적용할 때는 규칙이 올바르게 적용되었는지 확인하는 것이 중요합니다. 간단한 테스트를 통해 시스템이 다음과 같은 적절한 상태 코드( HTTP )로 응답하는지 확인합니다:

  • 200 OK 또는 404 Not Found 에서 허용된 요청을 확인합니다
  • 429 Too Many Requests 요금 한도를 초과하는 경우.

속도 제한 규칙과 응답 일관성을 확인하려면 다음 명령을 실행하세요:

for i in {1..N}; do curl -s -o /dev/null -w "%{http_code}\n" <your-target-url>; done

명령 옵션

N
전송하려는 요청 수입니다.
your-target-url
URL 를 테스트하려는 서비스 또는 엔드포인트에 추가하세요.

이 명령은 각 요청에 대해 HTTP 상태 코드로 출력을 제공하며, 속도 제한 임계값에 도달하는 시점을 관찰할 수 있습니다.

CLI를 통해 속도 제한 규칙 생성하기

CLI에서 속도 제한 규칙을 생성하려면 다음 단계를 따르십시오:

  1. CLI 환경을 설정하십시오.

  2. CLI에서 계정에 로그인하세요. 비밀번호를 입력하면 시스템에서 사용하려는 계정과 지역을 입력하라는 메시지가 표시됩니다:

    ibmcloud login --sso
    
  3. 다음 명령어를 실행하여 속도 제한 규칙을 생성하십시오:

    ibmcloud cis ratelimit-rule-create DNS_DOMAIN_ID --url URL [--description DESCRIPTION] [--threshold NUM] [--period SECONDS] [...]
    

    JSON 파일이나 JSON 문자열을 직접 제공하여 속도 제한 규칙을 생성할 수도 있습니다:

    ibmcloud cis ratelimit-rule-create DNS_DOMAIN_ID (--json @JSON_FILE | JSON_STRING) [-i, --instance INSTANCE] [--output FORMAT]
    

명령 옵션

DNS_DOMAIN_ID
DNS 도메인의 ID입니다. 필수.
--json
속도 제한 규칙을 정의하는 데 사용되는 JSON 파일 또는 JSON 문자열.
  • JSON 데이터에서 필수 입력 항목은 match, threshold, periodaction 입니다:
    • match: 속도 제한 규칙이 임계값 산정에 어떤 트래픽을 포함할지 결정합니다.
      • request: HTTP 요청과 일치합니다.
        • methods: HTTP 메서드는 [POST,PUT] 의 일부이거나 [_ALL_] 의 전부일 수 있습니다. 이 필드는 속도 제한 규칙을 작성하는 데 있어서 필수가 아닙니다. 올바른 값은 GET, POST, PUT, DELETE, PATCH, HEAD, _ALL_입니다.
        • schemes: HTTP 스킴은, [HTTPS] 중 하나이거나, [HTTP,HTTPS] 둘 모두이거나, [_ALL_] 모두일 수 있습니다. 이 필드는 필수가 아닙니다.
        • url: 호스트와 경로로 구성된 주소를 일치시키는 ‘ URL ’ 패턴입니다. 예를 들어, example.org/path 과 같은 경우입니다. 와일드카드는 해당되는 트래픽과 일치하도록 확장되며, 조회 문자열은 비교되지 않습니다. 구역에 대한 모든 트래픽에 대해서는 *를 사용하십시오. 최대 길이는 1024 입니다.
      • response: 클라이언트에 반환되기 전에 HTTP 응답을 일치시킵니다. 이 항목이 정의된 경우에는 트래픽의 전체 계산이 이 단계에서 수행됩니다.
        • status: HTTP 상태 코드는, 하나 [403], 여러 개 [401,403] 를 지정할 수 있으며, 이 값을 지정하지 않으면 모두를 의미합니다. 이 필드는 필수가 아닙니다. 최소값은 100 이고, 최대값은 999 입니다.
        • headers: 일치시킬 응답 헤더의 배열. 응답이 헤더 기준을 충족하지 않는 경우, 해당 요청은 속도 제한 규칙의 적용 대상에서 제외됩니다. 헤더 일치 기준에는 다음 속성이 포함됩니다.
          • name: 일치시킬 응답 헤더의 이름.
          • op: 일치 연산자에서, eq는 ‘같음’을, ne는 ‘다름’을 의미합니다. 올바른 값은 eqne입니다.
          • value: 정확히 일치하는 헤더의 값입니다.
    • threshold: 속도 제한 완화 조치가 발동되는 임계값으로, 특정 기간과 결합되어 적용됩니다. 예를 들어, 기간별 기준치입니다. 최소값은 2 이고, 최대값은 1000000 입니다.
    • period: 일치하는 트래픽을 집계하는 데 걸리는 시간(초 단위). 이 기간 내에 카운트가 임계값을 초과하면 해당 조치가 실행됩니다. 최소값은 10 이고, 최대값은 86400 입니다.
    • action: 지정된 기간 내 일치하는 트래픽의 임계값을 초과했을 때 수행되는 조치.
      • mode: 수행된 작업의 유형. 올바른 값은 simulate, ban, challenge, js_challenge입니다.
      • timeout: 완화 조치를 수행하는 데 소요되는 시간을 초 단위로, 정수 값으로 지정합니다. 타임아웃은 해당 기간과 같거나 그보다 길 수 있습니다. 이 필드는 모드가 ‘ simulate ’ 또는 ‘ ban ’일 때만 유효합니다. 최소값은 10 이고, 최대값은 86400 입니다.
      • response: 반환할 사용자 정의 콘텐츠 유형 및 본문. 이는 구역에 대한 사용자 정의 오류를 대체합니다. 이 필드는 필수가 아닙니다. 이를 생략하면 기본 HTML 오류 페이지가 사용됩니다. 이 필드는 mode가 simulate 또는 ban인 경우에만 유효합니다.
        • content_type: 본문의 콘텐츠 유형으로, 다음 중 하나여야 합니다: text/plain, text/xml, application/json.
        • body: 돌아올 몸. 해당 컨텐츠는 content_type을 따라야 합니다. 최대 길이는 10240 입니다.
  • 선택적 필드는 id, disabled, description, correlatebypass입니다.
    • id: 속도 제한 규칙의 식별자.
    • disabled: 이 속도 제한 규칙이 현재 비활성화되어 있는지 여부.
    • description: 속도 제한 규칙의 적용 사유를 설명하는 데 사용할 수 있는 메모입니다.
    • correlate: NAT 기반 속도 제한을 활성화할지 여부.
      • by: 유효한 값은 nat 입니다.
    • bypass: 속도 제한을 우회할 수 있게 해주는 기준. 예를 들어, 특정 URL 집합에는 속도 제한을 적용해서는 안 된다는 것을 표현할 때.
      • name: 유효한 값은 url 입니다.
      • value: 우회할 URL.

샘플 JSON 데이터:

{
   "id": "92f17202ed8bd63d69a66b86a49a8f6b",
   "disabled": false,
   "description": "Prevent multiple login failures to mitigate brute force attacks",
   "bypass": [
      {
         "name": "url",
         "value": "api.example.com/*"
      }
   ],
   "threshold": 60,
   "period": 900,
   "correlate": {
      "by": "nat"
   },
   "action": [
      {
         "mode": "simulate",
         "timeout": 86400,
         "response": {
            "content_type": "text/plain",
            "body": "<error>This request has been rate-limited.</error>"
         }
      }
   ],
   "match": {
      "request": {
               "methods": [
                  "GET"
               ],
               "schemes": [
                  "HTTP",
                  "HTTPS"
               ],
               "url": "*.example.org/path*"
      },
      "response": {
         "status": [
               403, 401
         ],
         "headers": [
            {
               "name": "Cf-Cache-Status",
               "op": "eq",
               "value": "HIT"
            }
         ]
      }
   }
}
-i, --instance
인스턴스 이름 또는 ID입니다. 인스턴스 이름이나 ID가 설정되지 않은 경우, ibmcloud cis instance-set INSTANCE 로 지정된 컨텍스트 인스턴스가 사용됩니다.
--output
출력 형식입니다. 현재 ‘ json ’만이 지원되는 값입니다.

CLI를 통해 속도 제한 규칙 업데이트하기

CLI에서 다음 명령을 실행하여 속도 제한 규칙을 업데이트하십시오:

ibmcloud cis ratelimit-rule-update DNS_DOMAIN_ID RATELIMIT_RULE_ID [--url URL] [--description DESCRIPTION] [--threshold NUM] [--period SECONDS] [...]

JSON 파일이나 JSON 문자열을 직접 제공하여 속도 제한 규칙을 업데이트할 수도 있습니다:

ibmcloud cis ratelimit-rule-update DNS_DOMAIN_ID RATELIMIT_RULE_ID  (--json @JSON_FILE | JSON_STRING) [-i, --instance INSTANCE] [--output FORMAT]

명령 옵션

DNS_DOMAIN_ID
DNS 도메인의 ID입니다. 필수.
RATELIMIT_RULE_ID
속도 제한 규칙의 ID입니다. 필수.
--json
속도 제한 규칙을 정의하는 데 사용되는 JSON 파일 또는 JSON 문자열입니다.
  • JSON 데이터에서 필수 입력 항목은 match, threshold, periodaction 입니다:
    • match: 속도 제한 규칙이 임계값 산정에 어떤 트래픽을 포함할지 결정합니다.
      • request: HTTP 요청과 일치합니다.
        • methods: HTTP 메서드는 [POST,PUT] 의 일부이거나 [ALL] 의 전부일 수 있습니다. 이 필드는 속도 제한 규칙을 작성하는 데 있어서 필수가 아닙니다. 올바른 값은 GET, POST, PUT, DELETE, PATCH, HEAD, ALL입니다.
        • schemes: HTTP 스킴은, 하나 [HTTPS], 둘 모두 [HTTP,HTTPS] 또는 모두 [_ALL_] 일 수 있습니다. 이 필드는 필수가 아닙니다.
        • url: 일치 대상인 URL 패턴은 호스트와 경로로 구성되었으며, 예를 들어 example.org/path 과 같습니다. 와일드카드는 해당되는 트래픽과 일치하도록 확장되며, 조회 문자열은 비교되지 않습니다. 구역에 대한 모든 트래픽에 대해서는 *를 사용하십시오. 최대 길이는 1024 입니다.
      • response: 클라이언트에 반환되기 전에 HTTP 응답을 일치시킵니다. 이 필드가 정의된 경우, 트래픽 계수는 이 단계에서 모두 수행됩니다.
        • status: HTTP 상태 코드는, 하나 [403], 여러 개 [401,403] 를 지정할 수 있으며, 이 값을 지정하지 않으면 모두를 의미합니다. 이 필드는 필수가 아닙니다. 최소값은 100 이고, 최대값은 999 입니다.
        • headers: 일치시킬 응답 헤더의 배열. 응답이 헤더 기준을 충족하지 않는 경우, 해당 요청은 속도 제한 규칙의 적용 대상에서 제외됩니다. 헤더 일치 기준에는 다음과 같은 속성들이 포함됩니다.
          • name: 일치시킬 응답 헤더의 이름.
          • op: 일치 연산자에서, eq는 ‘같음’을, ne는 ‘다름’을 의미합니다. 올바른 값은 eqne입니다.
          • value: 정확히 일치하는 헤더의 값입니다.
    • threshold: 기간과 결합되어 속도 제한 완화 조치를 발동시키는 임계값입니다. 예를 들어, 기간별 기준치입니다. 최소값은 2 이고, 최대값은 1000000 입니다.
    • period: 일치하는 트래픽을 집계하는 데 걸리는 시간(초 단위). 이 기간 내에 카운트가 임계값을 초과하면 해당 조치가 실행됩니다. 최소값은 1 이고, 최대값은 3600 입니다.
    • action: 정의된 기간 내에 일치하는 트래픽의 임계값을 초과할 경우 해당 조치가 수행됩니다.
      • mode: 수행된 작업의 유형. 유효한 값은 simulate, ban, challenge, js_challenge 입니다.
      • timeout: 완화 조치를 수행하는 데 걸리는 시간(초 단위)을 정수 값으로 표시합니다. 타임아웃이 해당 기간과 같거나 그보다 큽니다. 이 필드는 mode가 simulate 또는 ban인 경우에만 유효합니다. 최소값은 10 이고, 최대값은 86400 입니다.
      • response: 반환할 사용자 정의 콘텐츠 유형 및 본문. 이는 구역에 대한 사용자 정의 오류를 대체합니다. 이 필드는 필수가 아닙니다. 이를 생략하면 기본 HTML 오류 페이지가 사용됩니다. 이 필드는 mode가 simulate 또는 ban인 경우에만 유효합니다.
        • content_type: 본문의 콘텐츠 유형으로, 다음 중 하나여야 합니다: text/plain, text/xml, application/json.
        • body: 돌아올 몸. 해당 컨텐츠는 content_type을 따라야 합니다. 최대 길이는 10240 입니다.
  • 선택적 필드는 disabled, description, correlatebypass입니다.
    • disabled: 이 속도 제한 규칙이 현재 비활성화되어 있는지 여부.
    • description: 속도 제한 규칙의 적용 사유를 설명하는 데 사용할 수 있는 메모입니다.
    • correlate: NAT 기반 속도 제한을 활성화할지 여부.
      • by: 유효한 값은 nat 입니다.
    • bypass: 속도 제한을 우회할 수 있게 해주는 기준. 예를 들어, 특정 URL 집합에는 속도 제한을 적용해서는 안 된다는 것을 표현할 때.
      • name: 유효한 값은 url 입니다.
      • value: 우회할 URL.

샘플 JSON 데이터:

{
   "disabled": false,
   "description": "Prevent multiple login failures to mitigate brute force attacks",
   "bypass": [
      {
         "name": "url",
         "value": "api.example.com/*"
      }
   ],
   "threshold": 60,
   "period": 900,
   "correlate": {
      "by": "nat"
   },
   "action": [
      {
         "mode": "simulate",
         "timeout": 86400,
         "response": {
            "content_type": "text/plain",
            "body": "<error>This request has been rate-limited.</error>"
         }
      }
   ],
   "match": {
      "request": {
               "methods": [
                  "GET"
               ],
               "schemes": [
                  "HTTP",
                  "HTTPS"
               ],
               "url": "*.example.org/path*"
      },
      "response": {
         "status": [
               403, 401
         ],
         "headers": [
            {
               "name": "Cf-Cache-Status",
               "op": "eq",
               "value": "HIT"
            }
         ]
      }
   }
}
-i, --instance
인스턴스 이름 또는 ID입니다. 설정되지 않은 경우, ibmcloud cis instance-set INSTANCE 로 지정된 컨텍스트 인스턴스가 사용됩니다.
--output
출력 형식을 지정하십시오. ‘ JSON ’만 지원됩니다.

CLI에서 속도 제한 규칙 삭제하기

CLI에서 속도 제한 규칙을 삭제하려면 다음 명령을 실행하십시오:

ibmcloud cis ratelimit-rule-delete DNS_DOMAIN_ID RATELIMIT_RULE_ID [--instance INSTANCE]

명령 옵션

DNS_DOMAIN_ID
DNS 도메인의 ID입니다. 필수.
RATELIMIT_RULE_ID
속도 제한 규칙의 ID입니다. 필수.
-i, --instance
인스턴스 이름 또는 ID입니다. 설정되지 않은 경우, ibmcloud cis instance-set INSTANCE 로 지정된 컨텍스트 인스턴스가 사용됩니다.

자세한 내용은 CLI 속도 제한을 참조하십시오.

테라폼으로 사용자 지정 속도 제한 규칙 만들기

속도 제한 규칙 세트를 생성하려면 먼저 엔트리포인트를 생성한 후 속도 제한 규칙 세트를 생성해야 합니다. 이를 수행하려면 다음 단계를 따르십시오.

  1. 엔트리포인트 규칙 세트를 생성하려면 다음 명령을 실행하십시오:

    resource "ibm_cis_ruleset_entrypoint_version" "config" {
      cis_id    = data.ibm_cis.cis_instance.id
      domain_id = data.ibm_cis_domain.cis_domain.domain_id
      phase     = "http_ratelimit"
    
      rulesets {
        description = "Zone rate limit entrypoint"
      }
      lifecycle {
        ignore_changes = [
          rulesets
        ]
      }
    }
    

    테라폼이 엔트리포인트 규칙 세트를 업데이트하지 못하도록 차단 블록을 lifecycle 사용하십시오. 일부 엔트리포인트 매개변수는 매번 실행될 terraform apply 때마다 업데이트되며, 이는 의도하지 않은 구성 변경을 초래할 수 있습니다. 이 lifecycle 블록은 이러한 업데이트를 무시하고 리소스 안정성을 유지하는 데 도움이 됩니다.

  2. 속도 제한 규칙 세트를 생성하려면 다음 명령을 실행하십시오:

    resource "ibm_cis_ruleset_rule" "config" {
      cis_id     = data.ibm_cis.cis_instance.id
      domain_id  = data.ibm_cis_domain.cis_domain.domain_id
      ruleset_id = "data.ibm_cis_ruleset_entrypoint_versions.ruleset_id"
      rule {
        action      = "block"
        enabled     = true
        description = "Block IPs making over 100 requests/minute to /api/"
        expression  = "(http.request.uri.path matches \"^/api/\")"
        ratelimit {
          characteristics     = ["cf.colo.id", "ip.src"]
          period              = 60
          requests_per_period = 100
          mitigation_timeout  = 300
        }
      }
    }
    

다음 예시는 Terraform을 사용하여 엔트리포인트와 속도 제한 규칙을 생성하는 방법을 보여줍니다:

resource ibm_cis_ruleset_entrypoint_version test {
  cis_id    = ibm_cis.instance.id
  domain_id = data.ibm_cis_domain.cis_domain.domain_id
  phase = "http_ratelimit"
  rulesets {
      description = "Entrypoint ruleset for ratelimit ruleset"
    }
    lifecycle {
      ignore_changes = [
        rulesets
      ]
  }
}

data ibm_cis_ruleset_entrypoint_versions test {
  cis_id    = ibm_cis.instance.id
  domain_id = data.ibm_cis_domain.cis_domain.domain_id
  phase = "http_ratelimit"
   depends_on = [
    ibm_cis_ruleset_entrypoint_version.ratelimit_ep
  ]
}

resource "ibm_cis_ruleset_rule" "ratelimit_rule_1" {
  cis_id    = ibm_cis.instance.id
  domain_id = data.ibm_cis_domain.cis_domain.domain_id
  ruleset_id = data.ibm_cis_ruleset_entrypoint_versions.ratelimit_data.rulesets[0].ruleset_id

    rule {
      action      = "block"
      description = "Block IPs making over 100 requests/minute to /api/"
      enabled     = true
      expression  = "(http.request.uri.path matches \"^/api/\")"

      rate_limit {
      characteristics     = ["cf.colo.id","ip.src"]
      mitigation_timeout  = 300
      period              = 120
      requests_per_period = 100
      }
    }
  }