Пост описује кораке за аутоматизацију управљања ССЛ сертификатима из Користећи и АВС.
је алат који ће нам омогућити да имплементирамо ову функцију. Може да ради са ССЛ сертификатима компаније Лет'с Енцрипт, да их сачува у Амазон Цертифицате Манагер-у, да користи Роуте53 АПИ за имплементацију ДНС-01 изазова и, на крају, да шаље обавештења СНС-у. ИН ацме-днс-роуте53 Ту је и уграђена функционалност за коришћење унутар АВС Ламбда, а то је оно што нам треба.
Овај чланак је подељен у 4 одељка:
- креирање зип датотеке;
- стварање ИАМ улоге;
- креирање ламбда функције која се покреће ацме-днс-роуте53;
- креирање ЦлоудВатцх тајмера који покреће функцију 2 пута дневно;
Beleška: Пре него што почнете, морате да инсталирате и
Креирање зип датотеке
ацме-днс-роуте53 је написан на ГоЛанг-у и подржава верзију не нижу од 1.9.
Морамо да направимо зип датотеку са бинарном датотеком acme-dns-route53 у. Да бисте то урадили, потребно је да инсталирате acme-dns-route53 из ГитХуб спремишта користећи команду go install:
$ env GOOS=linux GOARCH=amd64 go install github.com/begmaroman/acme-dns-route53Бинарна датотека је инсталирана у $GOPATH/bin именик. Имајте на уму да смо током инсталације навели два промењена окружења: GOOS=linux и GOARCH=amd64Они говоре Go компајлеру да креира бинарну датотеку погодну за Linux ОС и amd64 архитектуре су оно што ради у AWS-у.
АВС очекује да наш програм буде распоређен у зип датотеци, па хајде да креирамо acme-dns-route53.zip архива која ће садржати новоинсталирани бинарни фајл:
$ zip -j ~/acme-dns-route53.zip $GOPATH/bin/acme-dns-route53Beleška: Бинарни фајл треба да буде у корену зип архиве. За ово користимо -j застава.
Сада је наш зип надимак спреман за примену, остаје само да креирамо улогу са потребним правима.
Креирање ИАМ улоге
Морамо да поставимо ИАМ улогу са правима која захтева наша ламбда током њеног извршавања.
Назовимо ову политику lambda-acme-dns-route53-executor и одмах јој дати основну улогу AWSLambdaBasicExecutionRole. Ово ће омогућити нашем ламбда покретању и записивању евиденције у АВС ЦлоудВатцх услугу.
Прво, креирамо ЈСОН датотеку која описује наша права. Ово ће у суштини омогућити ламбда сервисима да користе улогу 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.jsonBeleška: запамтите политику АРН (Амазон Ресоурце Наме) - биће нам потребна у наредним корацима.
Улога lambda-acme-dns-route53-executor креиран, сада морамо да наведемо дозволе за то. Најлакши начин да то урадите је да користите команду aws iam attach-role-policy, доношење политике АРН AWSLambdaBasicExecutionRole како слиједи:
$ aws iam attach-role-policy --role-name lambda-acme-dns-route53-executor
--policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRoleBeleška: може се наћи листа са другим смерницама .
Креирање ламбда функције која се покреће ацме-днс-роуте53
Ура! Сада можете да примените нашу функцију на АВС користећи команду aws lambda create-function. Ламбда мора бити конфигурисан коришћењем следећих променљивих окружења:
AWS_LAMBDA- јасно ставља до знања ацме-днс-роуте53 то извршење се дешава унутар АВС Ламбда.DOMAINS— списак домена одвојених зарезима.LETSENCRYPT_EMAIL- садржи .NOTIFICATION_TOPIC— назив теме СНС обавештења (опционо).STAGING- по вредности1користи се сценско окружење.1024МБ - ограничење меморије, може се променити.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",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"
}Прављење ЦлоудВатцх тајмера који покреће функцију 2 пута дневно
Последњи корак је подешавање црон-а, који позива нашу функцију два пута дневно:
- креирајте ЦлоудВатцх правило са вредношћу
schedule_expression. - креирајте циљ правила (шта треба да се изврши) тако што ћете навести АРН ламбда функције.
- дајте дозволу правилу за позивање ламбда функције.
Испод сам приложио своју Терраформ конфигурацију, али у ствари то се ради веома једноставно помоћу АВС конзоле или АВС ЦЛИ.
# 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}"
}Сада сте конфигурисани да аутоматски креирате и ажурирате ССЛ сертификате
Извор: ввв.хабр.цом
