AWS WAFv2에 조건부 rate-based rule을 설정하면 완전히 잘못된 이야기가 나온다
개막사
"특정 URI 경로에만 Rate limit을 더한 AWS WAF의 규칙을 만들 수 있을까요?"
WAFv2로 간단히...본래 별로 좋은 결과가 없었을 텐데, 드디어 방법이 생겨서 적어 놓았다.
관련 리소스
AWS WAFv2
https://docs.aws.amazon.com/waf/latest/APIReference/Welcome.html#Welcome_AWS_WAFV2
이번 WAF 관련 작업은 모두 AWS 콘솔에서 수행됩니다.
기타
WAF 앞의 클라우드 프론트와 팟캐스트 테스트용 PC는 주제가 아니기 때문에 사랑을 끊는다...
구성 규칙
json
GUI 설정으로도 json 출력을 즉시 확인할 수 있습니다.{
"Name": "wasshoi-path-rate",
"Priority": 0,
"Action": {
"Block": {}
},
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "wasshoi-path-rate"
},
"Statement": {
"RateBasedStatement": {
"Limit": 100,
"AggregateKeyType": "IP",
"ScopeDownStatement": {
"ByteMatchStatement": {
"FieldToMatch": {
"UriPath": {}
},
"PositionalConstraint": "CONTAINS",
"SearchString": "/hoge/fuga/wasshoi",
"TextTransformations": [
{
"Type": "NONE",
"Priority": 0
}
]
}
}
}
}
}
GUI
이것도 간단명료한 영어로 상세하게 주석한 새로운 디자인이다.
AWS WAFv2
https://docs.aws.amazon.com/waf/latest/APIReference/Welcome.html#Welcome_AWS_WAFV2
이번 WAF 관련 작업은 모두 AWS 콘솔에서 수행됩니다.
기타
WAF 앞의 클라우드 프론트와 팟캐스트 테스트용 PC는 주제가 아니기 때문에 사랑을 끊는다...
구성 규칙
json
GUI 설정으로도 json 출력을 즉시 확인할 수 있습니다.{
"Name": "wasshoi-path-rate",
"Priority": 0,
"Action": {
"Block": {}
},
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "wasshoi-path-rate"
},
"Statement": {
"RateBasedStatement": {
"Limit": 100,
"AggregateKeyType": "IP",
"ScopeDownStatement": {
"ByteMatchStatement": {
"FieldToMatch": {
"UriPath": {}
},
"PositionalConstraint": "CONTAINS",
"SearchString": "/hoge/fuga/wasshoi",
"TextTransformations": [
{
"Type": "NONE",
"Priority": 0
}
]
}
}
}
}
}
GUI
이것도 간단명료한 영어로 상세하게 주석한 새로운 디자인이다.
{
"Name": "wasshoi-path-rate",
"Priority": 0,
"Action": {
"Block": {}
},
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "wasshoi-path-rate"
},
"Statement": {
"RateBasedStatement": {
"Limit": 100,
"AggregateKeyType": "IP",
"ScopeDownStatement": {
"ByteMatchStatement": {
"FieldToMatch": {
"UriPath": {}
},
"PositionalConstraint": "CONTAINS",
"SearchString": "/hoge/fuga/wasshoi",
"TextTransformations": [
{
"Type": "NONE",
"Priority": 0
}
]
}
}
}
}
}
화면을 보면서 Pochipo로 아주 간단하네요!와하하하!검증을 시작했지만 그때부터 소박하고 길었다.
※ 스포일러: 설정은 이렇다.
뒷말
검증 1: "Rate limit 부분부터 확인하세요"→성공
이것은 방금 설정에서 URI 경로 부분을 삭제하는 설정입니다.Consier all requests를 선택했습니다. Rate Limit 뿐입니다.{
"Name": "wasshoi-path-rate",
"Priority": 0,
"Action": {
"Block": {}
},
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "wasshoi-path-rate"
},
"Statement": {
"RateBasedStatement": {
"Limit": 100,
"AggregateKeyType": "IP"
}
}
}
응용 프로그램을 적용한 후 URI 경로/hoge/fuga/wasshoi
를 외부에서 120회 연속으로 두드리는 스크립트를 실행합니다.
→결과:성공.101번째 요청에서 블락에게 응답 코드 403을 잘 받았다.
검증2: "본 공연과 동일한 설정 확인"→ 순조롭지 못함.
검증 1이 성공했기 때문에 그 규칙을 계속 편집하고 상술한'규칙 설정'에 따라 업데이트합니다.
완료되면 검사기 1과 같은 스크립트를 실행합니다.
→ 결과: 실패.curl 결과 모두 통과, 응답 코드 200, WAF 측이 규칙에 걸리지 않은 경우
어???
검증3: "뭔가 잘못된 것 같으니 설정을 조금만 조정해 주세요" → 잘 못하죠.
경로에 *
를 추가하거나 Contains String
부분을 다른 조건으로 해 보세요.각 스크립트는 다양한 설정에서 재생되며 결과는 검증 2와 같습니다.난 아무것도 몰라.
결론: 그를 하룻밤 자게 하면 잠을 잘 수 있다.
정확히 말하면 AWS가 지원하는 기술적 문제를 통해 해결된 것으로 결론은 다음과 같다.
{
"Name": "wasshoi-path-rate",
"Priority": 0,
"Action": {
"Block": {}
},
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "wasshoi-path-rate"
},
"Statement": {
"RateBasedStatement": {
"Limit": 100,
"AggregateKeyType": "IP"
}
}
}
솔직히 타임라인을 의식하고 재검증했다.
→블락 성공!
규칙을 재설정하고 이번에는 1분에서 20분 간격으로 검증 스크립트를 반복한다(다른 작업에서는 거칠게 하기 때문에 간격이 분산된다).
그리고 규칙 설정 후 약 2시간가량 매번 120회 요청이 블락에 의해 이뤄지는 행위를 확인했다.WAF의 기록에도 잘 기록되어 있습니다.
조금만 더 기다려, 확인 시간이 지나면 블록이 해제될 거야.대단히 기쁘다.
총결산
"검증용으로 설정된 것만 사용"함정이에요
끝.
아마도 너무 어리석은 이유로 반한 것 같지만, 인터넷에서 아무리 조사해도 이번 현상을 찾지 못해 상당히 고통스럽다.
Reference
이 문제에 관하여(AWS WAFv2에 조건부 rate-based rule을 설정하면 완전히 잘못된 이야기가 나온다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/m0559reen/items/f79c831ceca116c99547
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(AWS WAFv2에 조건부 rate-based rule을 설정하면 완전히 잘못된 이야기가 나온다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/m0559reen/items/f79c831ceca116c99547텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)