This is a docker image and helm chart to retrieve Cloudflare's IP address list and update an AWS Security Group and S3 Policies.
It was originally written by John McCracken (johnmccuk@gmail.com), updated by Ryan Gibbons (rtgibbons) and Endrigo Antonini (antonini). Forked by @hubbleprocol
The Lambda uses the Python 3.10 runtime and requires the following environment variables:
SECURITY_GROUP_IDS_LIST
- a list of security group IDs to updateSECURITY_GROUP_ID
- If list is undefined, a group ID for the specified security groupPORTS_LIST
- comma-separated list of ports e.g.80,443
.S3_CLOUDFLARE_SID
- Sid that stores all the CloudFlare configurataion. That Sid is stored on the Stament policy.S3_BUCKET_IDS_LIST
- a list of S3 buckets IDs to updateS3_BUCKET_ID
- if list is undefined, a ID for the specified S3 bucket.UPDATE_IPV6
- if set to 0, will not update IPv6 ranges in security groups nor S3 bucket policies.
You need to allow the program to execute those actions (example on the file allow-lambda-ingress-role
:
- ec2:AuthorizeSecurityGroupIngress
- ec2:RevokeSecurityGroupIngress
- ec2:DescribeSecurityGroup
- s3:GetBucketPolicyStatus
- s3:PutBucketPolicy
- s3:GetBucketPolicy
You need to define at least SECURITY_GROUP_ID
or SECURITY_GROUP_IDS_LIST
.
The parameter PORTS_LIST
is also used to update an AWS Security Group.
aws ec2 create-security-group --name cloudflare-access --group-name cloudflare-access --description "http(s) access from Cloudflare IPs only" --vpc-id VPC-ID-GOES-HERE
SECURITY_GROUP_ID=sg-... python src/updater/main.py
You need to define the parameter S3_CLOUDFLARE_SID
and at least one of the
following parameters S3_BUCKET_IDS_LIST
or S3_BUCKET_ID
.
docker run \
-e SECURITY_GROUP_ID="sg-1234..." \
-e AWS_DEFAULT_REGION="eu-west-1" \
-e AWS_ACCESS_KEY_ID="$AWS_ACCESS_KEY_ID" \
-e AWS_SECRET_ACCESS_KEY="$AWS_SECRET_ACCESS_KEY" \
hubbleprotocol/cloudflare-security-group-updater:latest
docker build . -t hubbleprotocol/cloudflare-security-group-updater
cd helm
helm package ./
cronjob-base-chart:
cloudflare-security-group-updater:
jobs:
- name: update-cloudflare-ingress-security-groups
schedule: "*/5 * * * *"
envVars:
- name: SECURITY_GROUP_ID
value: "sg-123..."
- name: AWS_DEFAULT_REGION
value: "eu-west-1"
- name: AWS_ACCESS_KEY_ID
valueFrom:
secretKeyRef:
name: cloudflare-security-group-updater-secret
key: AWS_ACCESS_KEY_ID
- name: AWS_ACCESS_KEY_ID
valueFrom:
secretKeyRef:
name: cloudflare-security-group-updater-secret
key: AWS_ACCESS_KEY_ID
secrets:
AWS_ACCESS_KEY_ID:
AWS_SECRET_ACCESS_KEY:
- John McCracken (@johnmccuk)
- Ryan Gibbons (@rtgibbons)
- Ben Steinberg (@bensteinberg)
- Endrigo Antonini (@antonini)
- Hubble developers (@hubbleprotocol)