තැපැල් මගින් SSL සහතික කළමනාකරණය ස්වයංක්රීය කිරීමට පියවර විස්තර කරයි
මෙම ලිපිය කොටස් 4 කට බෙදා ඇත:
- zip ගොනුවක් නිර්මාණය කිරීම;
- IAM භූමිකාවක් නිර්මාණය කිරීම;
- ධාවනය වන lambda ශ්රිතයක් නිර්මාණය කිරීම acme-dns-route53;
- දිනකට 2 වතාවක් ශ්රිතයක් ක්රියාත්මක කරන CloudWatch ටයිමරයක් නිර්මාණය කිරීම;
සටහන: ඔබ ආරම්භ කිරීමට පෙර, ඔබ ස්ථාපනය කළ යුතුය
zip ගොනුවක් නිර්මාණය කිරීම
acme-dns-route53 GoLang වලින් ලියා ඇති අතර 1.9 ට නොඅඩු අනුවාදයට සහය දක්වයි.
අපි බයිනරි එකකින් zip file එකක් හදන්න ඕන 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 මත ක්රියාත්මක වේ.
AWS අපගේ වැඩසටහන zip ගොනුවක යෙදවීමට අපේක්ෂා කරයි, එබැවින් අපි නිර්මාණය කරමු 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
. මෙය අපගේ lambda හට AWS CloudWatch සේවාව වෙත ලොග් ධාවනය කිරීමට සහ ලිවීමට ඉඩ සලසයි.
පළමුව, අපි අපගේ අයිතිවාසිකම් විස්තර කරන JSON ගොනුවක් සාදන්නෙමු. මෙය අත්යවශ්යයෙන්ම lambda සේවාවන්ට භූමිකාව භාවිතා කිරීමට ඉඩ සලසයි 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/*"
]
}
]
}
දැන් අපි command එක run කරමු 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
සටහන: වෙනත් ප්රතිපත්ති සහිත ලැයිස්තුවක් සොයා ගත හැක
ක්රියාත්මක වන lambda ශ්රිතයක් නිර්මාණය කිරීම acme-dns-route53
හුරේ! දැන් ඔබට විධානය භාවිතයෙන් AWS වෙත අපගේ කාර්යය යෙදවිය හැක aws lambda create-function
. පහත පරිසර විචල්යයන් භාවිතයෙන් lambda වින්යාස කළ යුතුය:
AWS_LAMBDA
- පැහැදිලි කරයි acme-dns-route53 ක්රියාත්මක කිරීම AWS Lambda තුළ සිදු වේ.DOMAINS
- කොමා වලින් වෙන් කරන ලද වසම් ලැයිස්තුවක්.LETSENCRYPT_EMAIL
- අඩංගු වේඅපි Email Encrypt කරමු .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
. - lambda ශ්රිතයේ ARN සඳහන් කිරීමෙන් රීති ඉලක්කයක් (ක්රියාත්මක කළ යුතු දේ) සාදන්න.
- lambda ශ්රිතය ඇමතීමට රීතියට අවසර දෙන්න.
පහතින් මම මගේ 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 සහතික සෑදීමට සහ යාවත්කාලීන කිරීමට වින්යාස කර ඇත
මූලාශ්රය: www.habr.com