9

का उपयोग कर एसीएम सर्टिफिकेट के साथ क्लाउडफ्रंट वितरण का प्रावधान कैसे करें मैं क्लाउड फॉर्मेशन का उपयोग करके अपने क्लाउडफ्रंट डिस्ट्रीब्यूशन में प्रमाणपत्र सेट करने का प्रयास कर रहा हूं।क्लाउड फॉर्मेशन

मेरा प्रमाणपत्र प्रमाणपत्र प्रबंधक के माध्यम से जारी किया गया है। इसे मंजूरी दे दी गई है, और मैंने प्रमाणित किया है कि प्रमाण पत्र सीधे क्लाउडफ्रंट कंसोल के माध्यम से मैन्युअल कॉन्फ़िगरेशन द्वारा काम करता है।

मेरी CloudFormation टेम्पलेट के भीतर, मैं दोनों पहचानकर्ता और ARN IamCertificateId संपत्ति में प्रमाण पत्र के साथ जुड़े मूल्यों का उपयोग करने का प्रयास किया:

"ViewerCertificate" : { 
    "IamCertificateId" : "********", 
    "SslSupportMethod": "sni-only" 
} 

लेकिन दोनों ही मामलों मैं निम्न त्रुटि प्राप्त में:

The specified SSL certificate doesn't exist, isn't valid, or doesn't include a valid certificate chain. 

DistributionConfig Complex Type ऐसा लगता है कि वहाँ एक 'ACMCertificateArn' संपत्ति है के लिये दस्तावेज पढ़ना, लेकिन यह करता है क्लाउडफॉर्मेशन के माध्यम से काम नहीं कर रहा है।

किसी भी मदद की सराहना की जाएगी।

+1

शायद यह मामला क्लाउडफॉर्म क्लाउडफ्रंट के लिए एसीएम का समर्थन नहीं करता है। आमतौर पर जब तक क्लाउडॉर्मेशन नई सुविधाओं का समर्थन नहीं करता तब तक एक अंतराल होता है। – imperalix

+0

मुझे इस मामले में संदेह है। उदास। –

+0

शायद आप मेरी प्रतिक्रिया को चिह्नित करने पर विचार कर सकते हैं जिसमें अद्यतन जानकारी को सही उत्तर के रूप में शामिल किया गया है। –

उत्तर

5

बादल ने इस संपत्ति को जोड़ा लेकिन यह दस्तावेज नहीं है। आप यह काम आसानी तरह उपयोग कर सकते हैं:

"ViewerCertificate": { 
      "SslSupportMethod": "sni-only", 
      "AcmCertificateArn": "CERTIFICATE_ARN" 
} 

, ध्यान रखें कि प्रमाण पत्र हमें पूर्व -1 क्षेत्र में बनाया जाना चाहिए रहो अगर यह स्वीकार नहीं किया जाएगा नहीं।

+0

मैं इसे पहले परीक्षण करने जा रहा था :) –

+1

आज उन्होंने प्रलेखन को अद्यतन किया, अब आप विकल्प देख सकते हैं: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig- viewercertificate.html –

+0

हम्म, जब मैं एआरएन को रेफरी का उपयोग करता हूं तो काम नहीं कर रहा:/ – tedder42

11

(अद्यतन: Aug 9 2016 के रूप में, एडब्ल्यूएस CloudFormation अब AcmCertificateArn संपत्ति का उपयोग कर एसीएम का समर्थन करता है, तो कस्टम नीचे वर्णित संसाधन अब जरूरत है।)


हालांकि एडब्ल्यूएस :: CloudFront :: वितरण संसाधन अभी तक ACMCertificateArn प्रॉपर्टी का समर्थन करने के लिए अपडेट नहीं किया गया है, आधिकारिक संसाधन अपडेट होने तक सीधे AWS API का उपयोग करके आवश्यक कार्यक्षमता को लागू करने के लिए custom CloudFormation resource का उपयोग करना संभव है।

