Heutzutage ist es schwierig, sich Systeme mit öffentlichen API-Endpunkten ohne TLS-Zertifikatschutz vorzustellen. Es gibt mehrere Möglichkeiten, Zertifikate auszustellen: Kostenpflichtige Wildcard-Zertifikate, die bei jedem großen TLS-Anbieter erworben werden können Kostenpflichtige Stammzertifikate, die alle nachgelagerten Zertifikate signieren, die von PKI-Systemen des Unternehmens ausgestellt werden Kostenlose Zertifikate, ausgestellt von TLS-Anbietern wie LetsEncrypt oder AWS Certificate Manager Selbstsignierte Zertifikate, ausgestellt von oder einem anderen Tool OpenSSL Im Rahmen dieses Beitrags werde ich hauptsächlich kostenlose Zertifikate besprechen, die innerhalb von AWS verwendet werden können, aber nicht nur von AWS-Diensten. Es ist klar, dass die Verwendung von etwas anderem als keinen Sinn macht, wenn Sie ausschließlich verwaltete AWS-Dienste verwenden und keine strengen Sicherheitsanforderungen haben. AWS Certificate Manager bietet eine sehr bequeme und schnelle Methode zum Ausstellen von Zertifikaten über DNS- oder HTTP-Herausforderungen. Sie unterliegen jedoch grundlegenden AWS-Einschränkungen, wenn Sie diese Zertifikate außerhalb von AWS-Diensten (API Gateway, ALB, NLB usw.) verwenden müssen, z. B. bei einer EC2-Instanz mit Nginx, die eine physische Zertifikatsdatei benötigt. Darüber hinaus zeigt AWS Certificate Manager den Zertifikatsinhalt nicht an, selbst wenn Sie ihn anfordern. AWS Certificate Manager An dieser Stelle ist es an der Zeit, Sie an zu erinnern, ein Tool, das häufiger verwendet wird als Certificate Manager – zumindest, weil es nicht von der Cloud abhängig ist. Leider sind in AWS keine integrierten LetsEncrypt-Techniken zur Zertifikatsausstellung verfügbar. Es ist möglich, das Certbot-Tool für Ihre EC2- oder ECS-Dienste zu verwenden, aber in diesem Szenario müssen Sie überlegen, wie Sie den Erneuerungsprozess konfigurieren. Ich möchte auch nicht verschiedene Strategien kombinieren, da ich denke, dass es besser ist, für alles ein einziges Verfahren zu haben, da dies die gesamte Systemkomplexität reduziert. LetsEncrypt Unter Berücksichtigung dieser Tatsache habe ich eine Lambda-Funktion erstellt, die LetsEncrypt-Zertifikate automatisch ausstellt und erneuert, ohne dass eine komplexe Konfiguration erforderlich ist. Das Zertifikat kann nach der ersten Zertifikatsausstellung zusammen mit AWS Certificate Manager-Zertifikaten in jedem AWS-Dienst mit ARN verwendet werden. Darüber hinaus können Sie eine physische Zertifikatsversion verwenden, die im an einem beliebigen Ort aufbewahrt wird, sei es eine EC2-Instanz mit Nginx oder ein anderer Ort. AWS Secrets Manager Wie funktioniert AWS LetsEncrypt Lambda In diesem Artikel gehe ich davon aus, dass Ihre DNS-Zone von AWS Route53 verwaltet wird. Die in diesem Artikel beschriebene Lambda-Funktion ist in Go v1.22 geschrieben. Alle Ergebnisressourcen wie DNS-Einträge, Geheimnisse oder Zertifikate werden von der Amazon IAM-Rolle gesteuert, die standardmäßig über Terraform-Code erstellt wird. Die Abfolge der Lambda-Aktionen ist wie folgt: Rufen Sie ein Ereignis ab, das eine Zertifikatsliste enthält. Normalerweise kann dieses Ereignis das Ergebnis einer manuellen Ausführung oder einer Ausführung per Cron sein, die über erfolgt. Ereignisbeispiel: aws_cloudwatch_event_target { "domainName": "hackernoon.referrs.me", "acmeUrl": "prod", "acmeEmail": "alexander.sharov@cloudexpress.app", "reImportThreshold": 10, "issueType": "default", "storeCertInSecretsManager" : true } Überprüfen Sie, ob das Zertifikat im AWS Certificate Manager vorhanden ist. Wenn ja, bestätigen Sie das Ablaufdatum. Starten Sie die LetsEncrypt Challenge, wenn die Anzahl der Tage bis zum Ablaufdatum kleiner ist als der . In diesem Schritt erstellt Lambda einen Eintrag, der den Domänennamen mit der AWS Route53-Zone abgleicht, und wartet, bis Ihr Zertifikat bereit ist. DNS-01 reImportThreshold TXT Lambda aktualisiert das Zertifikat im AWS Certificate Manager, wenn es fertig ist. Lambda speichert Zertifikatsdateien im AWS Secrets Manager, wenn wahr ist. storeCertInSecretsManager Details zur Lambda-Implementierung Der Code Das Lambda ist auf Go 1.22 geschrieben. Die Verwendung von so wenig Bibliotheken wie möglich hat mir geholfen, mein Ziel zu erreichen, den Code trocken zu halten. Die vollständige Liste der erforderlichen Go-Bibliotheken: URL Beschreibung github.com/aws/aws-lambda-go Bibliotheken, Beispiele und Tools, die Go-Entwicklern bei der Entwicklung von AWS-Lambda-Funktionen helfen. github.com/aws/aws-sdk-go-v2 AWS SDK für die Programmiersprache Go. github.com/go-acme/lego LetsEncrypt/ACME-Client und -Bibliothek. github.com/guregu/null Sinnvoller Umgang mit Nullwerten. github.com/sirupsen/logrus Strukturiertes, steckbares Protokollieren für Go. Docker-Image Ich habe als grundlegendes Docker-Image verwendet. Für Go-Anwendungen, die keine libc benötigen, ist dieses Image perfekt. Es ist nicht komplett und enthält Folgendes: gcr.io/distroless/static:nonroot scratch CA-Zertifikate: Sie müssen sie nicht aus anderen Phasen kopieren. /etc/passwd: enthält Benutzer und Gruppen wie Nonroot. /tmp-Ordner. tzdata: falls Sie eine andere Zeitzone als UTC einstellen möchten. Build-Prozess Bei großen Softwareprojekten kann die Überwachung des Build-Prozesses zu einer mühsamen und zeitraubenden Aufgabe werden. Makefiles können dabei helfen, diesen Prozess zu automatisieren und zu rationalisieren und so sicherzustellen, dass Ihr Projekt effizient und konsistent erstellt wird. Aus diesem Grund verwende ich für alle meine Golang-Projekte am liebsten Makefile. Die Datei ist einfach: ##@ General help: ## Display this help. @awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m<target>\033[0m\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST) fmt: ## Run go fmt against code. go fmt ./... vet: ## Run go vet against code. go vet ./... ##@ Build build: fmt vet ## Build service binary. go build -o bin/lambda main.go run: vet ## Run service from your laptop. go run ./main.go ##@ Test lint: ## Run Go linter golangci-lint run ./... test: ## Run Go tests go test ./... Auf der CICD-Seite habe ich das typische Setup für Go-Anwendungen verwendet als kontinuierliche Integration. GitHub Actions als Docker-Registry. Im Vergleich zu DockerHub bietet dieses zwei wichtige Funktionen, die es zu meiner bevorzugten Verwendung machen: ghcr.io Dank der nahtlosen Integration von GHCR mit GitHub Actions können die Build-, Test- und Bereitstellungsworkflows direkt aus dem GitHub-Repository einfacher automatisiert werden. Dies kann die Produktivität steigern und den Entwicklungsprozess vereinfachen. GHCR nutzt das Berechtigungsmodell von GitHub und ermöglicht es Benutzern, den Zugriff auf Container-Images mit denselben Teams und Berechtigungen zu verwalten, die sie für ihre Code-Repositories verwenden. Dies vereinfacht die Benutzerverwaltung und erhöht die Sicherheit. : mein GitHub Actions-Plugin für automatische Versionierung. Es ist eine GitHub-Aktion, die -kompatible Tags für Repository-Commits generiert. Die Aktion kann Versionen verwalten, GitHub-Releases generieren und Release-Zweige innerhalb des Repositorys steuern. Sie funktioniert wunderbar mit Einzel- und Monorepos. kvendingoldo/semver-action SemVer Automatische Änderungsprotokollgenerierung. Ich mag Änderungsprotokolle! Im Zusammenhang mit anderen OpenSource-Projekten, die ich betreue (z. B. , usw.), hat mein Team erkannt, wie wichtig es ist, Benutzer über Änderungen zu informieren. https://github.com/tofuutils/tenv https://github.com/tofuutils/tofuenv . Meiner Meinung nach sollte der gesamte Code von einem statischen Codeanalysator überprüft werden. SonarQube kann nicht für alle Projekte eingerichtet werden, jedoch ist golangci meiner Meinung nach für kleine bis mittlere Go-Projekte ausreichend. golangci-lint Zusätzlich zur Codeprüfung empfiehlt es sich, die Grammatik zu prüfen, insbesondere wenn Sie über eine umfangreiche Dokumentation verfügen. . codespell.yml So stellen Sie Lambda über Terraform/OpenTofu in AWS bereit Der auf dieser Seite besprochene Code ist für Terraform und OpenTofu derselbe, aber ab Terraform v1.6 hat Hashicorp die Terraform-Lizenz auf Business Source License (BSL) v1.1 geändert. Wenn Sie auf der Grundlage von Terraform etwas Kommerzielles entwickeln, wechseln Sie so schnell wie möglich zu OpenTofu. Wenn Sie mehrere Versionen von OpenTofu oder Terraform verwalten müssen, verwenden Sie die - OpenTofu-, Terraform-, Terragrunt- und Atmos-Versionsmanager, geschrieben in Go. tenv Weitere Terraform-/OpenTofu-Beispiele finden Sie im Ordner „Beispiele“ im . Git-Repository Um mit AWS LetsEncrypt Lambda über OpenTofu zu arbeiten, müssen Sie die folgenden Schritte ausführen: Fügen Sie Ihrem OpenTofu-/Terraform-Code ein Modul hinzu module "letsencrypt_lambda" { source = "git@github.com:kvendingoldo/aws-letsencrypt-lambda.git//files/terraform/module?ref=0.31.4" blank_name = "kvendingoldo-letsencrypt-lambda" tags = var.tags cron_schedule = var.letsencrypt_lambda_cron_schedule events = var.letsencrypt_lambda_events ecr_proxy_username = var.ecr_proxy_username ecr_proxy_access_token = var.ecr_proxy_access_token } Angeben von Variablen variable "tags" { default = { hackernoon : "demo" } } variable "ecr_proxy_username" { default = "kvendingoldo" } variable "ecr_proxy_access_token" { default = "ghp_xxx" } variable "letsencrypt_lambda_cron_schedule" { default = "rate(168 hours)" } variable "letsencrypt_lambda_events" { default = [ { "acmRegion" : "us-east-1", "route53Region" : "us-east-1", "domainName" : "hackernoon.referrs.me", "acmeUrl" : "stage", "acmeEmail" : "alexander.sharov@cloudexpress.app", "reImportThreshold" : 100, "issueType" : "default", "storeCertInSecretsManager" : false } ] } Achten Sie auf die Variablen und . Standardmäßig kann AWS Lambda keine Bilder aus anderen Quellen als AWS ECR abrufen. Glücklicherweise hat das AWS-Team einen ECR-Proxy-Cache erstellt, der Bilder aus öffentlich verfügbaren Registern wie DockerHub oder GHCR abrufen und in ECR speichern kann. Trotz dieser Möglichkeit erlaubt AWS nicht, Bilder ohne Token abzurufen, auch nicht aus offenen öffentlichen Repositories. Daher müssen Sie ein persönliches GitHub-Token erwerben, um Zugriff auf vorgefertigte Docker-Bilder zu erhalten. Alternativ können Sie mein GitHub-Repository abrufen, das Bild lokal erstellen und es dann in Ihr bereits vorhandenes ECR-Repository hochladen. In diesem Szenario kann das Beispiel wie folgt geändert werden: ecr_proxy_username ecr_proxy_access_token module "letsencrypt_lambda" { source = "../../" blank_name = "kvendingoldo-letsencrypt-lambda" tags = var.tags cron_schedule = var.letsencrypt_lambda_cron_schedule events = var.letsencrypt_lambda_events ecr_proxy_enabled = false ecr_image_uri = "<YOUR_ACCOUNT_ID>.dkr.ecr.us-east-2.amazonaws.com/aws_letsencrypt_lambda:<VERSION>" } Wenn Sie mit der Codeänderung fertig sind, führen Sie den folgenden Befehl aus, um OpenTofu mit dem OpenTofu-Versionsumschalter zu installieren: tenv $ tenv tofu install Führen Sie abschließend die folgenden Befehle aus, um den erstellten Code anzuwenden: $ tofu init $ tofu plan $ tofu apply Warten Sie, bis der Code in AWS bereitgestellt und Ereignisse ausgelöst werden. Nach einigen Minuten werden im Zertifikatsmanager fertige Zertifikate angezeigt. Beispiel: Ab sofort kann AWS das ausgestellte Zertifikat für alle Dienste per ARN verwenden. Wenn Sie das Zertifikat außerhalb von AWS-Diensten verwenden müssen oder Zugriff auf dessen Inhalt haben möchten, setzen Sie die Ereignisoption auf . In diesem Fall wird das Zertifikat in AWS Secrets Manager gespeichert, wenn Lambda die grundlegende Ausführung abgeschlossen hat. Dies bietet Benutzern mehr Flexibilität: Sie können den Inhalt des Zertifikats prüfen, direkt von EC2 aus damit arbeiten usw. Weitere Informationen zu AWS Secrets Manager finden Sie im offiziellen Handbuch. storeCertInSecretsManager true Umgebungsvariablen Name Beschreibung Mögliche Werte Standardwert Beispiel Erforderlich FORMATTER_TYPE Formatierungstyp für Protokolle TEXT TEXT JSON ❌ MODE Anwendungsmodus. Stellen Sie Modus für die AWS-Ausführung und Modus für lokale Tests ein. cloud local Wolke | lokal Wolke Wolke ✅ LOG_LEVEL Protokollierungsebene Panik|Schwerwiegend|Fehler|Warnung|Info|Debug|Trace warnen warnen ❌ AWS_REGION Standard-AWS-Region. Nach der Bereitstellung in AWS werden die Einstellungen automatisch vorgenommen. <jede gültige AWS-Region> - USA-Ost-1 ✅ DOMAIN_NAME Domänenname, für den das Zertifikat ausgestellt oder erneuert wird jeder gültige Domänenname - hackernoon. verweist.me ✅ ACME_URL Die Produktions-LetsEncrypt-URL wird genutzt, wenn sie auf gesetzt ist. Andernfalls wird die Stage-URL verwendet. prod Produktion | Bühne Produkt Produkt ✅ ACME_EMAIL Mit dem LetsEncrypt-Zertifikat verknüpfte E-Mail-Adresse jede gültige E-Mail alexander.sharov@cloudexpress.app alexander.sharov@cloudexpress.app ✅ REIMPORT_THRESHOLD Das Zertifikat wird erneuert, wenn seine Gültigkeitsdauer (TTL) entspricht. REIMPORT_THRESHOLD jede Ganzzahl > 0 10 10 ✅ STORE_CERT_IN_SECRETSMANAGER Wenn , speichert Lambda das Zertifikat sowohl im Certificate Manager als auch im Secrets Manager. true „wahr“ | „falsch“ "FALSCH" "FALSCH" ❌ So überprüfen Sie LetsEncrypt Lambda-Protokolle Im Rahmen der Arbeit mit möchten Sie möglicherweise gelegentlich die Protokolle überprüfen. Dies ist ganz einfach: aws-letsencrypt-lambda Gehen Sie zu AWS Cloudwatch und klicken Sie auf „Log groups“ Suchen Sie nach der Protokollgruppe mit dem Namen, den Sie im OpenTofu-Code angegeben haben. In meinem Fall ist es beispielsweise /aws/lambda/kvendingoldo-letsencrypt-lambda Gehen Sie zur Gruppe, wählen Sie den gewünschten Stream aus der Liste aus und überprüfen Sie die Protokolle. So lösen Sie Lambda manuell über die AWS-Benutzeroberfläche aus Gehen Sie zur Lambda-Funktion, die über OpenTofu erstellt wurde. Klicken Sie auf die Schaltfläche „Tests“. Füllen Sie aus und klicken Sie auf “. Test Event Test { "domainName": "<YOUR_VALID_DOMAIN>", "acmeUrl": <stage | prod>, "acmeEmail": "<ANY_VALID_EMAIL>", "reImportThreshold": 10, "issueType": "<default | force>", "storeCertInSecretsManager" : <true | false> } Beispiel 1: { "domainName": "hackernoon.referrs.me", "acmeUrl": "prod", "acmeEmail": "alexander.sharov@cloudexpress.app", "reImportThreshold": 10, "issueType": "default" } Warten Sie, bis die Ausführung abgeschlossen ist. Das Ausführungsprotokoll ist in Cloudwatch verfügbar. Normalerweise dauert das erste Problem etwa 5 Minuten. So testen Sie Lambda lokal Klonen Sie das Repository auf Ihren Laptop https://github.com/kvendingoldo/aws-letsencrypt-lambda Konfigurieren Sie AWS CLI-Anmeldeinformationen über den . offiziellen Leitfaden Untersuchen Sie den Abschnitt mit den Umgebungsvariablen und legen Sie die erforderliche Mindestanzahl an Variablen fest. Da LetsEncrypt die Anzahl der Wiederholungsversuche pro Stunde für begrenzt, empfehle ich die Verwendung von zum Testen. Beispiel für Umgebungsvariablen: ACME_URL="prod" ACME_URL="stage" export AWS_REGION="us-east-2" export MODE=local export DOMAIN_NAME="hackernoon.referrs.me" export ACME_URL="stage" export ACME_EMAIL="alexander.sharov@cloudexpress.app" export REIMPORT_THRESHOLD=10 export ISSUE_TYPE="default" export STORE_CERT_IN_SECRETSMANAGER="true" Führen Sie das Lambda lokal mit dem folgenden Befehl aus: go run main.go Nach der erfolgreichen Ausführung von Lambda wird das folgende Protokoll angezeigt. INFO[0000] Starting lambda execution ... INFO[0000] Lambda will use STAGING ACME URL; If you need to use PROD URL specify it via 'ACME_URL' or pass in event body INFO[0000] Certificate found, arn is arn:aws:acm:us-east-2:004867756392:certificate/72f872fd-e577-43f4-ae38-6833962630af. Trying to renew ... INFO[0000] Checking certificate for domain 'hackernoon.referrs.me' with arn 'arn:aws:acm:us-east-2:004867756392:certificate/72f872fd-e577-43f4-ae38-6833962630af' INFO[0000] Certificate status is 'ISSUED' INFO[0000] Certificate in use by [] INFO[0000] Certificate valid until 2024-08-31 13:50:49 +0000 UTC (89 days left) INFO[0000] Try to get certificate for hackernoon.referrs.me domain 2024/06/02 17:56:23 [INFO] acme: Registering account for alex.sharov@referrs.me 2024/06/02 17:56:24 [INFO] [hackernoon.referrs.me, www.hackernoon.referrs.me] acme: Obtaining bundled SAN certificate 2024/06/02 17:56:25 [INFO] [hackernoon.referrs.me] AuthURL: https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/12603809394 2024/06/02 17:56:25 [INFO] [www.hackernoon.referrs.me] AuthURL: https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/12603809404 2024/06/02 17:56:25 [INFO] [hackernoon.referrs.me] acme: Could not find solver for: tls-alpn-01 2024/06/02 17:56:25 [INFO] [hackernoon.referrs.me] acme: Could not find solver for: http-01 2024/06/02 17:56:25 [INFO] [hackernoon.referrs.me] acme: use dns-01 solver 2024/06/02 17:56:25 [INFO] [www.hackernoon.referrs.me] acme: Could not find solver for: tls-alpn-01 2024/06/02 17:56:25 [INFO] [www.hackernoon.referrs.me] acme: Could not find solver for: http-01 2024/06/02 17:56:25 [INFO] [www.hackernoon.referrs.me] acme: use dns-01 solver 2024/06/02 17:56:25 [INFO] [hackernoon.referrs.me] acme: Preparing to solve DNS-01 2024/06/02 17:56:26 [INFO] Wait for route53 [timeout: 5m0s, interval: 4s] 2024/06/02 17:57:00 [INFO] [www.hackernoon.referrs.me] acme: Preparing to solve DNS-01 2024/06/02 17:57:00 [INFO] Wait for route53 [timeout: 5m0s, interval: 4s] 2024/06/02 17:57:30 [INFO] [hackernoon.referrs.me] acme: Trying to solve DNS-01 2024/06/02 17:57:30 [INFO] [hackernoon.referrs.me] acme: Checking DNS record propagation. [nameservers=109.122.99.130:53,109.122.99.129:53] 2024/06/02 17:57:34 [INFO] Wait for propagation [timeout: 5m0s, interval: 4s] 2024/06/02 17:57:46 [INFO] [hackernoon.referrs.me] The server validated our request 2024/06/02 17:57:46 [INFO] [www.hackernoon.referrs.me] acme: Trying to solve DNS-01 2024/06/02 17:57:46 [INFO] [www.hackernoon.referrs.me] acme: Checking DNS record propagation. [nameservers=109.122.99.130:53,109.122.99.129:53] 2024/06/02 17:57:50 [INFO] Wait for propagation [timeout: 5m0s, interval: 4s] 2024/06/02 17:58:30 [INFO] [www.hackernoon.referrs.me] The server validated our request 2024/06/02 17:58:30 [INFO] [hackernoon.referrs.me] acme: Cleaning DNS-01 challenge 2024/06/02 17:58:30 [INFO] Wait for route53 [timeout: 5m0s, interval: 4s] 2024/06/02 17:59:09 [INFO] [www.hackernoon.referrs.me] acme: Cleaning DNS-01 challenge 2024/06/02 17:59:09 [INFO] Wait for route53 [timeout: 5m0s, interval: 4s] 2024/06/02 17:59:43 [INFO] [hackernoon.referrs.me, www.hackernoon.referrs.me] acme: Validations succeeded; requesting certificates 2024/06/02 17:59:43 [INFO] Wait for certificate [timeout: 30s, interval: 500ms] 2024/06/02 17:59:45 [INFO] [hackernoon.referrs.me] Server responded with a certificate. INFO[0203] Certificate has been successfully imported. Arn is arn:aws:acm:us-east-2:004867756392:certificate/72f872fd-e577-43f4-ae38-6833962630af INFO[0204] Secret updated successfully. SecretId: arn:aws:secretsmanager:us-east-2:004867756392:secret:hackernoon.referrs.me-NioT77 INFO[0204] Lambda has been completed Das ist alles. Ab sofort kann AWS das ausgestellte Zertifikat bei allen Diensten per ARN oder an anderen Standorten verwenden, wo es physisch erforderlich ist, indem es es vom AWS Secrets Manager erhält. Praktische Erfahrung im Einsatz über mehr als 4 Jahre bei AWS Ich verwende die Lambda-Funktion seit fast vier Jahren in der Produktion. Im Laufe der Jahre haben sich verschiedene Aspekte der ursprünglichen Implementierung geändert: Bisher verbot AWS die Verwendung von Nicht-ECR-Registern als Lambda-Quellen. Daran hat sich nichts geändert, allerdings hat AWS einen ECR-Proxy für GitHub, DockerHub und einige weitere Register hinzugefügt. Ohne diese Funktion mussten wir Lambda-Images manuell in unser persönliches ECR übertragen und die URL zum Image im Terraform-Code ersetzen. Jetzt erledigt der OpenTofu-Code dies automatisch über den ECR-Proxy. Am Anfang habe ich überlegt, verschiedene Herausforderungen wie oder einzuführen, aber vier Jahre lang hat mich niemand danach gefragt. , und wenn diese Funktion benötigt wird, können wir zusammenarbeiten, um sie zu erstellen. http-01 tls-alpn-01 Es ist immer noch bei GitHub Issues vorhanden Als das Projekt ursprünglich begann, wollte ich bei reinen EC2-Instanzen keine LetsEncrypt-Zertifikate verwenden, aber heutzutage ist das Standardpraxis. Wie ich bereits sagte, kann in bestimmten Situationen ein Zertifikat mithilfe der AWS-Befehlszeile von AWS Secrets Managed abgerufen werden. Ich habe im Laufe der Jahre viel neuen Go-Code geschrieben, daher kann ich sagen, dass der ursprüngliche Lambda-Code in meinem Repository nicht so ausgefallen ist, wie er sein könnte. Es gibt einen erheblichen Unterschied zwischen ihm und meinem neuesten Go-Projekt, (OpenTofu, Terraform, Terragrunt und Atmos Version Manager, geschrieben in Go), aber in jedem Fall wird der Code im Allgemeinen immer noch unterstützt, sodass Änderungen daran nicht allzu problematisch sein werden. Gelegentlich nehme ich erhebliche Refactorings vor, um den Code eleganter zu gestalten. tenv Das gleiche Lambda wird seit Jahren in verschiedenen Projekten verwendet. Darüber hinaus bin ich Mitbegründer der DevOps-Plattform , wo unser Team TLS-Zertifikate für alle unsere Kunden verwaltet und dabei das verwendet, um die Automatisierungsprozesse zu vereinfachen. cloudexpress.app AWS LetsEncrypt Lambda Kommen wir nun zu den Zahlen. Über einen Zeitraum von hat dieses Projekt vielen Menschen geholfen und wurde in zahlreichen OpenSource- und eingesetzt. Lambda stellt mehr als Zertifikate aus und möchte dabei nicht stehen bleiben. 4 Jahren über 30 kommerziellen Projekten 2000 Abschluss ist für Sie eine geeignete Lösung, wenn AWS LetsEncrypt Lambda Sie müssen über eine physische Version des Zertifikats verfügen und es von nicht-AWS-nativen Diensten wie EC2 Nginx verwenden. Sie möchten sich bei der Verwaltung des Ausstellungs- und Erneuerungsprozesses von TLS-Zertifikaten (Überprüfen von Protokollen, Festlegen von Erneuerungsdaten usw.) nicht auf AWS Certificate Manager verlassen. Sie möchten E-Mail-Benachrichtigungen von LetsEncrypt erhalten, wenn Ihr Zertifikat abläuft oder bald abläuft. Sie möchten die Lösung personalisieren, indem Sie den Golang-Code ändern (z. B. durch Ändern der LetsEncrypt-Challenge, Speichern des Zertifikats in Hashicorp Vault usw.). Wenn Sie festgestellt haben, dass mindestens einer dieser Punkte auf Ihre Situation zutrifft, können Sie gerne AWS Lambda verwenden. Wenn Sie an der Entwicklung teilnehmen möchten, bin ich bei GitHub immer offen für neue Probleme und Pull Requests. Projekt-URL: . https://github.com/kvendingoldo/aws-letsencrypt-lambda