AWS App Runner using WAF rules.
Create the infrastructure:
terraform init
terraform apply -auto-approveThe default image will be NGINX.
Customize WAF rules behavior:
waf_allowed_country_codes = ["BR", "US"]To test the rate-limiting rule, run a loop and verify in another terminal when it starts blocking. Example:
bash loop.sh https://<app_id>.us-east-2.awsapprunner.comBlocked requests should have a custom message:
Following this guideline, WAF is configured with AWS Managed Rules Core rule set to limit requests in the /post endpoint to 8,192 bytes. Requests with more than that will be blocked.
An exception is added to the /put route, which will allow requests to go through.
It is important to notice the limits of inspection as well:
AWS WAF inspects the first 8 KB (8,192 bytes) of the request body. This is a hard service limit and can't be changed.
To teste different options, use the Insomnia project export.
To use ECR, configure the .auto.tfvars file before creating the resources:
bash ecrPushHttpbin.shAlso, uncomment the ECR authentication:
authentication_configuration {
access_role_arn = var.access_role_arn
}Create the repository:
aws ecr create-repository --repository-name dotnet-appBuild and publish the image:
docker build . -t <ACCOUNT_ID>.dkr.ecr.<REGION>.amazonaws.com/dotnet-app:latest
aws ecr get-login-password --region <REGION> | docker login --username AWS --password-stdin <ACCOUNT_ID>.dkr.ecr.<REGION>.amazonaws.com
docker push <ACCOUNT_ID>.dkr.ecr.<REGION>.amazonaws.com/dotnet-app:latest
Running the .NET app:
dotnet restore
dotnet runFor local building the docker image:
docker build -t dotnet-app-image .
docker run --rm -p 80:80 --name dotnet-app dotnet-app-image