

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# AWS WAF 를 사용하여 AWS AppSync APIs 보호
<a name="WAF-Integration"></a>

AWS WAF 는 웹 애플리케이션과 APIs으로부터 보호하는 데 도움이 되는 웹 애플리케이션 방화벽입니다. WAF를 통해 사용자가 정의한 맞춤형 웹 보안 규칙 및 조건에 따라 웹 요청을 허용, 차단 또는 모니터링하는 규칙 집합(이른바 웹 액세스 제어 목록(웹 ACL)이라고 함)을 구성할 수 있습니다. AWS AppSync API를와 통합 AWS WAF하면 API에서 허용하는 HTTP 트래픽에 대한 제어 및 가시성을 높일 수 있습니다. 자세한 내용은 AWS WAF 개발자 안내서의 [AWS WAF 작동 방식을](https://docs.aws.amazon.com/waf/latest/developerguide/how-aws-waf-works.html) AWS WAF참조하세요.

 AWS WAF 를 사용하여 SQL 삽입 및 교차 사이트 스크립팅(XSS) 공격과 같은 일반적인 웹 악용으로부터 AppSync API를 보호할 수 있습니다. 이는 API 가용성 및 성능에 영향을 미치거나, 보안을 손상시키거나, 리소스를 과도하게 소비할 수 있습니다. 예를 들어 지정된 IP 주소 범위의 요청, CIDR 블록의 요청, 특정 국가 또는 리전에서 시작된 요청, 악성 SQL 코드가 포함된 요청, 악성 스크립트가 포함된 요청을 허용하거나 차단하는 규칙을 만들 수 있습니다.

HTTP 헤더, 메서드, 쿼리 문자열, URI 및 요청 본문(처음 8KB로 제한)에 지정된 문자열이나 정규식 패턴과 일치하는 규칙을 만들 수도 있습니다. 또한 특정 사용자 에이전트, 악성 봇, 콘텐츠 스크래퍼의 공격을 차단하는 규칙을 생성할 수 있습니다. 예를 들어, 비율 기반 규칙을 사용하여 연속적으로 업데이트되는 이후 5분 동안 각 클라이언트 IP에서 허용하는 웹 요청 수를 지정할 수 있습니다.

지원되는 규칙 유형과 추가 AWS WAF 기능에 대한 자세한 내용은 [AWS WAF 개발자 안내서](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html) 및 [AWS WAF API 참조](https://docs.aws.amazon.com/waf/latest/APIReference/API_Types_AWS_WAFV2.html)를 참조하세요.

**중요**  
AWS WAF 는 웹 악용에 대한 첫 번째 방어선입니다. API에서 AWS WAF 를 활성화하면 AWS WAF API 키 권한 부여, IAM 정책, OIDC 토큰 및 Amazon Cognito 사용자 풀과 같은 다른 액세스 제어 기능보다 먼저 규칙이 평가됩니다.

## AppSync API를와 통합 AWS WAF
<a name="integrate-API-with-WAF"></a>

 AWS CLI AWS CloudFormation, 또는 기타 호환되는 클라이언트를 AWS WAF 사용하여 Appsync API AWS Management Console를와 통합할 수 있습니다.

**AWS AppSync API를와 통합하려면 AWS WAF**

1.  AWS WAF 웹 ACL을 생성합니다. [AWS WAF 콘솔](https://console.aws.amazon.com/waf/) 사용의 자세한 단계는 [웹 ACL 생성](https://docs.aws.amazon.com/waf/latest/developerguide/web-acl-creating.html)을 참조하세요.

1. 웹 ACL의 규칙을 정의합니다. 규칙은 웹 ACL을 생성하는 과정에서 정의됩니다. 규칙 구성 방법에 대한 자세한 내용은 [AWS WAF 규칙](https://docs.aws.amazon.com/waf/latest/developerguide/waf-rules.html)을 참조하세요. AWS AppSync API에 대해 정의할 수 있는 유용한 규칙의 예는 섹션을 참조하세요[웹 ACL에 대한 규칙 생성](#Creating-web-acl-rules).

1. 웹 ACL을 AWS AppSync API와 연결합니다. [AWS WAF 콘솔](https://console.aws.amazon.com/wafv2/) 또는 [AppSync 콘솔](https://console.aws.amazon.com/appsync/)에서 이 단계를 수행할 수 있습니다.
   + 웹 ACL을 AWS WAF 콘솔의 AWS AppSync API와 연결하려면 AWS WAF 개발자 안내서의 [웹 ACL을 리소스와 AWS 연결 또는 연결 해제](https://docs.aws.amazon.com/waf/latest/developerguide/web-acl-associating-aws-resource.html) 지침을 따르세요.
   + 콘솔에서 웹 ACL을 AWS AppSync API AWS AppSync 와 연결하려면

     1. 에 로그인 AWS Management Console 하고 [AppSync 콘솔](https://console.aws.amazon.com/appsync/)을 엽니다.

     1. 웹 ACL과 연결할 API를 선택합니다.

     1. 탐색 창에서 **설정**을 선택합니다.

     1. **웹 애플리케이션 방화벽** 섹션에서 ** AWS WAF활성화**를 켭니다.

     1. **웹 ACL** 드롭다운 목록에서 API와 연결할 웹 ACL의 이름을 선택합니다.

     1. **저장**을 선택하여 웹 ACL을 API와 연결합니다.

   

**참고**  
 AWS WAF 콘솔에서 웹 ACL을 생성한 후 새 웹 ACL을 사용할 수 있는 데 몇 분 정도 걸릴 수 있습니다. **웹 애플리케이션 방화벽** 메뉴에 새로 만든 웹 ACL이 표시되지 않는 경우, 몇 분 정도 기다린 후 단계를 다시 시도하여 웹 ACL을 API와 연결해 봅니다.

**참고**  
AWS WAF 통합은 실시간 엔드포인트에 대한 `Subscription registration message` 이벤트만 지원합니다. AWS AppSync 는 `Subscription registration message` 차단된에 대한 메시지 대신 오류 `start_ack` 메시지로 응답합니다 AWS WAF.

웹 ACL을 AWS AppSync API와 연결한 후 AWS WAF APIs를 사용하여 웹 ACL을 관리합니다. AWS AppSync API를 다른 웹 ACL과 연결하려는 경우가 아니면 웹 ACL을 AWS AppSync API와 다시 연결할 필요가 없습니다.

## 웹 ACL에 대한 규칙 생성
<a name="Creating-web-acl-rules"></a>

규칙은 웹 요청을 검사하는 방법과 웹 요청이 검사 기준과 일치할 때 수행할 작업을 정의합니다. 규칙은 자체 AWS WAF 적으로에 존재하지 않습니다. 규칙 그룹 또는 규칙이 정의된 웹 ACL에서 이름으로 규칙에 액세스할 수 있습니다. 자세한 내용은 [AWS WAF 규칙](https://docs.aws.amazon.com/waf/latest/developerguide/waf-rules.html)을 참조하세요. 다음 예제는 AppSync API를 보호하는 데 유용한 규칙을 정의하고 연결하는 방법을 보여줍니다.

**Example 요청 본문 크기를 제한하는 웹 ACL 규칙**  
다음은 요청의 본문 크기를 제한하는 규칙의 예입니다. AWS WAF 콘솔에서 웹 ACL을 생성할 때 **규칙 JSON 편집기**에 입력됩니다.  

```
{
    "Name": "BodySizeRule", 
    "Priority": 1, 
    "Action": {
        "Block": {}
    }, 
    "Statement": {
        "SizeConstraintStatement": {
            "ComparisonOperator": "GE",
            "FieldToMatch": {
                "Body": {}
            },
            "Size": 1024, 
            "TextTransformations": [
                {
                    "Priority": 0, 
                    "Type": "NONE"
                }
             ]
          }
       }, 
       "VisibilityConfig": {
           "CloudWatchMetricsEnabled": true, 
           "MetricName": "BodySizeRule", 
           "SampledRequestsEnabled": true
        }
}
```
앞의 예제 규칙을 사용하여 웹 ACL을 생성한 후에는 이를 AppSync API와 연결해야 합니다. 를 사용하는 대신 다음 명령을 실행 AWS CLI 하여에서이 단계를 수행할 AWS Management Console수 있습니다.  

```
aws waf associate-web-acl --web-acl-id waf-web-acl-arn --resource-arn appsync-api-arn
```
변경 사항이 전파되는 데 몇 분 정도 걸릴 수 있지만, 이 명령을 실행한 후에는 1024바이트보다 큰 본문이 포함된 요청이 AWS AppSync에 의해 거부됩니다.  
 AWS WAF 콘솔에서 새 웹 ACL을 생성한 후 웹 ACL을 API와 연결하는 데 몇 분 정도 걸릴 수 있습니다. CLI 명령을 실행할 때 `WAFUnavailableEntityException` 오류가 발생하면 몇 분 정도 기다렸다가 명령을 다시 실행해 보세요.

**Example 단일 IP 주소에서 요청을 제한하는 웹 ACL 규칙**  
다음은 AppSync API를 단일 IP 주소에서 요청 100개로 제한하는 규칙의 예입니다. 이는 AWS WAF 콘솔에서 속도 기반 규칙을 사용하여 웹 ACL을 생성할 때 규칙 **JSON 편집기**에 입력됩니다.  

```
{
  "Name": "Throttle",
  "Priority": 0,
  "Action": {
    "Block": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "Throttle"
  },
  "Statement": {
    "RateBasedStatement": {
      "Limit": 100,
      "AggregateKeyType": "IP"
    }
  }
}
```
앞의 예제 규칙을 사용하여 웹 ACL을 생성한 후에는 이를 AppSync API와 연결해야 합니다. 다음 명령을 실행 AWS CLI 하여에서이 단계를 수행할 수 있습니다.  

```
aws waf associate-web-acl --web-acl-id waf-web-acl-arn --resource-arn appsync-api-arn
```

**Example API에 대한 GraphQL \$1\$1\$1\$1schema 내부 검사 쿼리를 방지하는 웹 ACL 규칙**  
다음은 API에 대한 GraphQL \$1\$1schema 내부 검사 쿼리를 방지하는 규칙의 예입니다. 문자열 '\$1\$1schema'를 포함하는 모든 HTTP 본문은 차단됩니다. AWS WAF 콘솔에서 웹 ACL을 생성할 때 **규칙 JSON 편집기**에 입력됩니다.  

```
{
  "Name": "BodyRule",
  "Priority": 5,
  "Action": {
    "Block": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "BodyRule"
  },
  "Statement": {
    "ByteMatchStatement": {
      "FieldToMatch": {
        "Body": {}
      },
      "PositionalConstraint": "CONTAINS",
      "SearchString": "__schema",
      "TextTransformations": [
        {
          "Type": "NONE",
          "Priority": 0
        }
      ]
    }
  }
}
```
앞의 예제 규칙을 사용하여 웹 ACL을 생성한 후에는 이를 AppSync API와 연결해야 합니다. 다음 명령을 실행 AWS CLI 하여에서이 단계를 수행할 수 있습니다.  

```
aws waf associate-web-acl --web-acl-id waf-web-acl-arn --resource-arn appsync-api-arn
```