DNS-01 چئلينج ۽ AWS استعمال ڪندي Let's Encrypt SSL سرٽيفڪيٽ مينيجمينٽ جو آٽوميشن

پوسٽ بيان ڪري ٿو قدمن کي خودڪار ڪرڻ لاءِ ايس ايس ايل سرٽيفڪيٽ جي انتظام کي اچو ته انڪريپٽ CA استعمال ڪندي DNS-01 چئلينج и اوس.

acme-dns-route53 ھڪڙو اوزار آھي جيڪو اسان کي ھن خصوصيت کي لاڳو ڪرڻ جي اجازت ڏيندو. اهو ڪم ڪري سگهي ٿو SSL سرٽيفڪيٽن سان Let's Encrypt، انهن کي Amazon سرٽيفڪيٽ مئنيجر ۾ محفوظ ڪريو، DNS-53 چيلنج کي لاڳو ڪرڻ لاءِ Route01 API استعمال ڪريو، ۽ آخرڪار، SNS ڏانهن نوٽيفڪيشن کي دٻايو. IN acme-dns-route53 AWS Lambda جي اندر استعمال لاءِ تعمير ٿيل ڪارڪردگي پڻ آهي، ۽ اهو ئي آهي جيڪو اسان کي گهرجي.

هي مضمون 4 حصن ۾ ورهايل آهي:

  • زپ فائل ٺاهڻ؛
  • IAM ڪردار ٺاهڻ؛
  • هڪ lambda فنڪشن ٺاهي ٿو جيڪو هلندو آهي acme-dns-route53;
  • ھڪڙو CloudWatch ٽائمر ٺاھيو جيڪو ھڪڙي فنڪشن کي ڏينھن ۾ 2 ڀيرا ٽاريندو آھي؛

نوٽ: توهان کي شروع ڪرڻ کان پهريان توهان کي انسٽال ڪرڻ جي ضرورت آهي GoLang 1.9+ и او ايس سي آئي

ھڪڙي زپ فائل ٺاھيو

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 اسٽيجنگ ماحول استعمال ڪيو ويندو آهي.
  • 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",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

DDoS تحفظ سان سائيٽن لاءِ قابل اعتماد هوسٽنگ خريد ڪريو، VPS VDS سرور 🔥 DDoS تحفظ سان قابل اعتماد ويب سائيٽ هوسٽنگ خريد ڪريو، VPS VDS سرورز | ProHoster