Tha am post aâ toirt cunntas air ceumannan gus riaghladh theisteanasan SSL a dhèanamh fèin-ghluasadach bho a âcleachdadh и AWS.
na inneal a leigeas leinn am feart seo a bhuileachadh. Faodaidh e obrachadh le teisteanasan SSL bho Let's Encrypt, sĂ bhail iad ann am Manaidsear Teisteanas Amazon, cleachd an Route53 API gus an dĂšbhlan DNS-01 a chuir an gnĂŹomh, agus, mu dheireadh, cuir fios gu SNS. ANNS acme-dns-slighe53 Tha comas-gnĂŹomh togte ann cuideachd airson a chleachdadh taobh a-staigh AWS Lambda, agus is e seo a tha a dhĂŹth oirnn.
Tha an artaigil seo air a roinn ann an 4 earrannan:
- cruthachadh faidhle zip;
- cruthachadh dreuchd IAM;
- cruthachadh gnĂŹomh lambda a bhios aâ ruith acme-dns-slighe53;
- cruthachadh timer CloudWatch a bhrosnaicheas gnĂŹomh 2 uair san latha;
Note: Mus tòisich thu feumaidh tu a stà ladh и
A 'cruthachadh faidhle zip
Tha acme-dns-route53 sgrĂŹobhte ann an GoLang agus aâ toirt taic do dhreach gun a bhith nas ĂŹsle na 1.9.
Feumaidh sinn faidhle zip a chruthachadh le binary acme-dns-route53 a-staigh. Gus seo a dhèanamh feumaidh tu a stĂ ladh acme-dns-route53 bho stòr GitHub aâ cleachdadh an Ă ithne go install:
$ env GOOS=linux GOARCH=amd64 go install github.com/begmaroman/acme-dns-route53Tha am binary air a chuir a-steach $GOPATH/bin eòlaire. Thoir an aire gun do shònraich sinn dà à rainneachd atharraichte rè an stà laidh: GOOS=linux и GOARCH=amd64Tha iad ag innse don cho-chruinneadair Go dà -chòd a chruthachadh a tha freagarrach airson Linux Is iad ailtireachd an OS agus amd64 a tha ag obair ann an AWS.
Tha AWS an dÚil gum bi am prògram againn air a chleachdadh ann am faidhle zip, mar sin cruthaichidh sinn acme-dns-route53.zip tasglann anns am bi am binary a chaidh a chuir a-steach às Úr:
$ zip -j ~/acme-dns-route53.zip $GOPATH/bin/acme-dns-route53Note: Bu chòir am binary a bhith ann am freumh an tasglann zip. Airson seo bidh sinn a 'cleachdadh -j bratach.
A-nis tha am far-ainm zip againn deiseil airson a chleachdadh, chan eil air fhà gail ach à ite a chruthachadh leis na còraichean riatanach.
Aâ cruthachadh dreuchd IAM
Feumaidh sinn dreuchd IAM a stèidheachadh leis na còraichean a dhâ fheumas ar lambda nuair a thèid a chur gu bĂ s.
Canaidh sinn am poileasaidh seo lambda-acme-dns-route53-executor agus sa bhad a thoirt dhi prĂŹomh dhreuchd AWSLambdaBasicExecutionRole. Leigidh seo leis an lambda againn logaichean a ruith agus a sgrĂŹobhadh gu seirbheis AWS CloudWatch.
An toiseach, cruthaichidh sinn faidhle JSON a bheir cunntas air ar còraichean. Leigidh seo gu bunaiteach le seirbheisean lambda an dreuchd a chleachdadh lambda-acme-dns-route53-executor:
$ touch ~/lambda-acme-dns-route53-executor-policy.jsonTha susbaint ar faidhle mar a leanas:
{
"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/*"
]
}
]
}A-nis leig leinn an Ă ithne a ruith aws iam create-role gus dreuchd a chruthachadh:
$ aws iam create-role --role-name lambda-acme-dns-route53-executor
--assume-role-policy-document ~/lambda-acme-dns-route53-executor-policy.jsonNote: cuimhnich air aâ phoileasaidh ARN (Ainm Goireas Amazon) - bidh feum againn air anns na h-ath cheumannan.
Dleastanas lambda-acme-dns-route53-executor chruthachadh, a-nis feumaidh sinn ceadan a shònrachadh air a shon. Is e an dòigh as fhasa seo a dhèanamh an à ithne a chleachdadh aws iam attach-role-policy, a 'dol seachad air poileasaidh ARN AWSLambdaBasicExecutionRole mar a leanas:
$ aws iam attach-role-policy --role-name lambda-acme-dns-route53-executor
--policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRoleNote: gheibhear liosta le poileasaidhean eile .
A 'cruthachadh gnĂŹomh lambda a tha a' ruith acme-dns-slighe53
Hooray! A-nis faodaidh tu ar gnĂŹomh a chuir gu AWS aâ cleachdadh an Ă ithne aws lambda create-function. Feumaidh an lambda a bhith air a rèiteachadh leis na caochladairean Ă rainneachd a leanas:
AWS_LAMBDA- ga dhèanamh soilleir acme-dns-slighe53 tha an cur gu bĂ s sin aâ tachairt taobh a-staigh AWS Lambda.DOMAINS- liosta de raointean air an sgaradh le cromagan.LETSENCRYPT_EMAIL- tha .NOTIFICATION_TOPIC- ainm Cuspair Fiosrachaidh SNS (roghainneil).STAGING- aig an luach1Ă rainneachd stèidse ga chleachdadh.1024MB - crĂŹoch cuimhne, faodar atharrachadh.900diogan (15 mionaidean) - Ăšine a-mach.acme-dns-route53â ainm ar binary, a tha san tasglann.fileb://~/acme-dns-route53.zip- an t-slighe chun tasglann a chruthaich sinn.
A-nis leigidh sinn a-steach:
$ 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"
}Aâ cruthachadh timer CloudWatch a bhrosnaicheas gnĂŹomh 2 uair san latha
Is e an ceum mu dheireadh cron a stèidheachadh, a chanas ar gnÏomh dà uair san latha:
- cruthaich riaghailt CloudWatch leis an luach
schedule_expression. - cruthaich targaid riaghailt (dè bu chòir a chur gu bĂ s) le bhith aâ sònrachadh ARN aâ ghnĂŹomh lambda.
- cead a thoirt do'n riaghailt gairm an lambda function.
Gu h-ĂŹosal tha mi air mo config Terraform a cheangal, ach gu dearbh tha seo air a dhèanamh gu sĂŹmplidh a âcleachdadh consol AWS no 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}"
}A-nis tha thu air do rèiteachadh gus teisteanasan SSL a chruthachadh agus Úrachadh gu fèin-ghluasadach
Source: www.habr.com