रायन एस ब्राउन की पोस्ट, CloudFormation To Build A CDN With (Free) Custom SSL देखें जहां वह Custom::CloudFrontAcmAssociation संसाधन के कार्यान्वयन का वर्णन करता है जो क्लाउडफ्रंट वितरण के साथ एक एसीएम प्रमाण पत्र को संबद्ध करता है। कोड ryansb/acm-certs-cloudformation पर उपलब्ध है।

इसका उपयोग करने के लिए, आपको क्लाउडफॉर्मेशन संसाधन का कार्यान्वयन AWS Lambda फ़ंक्शन के माध्यम से उपलब्ध कराने की आवश्यकता है। रयान के कार्यान्वयन पहले से ही एक सार्वजनिक S3 बाल्टी के लिए प्रकाशित किया जाता है, तो आप इस सीधे परीक्षण प्रयोजनों के लिए अपने CloudFormation टेम्पलेट में तो जैसे देख सकते हैं:

"AcmAssociationFunction": { 
    "Type": "AWS::Lambda::Function", 
    "Properties": { 
    "Handler": "cloudfront_associator.handler", 
    "MemorySize": 128, 
    "Runtime": "python2.7", 
    "Code": { 
     "S3Bucket": "demos.serverlesscode.com", 
     "S3Key": "acm-certificate-resource-functions.zip" 
    }, 
    "Role": {"Fn::GetAtt": ["ExecRole", "Arn"]}, 
    "Timeout": 300 
    } 
}, 

Lambda::Function संसाधन एक IAM सेवा भूमिका पर एक निर्भरता है और को सौंपने के लिए नीति जुड़े लैम्ब्डा समारोह के लिए आवश्यक अनुमतियाँ (ExecRole संदर्भ ऊपर), वह भी जोड़ सकते हैं ताकि आप की जरूरत करने के लिए:

"ExecRolePolicies": { 
    "Type": "AWS::IAM::Policy", 
    "Properties": { 
    "PolicyName": "ExecRolePolicy", 
    "PolicyDocument": { 
     "Version": "2012-10-17", 
     "Statement": [ 
     { 
      "Action": [ 
      "acm:*", 
      "cloudfront:List*", 
      "cloudfront:Get*", 
      "cloudfront:UpdateDistribution" 
      ], 
      "Resource": [ "*" ], 
      "Effect": "Allow" 
     }, 
     { 
      "Action": [ "logs:*" ], 
      "Resource": "arn:aws:logs:*:*:*", 
      "Effect": "Allow" 
     } 
     ] 
    }, 
    "Roles": [{"Ref": "ExecRole"}] 
    } 
}, 
"ExecRole": { 
    "Type": "AWS::IAM::Role", 
    "Properties": { 
    "AssumeRolePolicyDocument": { 
     "Version": "2012-10-17", 
     "Statement": [ 
     { 
      "Action": ["sts:AssumeRole"], 
      "Effect": "Allow", 
      "Principal": {"Service": ["lambda.amazonaws.com"]} 
     } 
     ] 
    } 
    } 
}, 

लैम्ब्डा समारोह के साथ जगह में, अंत में, Custom::CloudFrontAcmAssociation संसाधन जोड़ने वितरण आईडी प्रदान करने, प्रमाण पत्र ARN, और कस्टम resourc ई लैम्ब्डा समारोह के ARN:

"DistributionCertificateSetting": { 
    "Type": "Custom::CloudFrontAcmAssociation", 
    "Properties": { 
    "DistributionId": { 
     "Ref": "SiteCDN" 
    }, 
    "CertificateArn": { 
     "Ref": "AcmCertificate" 
    }, 
    "ServiceToken": { 
     "Fn::GetAtt": [ 
     "AcmAssociationFunction", 
     "Arn" 
     ] 
    } 
    } 
}, 

tldr: अपने CloudFormation टेम्पलेट में सब से ऊपर कोड को कॉपी करें, उचित SiteCDN और AcmCertificate गुण सेट (या हार्ड-कोडेड मूल्यों के साथ टेम्पलेट को संपादित), और आप एक कस्टम संसाधन होना चाहिए अमेज़ॅन आधिकारिक क्लाउडफ्रंट संसाधन अपडेट होने तक कामकाज।

+0

कमाल, धन्यवाद –

