AWS: Attach WAF to api gateway using cloudformation template

2 min read 06-10-2024
AWS: Attach WAF to api gateway using cloudformation template


Securing Your API Gateway with AWS WAF using CloudFormation

Protecting your APIs from threats is crucial. While AWS API Gateway provides built-in security features, it's often beneficial to add an extra layer of defense using AWS Web Application Firewall (WAF). WAF acts as a shield, filtering out malicious traffic before it reaches your backend resources. This article guides you through securely integrating WAF with your API Gateway using a CloudFormation template, ensuring a streamlined and efficient deployment process.

The Problem:

Manually configuring WAF and its rules for each API Gateway endpoint can be tedious and error-prone. CloudFormation allows us to automate this process, ensuring consistency and repeatability across deployments.

Scenario:

Imagine you have an API Gateway endpoint that handles user registration. You want to protect it from common web attacks like SQL injection and cross-site scripting (XSS).

Original Code (CloudFormation Template):

Resources:
  MyApiGateway:
    Type: AWS::Serverless::Api
    Properties:
      Name: MyApi
      DefinitionBody:
        openapi: 3.0.1
        info:
          title: My API
          version: v1
        paths:
          /register:
            post:
              requestBody:
                content:
                  application/json:
                    schema:
                      $ref: '#/components/schemas/User'
              responses:
                '200':
                  description: OK
  MyWafWebAcl:
    Type: AWS::WAFv2::WebACL
    Properties:
      Name: MyWafWebAcl
      DefaultAction: ALLOW
      Scope: REGIONAL
      Rules:
        - Name: BlockSQLInjection
          Priority: 1
          Action:
            Block: {}
          Statement:
            Statement:
              AndStatement:
                Statements:
                  - Statement:
                      ByteMatchStatement:
                        FieldToMatch:
                          SingleHeader:
                            Name: "Host"
                        PositionalConstraint: CONTAINS
                        SearchString: "union"
                        TextTransformations:
                          - Type: NONE
                  - Statement:
                      ByteMatchStatement:
                        FieldToMatch:
                          SingleHeader:
                            Name: "Referer"
                        PositionalConstraint: CONTAINS
                        SearchString: "evil.com"
                        TextTransformations:
                          - Type: NONE

Analysis and Insights:

  1. WAF Integration: The template creates a WAF Web ACL (Web Access Control List) named "MyWafWebAcl". This Web ACL defines rules to block requests containing specific strings, like "union" (for SQL injection) and "evil.com" (for cross-site scripting).
  2. Default Action: The DefaultAction is set to ALLOW, meaning all requests pass through unless explicitly blocked by a rule.
  3. Rule Structure: Each rule includes a Name, Priority (determining the order of rule execution), Action (block or allow), and Statement (the logic to match requests).
  4. Byte Match Statement: The ByteMatchStatement matches specific strings within the request headers (in this example, the "Host" and "Referer" headers).

Additional Value:

  • Customizable Rules: You can create more complex rules based on your specific security requirements.
  • Centralized Management: CloudFormation allows you to manage your WAF rules and API Gateway configuration in a single, version-controlled template.
  • Rollback Capabilities: In case of deployment issues, CloudFormation facilitates easy rollbacks to previous working configurations.

Further Exploration:

  • WAF Rules: AWS offers a rich set of rule types, including rate-based rules, geo-match rules, and more. Explore the AWS documentation for a complete list and guidance on crafting effective rules.
  • API Gateway Integration: You can further refine the integration by associating the WAF Web ACL with specific API Gateway stages (like "dev" or "prod").
  • Monitoring and Logging: Leverage CloudWatch logs to monitor WAF activity and analyze blocked requests.

References:

By implementing this secure architecture, you can confidently protect your API Gateway endpoints from malicious attacks and ensure a safe and reliable API experience.