DNS-01 අභියෝගය සහ AWS භාවිතයෙන් SSL සහතික කළමනාකරණය සංකේතනය කරමු ස්වයංක්‍රීයකරණය

තැපැල් මගින් SSL සහතික කළමනාකරණය ස්වයංක්‍රීය කිරීමට පියවර විස්තර කරයි අපි CA සංකේතනය කරමු භාවිතා කිරීම DNS-01 අභියෝගය и AWS.

acme-dns-route53 මෙම විශේෂාංගය ක්‍රියාත්මක කිරීමට අපට ඉඩ සලසන මෙවලමකි. එයට Let's Encrypt වෙතින් SSL සහතික සමඟ ක්‍රියා කළ හැකිය, ඒවා Amazon සහතික කළමණාකරු තුළ සුරැකිය හැක, DNS-53 අභියෝගය ක්‍රියාත්මක කිරීමට Route01 API භාවිතා කරන්න, සහ අවසාන වශයෙන් SNS වෙත දැනුම්දීම් තල්ලු කරන්න. තුල acme-dns-route53 AWS Lambda තුළ භාවිතය සඳහා බිල්ට් ක්‍රියාකාරීත්වයක් ද ඇත, අපට අවශ්‍ය වන්නේ මෙයයි.

මෙම ලිපිය කොටස් 4 කට බෙදා ඇත:

  • zip ගොනුවක් නිර්මාණය කිරීම;
  • IAM භූමිකාවක් නිර්මාණය කිරීම;
  • ධාවනය වන lambda ශ්රිතයක් නිර්මාණය කිරීම acme-dns-route53;
  • දිනකට 2 වතාවක් ශ්‍රිතයක් ක්‍රියාත්මක කරන CloudWatch ටයිමරයක් නිර්මාණය කිරීම;

සටහන: ඔබ ආරම්භ කිරීමට පෙර, ඔබ ස්ථාපනය කළ යුතුය GoLang 1.9+ и AWS CLI

zip ගොනුවක් නිර්මාණය කිරීම

acme-dns-route53 GoLang වලින් ලියා ඇති අතර 1.9 ට නොඅඩු අනුවාදයට සහය දක්වයි.

අපි බයිනරි එකකින් zip file එකක් හදන්න ඕන 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 OS සහ amd64 ගෘහ නිර්මාණ ශිල්පය සඳහා සුදුසු ද්විමය නිර්මාණය කිරීමට අවශ්‍ය බව ඔවුන් Go සම්පාදකයට පැහැදිලි කරයි - මෙය AWS මත ක්‍රියාත්මක වේ.
AWS අපගේ වැඩසටහන zip ගොනුවක යෙදවීමට අපේක්ෂා කරයි, එබැවින් අපි නිර්මාණය කරමු acme-dns-route53.zip අලුතින් ස්ථාපනය කරන ලද ද්විමය අඩංගු වන සංරක්ෂිතය:

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

සටහන: ද්විමය සිප් ලේඛනාගාරයේ මූලයේ තිබිය යුතුය. මේ සඳහා අපි භාවිතා කරමු -j ධජ.

දැන් අපගේ zip අන්වර්ථ නාමය යෙදවීමට සූදානම්ය, ඉතිරිව ඇත්තේ අවශ්‍ය අයිතීන් සහිත භූමිකාවක් නිර්මාණය කිරීමයි.

IAM භූමිකාවක් නිර්මාණය කිරීම

එය ක්‍රියාත්මක කිරීමේදී අපගේ ලැම්ඩාට අවශ්‍ය අයිතීන් සහිත IAM භූමිකාවක් අපට පිහිටුවිය යුතුය.
අපි මේ ප්‍රතිපත්තිය කියමු lambda-acme-dns-route53-executor වහාම ඇයට මූලික භූමිකාවක් ලබා දෙන්න AWSLambdaBasicExecutionRole. මෙය අපගේ lambda හට AWS CloudWatch සේවාව වෙත ලොග් ධාවනය කිරීමට සහ ලිවීමට ඉඩ සලසයි.
පළමුව, අපි අපගේ අයිතිවාසිකම් විස්තර කරන JSON ගොනුවක් සාදන්නෙමු. මෙය අත්‍යවශ්‍යයෙන්ම lambda සේවාවන්ට භූමිකාව භාවිතා කිරීමට ඉඩ සලසයි 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/*"
            ]
        }
    ]
}

දැන් අපි command එක run කරමු 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. පහත පරිසර විචල්‍යයන් භාවිතයෙන් lambda වින්‍යාස කළ යුතුය:

  • AWS_LAMBDA - පැහැදිලි කරයි acme-dns-route53 ක්රියාත්මක කිරීම AWS Lambda තුළ සිදු වේ.
  • DOMAINS - කොමා වලින් වෙන් කරන ලද වසම් ලැයිස්තුවක්.
  • LETSENCRYPT_EMAIL - අඩංගු වේ අපි Email Encrypt කරමු.
  • 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.
  • 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 සහතික සෑදීමට සහ යාවත්කාලීන කිරීමට වින්‍යාස කර ඇත

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න