इन दिनों, ऐसे सिस्टम की कल्पना करना चुनौतीपूर्ण है जिनमें TLS प्रमाणपत्र सुरक्षा के बिना सार्वजनिक API एंडपॉइंट हों। प्रमाणपत्र जारी करने के कई तरीके हैं: सशुल्क वाइल्डकार्ड प्रमाणपत्र जिन्हें किसी भी बड़े TLS प्रदाता से खरीदा जा सकता है सशुल्क रूट प्रमाणपत्र जो कॉर्पोरेट पीकेआई सिस्टम द्वारा जारी किए गए सभी डाउनस्ट्रीम प्रमाणपत्रों पर हस्ताक्षर करते हैं LetsEncrypt या AWS Certificate Manager जैसे TLS प्रदाताओं द्वारा जारी किए गए निःशुल्क प्रमाणपत्र या किसी अन्य टूल द्वारा जारी किए गए स्व-हस्ताक्षरित प्रमाणपत्र OpenSSL इस पोस्ट के संदर्भ में, मैं मुख्य रूप से उन निःशुल्क प्रमाणपत्रों पर चर्चा करूँगा जिनका उपयोग AWS के अंदर किया जा सकता है, लेकिन केवल AWS सेवाओं द्वारा नहीं। स्पष्ट रूप से, यदि आप विशेष रूप से प्रबंधित AWS सेवाओं का उपयोग करते हैं और आपकी सुरक्षा आवश्यकताएँ सख्त नहीं हैं, तो के अलावा किसी अन्य चीज़ का उपयोग करना कोई मायने नहीं रखता। AWS प्रमाणपत्र प्रबंधक DNS या HTTP चुनौतियों के माध्यम से प्रमाणपत्र जारी करने का एक बहुत ही सुविधाजनक और तेज़ तरीका प्रदान करता है; हालाँकि, यदि आपको AWS सेवाओं (API गेटवे, ALB, NLB, आदि) के बाहर इन प्रमाणपत्रों का उपयोग करने की आवश्यकता है, तो आपको बुनियादी AWS सीमाओं का सामना करना पड़ता है, जैसे कि Nginx चलाने वाला EC2 इंस्टेंस जिसे भौतिक प्रमाणपत्र फ़ाइल की आवश्यकता होती है। इसके अतिरिक्त, यदि आप इसका अनुरोध करते हैं, तो भी AWS प्रमाणपत्र प्रबंधक प्रमाणपत्र सामग्री प्रदर्शित नहीं करता है। AWS प्रमाणपत्र प्रबंधक इस समय आपको के बारे में याद दिलाने का यह सही समय है, जो सर्टिफिकेट मैनेजर की तुलना में अधिक व्यापक रूप से उपयोग किया जाने वाला टूल है - कम से कम इसलिए क्योंकि यह क्लाउड पर निर्भर नहीं करता है। दुर्भाग्य से, AWS में कोई अंतर्निहित LetsEncrypt प्रमाणपत्र जारी करने की तकनीक उपलब्ध नहीं है। अपनी EC2 या ECS सेवाओं के लिए certbot टूल का उपयोग करना संभव है, लेकिन उस परिदृश्य में, आपको यह विचार करना होगा कि नवीनीकरण प्रक्रिया को कैसे कॉन्फ़िगर किया जाए। मैं अलग-अलग रणनीतियों को भी संयोजित नहीं करना चाहता क्योंकि मुझे लगता है कि हर चीज़ के लिए एक ही प्रक्रिया होना बेहतर है क्योंकि यह पूरे सिस्टम की जटिलता को कम करता है। LetsEncrypt इसे ध्यान में रखते हुए, मैंने एक लैम्ब्डा फ़ंक्शन बनाया जो जटिल कॉन्फ़िगरेशन की आवश्यकता के बिना LetsEncrypt प्रमाणपत्रों को स्वचालित रूप से जारी और नवीनीकृत करता है। प्रारंभिक प्रमाणपत्र जारी होने के बाद AWS प्रमाणपत्र प्रबंधक प्रमाणपत्रों के साथ ARN का उपयोग करने वाली किसी भी AWS सेवा पर प्रमाणपत्र का उपयोग किया जा सकता है। इसके अतिरिक्त, आप एक भौतिक प्रमाणपत्र संस्करण का उपयोग कर सकते हैं जिसे में आपके द्वारा चुने गए किसी भी स्थान पर रखा जाता है, चाहे वह Nginx चलाने वाला EC2 इंस्टेंस हो या कोई अन्य स्थान। AWS सीक्रेट्स मैनेजर AWS LetsEncrypt लैम्ब्डा कैसे काम करता है? इस लेख में, मैं मान लूंगा कि आपका DNS ज़ोन AWS Route53 द्वारा प्रबंधित है। इस लेख में वर्णित लैम्बडा फ़ंक्शन Go v1.22 पर लिखा गया है। DNS रिकॉर्ड, सीक्रेट या प्रमाणपत्र जैसे सभी परिणाम संसाधन Amazon IAM भूमिका द्वारा नियंत्रित होते हैं, जो डिफ़ॉल्ट रूप से टेराफ़ॉर्म कोड के माध्यम से बनाया जाता है। लैम्बडा क्रियाओं का क्रम निम्नलिखित है: प्रमाणपत्र सूची वाली एक घटना प्राप्त करें। आम तौर पर, यह घटना मैन्युअल निष्पादन, या के माध्यम से किए गए क्रॉन द्वारा निष्पादन का परिणाम हो सकता है। घटना का उदाहरण: aws_cloudwatch_event_target { "domainName": "hackernoon.referrs.me", "acmeUrl": "prod", "acmeEmail": "alexander.sharov@cloudexpress.app", "reImportThreshold": 10, "issueType": "default", "storeCertInSecretsManager" : true } सत्यापित करें कि प्रमाणपत्र AWS प्रमाणपत्र प्रबंधक में मौजूद है या नहीं। यदि हाँ, तो समाप्ति तिथि की पुष्टि करें। यदि समाप्ति तिथि तक दिनों की संख्या से कम है, तो LetsEncrypt चुनौती शुरू करें। इस चरण में लैम्ब्डा AWS Route53 ज़ोन से डोमेन नाम से मेल खाते हुए एक रिकॉर्ड बनाता है और आपके प्रमाणपत्र के तैयार होने की प्रतीक्षा करता है। reImportThreshold DNS-01 TXT जब प्रमाणपत्र तैयार हो जाता है, तो लैम्ब्डा उसे AWS प्रमाणपत्र प्रबंधक में अद्यतन कर देता है। यदि सत्य है, तो लैम्ब्डा प्रमाणपत्र फ़ाइलों को AWS सीक्रेट्स मैनेजर के अंदर संग्रहीत करेगा। storeCertInSecretsManager लैम्ब्डा कार्यान्वयन विवरण कोड लैम्बडा को गो 1.22 पर लिखा गया है। जितना संभव हो सके उतनी कम लाइब्रेरी का उपयोग करने से मुझे कोड को सूखा रखने के अपने लक्ष्य को बनाए रखने में मदद मिली। आवश्यक गो लाइब्रेरी की पूरी सूची: यूआरएल विवरण github.com/aws/aws-lambda-go लाइब्रेरी, नमूने और उपकरण जो गो डेवलपर्स को AWS लैम्ब्डा फ़ंक्शन विकसित करने में मदद करते हैं। github.com/aws/aws-sdk-go-v2 गो प्रोग्रामिंग भाषा के लिए AWS SDK. github.com/go-acme/लेगो LetsEncrypt / ACME क्लाइंट और लाइब्रेरी. github.com/guregu/null शून्य मानों का उचित प्रबंधन. github.com/sirupsen/logrus गो के लिए संरचित, प्लग करने योग्य लॉगिंग. डॉकर छवि मैंने बेसिक डॉकर इमेज के रूप में इस्तेमाल किया। जिन Go एप्लीकेशन को libc की आवश्यकता नहीं होती, उनके लिए यह इमेज एकदम सही है। यह बिलकुल नहीं है और इसमें निम्नलिखित शामिल हैं: gcr.io/distroless/static:nonroot को scratch CA प्रमाणपत्र: इन्हें किसी अन्य मंच से कॉपी करने की आवश्यकता नहीं है। /etc/passwd: इसमें नॉनरूट जैसे उपयोगकर्ता और समूह शामिल होते हैं। /tmp फ़ोल्डर. tzdata: यदि आप UTC के अलावा अन्य समय क्षेत्र निर्धारित करना चाहते हैं। निर्माण प्रक्रिया बड़े सॉफ़्टवेयर प्रोजेक्ट में, बिल्ड प्रक्रिया की देखरेख करना एक श्रमसाध्य और समय लेने वाला काम बन सकता है। मेकफाइल्स इस प्रक्रिया को स्वचालित और सुव्यवस्थित करने में मदद कर सकते हैं, यह सुनिश्चित करते हुए कि आपका प्रोजेक्ट कुशलतापूर्वक और लगातार बनाया गया है। इस कारण से, मैं अपने सभी Golang प्रोजेक्ट के लिए मेकफाइल का उपयोग करना पसंद करता हूँ। फ़ाइल सरल है: ##@ 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 ./... सीआईसीडी की ओर से मैंने गो एप्लीकेशन के लिए विशिष्ट सेटअप का उपयोग किया निरंतर एकीकरण के रूप में। GitHub क्रियाएँ docker रजिस्ट्री के रूप में उपयोग करें। DockerHub की तुलना में, यह दो प्रमुख विशेषताएं प्रदान करता है जो इसे उपयोग करने के लिए मेरी प्राथमिकता बनाती हैं: ghcr.io को GitHub Actions के साथ GHCR के सहज एकीकरण की बदौलत बिल्ड, टेस्ट और डिप्लॉयमेंट वर्कफ़्लो को सीधे GitHub रिपॉजिटरी से अधिक आसानी से स्वचालित किया जा सकता है। इससे उत्पादकता बढ़ सकती है और विकास प्रक्रिया सरल हो सकती है। GHCR GitHub के अनुमति मॉडल का लाभ उठाता है, जिससे उपयोगकर्ता उन्हीं टीमों और अनुमतियों का उपयोग करके कंटेनर छवियों तक पहुँच प्रबंधित कर सकते हैं जिनका उपयोग वे अपने कोड रिपॉजिटरी के लिए करते हैं। यह उपयोगकर्ता प्रबंधन को सरल बनाता है और सुरक्षा को बढ़ाता है। : स्वचालित संस्करण के लिए मेरा GitHub Actions प्लगइन। यह एक GitHub क्रिया है जो रिपॉजिटरी कमिट के लिए संगत टैग उत्पन्न करती है। यह क्रिया संस्करणों का प्रबंधन कर सकती है, GitHub रिलीज़ उत्पन्न कर सकती है, और रिपॉजिटरी के अंदर रिलीज़ शाखाओं को नियंत्रित कर सकती है। यह सिंगल और मोनोरेपो दोनों के साथ शानदार ढंग से काम करता है। kvendingoldo/semver-action SemVer स्वचालित चेंजलॉग जनरेशन। मुझे चेंजलॉग पसंद है! मेरे द्वारा प्रबंधित अन्य ओपनसोर्स प्रोजेक्ट्स (जैसे, , , आदि) के संदर्भ में, मेरी टीम ने उपयोगकर्ताओं को परिवर्तनों के बारे में सूचित करने के महत्व को पहचाना। https://github.com/tofuutils/tenv https://github.com/tofuutils/tofuenv . मेरे दृष्टिकोण से, सभी कोड की समीक्षा एक स्थिर कोड विश्लेषक द्वारा की जानी चाहिए। सोनारक्यूब को सभी परियोजनाओं के लिए सेट नहीं किया जा सकता है, हालाँकि, मेरी राय में, golangci छोटे से मध्यम गो परियोजनाओं के लिए पर्याप्त है। golangci-lint कोड जाँच के अतिरिक्त, व्याकरण की पुष्टि करना भी अच्छा विचार है, खासकर यदि आपके पास बड़ी मात्रा में दस्तावेज हों। . कोडस्पेल.yml टेराफॉर्म/ओपनटोफू के माध्यम से लैम्ब्डा को AWS पर कैसे तैनात करें इस पृष्ठ में चर्चित कोड टेराफॉर्म और ओपनटोफू के लिए एक समान है, लेकिन टेराफॉर्म v1.6 से शुरू करके, हाशिकॉर्प ने टेराफॉर्म लाइसेंस को बिजनेस सोर्स लाइसेंस (बीएसएल) v1.1 में संशोधित किया है। यदि आप टेराफॉर्म के शीर्ष पर कुछ वाणिज्यिक विकसित कर रहे हैं, तो जितनी जल्दी हो सके ओपनटोफू पर स्विच करें। यदि आपको OpenTofu या Terraform के एकाधिक संस्करणों को प्रबंधित करने की आवश्यकता है, तो इसका उपयोग करें - ओपनटोफू, टेराफॉर्म, टेराग्रंट और एटमोस संस्करण प्रबंधक, गो में लिखा गया। टेनव अधिक टेराफॉर्म / ओपनटोफू उदाहरण उदाहरण फ़ोल्डर में पाए जा सकते हैं। Git रिपोजिटरी के OpenTofu के माध्यम से AWS LetsEncrypt Lambda के साथ काम करने के लिए आपको निम्नलिखित चरण करने होंगे: अपने OpenTofu / Terraform कोड में मॉड्यूल जोड़ें 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 } चर निर्दिष्ट करें 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 } ] } और चरों पर ध्यान दें। डिफ़ॉल्ट रूप से, AWS Lambda AWS ECR के अलावा अन्य स्रोतों से छवियों को खींच नहीं सकता है। सौभाग्य से, AWS टीम ने ECR प्रॉक्सी कैश बनाया है, जो DockerHub या GHCR जैसी सार्वजनिक रूप से उपलब्ध रजिस्ट्री से छवियों को प्राप्त कर सकता है और उन्हें ECR के अंदर संग्रहीत कर सकता है। इस संभावना के बावजूद, AWS टोकन के बिना छवियों को खींचने की अनुमति नहीं देता है, यहां तक कि खुले सार्वजनिक रिपॉजिटरी से भी, इसलिए आपको पहले से निर्मित Docker छवियों तक पहुंच प्राप्त करने के लिए एक व्यक्तिगत GitHub टोकन प्राप्त करना होगा। वैकल्पिक रूप से, आप मेरी GitHub रिपॉजिटरी को खींच सकते हैं, स्थानीय रूप से छवि बना सकते हैं, फिर इसे अपने पहले से मौजूद ECR रिपॉजिटरी में अपलोड कर सकते हैं। इस परिदृश्य में, उदाहरण को निम्नानुसार संशोधित किया जा सकता है: 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>" } जब आप कोड बदलना पूरा कर लें, तो OpenTofu version switcher द्वारा OpenTofu को स्थापित करने के लिए निम्नलिखित कमांड चलाएँ: tenv $ tenv tofu install और अंत में, उत्पादित कोड को लागू करने के लिए निम्नलिखित कमांड निष्पादित करें: $ tofu init $ tofu plan $ tofu apply जब तक कोड AWS पर तैनात न हो जाए और ईवेंट ट्रिगर न हो जाएं, तब तक प्रतीक्षा करें। कुछ मिनटों के बाद, आपको सर्टिफ़िकेट मैनेजर के अंदर तैयार सर्टिफ़िकेट दिखाई देंगे। उदाहरण: अब से, AWS, ARN द्वारा जारी किए गए प्रमाणपत्र का उपयोग किसी भी सेवा पर कर सकता है। यदि आपको AWS सेवाओं के बाहर प्रमाणपत्र का उपयोग करने की आवश्यकता है या इसकी सामग्री तक पहुँच है, तो ईवेंट विकल्प को पर सेट करें। इस स्थिति में, जब लैम्ब्डा मूल निष्पादन पूरा कर लेता है, तो प्रमाणपत्र AWS Secrets Manager में सहेजा जाएगा। यह उपयोगकर्ताओं को अधिक लचीलापन देता है: वे प्रमाणपत्र की सामग्री का निरीक्षण कर सकते हैं, EC2 से सीधे इसके साथ काम कर सकते हैं, आदि। AWS Secrets Manager के बारे में अधिक जानने के लिए, आधिकारिक मार्गदर्शिका पढ़ें। storeCertInSecretsManager true पर्यावरण चर नाम विवरण संभावित मान डिफ़ॉल्ट मान उदाहरण आवश्यक FORMATTER_TYPE लॉग के लिए फ़ॉर्मेटर प्रकार JSON | पाठ मूलपाठ जेएसओएन ❌ MODE एप्लिकेशन मोड। AWS निष्पादन के लिए मोड और स्थानीय परीक्षण के लिए मोड सेट करें। cloud local बादल | स्थानीय बादल बादल ✅ LOG_LEVEL लॉगिंग स्तर घबराहट|घातक|त्रुटि|चेतावनी|सूचना|डीबग|ट्रेस चेतावनी देना चेतावनी देना ❌ AWS_REGION डिफ़ॉल्ट AWS क्षेत्र। AWS पर तैनाती के बाद यह सेटिंग स्वचालित रूप से होती है। <कोई भी वैध AWS क्षेत्र> - यूएस-ईस्ट-1 ✅ DOMAIN_NAME डोमेन नाम जिसके लिए प्रमाणपत्र जारी या नवीनीकृत किया जा रहा है कोई भी वैध डोमेन नाम - हैकरनून. Referrs.me ✅ ACME_URL यदि प्रोडक्शन LetsEncrypt URL को पर सेट किया गया है तो इसका उपयोग किया जाएगा; यदि नहीं, तो स्टेज URL का उपयोग किया जाएगा। prod प्रोड | स्टेज ठेस ठेस ✅ ACME_EMAIL LetsEncrypt प्रमाणपत्र से जुड़ा ईमेल पता कोई भी वैध ईमेल alexander.sharov@cloudexpress.app alexander.sharov@cloudexpress.app ✅ REIMPORT_THRESHOLD यदि प्रमाणपत्र का जीवनकाल (TTL) के बराबर होगा तो प्रमाणपत्र का नवीनीकरण कर दिया जाएगा। REIMPORT_THRESHOLD कोई भी int > 0 10 10 ✅ STORE_CERT_IN_SECRETSMANAGER यदि , तो लैम्ब्डा प्रमाणपत्र को प्रमाणपत्र प्रबंधक और सीक्रेट्स प्रबंधक दोनों में रखेगा। true “सत्य” | “झूठ” "असत्य" "असत्य" ❌ LetsEncrypt लैम्ब्डा लॉग की जांच कैसे करें के साथ काम के दायरे में आप कभी-कभी लॉग की समीक्षा करना चाह सकते हैं। इसे पूरा करना काफी आसान है: aws-letsencrypt-lambda AWS क्लाउडवॉच पर जाएं, “लॉग समूह” पर क्लिक करें OpenTofu कोड में आपके द्वारा निर्दिष्ट नाम के साथ लॉग समूह खोजें। उदाहरण के लिए, मेरे मामले में यह है /aws/lambda/kvendingoldo-letsencrypt-lambda समूह पर जाएं, सूची से वांछित स्ट्रीम का चयन करें, और लॉग की समीक्षा करें। AWS UI के माध्यम से मैन्युअल रूप से लैम्ब्डा को कैसे ट्रिगर करें ओपनटोफू के माध्यम से बनाए गए लैम्ब्डा फ़ंक्शन पर जाएँ। “टेस्ट” बटन पर क्लिक करें। भरें और क्लिक करें Test Event Test { "domainName": "<YOUR_VALID_DOMAIN>", "acmeUrl": <stage | prod>, "acmeEmail": "<ANY_VALID_EMAIL>", "reImportThreshold": 10, "issueType": "<default | force>", "storeCertInSecretsManager" : <true | false> } उदाहरण 1: { "domainName": "hackernoon.referrs.me", "acmeUrl": "prod", "acmeEmail": "alexander.sharov@cloudexpress.app", "reImportThreshold": 10, "issueType": "default" } निष्पादन पूरा होने तक प्रतीक्षा करें। आप निष्पादन लॉग को क्लाउडवॉच में उपलब्ध देख सकते हैं। आमतौर पर प्रारंभिक समस्या में लगभग 5 मिनट लगते हैं। स्थानीय स्तर पर लैम्ब्डा का परीक्षण कैसे करें रिपॉजिटरी को अपने लैपटॉप पर क्लोन करें https://github.com/kvendingoldo/aws-letsencrypt-lambda के माध्यम से AWS Cli क्रेडेंशियल कॉन्फ़िगर करें। आधिकारिक गाइड पर्यावरण चर अनुभाग की जाँच करें और आवश्यक चर की न्यूनतम संख्या निर्धारित करें। चूँकि LetsEncrypt के लिए प्रति घंटे पुनःप्रयास की मात्रा को सीमित करेगा, इसलिए मैं परीक्षण के लिए का उपयोग करने की सलाह देता हूँ। पर्यावरण चर उदाहरण: 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" निम्न आदेश के माध्यम से स्थानीय रूप से लैम्ब्डा निष्पादित करें: go run main.go लैम्ब्डा के सफल निष्पादन के बाद, निम्नलिखित लॉग दिखाई देगा। 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 बस इतना ही। अब से, AWS जारी किए गए प्रमाणपत्र का उपयोग ARN द्वारा किसी भी सेवा पर या अन्य स्थानों पर कर सकता है, जहाँ यह AWS सीक्रेट्स मैनेजर से प्राप्त करके भौतिक रूप से आवश्यक है। AWS पर 4 वर्षों से अधिक समय तक इसका उपयोग करने का व्यावहारिक अनुभव मैं लगभग चार वर्षों से उत्पादन में लैम्ब्डा फ़ंक्शन का उपयोग कर रहा हूँ। पिछले कुछ वर्षों में, प्रारंभिक कार्यान्वयन के विभिन्न पहलू बदल गए हैं: इससे पहले, AWS ने लैम्बडा स्रोतों के रूप में किसी भी गैर-ECR रजिस्ट्री के उपयोग को प्रतिबंधित कर दिया था। इसमें कोई बदलाव नहीं हुआ है, हालाँकि AWS ने GitHub, DockerHub और कुछ अतिरिक्त रजिस्ट्री के लिए ECR प्रॉक्सी को जोड़ा है। इस कार्यक्षमता के बिना, हमें लैम्बडा छवियों को अपने व्यक्तिगत ECR में मैन्युअल रूप से पुश करना पड़ता था और टेराफ़ॉर्म कोड में छवि के URL को बदलना पड़ता था। अब OpenTofu कोड ECR प्रॉक्सी के माध्यम से इसे स्वचालित रूप से करता है। शुरुआत में, मैंने या जैसी विभिन्न चुनौतियों को पेश करने पर विचार किया, लेकिन चार साल तक किसी ने मुझसे इसके बारे में सवाल नहीं किया। , और अगर इस क्षमता की आवश्यकता है, तो हम इसे बनाने के लिए मिलकर काम कर सकते हैं। http-01 tls-alpn-01 यह अभी भी GitHub मुद्दों पर मौजूद है जब मैंने मूल रूप से प्रोजेक्ट शुरू किया था, तब मैं शुद्ध EC2 इंस्टेंस पर LetsEncrypt प्रमाणपत्रों का उपयोग नहीं करना चाहता था, लेकिन आजकल यह मानक अभ्यास है। जैसा कि मैंने पहले कहा था, कुछ स्थितियों में, AWS cli का उपयोग करके AWS Secrets Managed से प्रमाणपत्र प्राप्त किया जा सकता है। मैंने पिछले कुछ सालों में बहुत सारे नए गो कोड लिखे हैं, इसलिए मैं कह सकता हूँ कि मेरे रिपॉजिटरी में मूल लैम्ब्डा कोड उतना आकर्षक नहीं है जितना हो सकता था। इसमें और मेरे सबसे हाल के गो प्रोजेक्ट, (ओपनटोफू, टेराफॉर्म, टेराग्रंट और एटमोस वर्जन मैनेजर, जो गो में लिखा गया है) के बीच एक महत्वपूर्ण अंतर है, लेकिन किसी भी मामले में, कोड अभी भी आम तौर पर समर्थित है, इसलिए इसमें संशोधन करना बहुत समस्याग्रस्त नहीं होगा। कभी-कभी, मैं कोड को और अधिक सुरुचिपूर्ण बनाने के लिए महत्वपूर्ण रीफैक्टरिंग करूँगा। टेनव कई अलग-अलग परियोजनाओं में कई सालों से एक ही लैम्ब्डा का इस्तेमाल किया जा रहा है। इसके अलावा, मैं DevOps प्लेटफ़ॉर्म का सह-संस्थापक हूँ, जहाँ हमारी टीम स्वचालन प्रक्रियाओं को सरल बनाने के लिए उपयोग करके हमारे सभी क्लाइंट के लिए TLS प्रमाणपत्र प्रबंधित करती है। cloudexpress.app AWS LetsEncrypt लैम्ब्डा का अब बात करते हैं संख्याओं की। की अवधि में, इस परियोजना ने कई लोगों की मदद की है और कई ओपनसोर्स और में इसका उपयोग किया गया है। लैम्ब्डा से अधिक प्रमाणपत्र जारी करता है और उस पर रुकना नहीं चाहता। 4 वर्षों 30 से अधिक वाणिज्यिक परियोजनाओं 2000 निष्कर्ष यदि आपके तो यह आपके लिए एक उपयुक्त समाधान है। पास AWS LetsEncrypt Lambda है आपके पास प्रमाणपत्र का भौतिक संस्करण होना चाहिए और आप इसका उपयोग गैर-AWS मूल सेवाओं जैसे EC2 Nginx से करेंगे। आप TLS प्रमाणपत्र जारी करने और नवीनीकरण प्रक्रिया (लॉग की जांच, नवीनीकरण तिथियां निर्धारित करना, आदि) के प्रबंधन के लिए AWS प्रमाणपत्र प्रबंधक पर निर्भर नहीं रहना चाहते। आप चाहेंगे कि जब आपका प्रमाणपत्र समाप्त हो जाए, या जल्द ही समाप्त हो जाए, तो आपको LetsEncrypt से ईमेल सूचनाएं प्राप्त हों। आप Golang कोड को बदलकर समाधान को निजीकृत करना चाहते हैं (उदाहरण के लिए, LetsEncrypt चुनौती को बदलना, Hashicorp Vault में प्रमाणपत्र संग्रहीत करना, आदि)। यदि आपको पता चला है कि इनमें से कम से कम एक बिंदु आपकी स्थिति पर लागू होता है, तो आप AWS लैम्ब्डा का उपयोग करने के लिए स्वागत हैं। साथ ही, यदि आप विकास में भाग लेना चाहते हैं, तो मैं हमेशा GitHub पर नए मुद्दों और पुल अनुरोधों के लिए खुला हूँ। प्रोजेक्ट URL: . https://github.com/kvendingoldo/aws-letsencrypt-lambda