پوسٽ بيان ڪري ٿو قدمن کي خودڪار ڪرڻ لاءِ ايس ايس ايل سرٽيفڪيٽ جي انتظام کي استعمال ڪندي и اوس.
ھڪڙو اوزار آھي جيڪو اسان کي ھن خصوصيت کي لاڳو ڪرڻ جي اجازت ڏيندو. اهو ڪم ڪري سگهي ٿو SSL سرٽيفڪيٽن سان Let's Encrypt، انهن کي Amazon سرٽيفڪيٽ مئنيجر ۾ محفوظ ڪريو، DNS-53 چيلنج کي لاڳو ڪرڻ لاءِ Route01 API استعمال ڪريو، ۽ آخرڪار، SNS ڏانهن نوٽيفڪيشن کي دٻايو. IN acme-dns-route53 AWS Lambda جي اندر استعمال لاءِ تعمير ٿيل ڪارڪردگي پڻ آهي، ۽ اهو ئي آهي جيڪو اسان کي گهرجي.
هي مضمون 4 حصن ۾ ورهايل آهي:
- زپ فائل ٺاهڻ؛
- IAM ڪردار ٺاهڻ؛
- هڪ lambda فنڪشن ٺاهي ٿو جيڪو هلندو آهي acme-dns-route53;
- ھڪڙو CloudWatch ٽائمر ٺاھيو جيڪو ھڪڙي فنڪشن کي ڏينھن ۾ 2 ڀيرا ٽاريندو آھي؛
نوٽ: توهان کي شروع ڪرڻ کان پهريان توهان کي انسٽال ڪرڻ جي ضرورت آهي и
ھڪڙي زپ فائل ٺاھيو
acme-dns-route53 GoLang ۾ لکيل آهي ۽ 1.9 کان گهٽ نه ورجن کي سپورٽ ڪري ٿو.
اسان کي بائنري سان زپ فائل ٺاهڻ جي ضرورت آهي 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. اهي گو ڪمپائلر کي ٻڌائين ٿا ته هڪ بائنري ٺاهي جيڪو ان لاءِ موزون هجي Linux AWS ۾ OS ۽ amd64 آرڪيٽيڪچر هلن ٿا.
AWS اسان جي پروگرام کي زپ فائل ۾ ترتيب ڏيڻ جي اميد رکي ٿو، تنهنڪري اچو ته ٺاهيو acme-dns-route53.zip آرڪائيو جيڪو نئين نصب ٿيل بائنري تي مشتمل هوندو:
$ zip -j ~/acme-dns-route53.zip $GOPATH/bin/acme-dns-route53نوٽ: بائنري کي زپ آرڪائيو جي روٽ ۾ هجڻ گهرجي. ان لاءِ اسان استعمال ڪريون ٿا -j جھنڊو.
ھاڻي اسان جي زپ جو نالو ٺاھڻ لاءِ تيار آھي، باقي اھو آھي ته ضروري حقن سان ڪردار ٺاھيو.
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 Resource Name) - اسان کي ايندڙ مرحلن ۾ ان جي ضرورت پوندي.
ڪردار 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نوٽ: ٻين پاليسين سان هڪ فهرست ملي سگهي ٿو .
هڪ lambda فنڪشن ٺاهي ٿو جيڪو هلندو آهي acme-dns-route53
هوري! ھاڻي توھان ڪمانڊ استعمال ڪندي اسان جي فنڪشن کي AWS ۾ ترتيب ڏئي سگھو ٿا aws lambda create-function. لامبڊا کي هيٺين ماحوليات جي استعمال سان ترتيب ڏيڻ گهرجي:
AWS_LAMBDA- اهو واضح ڪري ٿو acme-dns-route53 اهو عمل AWS Lambda جي اندر ٿئي ٿو.DOMAINS- ڪاما سان الڳ ڪيل ڊومينز جي هڪ فهرست.LETSENCRYPT_EMAIL- تي مشتمل .NOTIFICATION_TOPIC- SNS نوٽيفڪيشن موضوع جو نالو (اختياري).STAGING- قيمت تي1اسٽيجنگ ماحول استعمال ڪيو ويندو آهي.1024MB - ياداشت جي حد، تبديل ڪري سگھجي ٿو.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",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 ٽائمر ٺاھيو جيڪو ھڪڙي فنڪشن کي ڏينھن ۾ 2 ڀيرا ٽاريندو آھي
آخري قدم سيٽ اپ ڪرڻ آهي ڪرون، جيڪو اسان جي فنڪشن کي ڏينهن ۾ ٻه ڀيرا سڏيندو آهي:
- قدر سان CloudWatch قاعدو ٺاهيو
schedule_expression. - lambda فنڪشن جي ARN جي وضاحت ڪندي هڪ قاعدو ٽارگيٽ ٺاهيو (جيڪو عمل ڪيو وڃي).
- ليمبڊا فنڪشن کي سڏڻ لاءِ قاعدي کي اجازت ڏيو.
هيٺ مون پنهنجي Terraform config کي ڳنڍيو آهي، پر حقيقت ۾ اهو ڪيو ويندو آهي بلڪل سادو استعمال ڪندي 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 سرٽيفڪيٽ
جو ذريعو: www.habr.com
