acme-dns-route53 is een tool waarmee we deze functie kunnen implementeren. Het kan werken met SSL-certificaten van Let's Encrypt, deze opslaan in Amazon Certificate Manager, de Route53 API gebruiken om de DNS-01-uitdaging te implementeren en, ten slotte, pushmeldingen naar SNS sturen. IN acme-dns-route53 Er is ook ingebouwde functionaliteit voor gebruik binnen AWS Lambda, en dit is wat we nodig hebben.
Dit artikel is verdeeld in 4 secties:
een zipbestand maken;
het creëren van een IAM-rol;
het creëren van een lambda-functie die wordt uitgevoerd acme-dns-route53;
een CloudWatch-timer maken die 2 keer per dag een functie activeert;
acme-dns-route53 is geschreven in GoLang en ondersteunt versie niet lager dan 1.9.
We moeten een zipbestand maken met een binair bestand acme-dns-route53 binnen. Om dit te doen, moet u installeren acme-dns-route53 vanuit de GitHub-repository met behulp van de opdracht go install:
$ env GOOS=linux GOARCH=amd64 go install github.com/begmaroman/acme-dns-route53
Het binaire bestand is geïnstalleerd in $GOPATH/bin map. Houd er rekening mee dat we tijdens de installatie twee gewijzigde omgevingen hebben gespecificeerd: GOOS=linux и GOARCH=amd64. Ze maken de Go-compiler duidelijk dat deze een binair bestand moet maken dat geschikt is voor Linux OS en amd64-architectuur - dit is wat op AWS draait.
AWS verwacht dat ons programma in een zip-bestand wordt geïmplementeerd, dus laten we het maken acme-dns-route53.zip archief dat het nieuw geïnstalleerde binaire bestand zal bevatten:
$ zip -j ~/acme-dns-route53.zip $GOPATH/bin/acme-dns-route53
Opmerking: Het binaire bestand moet in de root van het zip-archief staan. Hiervoor gebruiken wij -j vlag.
Nu onze zip-bijnaam klaar is voor implementatie, hoeft u alleen nog maar een rol met de benodigde rechten aan te maken.
Een IAM-rol creëren
We moeten een IAM-rol opzetten met de rechten die onze lambda nodig heeft tijdens de uitvoering ervan.
Laten we dit beleid noemen lambda-acme-dns-route53-executor en geef haar meteen een basisrol AWSLambdaBasicExecutionRole. Hierdoor kan onze lambda logs uitvoeren en schrijven naar de AWS CloudWatch-service.
Eerst maken we een JSON-bestand aan waarin onze rechten worden beschreven. Hierdoor kunnen lambda-services in wezen de rol gebruiken lambda-acme-dns-route53-executor:
Laten we nu de opdracht uitvoeren aws iam create-role een rol creëren:
$ aws iam create-role --role-name lambda-acme-dns-route53-executor
--assume-role-policy-document ~/lambda-acme-dns-route53-executor-policy.json
Opmerking: onthoud het beleid ARN (Amazon Resource Name) - we hebben het nodig bij de volgende stappen.
Роль lambda-acme-dns-route53-executor gemaakt, nu moeten we er machtigingen voor opgeven. De eenvoudigste manier om dit te doen is door het commando te gebruiken aws iam attach-role-policy, het passeren van beleid ARN AWSLambdaBasicExecutionRole следующим обрахом:
$ aws iam attach-role-policy --role-name lambda-acme-dns-route53-executor
--policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
Opmerking: een lijst met ander beleid is te vinden hier.
Een lambda-functie maken die wordt uitgevoerd acme-dns-route53
Hoera! Nu kunt u onze functie implementeren in AWS met behulp van de opdracht aws lambda create-function. De lambda moet worden geconfigureerd met behulp van de volgende omgevingsvariabelen:
AWS_LAMBDA - maakt het duidelijk acme-dns-route53 die uitvoering vindt plaats binnen AWS Lambda.
DOMAINS — een lijst met domeinen gescheiden door komma's.