Постто SSL сертификаттарын башкарууну автоматташтыруу кадамдары сүрөттөлөт колдонуу и AWS.
бул функцияны ишке ашырууга мүмкүндүк берүүчү курал болуп саналат. Ал Let's Encrypt'тен SSL сертификаттары менен иштей алат, аларды Amazon Certificate Manager'де сактай алат, DNS-53 чакырыгын ишке ашыруу үчүн Route01 API колдоно алат жана акырында SNS'ге эскертмелерди түртөт. IN acme-dns-route53 AWS Lambda ичинде колдонуу үчүн орнотулган функция дагы бар жана бул бизге керек.
Бул макала 4 бөлүккө бөлүнөт:
- zip файлын түзүү;
- IAM ролун түзүү;
- иштеген ламбда функциясын түзүү acme-dns-route53;
- CloudWatch таймерди түзүү, ал функцияны күнүнө 2 жолу иштетет;
Эскертүү: Баштоодон мурун орнотуу керек и
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Алар Go компиляторуна ылайыктуу бинардык файл түзүүнү айтышат. Linux AWSте OS жана amd64 архитектуралары иштейт.
AWS биздин программа zip файлында жайгаштырылышын күтөт, андыктан түзөлү acme-dns-route53.zip жаңы орнотулган экиликти камтыган архив:
$ zip -j ~/acme-dns-route53.zip $GOPATH/bin/acme-dns-route53Эскертүү: Бинарлык zip архивинин тамырында болушу керек. Бул үчүн биз колдонобуз -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 (Amazon Ресурс аты) - биз кийинки кадамдарда керек болот.
ролу 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 Lambda ичинде ишке ашат.DOMAINS— үтүр менен бөлүнгөн домендердин тизмеси.LETSENCRYPT_EMAIL- камтыйт .NOTIFICATION_TOPIC— SNS кабарлоо темасынын аталышы (милдеттүү эмес).STAGING- наркы боюнча1сахналаштыруу чөйрөсү колдонулат.1024MB - эс чеги, өзгөртүүгө болот.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 жолу иштеткен CloudWatch таймерин түзүү
Акыркы кадам - бул биздин функцияны күнүнө эки жолу чакырган cron орнотуу:
- мааниси менен CloudWatch эрежесин түзүңүз
schedule_expression. - lambda функциясынын ARNин көрсөтүү менен эреженин максаттуулугун түзүңүз (эмне аткарылышы керек).
- лямбда функциясын чакырууга эрежеге уруксат бериңиз.
Төмөндө мен Terraform конфигурациямды тиркеп койдум, бирок чындыгында бул 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 сертификаттарын автоматтык түрдө түзүү жана жаңыртуу үчүн конфигурациялангансыз
Source: www.habr.com
