Дар ин паём қадамҳои автоматикунонии идоракунии сертификатҳои SSL аз
Ин мақола ба 4 бахш тақсим мешавад:
- сохтани файли zip;
- эҷоди нақши IAM;
- эҷод кардани функсияи ламбда, ки кор мекунад acme-dns-route53;
- эҷоди таймери CloudWatch, ки функсияро дар як рӯз 2 маротиба фаъол мекунад;
Шарҳ: Пеш аз оғози кор шумо бояд насб кунед
Эҷоди файли zip
acme-dns-route53 дар GoLang навишта шудааст ва версияи на камтар аз 1.9-ро дастгирӣ мекунад.
Мо бояд як файли zip бо дуӣ эҷод кунем acme-dns-route53
дарун. Барои ин ба шумо лозим аст, ки насб кунед acme-dns-route53
аз анбори GitHub бо истифода аз фармон go install
:
$ env GOOS=linux GOARCH=amd64 go install github.com/begmaroman/acme-dns-route53
Бинарӣ дар $GOPATH/bin
директория. Лутфан қайд кунед, ки ҳангоми насб мо ду муҳити тағирёфтаро муайян кардем: GOOS=linux
и GOARCH=amd64
. Онҳо ба компилятори Go равшан мекунанд, ки он бояд бинарии мувофиқро барои Linux OS ва меъмории amd64 созад - ин чизест, ки дар AWS кор мекунад.
AWS интизор аст, ки барномаи мо дар файли zip ҷойгир карда шавад, бинобар ин биёед эҷод кунем acme-dns-route53.zip
бойгоние, ки бинарии нав насбшударо дар бар мегирад:
$ zip -j ~/acme-dns-route53.zip $GOPATH/bin/acme-dns-route53
Шарҳ: Бинарӣ бояд дар решаи бойгонии zip бошад. Барои ин мо истифода мебарем -j
парчам.
Ҳоло лақаби zip мо барои ҷойгиркунӣ омода аст, танҳо эҷод кардани нақш бо ҳуқуқҳои зарурӣ боқӣ мемонад.
Эҷоди нақши IAM
Мо бояд нақши IAM-ро бо ҳуқуқҳое, ки ламбдаамон ҳангоми иҷрои он талаб мекунанд, таъсис диҳем.
Биёед ин сиёсатро номем lambda-acme-dns-route53-executor
ва фавран ба ӯ нақши асосиро диҳед AWSLambdaBasicExecutionRole
. Ин ба ламбда имкон медиҳад, ки дар хидмати AWS CloudWatch гузоришҳоро иҷро ва нависад.
Аввалан, мо файли JSON эҷод мекунем, ки ҳуқуқҳои моро тавсиф мекунад. Ин аслан имкон медиҳад, ки хидматҳои ламбда нақшро истифода баранд lambda-acme-dns-route53-executor
:
$ touch ~/lambda-acme-dns-route53-executor-policy.json
Мундариҷаи файли мо чунин аст:
{
"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/*"
]
}
]
}
Акнун биёед фармонро иҷро кунем aws iam create-role
барои эҷод кардани нақш:
$ aws iam create-role --role-name lambda-acme-dns-route53-executor
--assume-role-policy-document ~/lambda-acme-dns-route53-executor-policy.json
Шарҳ: Сиёсати ARN (Номи захираҳои Amazon) -ро дар хотир нигоҳ доред - мо дар қадамҳои оянда ба он ниёз хоҳем дошт.
Нақши lambda-acme-dns-route53-executor
офарида шудааст, ҳоло мо бояд иҷозатҳоро барои он муайян кунем. Роҳи осонтарини ин кор истифодаи фармон аст aws iam attach-role-policy
, гузариш сиёсати ARN AWSLambdaBasicExecutionRole
чунин аст:
$ aws iam attach-role-policy --role-name lambda-acme-dns-route53-executor
--policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
Шарҳ: рӯйхат бо сиёсатҳои дигар пайдо кардан мумкин аст
Эҷоди функсияи ламбда, ки иҷро мешавад acme-dns-route53
Ура! Акнун шумо метавонед бо истифода аз фармон функсияи моро дар AWS ҷойгир кунед aws lambda create-function
. Ламбда бояд бо истифода аз тағирёбандаҳои муҳити зерин танзим карда шавад:
AWS_LAMBDA
— равшан мегардонад acme-dns-route53 ки иҷро дар дохили AWS Lambda рух медиҳад.DOMAINS
— рӯйхати доменҳо, ки бо вергул ҷудо шудаанд.LETSENCRYPT_EMAIL
- дар бар мегирадБиёед почтаи электрониро рамзгузорӣ кунем .NOTIFICATION_TOPIC
— номи Мавзӯи огоҳии SNS (ихтиёрӣ).STAGING
- бо арзиши1
муҳити саҳнавӣ истифода мешавад.1024
MB - маҳдудияти хотира, метавонад тағйир дода шавад.900
сония (15 дақ.) — вақти тамомшавӣ.acme-dns-route53
— номи бинарии мо, ки дар архив аст.fileb://~/acme-dns-route53.zip
— рохи архиве, ки мо офаридаем.
Акнун биёед ҷойгир кунем:
$ 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",[email protected],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": "[email protected]",
"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, ки як функсияро дар як рӯз 2 маротиба ба вуҷуд меорад
Қадами охирин ин насб кардани cron аст, ки функсияи моро дар як рӯз ду маротиба даъват мекунад:
- қоидаҳои CloudWatch бо арзиш эҷод кунед
schedule_expression
. - бо муайян кардани ARN-и функсияи лямбда ҳадафи қоида эҷод кунед (чӣ бояд иҷро шавад).
- ба қоида барои даъват кардани функсияи ламбда иҷозат диҳед.
Дар зер ман конфигуратсияи Terraform-и худро замима кардам, аммо дар асл ин бо истифода аз консоли AWS ё 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}"
}
Акнун шумо танзим кардаед, ки сертификатҳои SSL-ро ба таври худкор эҷод ва навсозӣ кунед
Манбаъ: will.com