Mae'r swydd yn disgrifio camau i awtomeiddio rheolaeth tystysgrifau SSL o gan ddefnyddio и Strategaeth Cymru Gyfan.
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 и
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-route53Mae'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-route53Nodyn: 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.jsonMae 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.jsonNodyn: 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/AWSLambdaBasicExecutionRoleNodyn: gellir dod o hyd i restr gyda pholisïau eraill .
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 .NOTIFICATION_TOPIC— enw Pwnc Hysbysu SNS (dewisol).STAGING- am y gwerth1amgylchedd llwyfannu yn cael ei ddefnyddio.1024MB - terfyn cof, gellir ei newid.900eiliad (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
