เจชเฉเจธเจ SSL เจธเจฐเจเฉเจซเจฟเจเฉเจเจพเจ เจฆเฉ เจชเฉเจฐเจฌเฉฐเจงเจจ เจจเฉเฉฐ เจธเจตเฉเจเจพเจฒเจค เจเจฐเจจ เจฒเจ เจเจฆเจฎเจพเจ เจฆเจพ เจตเจฐเจฃเจจ เจเจฐเจฆเฉ เจนเฉ
เจเจธ เจฒเฉเจ เจจเฉเฉฐ 4 เจญเจพเจเจพเจ เจตเจฟเฉฑเจ เจตเฉฐเจกเจฟเจ เจเจฟเจ เจนเฉ:
- เจเฉฑเจ เจเจผเจฟเจช เจซเจพเจเจฒ เจฌเจฃเจพเจเจฃเจพ;
- เจเฉฑเจ IAM เจญเฉเจฎเจฟเจเจพ เจฌเจฃเจพเจเจฃเจพ;
- เจเฉฑเจ เจฒเจพเจเจฌเจกเจพ เจซเฉฐเจเจธเจผเจจ เจฌเจฃเจพเจเจฃเจพ เจเฉ เจเฉฑเจฒเจฆเจพ เจนเฉ acme-dns-route53;
- เจเฉฑเจ CloudWatch เจเจพเจเจฎเจฐ เจฌเจฃเจพเจเจฃเจพ เจเฉ เจเฉฑเจ เจซเฉฐเจเจธเจผเจจ เจจเฉเฉฐ เจฆเจฟเจจ เจตเจฟเฉฑเจ 2 เจตเจพเจฐ เจเจพเจฒเฉ เจเจฐเจฆเจพ เจนเฉ;
เจจเฉเจ: เจธเจผเฉเจฐเฉ เจเจฐเจจ เจคเฉเจ เจชเจนเจฟเจฒเจพเจ เจคเฉเจนเจพเจจเฉเฉฐ เจเฉฐเจธเจเจพเจฒ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉ
เจเฉฑเจ เจเจผเจฟเจช เจซเจพเจเจฒ เจฌเจฃเจพเจเจฃเจพ
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
. เจเจน เจเฉ เจเฉฐเจชเจพเจเจฒเจฐ เจจเฉเฉฐ เจธเจชเฉฑเจธเจผเจ เจเจฐเจฆเฉ เจนเจจ เจเจฟ เจเจธเจจเฉเฉฐ เจฒเฉเจจเจเจธ OS เจ
เจคเฉ amd64 เจเจฐเจเฉเจเฉเจเจเจฐ เจฒเจ เจขเฉเจเจตเฉเจ เจฌเจพเจเจจเจฐเฉ เจฌเจฃเจพเจเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉ - เจเจน เจเจน เจนเฉ เจเฉ 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
. lambda เจจเฉเฉฐ เจนเฉเจ เจฆเจฟเฉฑเจคเฉ เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉเจฐเฉเจเจฌเจฒเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจธเฉฐเจฐเจเจฟเจค เจเฉเจคเจพ เจเจพเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ:
AWS_LAMBDA
- เจเจน เจธเจชเฉฑเจธเจผเจ เจเจฐเจฆเจพ เจนเฉ acme-dns-route53 เจเจน เจเจเจเจผเฉเจเจฟเจเจธเจผเจจ AWS Lambda เจฆเฉ เจ เฉฐเจฆเจฐ เจนเฉเฉฐเจฆเจพ เจนเฉเฅค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 เจจเจฟเจฏเจฎ เจฌเจฃเจพเจ
schedule_expression
. - lambda เจซเฉฐเจเจธเจผเจจ เจฆเฉ ARN เจจเฉเฉฐ เจจเจฟเจธเจผเจเจฟเจค เจเจฐเจเฉ เจเฉฑเจ เจจเจฟเจฏเจฎ เจเฉเจเจพ (เจเฉ เจเฉเจคเจพ เจเจพเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ) เจฌเจฃเจพเจเฅค
- เจฒเจพเจเจฌเจกเจพ เจซเฉฐเจเจธเจผเจจ เจจเฉเฉฐ เจเจพเจฒ เจเจฐเจจ เจฒเจ เจจเจฟเจฏเจฎ เจจเฉเฉฐ เจเจเจพเจเจผเจค เจฆเจฟเจเฅค
เจนเฉเจ เจพเจ เจฎเฉเจ เจเจชเจฃเฉ เจเฉเจฐเจพเจซเจพเจฐเจฎ เจธเฉฐเจฐเจเจจเจพ เจจเฉฑเจฅเฉ เจเฉเจคเฉ เจนเฉ, เจชเจฐ เจ เจธเจฒ เจตเจฟเฉฑเจ เจเจน 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