속도 제한 구성
이전 버전의 속도 제한 규칙은 더 이상 사용되지 않습니다. 이전 버전에서 적용 중이던 규칙은 더 이상 작동하지 않습니다.
속도 제한(Enterprise 플랜 전용)은 서비스 거부(DoS) 공격, 무차별 대입공격 로그인 시도 및 애플리케이션 계층을 대상으로 하는 기타 유형의 악용 동작으로부터 보호합니다.
콘솔에서 사용자 지정 속도 제한 규칙 생성하기
사용자 지정 속도 제한 규칙을 생성하려면 다음 단계를 따르십시오:
- Cloud Internet Services (CIS) 콘솔에서 [ 보안 ] > [속도 제한 ]으로 이동한 다음, [규칙 생성 ]을 클릭합니다.
- 규칙의 이름을 입력하십시오.
- 규칙에 대한 일치 조건을 정의하십시오:
- 요청 필드(예: URI 경로, HTTP 메서드 또는 헤더)를 선택하십시오.
- 연산자(예: 등호, 포함, 일치 등)를 선택하세요.
- 값을 입력하거나 선택하세요.
- 선택 사항: 표현식 작성기를 사용하여 더 복잡한 일치 논리를 위한 사용자 지정 표현식을 만들 수 있습니다.
- 선택 사항: ‘And’ 및 ‘Or’ 연산자를 사용하여 여러 조건을 결합해 복합 규칙을 만들 수 있습니다.
- 선택 사항: 속도 제한 규칙이 오리진 서버에 도달한 요청만 고려하도록 하려면 ‘캐시 상태’를 비활성화하십시오. 기본적으로 캐시된 요청은 요청 빈도 계산에 포함됩니다.
- 동일한 특성을 지닌 에서, ‘ Cloud Internet Services (CIS) ’가 일치하는 요청을 식별하는 데 사용하는 특성을 선택하십시오. 일반적인 옵션으로는 IP 주소, NAT를 지원하는 IP, 세션, 헤더, 쿠키, 쿼리 문자열, 또는 JA3 지문 등이 있습니다.
- 선택 사항: 사용자 정의 집계 표현식을 정의하려면:
- '사용자 지정 계산식 사용'을 활성화합니다.
- 계산식을 입력하세요. 기본적으로 카운팅 표현식은 규칙 표현식과 일치합니다. 사용자 정의 집계 표현식을 사용하면 요청이 일치하는 방식과는 다르게 요청 수를 집계할 수 있습니다.
- '속도가 초과할 경우'에서 요청 임계값을 구성하십시오:
- 허용되는 최대 요청 횟수를 입력하십시오.
- Cloud Internet Services (CIS) 가 요청 빈도를 평가하는 데 사용하는 기간을 선택하십시오(예: 10초, 1분 또는 1시간).
- '조치 실행'에서 임계값을 초과했을 때 적용할 조치를 선택합니다. 사용 가능한 옵션으로는 차단 (요청 거부), 챌린지 ( CAPTCHA 제시), JS 챌린지 ( JavaScript 챌린지 제시), 기록 (조치 없이 기록), 또는 관리형 챌린지 (클라이언트 특성에 따라 적절한 챌린지 제시)가 있습니다. 예를 들어, ‘Block’을 선택하면 Cloud Internet Services (CIS) 은 설정된 속도 제한을 초과하는 요청을 거부합니다.
- '다음 동작'에서 완화 동작을 선택하십시오:
- 임계값을 초과한 후 지정된 기간 동안(예: 1분, 10분 또는 1시간) 요청을 차단할 완화 시간 제한을 선택하십시오.
- 요율 제한 애드온을 사용하는 엔터프라이즈 고객은 구성된 조치를 적용하는 대신 ‘ 구성된 최대 전송 속도를 초과하는 스로틀 요청 ’을 선택하여 요청을 제한할 수 있습니다.
- ~에 위치 에서 규칙 순서를 선택합니다. 규칙은 순서대로 평가되므로, 일반적인 규칙보다 더 구체적인 규칙을 먼저 배치하십시오.
- 배치를 클릭하십시오.
속도 제한 규칙이 생성 및 배포되었습니다. 이 규칙은 즉시 적용되며, 사용자의 설정에 따라 트래픽 모니터링을 시작합니다.
콘솔에서 속도 제한 규칙 업데이트하기
속도 제한 규칙을 업데이트하려면 다음 단계를 따르십시오
- Cloud Internet Services (CIS) 콘솔에서 [ 보안 ] > [ 속도 제한 ]으로 이동합니다.
- 속도 제한 규칙 집합 표에서 수정하려는 규칙을 찾으십시오.
- 행 오른쪽에 있는 ‘작업’ 메뉴를 클릭한 다음 ‘편집’을 선택합니다.
- 필요에 따라 규칙 설정을 수정하십시오.
- ‘저장’을 클릭하여 규칙을 업데이트하세요.
콘솔에서 속도 제한 규칙 삭제하기
콘솔에서 속도 제한 규칙을 삭제하려면 다음 단계를 따르세요:
- Cloud Internet Services (CIS) 콘솔에서 [ 보안 ] > [ 속도 제한 ]으로 이동합니다.
- 속도 제한 규칙 표에서 삭제하려는 규칙을 찾으십시오.
- 규칙의 ‘작업’ 메뉴를 클릭한 다음 ‘삭제’를 선택합니다.
- 확인 메시지를 확인한 후 ‘삭제’를 클릭하여 확인하십시오.
응답 구성
나열된 조치에서 선택하고 제한시간을 지정하십시오. 이 경우 제한시간은 조치 발생 금지 기간을 나타냅니다. 60초 타임아웃은 해당 조치가 60초 동안 적용된다는 것을 의미합니다.
| 조치 | 설명 |
|---|---|
| 블록 | 임계값이 초과하면 429 오류 발생 |
| 인증 확인 | 사용자는 다음 단계로 진행하기 전에 Google 에서 제공하는 reCAPTCHA 챌린지를 통과해야 합니다. 성공하면 요청이 승인됩니다. 그렇지 않으면 요청은 차단됩니다. |
| JS 인증 확인 | 사용자는 다음 단계로 진행하기 전에 ‘ JavaScript ’ 챌린지를 통과해야 합니다. 성공하면 요청이 승인됩니다. 그렇지 않으면 요청은 차단됩니다. |
| 시뮬레이션 | 이 옵션을 사용하여 라이브 환경에서 기타 옵션을 적용하기 전에 규칙을 테스트할 수 있습니다. |
API에 대한 속도 제한 규칙 엔트리포인트 가져오기
모든 속도 제한 규칙 API 작업은 속도 제한 규칙 단계에 대한 엔트리포인트 규칙 집합의 가 RULESET_ID 필요합니다. 이 엔트리포인트 규칙 세트는 이미 존재할 수도 있고, 존재하지 않는 경우 새로 생성해야 할 수도 있습니다.
다음 단계를 따라 속도 제한 규칙 엔트리포인트 규칙 집합을 얻으십시오:
-
올바른 변수로 API 환경을 설정하십시오.
-
API 명령에 사용할 변수에 다음 값을 저장하십시오.
CRN: 서비스 인스턴스의 전체 URL-인코딩된 클라우드 리소스 이름(CRN)입니다.ZONE_ID: 도메인 ID. -
모든 변수가 초기화되면, 진입점 규칙 세트를 가져옵니다:
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를 사용하여 요금 제한 규칙을 만들려면 다음 단계를 따르세요:
-
올바른 변수로 API 환경을 설정하십시오.
-
API 명령에 사용할 변수에 다음 값을 저장하십시오.
CRN: 서비스 인스턴스의 전체 URL-인코딩된 클라우드 리소스 이름(CRN)입니다.ZONE_ID: 도메인 ID.RULESET_ID: 속도 제한 규칙 진입점 규칙 집합의 ID입니다. -
모든 변수가 초기화되면, 속도 제한 규칙을 생성합니다:
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를 사용하여 기존 요금 제한 규칙을 업데이트하려면 다음 단계를 따르세요:
-
올바른 변수로 API 환경을 설정하십시오.
-
API 명령에 사용할 변수에 다음 값을 저장하십시오.
CRN: 서비스 인스턴스의 전체 URL-인코딩된 클라우드 리소스 이름(CRN)입니다.ZONE_ID: 도메인 ID.RULESET_ID: 속도 제한 규칙 진입점 규칙 집합의 ID입니다.RULE_ID: 수정할 요금 제한 규칙의 ID입니다. -
모든 변수가 초기화되면, 속도 제한 규칙을 업데이트합니다:
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를 사용하여 기존 요금 제한 규칙을 삭제하려면 다음 단계를 따르세요:
-
올바른 변수로 API 환경을 설정하십시오.
-
API 명령에 사용할 변수에 다음 값을 저장하십시오.
CRN: 서비스 인스턴스의 전체 URL-인코딩된 클라우드 리소스 이름(CRN)입니다.ZONE_ID: 도메인 ID.RULESET_ID: 속도 제한 규칙 진입점 규칙 집합의 ID입니다.RULE_ID: 수정할 요금 제한 규칙의 ID입니다. -
모든 변수의 초기화가 완료되면, 속도 제한 규칙을 삭제하십시오:
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에서 속도 제한 규칙을 생성하려면 다음 단계를 따르십시오:
-
CLI 환경을 설정하십시오.
-
CLI에서 계정에 로그인하세요. 비밀번호를 입력하면 시스템에서 사용하려는 계정과 지역을 입력하라는 메시지가 표시됩니다:
ibmcloud login --sso -
다음 명령어를 실행하여 속도 제한 규칙을 생성하십시오:
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,period및action입니다: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는 ‘다름’을 의미합니다. 올바른 값은eq및ne입니다.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,correlate및bypass입니다.id: 속도 제한 규칙의 식별자.disabled: 이 속도 제한 규칙이 현재 비활성화되어 있는지 여부.description: 속도 제한 규칙의 적용 사유를 설명하는 데 사용할 수 있는 메모입니다.correlate: NAT 기반 속도 제한을 활성화할지 여부.by: 유효한 값은nat입니다.
bypass: 속도 제한을 우회할 수 있게 해주는 기준. 예를 들어, 특정 URL 집합에는 속도 제한을 적용해서는 안 된다는 것을 표현할 때.name: 유효한 값은url입니다.value: 우회할 URL.
- JSON 데이터에서 필수 입력 항목은
샘플 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,period및action입니다: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는 ‘다름’을 의미합니다. 올바른 값은eq및ne입니다.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,correlate및bypass입니다.disabled: 이 속도 제한 규칙이 현재 비활성화되어 있는지 여부.description: 속도 제한 규칙의 적용 사유를 설명하는 데 사용할 수 있는 메모입니다.correlate: NAT 기반 속도 제한을 활성화할지 여부.by: 유효한 값은nat입니다.
bypass: 속도 제한을 우회할 수 있게 해주는 기준. 예를 들어, 특정 URL 집합에는 속도 제한을 적용해서는 안 된다는 것을 표현할 때.name: 유효한 값은url입니다.value: 우회할 URL.
- JSON 데이터에서 필수 입력 항목은
샘플 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 속도 제한을 참조하십시오.
테라폼으로 사용자 지정 속도 제한 규칙 만들기
속도 제한 규칙 세트를 생성하려면 먼저 엔트리포인트를 생성한 후 속도 제한 규칙 세트를 생성해야 합니다. 이를 수행하려면 다음 단계를 따르십시오.
-
엔트리포인트 규칙 세트를 생성하려면 다음 명령을 실행하십시오:
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블록은 이러한 업데이트를 무시하고 리소스 안정성을 유지하는 데 도움이 됩니다. -
속도 제한 규칙 세트를 생성하려면 다음 명령을 실행하십시오:
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
}
}
}