2013-06-03 8 views
16

मुझे उपयोगकर्ता को सभी अनुमतियों के साथ मिला है।अमेज़ॅन एस 3 कॉपीऑब्जेक्ट अनुमति

{ 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": "*", 
     "Resource": "*" 
    } 
    ] 
} 

मैं एडब्ल्यूएस-sdk-php-2 रख दिया और बाल्टी में वस्तुओं कॉपी करने के लिए उपयोग कर रहा हूँ।

http://docs.aws.amazon.com/aws-sdk-php-2/latest/class-Aws.S3.S3Client.html

रखें कोड सही

   $client->putObject(array(
       'Bucket'  => 'kiosk', 
       'Key'  => 'test/orders/test.csv', 
       'SourceFile' => $sourcePath, 
      )); 

जांच के बाद काम करता है वस्तु https://console.aws.amazon.com/s3 के माध्यम से एस 3 पर बनाया है, तो मैं अगले स्क्रिप्ट पर कार्य कर रहा हूँ। अपलोड फ़ाइल

Fatal error: Uncaught Aws\S3\Exception\S3Exception: AWS Error Code: AllAccessDisabled, Status Code: 403, AWS Request ID: XXX, AWS Error Type: client, AWS Error Message: All access to this object has been disabled, User-Agent: aws-sdk-php2/2.2.1 Guzzle/3.3.1 curl/7.19.7 PHP/5.4.13 thrown in phar:///usr/share/pear/AWSSDKforPHP/aws.phar/src/Aws/Common/Exception/NamespaceExceptionFactory.php on line 89 

बाद मैन्युअल console.aws.amazon.com/s3 मैं अलग त्रुटि जब नकल करने की कोशिश कर देखें::

Fatal error: Uncaught Aws\S3\Exception\AccessDeniedException: AWS Error Code: AccessDenied, Status Code: 403, AWS Request ID: XXX, AWS Error Type: client, AWS Error Message: Access Denied, User-Agent: aws-sdk-php2/2.2.1 Guzzle/3.3.1 curl/7.19.7 PHP/5.4.13 thrown in phar:///usr/share/pear/AWSSDKforPHP/aws.phar/src/Aws/Common/Exception/NamespaceExceptionFactory.php on line 89 

 $result = $client->copyObject(array(
     'Bucket' => 'kiosk', 
     'CopySource' => 'test/orders/test.csv', 
     'Key' => 'test/test.csv', 
    )); 

और मैं गंभीर त्रुटि हो रही है

मैं console.aws.amazon.com/s3 के माध्यम से फ़ाइल और फ़ोल्डर पर अनुमतियां सेट करने का भी प्रयास करता हूं: अनुदान: प्रत्येक व्यक्ति, खोलें/डाउनलोड करें और अनुमति देखें और अनुमति संपादित करें

लेकिन फिर भी वही त्रुटि।

+0

मुझे S3 में ऑब्जेक्ट तक पहुंचने का प्रयास करते समय एक ही त्रुटि संदेश है ... क्या आपको जवाब मिल गया? – insanepaul

+0

किसी और के लिए जिसकी समस्या है, मैंने सोचा कि मैं अपना संकल्प साझा करूंगा - मेरा मुद्दा यह था कि मैंने एक उपयोगकर्ता खाते के साथ एक फाइल अपलोड की थी, और इसे दूसरे उपयोगकर्ता के साथ कॉपी करने की कोशिश की जिसके परिणामस्वरूप पहुंच से इनकार कर दिया गया। –

उत्तर

22

पता चला कि समस्या क्या है; एक एडब्ल्यूएस नौसिखिया होने के नाते मैंने थोड़ी देर तक संघर्ष किया जब तक मुझे एहसास हुआ कि आपके द्वारा सेट किए गए उपयोगकर्ताओं के लिए प्रत्येक नीति को उस सेवा की स्पष्ट रूप से अनुमति देने की आवश्यकता है जिसका आप उपयोग कर रहे हैं।

इस मामले में मैंने उपयोगकर्ता को S3 में अनुमति देने के लिए सेट नहीं किया था।

गोटो आईएएम फिर उपयोगकर्ताओं को मिला और उस विशेष उपयोगकर्ता पर क्लिक करें जिसमें आपके द्वारा उपयोग किए जा रहे प्रमाण-पत्र हैं। वहां से अनुमतियाँ टैब प्राप्त करें, फिर उपयोगकर्ता नीति संलग्न करें पर क्लिक करें और चयन नीति टेम्पलेट के तहत S3 नीति खोजें। यह आपकी समस्या को ठीक करना चाहिए।

आशा है कि मदद करता है!

+1

मैंने किया और अभी भी एडब्ल्यूएस त्रुटि कोड प्राप्त किया: AccessDenied त्रुटि प्रकार: क्लाइंट किसी भी पॉइंटर्स कृपया – mithra

30

मुझे पता है कि यह एक पुराना सवाल है, लेकिन मैं विरासत परियोजना पर काम करते समय हाल ही में एक ही मुद्दे में भाग गया।

$this->client->copyObject([ 
    'Bucket'  => $this->bucket, 
    'CopySource' => $file, 
    'Key'   => str_replace($source, $destination, $file), 
]); 

मेरे अन्य S3 कॉल की सभी को छोड़कर copyObject एक पहुँच से मना कर त्रुटि फेंक के लिए जारी रखा के लिए काम किया। कुछ खोदने के बाद, मुझे अंत में why पता चला।

AWS v2 SDK CopySource Documentation

मैं सिर्फ कुंजी गुजर रहा था और बनाने धारणा है कि बाल्टी पारित किया जा रहा क्या स्रोत और गंतव्य दोनों का उपयोग होता था। यह एक गलत धारणा है कि बाहर निकलता है। स्रोत में बाल्टी नाम prefixed है।

यहाँ मेरी समाधान था:

$this->client->copyObject([ 
    'Bucket'  => $this->bucket, 
    // Added the bucket name to the copy source 
    'CopySource' => $this->bucket.'/'.$file, 
    'Key'   => str_replace($source, $destination, $file), 
]); 

इसे कहते हैं "प्रवेश निषेध" क्योंकि यह आपके कुंजी के पहले भाग सोचता/फ़ोल्डर वास्तव में बाल्टी के नाम है जो या तो मौजूद नहीं है या वास्तव में डॉन है आप तक पहुंच नहीं है।

आशा है कि कुछ लोगों को मदद मिलेगी!

+2

वही बात होती है जब आप aws cli 'aws s3api copy-object' कमांड का उपयोग करते हैं। आपको '--key' तर्क के हिस्से के रूप में फिर से बाल्टी नाम प्रदान करना होगा, भले ही आपने इसे '- बकेट' तर्क के लिए निर्दिष्ट किया हो और आप एक ही बाल्टी के भीतर प्रतिलिपि बना रहे हों। –