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=amd64. Maent yn ei gwneud yn glir i'r casglwr Go bod angen iddo greu deuaidd sy'n addas ar gyfer Linux OS a phensaernΓ―aeth amd64 - dyma sy'n rhedeg ar 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",[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"
 }

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

Ychwanegu sylw