ዲ ኤን ኤስ-01 ፈተናን እና AWSን በመጠቀም የSSL ሰርተፍኬት አስተዳደርን እናመስጥር

ልጥፉ የኤስኤስኤል ሰርተፊኬቶችን በራስ ሰር የማስተዳደር እርምጃዎችን ይገልጻል CAን እናመስጥር በመጠቀም የዲ ኤን ኤስ-01 ፈተና и የ AWS.

acme-dns-route53 ይህንን ባህሪ ተግባራዊ ለማድረግ የሚያስችል መሳሪያ ነው. ከኤስኤስኤል ሰርተፍኬቶች እንክሪፕት እንስጥ፣ በአማዞን ሰርተፍኬት አስተዳዳሪ ውስጥ ያስቀምጣቸዋል፣ የDNS-53 ፈተናን ለመተግበር Route01 API ይጠቀሙ እና በመጨረሻም ማሳወቂያዎችን ወደ SNS ይግፉ። ውስጥ acme-dns-route53 በAWS Lambda ውስጥ ለመጠቀም አብሮ የተሰራ ተግባርም አለ፣ እና እኛ የምንፈልገው ይህ ነው።

ይህ ጽሑፍ በ 4 ክፍሎች የተከፈለ ነው.

  • የዚፕ ፋይል መፍጠር;
  • የ IAM ሚና መፍጠር;
  • የሚሰራ ላምዳ ተግባር መፍጠር acme-dns-route53;
  • በቀን 2 ጊዜ ተግባርን የሚያነሳሳ የ CloudWatch ሰዓት ቆጣሪ መፍጠር;

ማስታወሻ: ከመጀመርዎ በፊት መጫን ያስፈልግዎታል ጎላንግ 1.9+ и AWS CLI

ዚፕ ፋይል በመፍጠር ላይ

acme-dns-route53 በጎላንግ የተፃፈ ሲሆን ከ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. ለሊኑክስ ኦኤስ እና ለ amd64 architecture ተስማሚ የሆነ ሁለትዮሽ መፍጠር እንደሚያስፈልገው ለ Go compiler ግልፅ ያደርጉታል - ይህ በAWS ላይ የሚሰራው ነው።
AWS ፕሮግራማችን በዚፕ ፋይል ውስጥ እንዲሰማራ ይጠብቃል፣ ስለዚህ እንፍጠር acme-dns-route53.zip አዲስ የተጫነውን ሁለትዮሽ የሚይዝ መዝገብ፡

$ zip -j ~/acme-dns-route53.zip $GOPATH/bin/acme-dns-route53

ማስታወሻ: ሁለትዮሽ በዚፕ ማህደር ስር መሆን አለበት። ለዚህ እንጠቀማለን -j ባንዲራ

አሁን የእኛ ዚፕ ቅጽል ስም ለመሰማራት ዝግጁ ነው, የቀረው አስፈላጊ መብቶች ያለው ሚና ለመፍጠር ብቻ ነው.

የ IAM ሚና መፍጠር

በአፈፃፀሙ ወቅት የእኛ lambda ከሚያስፈልጉት መብቶች ጋር የ 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 (የአማዞን ሪሶርስስ ስም) - በሚቀጥሉት ደረጃዎች እንፈልጋለን.

ሚና 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 ሜባ - የማህደረ ትውስታ ገደብ, ሊለወጥ ይችላል.
  • 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"
 }

በቀን 2 ጊዜ ተግባርን የሚቀሰቅስ የCloudWatch ሰዓት ቆጣሪን መፍጠር

የመጨረሻው እርምጃ በቀን ሁለት ጊዜ ተግባራችንን የሚጠራውን ክሮን ማዘጋጀት ነው.

  • ከዋጋው ጋር የCloudWatch ደንብ ይፍጠሩ schedule_expression.
  • የ lambda ተግባርን ARN በመግለጽ የደንብ ኢላማ ይፍጠሩ (ምን መፈፀም እንዳለበት)።
  • የ lambda ተግባርን ለመጥራት ደንቡን ፍቃድ ይስጡ.

ከዚህ በታች የእኔን 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 ሰርተፊኬቶችን በራስ ሰር ለመፍጠር እና ለማዘመን ተዋቅረዋል።

ምንጭ: hab.com

አስተያየት ያክሉ