Skip to main content

Cloudfront,ALB and API Gateway with Automated WAF

Project description

NPM version PyPI version release

AWS WAF Solution

This CDK Construct modify and rebuild from Cloudfront with Automated WAF.

The solution use CDK construct to automatically deploy a set of AWS WAF rules design to filter common web-based attacks.Users can select from preconfigured protective features that define the rules included in an AWS WAF web access control list (web ACL). After the solution deploys, AWS WAF begins inspecting web requests to the user’s existing Amazon CloudFront distributions、Application Load Balancers、API Gateway, and blocks them when applicable.

What is difference

  • The project is CDK Construct which is handy to integrate into your existing CDK project.
  • Support count mode for testing WAF rule, see API.md.
  • Support Application Load Balancers and API Gateway (The origin repository doesn't support ALB any more in next release, see issue )
  • AWS Shield Advance is optional (The origin repository enforce to enable it)

Support CDKv1 and CDKv2

CDKv2

npm install @ikala-cloud/aws-waf-solution
or
npm install @ikala-cloud/aws-waf-solution@latest
or
npm install @ikala-cloud/aws-waf-solution@^2.0.0

CDKv1

npm install @ikala-cloud/aws-waf-solution@cdkv1
or
npm install @ikala-cloud/aws-waf-solution@^1.0.38

Construct Props

Ref API Reference

CloudFront Usage

# Example automatically generated from non-compiling source. May contain errors.
const envUSEast1 = {
  region: 'us-east-1',
  account: process.env.CDK_DEFAULT_ACCOUNT,
};

const stackTest1 = new cdk.Stack(app, 'TestStackAutomatedWafForCloudFront', { env: envUSEast1 });

new AutomatedWaf(stackTest1, 'AutomatedWaf', {
  waf2Scope: Waf2ScopeOption.CLOUDFRONT,
  resourceNamingPrefix: 'CloudFront_ApiGW',
  errorThreshold: 55,
  requestThreshold: 300,
  blockPeriod: 60,
  logLevel: LogLevel.DEBUG,
});

Notice the WAF region must be us-east-1 for CloudFront.

After deploying, it need to do two things on AWS Management Console.

1. Attach Cloudfront to WAF.

Click add AWS Resources

CloudFront-3

Select existing CloudFront Distribution.

CloudFront-4

2. Set S3 bucket on CloudFront standand logging

Find S3 bucket name on CloudFormation output

CloudFront-1

Set CloudFront standard logging on CloudFront Settings

CloudFront-2

:warning: Log Prefix must be AWSLogs/

Application Load Balancers Usage

# Example automatically generated from non-compiling source. May contain errors.
const env = {
  region: process.env.CDK_DEFAULT_REGION,
  account: process.env.CDK_DEFAULT_ACCOUNT,
};

const stackTest2 = new cdk.Stack(app, 'TestStackAutomatedWafForALB', { env });

const albArn = `arn:aws:elasticloadbalancing:${cdk.Aws.REGION}:${cdk.Aws.ACCOUNT_ID}:loadbalancer/app/ApiNe-Alb16-2VIC9075YQEZ/db92cdc88d2e7c9d`;

new AutomatedWaf(stackTest2, 'AutomatedWaf', {
  waf2Scope: Waf2ScopeOption.REGIONAL,
  associatedResourceArn: albArn,
  resourceNamingPrefix: 'Alb_Api',
  errorThreshold: 50,
  requestThreshold: 300,
  blockPeriod: 60,
  logLevel: LogLevel.DEBUG,
});

After deploying, follow these steps on AWS Management Console. See below:

Find S3 bucket name on CloudFormation output

CloudFront-1

Click Edit Attributes on Basic Configuration of Load Balancers

ALB-1

Enable Access logs and input S3 bucket

ALB-2

API Gateway Usage

# Example automatically generated from non-compiling source. May contain errors.
const env = {
  region: process.env.CDK_DEFAULT_REGION,
  account: process.env.CDK_DEFAULT_ACCOUNT,
};

const stackTest3 = new cdk.Stack(app, 'TestStackAutomatedWafForApiGW', { env });

/**
 * Ref Stage arn in https://docs.aws.amazon.com/apigateway/latest/developerguide/arn-format-reference.html
 */
const restApiArn = `arn:aws:apigateway:${cdk.Aws.REGION}::/restapis/0j90w09yf9/stages/prod`;

new AutomatedWaf(stackTest3, 'AutomatedWaf', {
  waf2Scope: Waf2ScopeOption.REGIONAL,
  associatedResourceArn: restApiArn,
  resourceNamingPrefix: 'ApiGW',
  errorThreshold: 50,
  requestThreshold: 300,
  blockPeriod: 60,
  logLevel: LogLevel.DEBUG,
});

Troubleshooting

If deployment error, the cloudFormation Error event like this

Received response status [FAILED] from custom resource. Message returned: 'HttpFloodLambdaLogParser' (RequestId: b4e08ea2-fe0a-46f8-98aa-6f96d4558579)

If any custom resource deploy error like above, delete the stack and redeploy it that will pass.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ikala-cloud.aws-waf-solution-2.0.12.tar.gz (111.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ikala_cloud.aws_waf_solution-2.0.12-py3-none-any.whl (110.4 kB view details)

Uploaded Python 3

File details

Details for the file ikala-cloud.aws-waf-solution-2.0.12.tar.gz.

File metadata

  • Download URL: ikala-cloud.aws-waf-solution-2.0.12.tar.gz
  • Upload date:
  • Size: 111.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.1

File hashes

Hashes for ikala-cloud.aws-waf-solution-2.0.12.tar.gz
Algorithm Hash digest
SHA256 6948e5a2cc50743b045d1290b0825189236b3b6c0e74b94d94685009e30ae363
MD5 8d212d55df1ef97a7995fd086e873202
BLAKE2b-256 bf4cd7db2341fc375c8d5515cb3c91cd2263e5905a42e9c43c7b708c41511abb

See more details on using hashes here.

File details

Details for the file ikala_cloud.aws_waf_solution-2.0.12-py3-none-any.whl.

File metadata

  • Download URL: ikala_cloud.aws_waf_solution-2.0.12-py3-none-any.whl
  • Upload date:
  • Size: 110.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.1

File hashes

Hashes for ikala_cloud.aws_waf_solution-2.0.12-py3-none-any.whl
Algorithm Hash digest
SHA256 d965ea29f5ba31e16d8fe87056c6af479759577c5b1564f5b88e3ecc8c928c91
MD5 be4b6ca75444b02036450548d0fd366c
BLAKE2b-256 f10f8a52a0e33c9bc4376b9e2d81a0ced39c9b4b917aac21cff8d156d278e76b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page