DNS-01 சவால் மற்றும் AWS ஐப் பயன்படுத்தி SSL சான்றிதழ் நிர்வாகத்தை குறியாக்கம் செய்வோம்

SSL சான்றிதழ்களின் நிர்வாகத்தை தானியங்குபடுத்துவதற்கான படிகளை இடுகை விவரிக்கிறது CA ஐ என்க்ரிப்ட் செய்வோம் பயன்படுத்தி DNS-01 சவால் и வட்டாரங்களில்.

acme-dns-route53 இந்த அம்சத்தை செயல்படுத்த அனுமதிக்கும் ஒரு கருவியாகும். இது லெட்ஸ் என்க்ரிப்ட் இலிருந்து SSL சான்றிதழ்களுடன் வேலை செய்யலாம், அவற்றை Amazon சான்றிதழ் மேலாளரில் சேமிக்கலாம், DNS-53 சவாலை செயல்படுத்த ரூட்01 API ஐப் பயன்படுத்தலாம் மற்றும் இறுதியாக, SNS க்கு அறிவிப்புகளை அனுப்பலாம். IN acme-dns-route53 AWS Lambda க்குள் பயன்படுத்த உள்ளமைக்கப்பட்ட செயல்பாடும் உள்ளது, இதுவே நமக்குத் தேவை.

இந்த கட்டுரை 4 பிரிவுகளாக பிரிக்கப்பட்டுள்ளது:

  • ஜிப் கோப்பை உருவாக்குதல்;
  • ஒரு IAM பாத்திரத்தை உருவாக்குதல்;
  • இயங்கும் ஒரு லாம்ப்டா செயல்பாட்டை உருவாக்குகிறது acme-dns-route53;
  • ஒரு நாளைக்கு 2 முறை செயல்பாட்டைத் தூண்டும் CloudWatch டைமரை உருவாக்குதல்;

குறிப்பு: நீங்கள் தொடங்குவதற்கு முன், நீங்கள் நிறுவ வேண்டும் GoLang 1.9+ и AWS CLI

ஜிப் கோப்பை உருவாக்குதல்

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. லினக்ஸ் ஓஎஸ் மற்றும் ஏஎம்டி64 கட்டமைப்பிற்கு ஏற்ற பைனரியை உருவாக்க வேண்டும் என்று கோ கம்பைலருக்கு அவர்கள் தெளிவுபடுத்துகிறார்கள் - இது AWS இல் இயங்குகிறது.
எங்கள் நிரல் ஒரு ஜிப் கோப்பில் பயன்படுத்தப்பட வேண்டும் என்று 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

குறிப்பு: பிற கொள்கைகளுடன் ஒரு பட்டியலைக் காணலாம் இங்கே.

இயங்கும் லாம்ப்டா செயல்பாட்டை உருவாக்குதல் acme-dns-route53

ஹூரே! இப்போது நீங்கள் கட்டளையைப் பயன்படுத்தி AWS க்கு எங்கள் செயல்பாட்டை வரிசைப்படுத்தலாம் aws lambda create-function. பின்வரும் சூழல் மாறிகளைப் பயன்படுத்தி லாம்ப்டா கட்டமைக்கப்பட வேண்டும்:

  • AWS_LAMBDA - தெளிவுபடுத்துகிறது acme-dns-route53 AWS லாம்ப்டாவிற்குள் மரணதண்டனை நிகழ்கிறது.
  • 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"
 }

ஒரு நாளைக்கு 2 முறை செயல்பாட்டைத் தூண்டும் CloudWatch டைமரை உருவாக்குதல்

கிரானை அமைப்பதே கடைசி படியாகும், இது ஒரு நாளைக்கு இரண்டு முறை எங்கள் செயல்பாட்டை அழைக்கிறது:

  • மதிப்புடன் 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 சான்றிதழ்களை தானாக உருவாக்க மற்றும் புதுப்பிக்க உள்ளமைக்கப்பட்டுள்ளீர்கள்

ஆதாரம்: www.habr.com

கருத்தைச் சேர்