+0

इस दृष्टिकोण के लिए कई सीमाएं नोट करें: सबसे पहले, यदि आप मूल क्लाउडफ्रंट संसाधन पर किसी भी गुण को बदलते हैं और अपने क्लाउडफॉर्मेशन स्टैक को अपडेट करते हैं, तो अद्यतन के बाद एसीएम प्रमाणपत्र हटा दिया जाएगा, क्योंकि क्लाउडफॉर्मेशन संसाधन मूल को फिर से लागू करता है config। दूसरा, जब आप स्टैक को हटाते हैं तो आपको एक त्रुटि मिल सकती है 'अनुरोध विफल हुआ क्योंकि यह एक या अधिक अनुरोध-हेडर फ़ील्ड में पूर्व शर्त को पूरा नहीं करता था' (क्योंकि ऐसा लगता है कि क्लाउडफॉर्मेशन संसाधन पुराने 'ifMatch' डेटा का उपयोग करता है और नहीं जानता अद्यतन ईटीएजी के बारे में)। – wjordan

-2

कुछ दिनों लगे लेकिन एडब्ल्यूएस समर्थन से कुछ मदद के साथ जवाब मिला।

के लिए जानकारी:

{ 
    "ServerCertificateId": "ASCAXXXXXXXXXXXXXX", 
    "ServerCertificateName": "devops.XXXXXXX.com", 
    "Expiration": "2017-03-10T15:00:33Z", 
    "Path": "/cloudfront/", 
    "Arn": "arn:aws:iam::XXXXXXXXXXX:server-certificate/cloudfront/devops.XXXXXXXXXXX.com", 
    "UploadDate": "2016-03-14T16:13:59Z" 
}, 

एक बार मैंने पाया कि मैं के साथ एक चर cloudfront.CloudFrontCertificateId कहा:

"ViewerCertificate" : { 
    "IamCertificateId" : "********", 
    "SslSupportMethod": "sni-only" 
} 

CLI का उपयोग कर "एडब्ल्यूएस iam सूची-server-प्रमाण पत्र" पाया जाता है

"ViewerCertificate" : { 
    "IamCertificateId" : {{ cloudfront.CloudFrontCertificateId }}, 
    "SslSupportMethod": "sni-only" 
} 
+4

यह प्रतिक्रिया किसी तृतीय-पक्ष प्रमाणपत्र प्राधिकरण से प्राप्त प्रमाणपत्र का उपयोग करने और आईएएम प्रमाणपत्र स्टोर पर अपलोड करने के तरीके को कवर करती है, लेकिन ऊपर दिए गए प्रश्न से पूछा गया कि नए एडब्ल्यूएस प्रमाणपत्र प्रबंधक (एसीएम) सेवा द्वारा प्रबंधित प्रमाणपत्र का उपयोग कैसे करें। – wjordan

1

मैं एक properl था: ServerCertificateId और यह ViewerCertificate में खिलाया वाई पूर्ण प्रमाणपत्र के साथ अपलोड प्रमाण पत्र (सार्वजनिक कुंजी 2048 बिट्स) बनाया। अन्य एडब्ल्यूएस सेवाओं (सार्वजनिक ईएलबी) में समस्या के बिना प्रमाण पत्र का उपयोग किया जा रहा था और अधिक चुनौतीपूर्ण क्या था।

मैं प्रमाण पत्र आईडी पास कर रहा था (मैंने एआरएन के साथ भी कोशिश की थी लेकिन यह गलत है)।

मेरे मामले में, समस्या "पथ": "/" के साथ प्रमाण पत्र बनाया गया था। "पथ" के साथ एक नया प्रमाणपत्र (अलग-अलग नाम के साथ) अपलोड करने के बाद: "/ क्लाउडफ़्रंट /", सबकुछ बिना किसी समस्या के काम करता है।

aws iam upload-server-certificate \ 
    --server-certificate-name cert_cf \ 
    --certificate-body file://cert.crt \ 
    --private-key file://cert.key \ 
    --certificate-chain file://chain.pem \ 
    --path /cloudfront/ 
संबंधित मुद्दे