เดเดธเตเดเดธเตเดเตฝ เดธเตผเดเตเดเดฟเดซเดฟเดเตเดเดฑเตเดฑเตเดเดณเตเดเต เดฎเดพเดจเตเดเตเดฎเตเดจเตเดฑเต เดเดเตเดเตเดฎเตเดฑเตเดฑเต เดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดจเดเดชเดเดฟเดเตพ เดชเตเดธเตเดฑเตเดฑเต เดตเดฟเดตเดฐเดฟเดเตเดเตเดจเตเดจเต
เด เดฒเตเดเดจเด 4 เดตเดฟเดญเดพเดเดเตเดเดณเดพเดฏเดฟ เดคเดฟเดฐเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต:
- เดเดฐเต zip เดซเดฏเตฝ เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจเต;
- เดเดฐเต IAM เดฑเตเตพ เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจเต;
- เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจ เดเดฐเต เดฒเดพเดเดก เดซเดเดเตเดทเตป เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจเต acme-dns-route53;
- เดเดฐเต เดฆเดฟเดตเดธเด 2 เดคเดตเดฃ เดเดฐเต เดซเดเดเตโเดทเตป เดชเตเดฐเดตเตผเดคเตเดคเดจเดเตเดทเดฎเดฎเดพเดเตเดเตเดจเตเดจ เดเดฐเต CloudWatch เดเตเดฎเตผ เดธเตเดทเตโเดเดฟเดเตเดเตเดจเตเดจเต;
เดเตเดฑเดฟเดชเตเดชเต: เดจเดฟเดเตเดเตพ เดเดฐเดเดญเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต เดจเดฟเดเตเดเตพ เดเตปเดธเตเดฑเตเดฑเดพเตพ เดเตเดฏเตเดฏเดฃเด
เดเดฐเต zip เดซเดฏเตฝ เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจเต
acme-dns-route53 GoLang-เตฝ เดเดดเตเดคเดฟเดฏเดคเดพเดฃเต เดเตเดเดพเดคเต 1.9-เตฝ เดคเดพเดดเตเดฏเตเดณเตเดณ เดชเดคเดฟเดชเตเดชเดฟเดจเต เดชเดฟเดจเตเดคเตเดฃเดฏเตเดเตเดเตเดจเตเดจเต.
เดจเดฎเตเดเตเดเต เดเดฐเต เดฌเตเดจเดฑเดฟ เดเดชเดฏเตเดเดฟเดเตเดเต เดเดฐเต zip เดซเดฏเตฝ เดธเตเดทเตเดเดฟเดเตเดเตเดฃเตเดเดคเตเดฃเตเดเต 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-เตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเดคเต.
เดเดเตเดเดณเตเดเต เดชเตเดฐเตเดเตเดฐเดพเด เดเดฐเต zip เดซเดฏเดฒเดฟเตฝ เดตเดฟเดจเตเดฏเดธเดฟเดเตเดเตเดฎเตเดจเตเดจเต AWS เดชเตเดฐเดคเตเดเตเดทเดฟเดเตเดเตเดจเตเดจเต, เด
เดคเดฟเดจเดพเตฝ เดจเดฎเตเดเตเดเต เดธเตเดทเตเดเดฟเดเตเดเดพเด 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
. เดเดคเต เดเดเตเดเดณเตเดเต เดฒเดพเดเดกเดฏเต 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 (เดเดฎเดธเตเตบ เดฑเดฟเดธเตเดดเตเดธเต เดจเดพเดฎเด) - เด เดเตเดคเตเดค เดเดเตเดเดเตเดเดณเดฟเตฝ เดเดเตเดเตพเดเตเดเต เดเดคเต เดเดตเดถเตเดฏเดฎเดพเดฃเต.
เดชเดเตเดเต 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
. เดเดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟ เดตเตเดฐเดฟเดฏเดฌเดฟเดณเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเต เดฒเดพเดเดก เดเตเตบเดซเดฟเดเตผ เดเตเดฏเตเดฏเดฃเด:
AWS_LAMBDA
- เด เดคเต เดตเตเดฏเดเตเดคเดฎเดพเดเตเดเตเดจเตเดจเต acme-dns-route53 AWS เดฒเดพเดเดกเดฏเตเดเตเดเตเดณเตเดณเดฟเดฒเดพเดฃเต เดตเดงเดถเดฟเดเตเดท เดจเดเดเตเดเตเดจเตเดจเดคเต.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 เดเตเดฎเตผ เดธเตเดทเตโเดเดฟเดเตเดเตเดจเตเดจเต
เดเตเดฐเตเตบ เดธเดเตเดเตเดเดฐเดฟเดเตเดเตเด เดเดจเตเดจเดคเดพเดฃเต เด เดตเดธเดพเดจ เดเดเตเดเด, เด เดคเต เดฆเดฟเดตเดธเดคเตเดคเดฟเตฝ เดฐเดฃเตเดเตเดคเดตเดฃ เดเดเตเดเดณเตเดเต เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเต เดตเดฟเดณเดฟเดเตเดเตเดจเตเดจเต:
- เดฎเตเดฒเตเดฏเด เดเดชเดฏเตเดเดฟเดเตเดเต เดเดฐเต CloudWatch เดจเดฟเดฏเดฎเด เดธเตเดทเตเดเดฟเดเตเดเตเด
schedule_expression
. - เดฒเดพเดเดก เดซเดเดเตโเดทเดจเตเดฑเต 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