9

मुझे समझने में समस्या हो रही है कि Cognito उपयोगकर्ता पूल का उपयोग करते समय लॉग इन करते समय डायनेमो डीबी पर बढ़िया पहुंच नियंत्रण का उपयोग कैसे करें। मैंने दस्तावेज़ों का पालन किया है और चारों ओर गुमराह किया है, लेकिन किसी कारण से मैं इसे काम नहीं कर पा रहा हूं।Cognito उपयोगकर्ता पूल के साथ DynamoDB ठीक दागदार पहुंच नियंत्रण का उपयोग कैसे करें?

मेरा एडब्ल्यूएस सेटअप नीचे सूचीबद्ध है। यदि मैं भूमिका नीति में स्थिति को हटा देता हूं, तो मैं आइटम को कोई समस्या नहीं ले सकता और डाल सकता हूं, इसलिए ऐसा लगता है कि स्थिति समस्या है। लेकिन मैं यह नहीं समझ सकता कि प्रमाणीकृत पहचानों पर निर्भर नीतियों को कैसे डिबग करना है या नहीं - कौन से चर उपलब्ध हैं, उनके मूल्य क्या हैं, इत्यादि।

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

DynamoDB तालिका

  • तालिका नाम: दस्तावेजों
  • प्राथमिक विभाजन कुंजी: userID (स्ट्रिंग)
  • प्राथमिक तरह कुंजी: डाक आईडी (स्ट्रिंग)

DynamoDB उदाहरण पंक्ति

{ 
    "attributes": {}, 
    "docID": "0f332745-f749-4b1a-b26d-4593959e9847", 
    "lastModifiedNumeric": 1470175027561, 
    "lastModifiedText": "Wed Aug 03 2016 07:57:07 GMT+1000 (AEST)", 
    "type": "documents", 
    "userID": "4fbf0c06-03a9-4cbe-b45c-ca4cd0f5f3cb" 
} 

cognito उपयोगकर्ता पूल उपयोगकर्ता

  • उपयोगकर्ता स्थिति: सक्षम/पुष्टि
  • एमएफए स्थिति: विकलांग
  • उप: 4fbf0c06-03a9-4cbe-b45c-ca4cd0f5f3cb
  • email_verified: सच

"रोलनाम" के लिए भूमिका नीति

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "dynamodb:GetItem", 
       "dynamodb:PutItem" 
      ], 
      "Resource": [ 
       "arn:aws:dynamodb:ap-southeast-2:NUMBER:table/documents" 
      ], 
      "Condition": { 
       "ForAllValues:StringEquals": { 
        "dynamodb:LeadingKeys": [ 
         "${cognito-identity.amazonaws.com:sub}" 
        ] 
       } 
      } 
     } 
    ] 
} 

लॉग इन जानकारी cognitoUser.getUserAttributes()

attribute sub has value 4fbf0c06-03a9-4cbe-b45c-ca4cd0f5f3cb 
attribute email_verified has value true 
attribute email has value ****@****com 

त्रुटि संदेश से लौटे

Code: "AccessDeniedException" 
Message: User: arn:aws:sts::NUMBER:assumed-role/ROLE_NAME/CognitoIdentityCredentials is not authorized to perform: dynamodb:GetItem on resource: arn:aws:dynamodb:ap-southeast-2:NUMBER:table/documents 

उत्तर

13

नीति चर "${cognito-identity.amazonaws.com:sub}" उपयोगकर्ता उप जो आप से नहीं है कॉग्निटो उपयोगकर्ता पूल। वास्तव में यह उपयोगकर्ता की पहचान आईडी है जो कॉग्निटो फेडेरेटेड आइडेंटिटी सेवा द्वारा उत्पन्न होता है जब आप उपयोगकर्ता को संघीय पहचान सेवा के साथ कॉग्निटो उपयोगकर्ता पूल से फ़ेडरेट करते हैं।

चूंकि, "${cognito-identity.amazonaws.com:sub}" में मान आपके डायनेमोडीबी पंक्ति में जो भी है उससे मेल नहीं खाता है, यह AccessDenied के साथ विफल रहता है। इसके लिए काम करने के लिए, userId आपकी डायनेमो प्रविष्टि में वास्तव में पहचान आईडी होना चाहिए, उप नहीं। वर्तमान में, आईएएम नीति चर और कॉग्निटो उपयोगकर्ता पूल सेवा के बीच कोई सीधा लिंक नहीं है।

यहां कुछ दस्तावेज़ लिंक हैं जो मदद कर सकते हैं।
1. IAM roles with Cognito Federated Identity Service
2।Integrating User Pools with Cognito Federated Identity Service

+6

बहुत बहुत धन्यवाद! उन लोगों के लिए जिन्हें किशोरावस्था थोड़ा अधिक मार्गदर्शन की आवश्यकता होती है, जब कोई उपयोगकर्ता कॉग्निटो पहचान पूल का उपयोग करने में लॉग इन करता है, तो IAM में स्ट्रिंग $ {cognito-identity.amazonaws.com:sub} 'AWS.config.credentials में मिले मान को हल करेगा। पहचान आईडी '(जो कुछ हमें' us-east-1: ######## - #### - #### - #### - ########### # ')। – abbm

+1

मुझे http://stackoverflow.com/questions/40446680/aws-iam-using-conditionals?noredirect=1#comment68139618_40446680 में वर्णित समान समस्या का सामना करना पड़ रहा है। मेरी प्राथमिक कुंजी कोग्निटो आईडी के समान है लेकिन मुझे अभी भी अनधिकृत त्रुटि मिल रही है। – achin

+0

@ खेतान मेहता: क्या आप जानते हैं कि 'cognitoIdentityId' का उपयोग करने के लिए कार्यान्वयन पर योजना बनाई गई है? मेरे उपयोग के मामले में, मैं 'cognitoIdentityId' का उपयोग डायनेमोडीबी में हैशकी के रूप में करता हूं और यह मेरी नीतियों में स्थितियों के लिए प्रतिस्थापन चर के रूप में 'cognitoIdentityId' के साथ' dynamodb: LeadingKeys' का उपयोग करने के लिए' सुरक्षा बिंदु से) अच्छा होगा (समान रूप से "अमेज़ॅन डाइनेमो डीबी के लिए ठीक-ठीक पहुंच": http://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html)। – Tom

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