2016-03-25 12 views
7

मेरे पास पाइथन में लिखा गया एक बहुत ही सरल लेकिन पूरी तरह से काम कर रहा है (हालांकि, मूलभूत सेवा 2) एक डायनेमोडीबी तालिका।एडब्ल्यूएस लैम्ब्डा फ़ंक्शन में बाहरी क्रेडेंशियल का उपयोग कैसे करें (ठीक से)?

फ़ंक्शन क्या करता है काफी मूल है: यह किसी सेवा के विरुद्ध लॉगिन (क्रेडेंशियल्स # 1 के साथ) पोस्ट करता है और फिर प्रतिक्रिया स्थिति का हिस्सा डायनेमोडीबी तालिका (एडब्ल्यूएस क्रेडेंशियल्स # 2 के साथ) में सहेजता है।

इन समारोह के प्रासंगिक भागों हैं:

h = httplib2.Http() 
auth = base64.encodestring('myuser' + ':' + 'mysecretpassword') 
(response, content) = h.request('https://vca.vmware.com/api/iam/login', 'POST', headers = {'Authorization':'Basic ' + auth,'Accept':'application/xml;version=5.7'}) 

और फिर

conn = boto.connect_dynamodb(aws_access_key_id='FAKEhhahahah',aws_secret_access_key='FAKEdhdhdudjjdjdjhdjjhdjdjjd') 

आप नहीं समारोह के अंदर इन क्रेडेंशियल होने से कोड की सफाई के बारे में कैसे जाना होगा?

FYI यह फ़ंक्शन प्रत्येक 5 मिनट चलाने के लिए निर्धारित है (कोई अन्य बाहरी ईवेंट नहीं है जो इसे ट्रिगर करता है)।

उत्तर

8

अपने उदाहरण में आप क्रेडेंशियल्स के 2 प्रकार है:: इसके अलावा एक नज़र में ले

  1. एडब्ल्यूएस creds
  2. कोई नहीं एडब्ल्यूएस creds
एडब्ल्यूएस साथ

creds सब कुछ सरल: IAM भूमिका बनाने , इसे डायनेमोडब की अनुमति दें और आपको जाना अच्छा लगेगा।

गैर एडब्ल्यूएस साथ creds सबसे सुरक्षित दृष्टिकोण होगा:

  1. एन्क्रिप्ट साख किलोमीटर सेवा का उपयोग कर अग्रिम। (kms.encrypt('foo'))
  2. एक बार जब आप अपनी जानकारी का एन्क्रिप्ट किया गया हो। इसे कहीं भी स्टोर करने के लिए स्वतंत्र महसूस करें। लैम्ब्डा में सबसे आसान तरीका कठिन कोड होगा।
  3. लैम्बडा आईएएम की अनुमति जोड़ें चरण 1 में उपयोग की जाने वाली केएमएस कुंजी का उपयोग करके सूचना को डिक्रिप्ट करने के लिए भूमिका।
  4. फिर प्रत्येक बार लैम्ब्डा का आह्वान किया जाता है, इसे जानकारी को डिक्रिप्ट करने के लिए केएमएस को कॉल करने दें।
+0

धन्यवाद। यह वास्तव में उचित दृष्टिकोण प्रतीत होता है।डायनेमोडीबी तक पहुंचने के लिए लैम्ब्डा फ़ंक्शन में उचित आईएएम भूमिका असाइन करना कुछ ऐसा था जो मैंने सोचा था। समस्या का "कोई एडब्ल्यूएस क्रेडिट" हिस्सा वह नहीं था जिसे मैंने नहीं समझा था। धन्यवाद। – mreferre

4

LambdaExec भूमिका के लिए DynamoDB विशेषाधिकार प्रदान करने का सबसे साफ तरीका है। आपका Boto कनेक्ट हो जाता है:

conn = boto.connect_dynamodb() 

या IAM नीतियों जिसका creds आप Boto कनेक्ट करने के लिए प्रदान कर रहे हैं उपयोगकर्ता से जुड़ी जाँच करें। उस सूची से नीतियां चुनें और चुनें और उन विशेषाधिकारों को LambdaExec भूमिका दें। Easy Authorization of AWS Lambda Functions

+0

डायनेमो डीबी एक्सेस क्रेडेंशियल्स को साफ करने के लिए यह सही जवाब है। बाहरी वेब सेवा के लिए आपको उन क्रेडेंशियल्स को कहीं S3 या DynamoDB जैसे स्टोर करना होगा। –

+0

सभी एडब्ल्यूएस प्रमाण-पत्रों के लिए निश्चित रूप से अपने लैम्ब्डा फ़ंक्शन से जुड़े आईएएम भूमिकाओं का उपयोग करें। रन टाइम पर आवश्यक अन्य रहस्यों के लिए जैसे बाहरी सेवाओं के लिए पासवर्ड मैं KMS का उपयोग करने की अनुशंसा करता हूं। आप मॉड्यूल स्तर पर केएमएस में डेटा डिक्रिप्ट कर सकते हैं ताकि आप केवल मॉड्यूल प्रारंभिक समय (या जब आपका फ़ंक्शन संक्रमण ठंडा -> गर्म) पर मूल्य का भुगतान कर सके। – garnaat

संबंधित मुद्दे