ProHoster > blog > administrasi > Otomatisasi manajemen sertifikat SSL Let's Encrypt menggunakan tantangan DNS-01 dan AWS
Otomatisasi manajemen sertifikat SSL Let's Encrypt menggunakan tantangan DNS-01 dan AWS
Postingan tersebut menjelaskan langkah-langkah untuk mengotomatiskan pengelolaan sertifikat SSL Mari Enkripsi CA menggunakan Tantangan DNS-01 ΠΈ AWS.
acme-dns-route53 adalah alat yang memungkinkan kita mengimplementasikan fitur ini. Ini dapat bekerja dengan sertifikat SSL dari Let's Encrypt, menyimpannya di Amazon Certificate Manager, menggunakan API Route53 untuk mengimplementasikan tantangan DNS-01, dan, terakhir, mengirimkan pemberitahuan ke SNS. DI DALAM acme-dns-route53 Ada juga fungsionalitas bawaan untuk digunakan di dalam AWS Lambda, dan inilah yang kami butuhkan.
Artikel ini dibagi menjadi 4 bagian:
membuat file zip;
membuat peran IAM;
membuat fungsi lambda yang berjalan acme-dns-route53;
membuat pengatur waktu CloudWatch yang memicu fungsi 2 kali sehari;
acme-dns-route53 ditulis dalam GoLang dan mendukung versi tidak lebih rendah dari 1.9.
Kita perlu membuat file zip dengan biner acme-dns-route53 di dalam. Untuk melakukan ini, Anda perlu menginstal acme-dns-route53 dari repositori GitHub menggunakan perintah go install:
$ env GOOS=linux GOARCH=amd64 go install github.com/begmaroman/acme-dns-route53
Biner dipasang di $GOPATH/bin direktori. Harap dicatat bahwa selama instalasi kami menentukan dua lingkungan yang diubah: GOOS=linux ΠΈ GOARCH=amd64. Mereka menjelaskan kepada kompiler Go bahwa ia perlu membuat biner yang cocok untuk OS Linux dan arsitektur amd64 - inilah yang berjalan di AWS.
AWS mengharapkan program kita diterapkan dalam file zip, jadi mari kita buat acme-dns-route53.zip arsip yang akan berisi biner yang baru diinstal:
$ zip -j ~/acme-dns-route53.zip $GOPATH/bin/acme-dns-route53
Catatan: Binernya harus berada di root arsip zip. Untuk ini kami menggunakan -j bendera.
Sekarang nama panggilan zip kami siap untuk diterapkan, yang tersisa hanyalah membuat peran dengan hak yang diperlukan.
Membuat peran IAM
Kita perlu menyiapkan peran IAM dengan hak yang dibutuhkan oleh lambda kita selama eksekusinya.
Sebut saja kebijakan ini lambda-acme-dns-route53-executor dan segera memberinya peran dasar AWSLambdaBasicExecutionRole. Ini akan memungkinkan lambda kami menjalankan dan menulis log ke layanan AWS CloudWatch.
Pertama, kami membuat file JSON yang menjelaskan hak kami. Ini pada dasarnya akan memungkinkan layanan lambda untuk menggunakan peran tersebut lambda-acme-dns-route53-executor:
Sekarang mari kita jalankan perintahnya aws iam create-role untuk membuat peran:
$ aws iam create-role --role-name lambda-acme-dns-route53-executor
--assume-role-policy-document ~/lambda-acme-dns-route53-executor-policy.json
Catatan: ingat kebijakan ARN (Amazon Resource Name) - kita akan membutuhkannya di langkah selanjutnya.
Peran lambda-acme-dns-route53-executor dibuat, sekarang kita perlu menentukan izin untuk itu. Cara termudah untuk melakukannya adalah dengan menggunakan perintah aws iam attach-role-policy, melewati kebijakan ARN AWSLambdaBasicExecutionRole sebagai berikut:
$ aws iam attach-role-policy --role-name lambda-acme-dns-route53-executor
--policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
Catatan: daftar dengan kebijakan lain dapat ditemukan di sini.
Membuat fungsi lambda yang berjalan acme-dns-route53
Hore! Sekarang Anda dapat men-deploy fungsi kami ke AWS menggunakan perintah aws lambda create-function. Lambda harus dikonfigurasi menggunakan variabel lingkungan berikut:
AWS_LAMBDA - memperjelasnya acme-dns-route53 eksekusi itu terjadi di dalam AWS Lambda.
DOMAINS β daftar domain yang dipisahkan dengan koma.
Membuat pengatur waktu CloudWatch yang memicu fungsi 2 kali sehari
Langkah terakhir adalah menyiapkan cron, yang memanggil fungsi kita dua kali sehari:
buat aturan CloudWatch dengan nilainya schedule_expression.
buat target aturan (apa yang harus dieksekusi) dengan menentukan ARN fungsi lambda.
memberikan izin pada aturan untuk memanggil fungsi lambda.
Di bawah ini saya telah melampirkan konfigurasi Terraform saya, tetapi sebenarnya ini dilakukan dengan sangat sederhana menggunakan konsol AWS atau 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}"
}
Sekarang Anda dikonfigurasi untuk membuat dan memperbarui sertifikat SSL secara otomatis