Awtomeiddio rheolaeth tystysgrif SSL Let's Encrypt gan ddefnyddio her DNS-01 ac AWS

Mae'r swydd yn disgrifio camau i awtomeiddio rheolaeth tystysgrifau SSL o Gadewch i ni Amgryptio CA gan ddefnyddio her DNS-01 и Strategaeth Cymru Gyfan.

acme-dns-llwybr53 yn offeryn a fydd yn ein galluogi i weithredu'r nodwedd hon. Gall weithio gyda thystysgrifau SSL gan Let's Encrypt, eu cadw yn Amazon Certificate Manager, defnyddio'r API Route53 i weithredu'r her DNS-01, ac, yn olaf, gwthio hysbysiadau i SNS. YN acme-dns-llwybr53 Mae yna hefyd ymarferoldeb adeiledig i'w ddefnyddio y tu mewn i AWS Lambda, a dyma sydd ei angen arnom.

Rhennir yr erthygl hon yn 4 adran:

  • creu ffeil sip;
  • creu rôl IAM;
  • creu swyddogaeth lambda sy'n rhedeg acme-dns-llwybr53;
  • creu amserydd CloudWatch sy'n sbarduno swyddogaeth 2 gwaith y dydd;

Nodyn: Cyn i chi ddechrau mae angen i chi osod GoLang 1.9+ и CLI AWS

Creu ffeil zip

Mae acme-dns-route53 wedi'i ysgrifennu yn GoLang ac mae'n cefnogi fersiwn heb fod yn is na 1.9.

Mae angen i ni greu ffeil zip gyda deuaidd acme-dns-route53 tu mewn. I wneud hyn mae angen i chi osod acme-dns-route53 o ystorfa GitHub gan ddefnyddio'r gorchymyn go install:

$ env GOOS=linux GOARCH=amd64 go install github.com/begmaroman/acme-dns-route53

Mae'r deuaidd wedi'i osod yn $GOPATH/bin cyfeiriadur. Sylwch ein bod wedi nodi dau amgylchedd newydd yn ystod y gosodiad: GOOS=linux и GOARCH=amd64Maen nhw'n dweud wrth y crynhoydd Go i greu ffeil ddeuaidd sy'n addas ar gyfer Linux Pensaernïaeth OS ac amd64 yw'r hyn sy'n rhedeg yn AWS.
Mae AWS yn disgwyl i'n rhaglen gael ei defnyddio mewn ffeil zip, felly gadewch i ni greu acme-dns-route53.zip archif a fydd yn cynnwys y deuaidd sydd newydd ei osod:

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

Nodyn: Dylai'r deuaidd fod yng ngwraidd yr archif sip. Ar gyfer hyn rydym yn defnyddio -j baner.

Nawr bod ein llysenw zip yn barod i'w ddefnyddio, y cyfan sydd ar ôl yw creu rôl gyda'r hawliau angenrheidiol.

Creu rôl IAM

Mae angen i ni sefydlu rôl IAM gyda'r hawliau sy'n ofynnol gan ein lambda yn ystod ei weithrediad.
Gadewch i ni alw'r polisi hwn lambda-acme-dns-route53-executor a rhoi rôl sylfaenol iddi ar unwaith AWSLambdaBasicExecutionRole. Bydd hyn yn caniatáu i'n lambda redeg ac ysgrifennu logiau i wasanaeth CloudWatch AWS.
Yn gyntaf, rydym yn creu ffeil JSON sy'n disgrifio ein hawliau. Bydd hyn yn ei hanfod yn caniatáu i wasanaethau lambda ddefnyddio'r rôl lambda-acme-dns-route53-executor:

$ touch ~/lambda-acme-dns-route53-executor-policy.json

Mae cynnwys ein ffeil fel a ganlyn:

{
    "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/*"
            ]
        }
    ]
}

Nawr gadewch i ni redeg y gorchymyn aws iam create-role i greu rôl:

$ aws iam create-role --role-name lambda-acme-dns-route53-executor 
 --assume-role-policy-document ~/lambda-acme-dns-route53-executor-policy.json

Nodyn: cofiwch y polisi ARN (Enw Adnodd Amazon) - bydd ei angen arnom yn y camau nesaf.

Rôl lambda-acme-dns-route53-executor creu, nawr mae angen i ni nodi caniatâd ar ei gyfer. Y ffordd hawsaf o wneud hyn yw defnyddio'r gorchymyn aws iam attach-role-policy, pasio polisi ARN AWSLambdaBasicExecutionRole fel a ganlyn:

$ aws iam attach-role-policy --role-name lambda-acme-dns-route53-executor 
--policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole

Nodyn: gellir dod o hyd i restr gyda pholisïau eraill yma.

Creu swyddogaeth lambda sy'n rhedeg acme-dns-llwybr53

Hwre! Nawr gallwch chi ddefnyddio ein swyddogaeth i AWS gan ddefnyddio'r gorchymyn aws lambda create-function. Rhaid ffurfweddu'r lambda gan ddefnyddio'r newidynnau amgylchedd canlynol:

  • AWS_LAMBDA - yn ei gwneud yn glir acme-dns-llwybr53 bod dienyddiad yn digwydd y tu mewn i AWS Lambda.
  • DOMAINS — rhestr o barthau wedi eu gwahanu gan atalnodau.
  • LETSENCRYPT_EMAIL - yn cynnwys Gadewch i ni Amgryptio E-bost.
  • NOTIFICATION_TOPIC — enw Pwnc Hysbysu SNS (dewisol).
  • STAGING - am y gwerth 1 amgylchedd llwyfannu yn cael ei ddefnyddio.
  • 1024 MB - terfyn cof, gellir ei newid.
  • 900 eiliad (15 mun) - terfyn amser.
  • acme-dns-route53 — enw ein deuaidd, sydd yn yr archif.
  • fileb://~/acme-dns-route53.zip — y llwybr i'r archif a grëwyd gennym.

Nawr gadewch i ni ddefnyddio:

$ 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"
 }

Creu amserydd CloudWatch sy'n sbarduno swyddogaeth 2 gwaith y dydd

Y cam olaf yw sefydlu cron, sy'n galw ein swyddogaeth ddwywaith y dydd:

  • creu rheol CloudWatch gyda'r gwerth schedule_expression.
  • creu targed rheol (yr hyn y dylid ei gyflawni) trwy nodi ARN y ffwythiant lambda.
  • rhoi caniatâd i'r rheol i alw'r swyddogaeth lambda.

Isod rwyf wedi atodi fy nghyfluniad Terraform, ond mewn gwirionedd gwneir hyn yn syml iawn gan ddefnyddio consol AWS neu 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}"
}

Nawr rydych chi wedi'ch ffurfweddu i greu a diweddaru tystysgrifau SSL yn awtomatig

Ffynhonnell: hab.com

Prynu gwesteio dibynadwy ar gyfer gwefannau sydd â diogelwch DDoS, gweinyddwyr VPS VDS 🔥 Prynu cynnal gwefannau dibynadwy gyda diogelwch DDoS, gweinyddion VPS VDS | ProHoster