ProHoster > blogg > administration > Automatisering av Let's Encrypt SSL-certifikathantering med hjälp av DNS-01 challenge och AWS
Automatisering av Let's Encrypt SSL-certifikathantering med hjälp av DNS-01 challenge och AWS
Inlägget beskriver steg för att automatisera hanteringen av SSL-certifikat från Låt oss kryptera CA använder sig av DNS-01 utmaning и AWS.
acme-dns-route53 är ett verktyg som gör att vi kan implementera den här funktionen. Det kan fungera med SSL-certifikat från Let's Encrypt, spara dem i Amazon Certificate Manager, använda Route53 API för att implementera DNS-01-utmaningen och slutligen push-meddelanden till SNS. I acme-dns-route53 Det finns också inbyggd funktionalitet för användning inuti AWS Lambda, och det är detta vi behöver.
Den här artikeln är uppdelad i 4 avsnitt:
skapa en zip-fil;
skapa en IAM-roll;
skapa en lambdafunktion som körs acme-dns-route53;
skapa en CloudWatch-timer som utlöser en funktion 2 gånger om dagen;
acme-dns-route53 är skriven i GoLang och stöder version som inte är lägre än 1.9.
Vi måste skapa en zip-fil med en binär fil acme-dns-route53 inuti. För att göra detta måste du installera acme-dns-route53 från GitHub-förrådet med kommandot go install:
$ env GOOS=linux GOARCH=amd64 go install github.com/begmaroman/acme-dns-route53
Binären är installerad i $GOPATH/bin katalog. Observera att vi under installationen angav två ändrade miljöer: GOOS=linux и GOARCH=amd64. De gör det klart för Go-kompilatorn att den behöver skapa en binär som är lämplig för Linux OS och amd64-arkitektur - det är detta som körs på AWS.
AWS förväntar sig att vårt program ska distribueras i en zip-fil, så låt oss skapa acme-dns-route53.zip arkiv som kommer att innehålla den nyinstallerade binära filen:
$ zip -j ~/acme-dns-route53.zip $GOPATH/bin/acme-dns-route53
Notera: Binären ska finnas i roten av zip-arkivet. För detta använder vi -j flagga.
Nu är vårt zip-smeknamn redo för distribution, allt som återstår är att skapa en roll med nödvändiga rättigheter.
Skapa en IAM-roll
Vi måste skapa en IAM-roll med de rättigheter som krävs av vår lambda under dess genomförande.
Låt oss kalla detta politik lambda-acme-dns-route53-executor och ge henne omedelbart en grundläggande roll AWSLambdaBasicExecutionRole. Detta gör att vår lambda kan köra och skriva loggar till AWS CloudWatch-tjänsten.
Först skapar vi en JSON-fil som beskriver våra rättigheter. Detta kommer i huvudsak att tillåta lambdatjänster att använda rollen lambda-acme-dns-route53-executor:
Låt oss nu köra kommandot aws iam create-role för att skapa en roll:
$ aws iam create-role --role-name lambda-acme-dns-route53-executor
--assume-role-policy-document ~/lambda-acme-dns-route53-executor-policy.json
Notera: kom ihåg policyn ARN (Amazon Resource Name) - vi kommer att behöva den i nästa steg.
Rollen som lambda-acme-dns-route53-executor skapat, nu måste vi ange behörigheter för det. Det enklaste sättet att göra detta är att använda kommandot aws iam attach-role-policy, passerar policy ARN AWSLambdaBasicExecutionRole enligt följande:
$ aws iam attach-role-policy --role-name lambda-acme-dns-route53-executor
--policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
Notera: en lista med andra policyer kan hittas här.
Skapa en lambdafunktion som körs acme-dns-route53
Hurra! Nu kan du distribuera vår funktion till AWS med kommandot aws lambda create-function. Lambdan måste konfigureras med hjälp av följande miljövariabler:
AWS_LAMBDA - gör det klart acme-dns-route53 att avrättningen sker inuti AWS Lambda.
DOMAINS — en lista över domäner separerade med kommatecken.