Ziņojumā ir aprakstītas darbības, lai automatizētu SSL sertifikātu pārvaldību no izmantojot и AWS.
ir rīks, kas ļaus mums ieviest šo funkciju. Tas var darboties ar Let's Encrypt SSL sertifikātiem, saglabāt tos Amazon Certificate Manager, izmantot Route53 API, lai īstenotu DNS-01 izaicinājumu, un, visbeidzot, push paziņojumus SNS. IN acme-dns-route53 Ir arī iebūvēta funkcionalitāte lietošanai AWS Lambda iekšpusē, un tas ir tas, kas mums ir nepieciešams.
Šis raksts ir sadalīts 4 sadaļās:
- zip faila izveide;
- IAM lomas izveide;
- izveidojot lambda funkciju, kas darbojas acme-dns-route53;
- izveidojot CloudWatch taimeri, kas iedarbina funkciju 2 reizes dienā;
Piezīme: Pirms sākat, jums ir jāinstalē и
Zip faila izveide
acme-dns-route53 ir rakstīts GoLang un atbalsta versiju, kas nav zemāka par 1.9.
Mums ir jāizveido zip fails ar bināro failu acme-dns-route53 iekšā. Lai to izdarītu, jums ir jāinstalē acme-dns-route53 no GitHub repozitorija, izmantojot komandu go install:
$ env GOOS=linux GOARCH=amd64 go install github.com/begmaroman/acme-dns-route53Binārais fails ir instalēts $GOPATH/bin direktoriju. Lūdzu, ņemiet vērā, ka instalēšanas laikā mēs norādījām divas mainītas vides: GOOS=linux и GOARCH=amd64Viņi liek Go kompilatoram izveidot bināro failu, kas piemērots Linux AWS darbojas OS un amd64 arhitektūras.
AWS sagaida, ka mūsu programma tiks izvietota zip failā, tāpēc izveidosim acme-dns-route53.zip arhīvs, kurā būs tikko instalētais binārais fails:
$ zip -j ~/acme-dns-route53.zip $GOPATH/bin/acme-dns-route53Piezīme: Binārajam failam ir jāatrodas zip arhīva saknē. Šim nolūkam mēs izmantojam -j karogs.
Tagad mūsu zip segvārds ir gatavs izvietošanai, atliek tikai izveidot lomu ar nepieciešamajām tiesībām.
IAM lomas izveide
Mums ir jāiestata IAM loma ar tiesībām, ko pieprasa mūsu lambda tās izpildes laikā.
Sauksim šo politiku lambda-acme-dns-route53-executor un nekavējoties piešķir viņai pamata lomu AWSLambdaBasicExecutionRole. Tas ļaus mūsu lambda darboties un rakstīt žurnālus AWS CloudWatch pakalpojumā.
Pirmkārt, mēs izveidojam JSON failu, kurā aprakstītas mūsu tiesības. Tas būtībā ļaus lambda pakalpojumiem izmantot lomu lambda-acme-dns-route53-executor:
$ touch ~/lambda-acme-dns-route53-executor-policy.jsonMūsu faila saturs ir šāds:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup"
],
"Resource": "arn:aws:logs:<AWS_REGION>:<AWS_ACCOUNT_ID>:*"
},
{
"Effect": "Allow",
"Action": [
"logs:PutLogEvents",
"logs:CreateLogStream"
],
"Resource": "arn:aws:logs:<AWS_REGION>:<AWS_ACCOUNT_ID>:log-group:/aws/lambda/acme-dns-route53:*"
},
{
"Sid": "",
"Effect": "Allow",
"Action": [
"route53:ListHostedZones",
"cloudwatch:PutMetricData",
"acm:ImportCertificate",
"acm:ListCertificates"
],
"Resource": "*"
},
{
"Sid": "",
"Effect": "Allow",
"Action": [
"sns:Publish",
"route53:GetChange",
"route53:ChangeResourceRecordSets",
"acm:ImportCertificate",
"acm:DescribeCertificate"
],
"Resource": [
"arn:aws:sns:${var.region}:<AWS_ACCOUNT_ID>:<TOPIC_NAME>",
"arn:aws:route53:::hostedzone/*",
"arn:aws:route53:::change/*",
"arn:aws:acm:<AWS_REGION>:<AWS_ACCOUNT_ID>:certificate/*"
]
}
]
}Tagad izpildīsim komandu aws iam create-role lai izveidotu lomu:
$ aws iam create-role --role-name lambda-acme-dns-route53-executor
--assume-role-policy-document ~/lambda-acme-dns-route53-executor-policy.jsonPiezīme: atcerieties politiku ARN (Amazon Resource Name) — tā mums būs nepieciešama nākamajās darbībās.
Loma lambda-acme-dns-route53-executor izveidots, tagad mums ir jānorāda tam atļaujas. Vienkāršākais veids, kā to izdarīt, ir izmantot komandu aws iam attach-role-policy, nokārtojot ARN politiku AWSLambdaBasicExecutionRole šādi:
$ aws iam attach-role-policy --role-name lambda-acme-dns-route53-executor
--policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRolePiezīme: sarakstu ar citām politikām var atrast .
Tiek izveidota lambda funkcija, kas darbojas acme-dns-route53
Urrā! Tagad jūs varat izvietot mūsu funkciju AWS, izmantojot komandu aws lambda create-function. Lambda ir jākonfigurē, izmantojot šādus vides mainīgos:
AWS_LAMBDA- padara to skaidru acme-dns-route53 ka izpilde notiek AWS Lambda iekšpusē.DOMAINS— ar komatiem atdalītu domēnu saraksts.LETSENCRYPT_EMAIL- satur .NOTIFICATION_TOPIC— SNS paziņojumu tēmas nosaukums (pēc izvēles).STAGING- pēc vērtības1tiek izmantota iestudējuma vide.1024MB - atmiņas limits, var mainīt.900sekundes (15 min) — taimauts.acme-dns-route53— mūsu bināra nosaukums, kas atrodas arhīvā.fileb://~/acme-dns-route53.zip— ceļš uz mūsu izveidoto arhīvu.
Tagad izvietosim:
$ aws lambda create-function
--function-name acme-dns-route53
--runtime go1.x
--role arn:aws:iam::<AWS_ACCOUNT_ID>:role/lambda-acme-dns-route53-executor
--environment Variables="{AWS_LAMBDA=1,DOMAINS="example1.com,example2.com",LETSENCRYPT_EMAIL=begmaroman@gmail.com,STAGING=0,NOTIFICATION_TOPIC=acme-dns-route53-obtained}"
--memory-size 1024
--timeout 900
--handler acme-dns-route53
--zip-file fileb://~/acme-dns-route53.zip
{
"FunctionName": "acme-dns-route53",
"LastModified": "2019-05-03T19:07:09.325+0000",
"RevisionId": "e3fadec9-2180-4bff-bb9a-999b1b71a558",
"MemorySize": 1024,
"Environment": {
"Variables": {
"DOMAINS": "example1.com,example2.com",
"STAGING": "1",
"LETSENCRYPT_EMAIL": "your@email.com",
"NOTIFICATION_TOPIC": "acme-dns-route53-obtained",
"AWS_LAMBDA": "1"
}
},
"Version": "$LATEST",
"Role": "arn:aws:iam::<AWS_ACCOUNT_ID>:role/lambda-acme-dns-route53-executor",
"Timeout": 900,
"Runtime": "go1.x",
"TracingConfig": {
"Mode": "PassThrough"
},
"CodeSha256": "+2KgE5mh5LGaOsni36pdmPP9O35wgZ6TbddspyaIXXw=",
"Description": "",
"CodeSize": 8456317,
"FunctionArn": "arn:aws:lambda:us-east-1:<AWS_ACCOUNT_ID>:function:acme-dns-route53",
"Handler": "acme-dns-route53"
}CloudWatch taimera izveide, kas aktivizē funkciju 2 reizes dienā
Pēdējais solis ir iestatīt cron, kas divreiz dienā izsauc mūsu funkciju:
- izveidojiet CloudWatch kārtulu ar vērtību
schedule_expression. - izveidojiet kārtulas mērķi (kas jāizpilda), norādot lambda funkcijas ARN.
- dot atļauju kārtulai izsaukt lambda funkciju.
Zemāk esmu pievienojis savu Terraform konfigurāciju, taču patiesībā tas tiek darīts ļoti vienkārši, izmantojot AWS konsoli vai AWS CLI.
# Cloudwatch event rule that runs acme-dns-route53 lambda every 12 hours
resource "aws_cloudwatch_event_rule" "acme_dns_route53_sheduler" {
name = "acme-dns-route53-issuer-scheduler"
schedule_expression = "cron(0 */12 * * ? *)"
}
# Specify the lambda function to run
resource "aws_cloudwatch_event_target" "acme_dns_route53_sheduler_target" {
rule = "${aws_cloudwatch_event_rule.acme_dns_route53_sheduler.name}"
arn = "${aws_lambda_function.acme_dns_route53.arn}"
}
# Give CloudWatch permission to invoke the function
resource "aws_lambda_permission" "permission" {
action = "lambda:InvokeFunction"
function_name = "${aws_lambda_function.acme_dns_route53.function_name}"
principal = "events.amazonaws.com"
source_arn = "${aws_cloudwatch_event_rule.acme_dns_route53_sheduler.arn}"
}Tagad esat konfigurēts, lai automātiski izveidotu un atjauninātu SSL sertifikātus
Avots: www.habr.com
