9

हम प्रमाण पत्र प्रदान करने की तीसरी सिफारिश के बाद spark-redshift प्रोजेक्ट का उपयोग करने का प्रयास कर रहे थे। अर्थात्:ईएमआर उदाहरणों में स्पार्क-रेडशिफ्ट के लिए क्रेडेंशियल्स को सही तरीके से कैसे प्रदान किया जाए?

IAM उदाहरण प्रोफाइल: आप EC2 पर चल रहा है और IAM और उदाहरण प्रोफ़ाइल का उपयोग S3 को प्रमाणित कर रहे हैं, तो आप temporary_aws_access_key_id, temporary_aws_secret_access_key कॉन्फ़िगर करना होगा चाहिए, और temporary_aws_session_token विन्यास गुण अस्थायी को इंगित करने के एडब्ल्यूएस सुरक्षा टोकन सेवा के माध्यम से बनाई गई कुंजी। ये अस्थायी कुंजी को फिर लोड के माध्यम से Redshift और UNLOAD आदेशों के माध्यम से पास किया जाएगा।

हमारा स्पार्क एप्लिकेशन ईएमआर क्लस्टर से चल रहा है। इस तरह के प्रयोजन के लिए, हम इस नोड getSessionToken इस तरह बुला के अंदर उदाहरणों से अस्थायी क्रेडेंशियल प्राप्त करने की कोशिश की:

val stsClient = new AWSSecurityTokenServiceClient(new InstanceProfileCredentialsProvider())   
val getSessionTokenRequest = new GetSessionTokenRequest() 
val sessionTokenResult = stsClient.getSessionToken(getSessionTokenRequest); 
val sessionCredentials = sessionTokenResult.getCredentials() 

लेकिन इस 403 Access Denied फेंकता है, भले ही sts:getSessionToken साथ नीति ईएमआर के उदाहरण की भूमिका के लिए लागू किया जाता है।

फिर हमने निम्नलिखित दो विकल्पों की कोशिश की। ,

val p = new STSAssumeRoleSessionCredentialsProvider("arn:aws:iam::123456798123:role/My_EMR_Role", "session_name") 
val credentials: AWSSessionCredentials = p.getCredentials 
val token = credentials.getSessionToken 

और दूसरा InstanceProfileCredentialsProvider से परिणाम कास्टिंग:: सबसे पहले, AssumeRole नीति का उपयोग

val provider = new InstanceProfileCredentialsProvider() 
val credentials: AWSSessionCredentials = provider.getCredentials.asInstanceOf[AWSSessionCredentials] 
val token = credentials.getSessionToken 

वे दोनों काम करते हैं, लेकिन जो ऐसा करने की उम्मीद तरीका है? क्या परिणाम कास्टिंग या AssumeRole नीति जोड़ने के बारे में कुछ गलत है?

धन्यवाद!

+0

Ca n आप अपने समाधानों के आस-पास अधिक जानकारी प्रदान करते हैं, जैसे आपने कोई एडिटोनल पैकेज आयात किया है या हम जावा एसडीके को आयात करते हैं?जब मैं स्पार्क-शैल में उपर्युक्त कथन का उपयोग करता हूं, तो यह नहीं जानता कि AWSSessionCredentials क्या है। –

उत्तर

1

GetSessionToken एपीआई का मतलब है, IAM उपयोगकर्ताओं द्वारा कहे जाने के रूप में उनके डॉक्स में कहा:

एक AWS खाते या IAM उपयोगकर्ता के लिए अस्थायी क्रेडेंशियल्स का एक सेट देता है।

अपना पहला उदाहरण पर, आप अपने ईएमआर उदाहरण भूमिका है, जो एक IAM भूमिका (मतभेदों में से कुछ here समझाया गया है) का उपयोग कर एपीआई बुला रहे हैं। इस विशिष्ट मामले में, ईएमआर उदाहरण भूमिका प्रमाण-पत्र आपके उदाहरण की ओर से ईएमआर द्वारा प्राप्त सत्र प्रमाण-पत्र हैं।

आपकी त्रुटि पर विशिष्ट शब्द क्या है? यदि यह Cannot call GetSessionToken with session credentials है, तो यह उपर्युक्त सभी की पुष्टि करेगा।

जब आप एक सत्र टोकन के लिए अपने उदाहरण भूमिका डाली, यह काम करता है, क्योंकि जैसा कि ऊपर बताया है, यह पता चला है कि एक ग्रहण भूमिका की साख सत्र क्रेडेंशियल्स हैं, तो यह सिर्फ काम करता है।

AssumeRole को स्पष्ट रूप से कॉल करने में कुछ भी गलत नहीं है। यह वही है जो ईएमआर सेवा हुड के नीचे होती है। अपने परिणामों को सत्र प्रमाण-पत्रों में कास्टिंग करने में कुछ भी गलत नहीं है, क्योंकि वे आपके उपयोग के मामले में सत्र प्रमाण-पत्र होने की बहुत अधिक गारंटी रखते हैं।

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

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