에 대한 새로운 콘솔 환경 소개 AWS WAF
이제 업데이트된 환경을 사용하여 콘솔의 모든 위치에서 AWS WAF 기능에 액세스할 수 있습니다. 자세한 내용은 콘솔 작업을 참조하세요.
기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
동적 레이블 보간
동적 레이블 보간을 사용하면 구문을 사용하여 사용자 지정 요청 헤더, 사용자 지정 응답 헤더 및 사용자 지정 응답 본문에 레이블 값을 직접 포함할 수 있습니다. ${namespace:}는 요청에 연결된 레이블과 비교하여 평가 시 각 자리 표시자를 AWS WAF 확인하므로 각 레이블 값에 대해 별도의 규칙을 작성할 필요가 없습니다.
보간은 새 필드나 구성 단계 없이 기존 AWS WAF API 내에서 작동합니다. 기존 문자열 값에 자리 표시자 구문을 사용합니다. 기존 정적 헤더 값은 변경되지 않고 계속 작동합니다. 보간은 값에 ${namespace:} 절이 포함된 경우에만 활성화됩니다.
보간이 지원되는 위치
다음 위치에서 보${namespace:}간을 사용할 수 있습니다.
-
사용자 지정 요청 헤더 - 확인된 레이블 값을 오리진에 전달된 헤더에 삽입합니다. 헤더 값 필드에서
${namespace:}구문을 사용합니다. -
사용자 지정 응답 본문 - 블록 페이지, 챌린지 페이지 및 기타 사용자 지정 응답에 레이블 값과 합성 레이블을 포함합니다. 응답 본문 콘텐츠 필드에
${namespace:}구문을 사용합니다. -
사용자 지정 응답 헤더 - 리디렉션 헤더와 같은 응답
Location헤더에 레이블 값을 삽입합니다. 응답 헤더 값 필드에${namespace:}구문을 사용합니다.
보간 구문 및 해상도
보간을 사용하려면 헤더 값 또는 사용자 지정 응답 본문 콘텐츠에 ${namespace:} 절을 포함합니다. 후행 콜론은 중요합니다. 단일 레이블을 문자 그대로 일치시키는 대신 해당 네임스페이스 내의 모든 레이블을 확인 AWS WAF 하도록에 지시합니다.
AWS WAF 는 다음 규칙을 사용하여 평가 시 각 절을 확인합니다.
-
단일 레이블 일치 - 절이 레이블의 터미널 값으로 확인됩니다. 예를 들어 요청에 레이블이 있는 경우 절
awswaf:managed:aws:bot-control:bot:category:scraping은 로${awswaf:managed:aws:bot-control:bot:category:}확인됩니다scraping. -
다중 레이블 - 여러 레이블이 네임스페이스와 일치하면 네임스페이스 접두사가 제거된 쉼표로 구분된 목록으로 값이 반환됩니다. 예를 들어
scraping,advertising입니다. -
일치 없음 - 절이 빈 문자열로 확인됩니다.
참고
단일 문자열 값은 최대 10개의 ${namespace:} 자리 표시자를 지원합니다. 값에 10개 이상의 자리 표시자가 포함된 경우는 처음 10개를 AWS WAF 해결하고 출력에 추가 자리 표시자를 리터럴 ${namespace:} 텍스트로 둡니다. 이 제한은 각 요청이 아닌 각 문자열 값에 적용됩니다. 여러 헤더마다 최대 10개의 자리 표시자를 문제 없이 사용할 수 있습니다.
중요
사용자 지정 레이블은에서 짧은 이름을 사용합니다ruleLabels. 예를 들어 app:tier:enterprise입니다. 그러나는 짧은 이름 앞에 보호 팩(웹 ACL) 컨텍스트를 AWS WAF 자동으로 접두사로 붙여 정규화된 레이블을 생성합니다. 예를 들어 awswaf:입니다. 레이블 일치 문은 짧은 네임스페이스에서 작동하지만 보간 참조는 항상 정규화된 네임스페이스를 사용해야 합니다.ACCOUNT_ID:webacl:WEBACL_NAME:app:tier:enterprise
합성 레이블
보간은 합성 레이블도 지원합니다. 이는 레이블 스토어가 아닌 요청 컨텍스트에서 확인되는 AWS WAF 기본 제공 값입니다. 합성 레이블을 동일한 값 문자열의 네임스페이스 기반 레이블과 결합할 수 있습니다.
| 합성 레이블 | 설명 |
|---|---|
${awswaf:request_id:} |
고유한 AWS WAF 요청 식별자입니다. |
${awswaf:ip:} |
클라이언트 IP 주소입니다. |
${awswaf:ja3:} |
JA3 TLS 지문입니다. |
${awswaf:ja4:} |
JA4 TLS 지문입니다. |
동적 레이블 보간 예제
동적 헤더를 사용한 애플리케이션 신호
다음 규칙은 여러 Bot Control 신호 네임스페이스를 오리진에 별도의 헤더로 전달합니다. 한 규칙은 전체 네임스페이스를 다루므로 관리형 규칙 그룹이 새 레이블을 추가할 때 규칙을 업데이트할 필요가 없습니다.
{ "Name": "forward-waf-signals", "Statement": { "LabelMatchStatement": { "Scope": "NAMESPACE", "Key": "awswaf:managed:aws:bot-control:bot:category:" } }, "RuleAction": { "Count": { "CustomRequestHandling": { "InsertHeaders": [ { "Name": "bot-category", "Value": "${awswaf:managed:aws:bot-control:bot:category:}" }, { "Name": "bot-name", "Value": "${awswaf:managed:aws:bot-control:bot:name:}" }, { "Name": "bot-signals", "Value": "${awswaf:managed:aws:bot-control:signal:}" }, { "Name": "client-ip", "Value": "${awswaf:ip:}" } ] } } } }
bot-signals 헤더(출력: x-amzn-waf-bot-signals)는 다중 값 해상도를 보여줍니다. signal: 네임스페이스에는 쉼표로 구분된 목록으로 확인non_browser_user_agent,automated_browser되는와 같은 여러 레이블이 포함될 수 있습니다. client-ip 헤더(출력: x-amzn-waf-client-ip)는 합성 레이블을 사용합니다.
디버그 정보가 포함된 사용자 지정 블록 페이지
합성 레이블을 사용하면 요청별 컨텍스트가 포함된 블록 페이지를 빌드할 수 있습니다. 응답 본문에 클라이언트의 IP 주소와 AWS WAF 요청 ID를 직접 포함시켜 사용자에게 거짓 긍정을 보고할 때 공유할 수 있는 정보를 제공합니다.
{ "CustomResponseBodies": { "BlockPage": { "Content": "Your request was blocked.\n\nIP: ${awswaf:ip:}\nRequest ID: ${awswaf:request_id:}\n\nIf you believe this is an error, contact support with the Request ID above.", "ContentType": "TEXT_PLAIN" } } }
사용자 지정 레이블 보간
보간은 자체 규칙에 정의한 사용자 지정 레이블을 포함하여 모든 레이블 네임스페이스에서 작동합니다. 다음 예제에서는 API 키로 요청을 분류하고 계층 값을 오리진에 전달합니다.
규칙 1: API 키를 기반으로 계층 분류
이 규칙은 요청을 엔터프라이즈 API 키와 일치시키고 사용자 지정 레이블을 적용합니다.
{ { "Name": "classify-tier", "Priority": 100, "Statement": { "ByteMatchStatement": { "SearchString": "pk_enterprise_", "FieldToMatch": { "SingleHeader": { "Name": "x-api-key" } }, "PositionalConstraint": "STARTS_WITH", "TextTransformations": [{ "Priority": 0, "Type": "NONE" }] } }, "RuleLabels": [{ "Name": "app:tier:enterprise" }], "Action": { "Count": {} } } }
규칙 2: 확인된 계층 값 전달
이 규칙은 app:tier 네임스페이스의 모든 레이블과 일치하고 확인된 값을 헤더로 전달합니다.
{ { "Name": "forward-tier", "Priority": 200, "Statement": { "LabelMatchStatement": { "Scope": "NAMESPACE", "Key": "app:tier:" } }, "Action": { "Count": { "CustomRequestHandling": { "InsertHeaders": [{ "Name": "customer-tier", "Value": "${awswaf:ACCOUNT_ID:webacl:WEBACL_NAME:app:tier:}" }] } } } }
첫 번째 규칙은 레이블을 적용합니다app:tier:enterprise. 두 번째 규칙은 app:tier 네임스페이스의 모든 레이블과 일치하고 확인된 값을 customer-tier 헤더로 전달합니다. 출력 헤더 이름은 입니다x-amzn-waf-customer-tier. app:tier:standard 또는와 같은 다른 계층에 대한 분류 규칙을 더 추가할 수 있습니다app:tier:trial. 전달 규칙은 변경 없이 이를 선택합니다.
이러한 패턴을 모두 보여주는 배포 가능한 샘플은 GitHub의 AWS WAF 동적 레이블 보간 샘플을