अमेज़ॅन S3 से डाउनलोड करने के लिए aws cli का उपयोग करते समय एक्सेस अस्वीकृत का क्या कारण है?


57

मैं वास्तव में एडब्ल्यूएस में इधर-उधर बह रहा हूं यह जानने की कोशिश कर रहा हूं कि मैं यहां क्या याद कर रहा हूं। मैं इसे बनाना चाहता हूं ताकि एक IAM उपयोगकर्ता S3 बाल्टी से फ़ाइलों को डाउनलोड कर सके - बिना फाइलों को पूरी तरह से सार्वजनिक किए - लेकिन मैं उपयोग से वंचित हो रहा हूं। अगर किसी को पता चल सकता है कि मैं क्या बंद करूंगा।

मैंने अब तक क्या किया है:

  • मेरा-उपयोगकर्ता (उदाहरण के लिए) नामक एक उपयोगकर्ता बनाया गया
  • उपयोगकर्ता के लिए पहुंच कुंजियों को बनाया और उन्हें EC2 उदाहरण में ~ / .aws में डाल दिया
  • एक बकेट नीति बनाई, जिसे मैं अपने उपयोगकर्ता के लिए अनुदान पहुंच की उम्मीद करूंगा
  • आज्ञा को दौड़ा aws s3 cp --profile my-user s3://my-bucket/thing.zip .

बाल्टी नीति:

{
  "Id": "Policy1384791162970",
  "Statement": [
    {
      "Sid": "Stmt1384791151633",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::my-bucket/*",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:user/my-user"
      }
    }
  ]
}

परिणाम A client error (AccessDenied) occurred: Access Deniedहालांकि मैं एक ही कमांड और डिफ़ॉल्ट (रूट खाता?) एक्सेस कुंजी का उपयोग करके डाउनलोड कर सकता हूं।

मैंने एक उपयोगकर्ता नीति जोड़ने की कोशिश की है। हालांकि मुझे नहीं पता कि यह क्यों आवश्यक होगा मुझे लगा कि यह चोट नहीं पहुंचाएगा, इसलिए मैंने इसे अपने उपयोगकर्ता से जोड़ा।

{
  "Statement": [
    {
      "Sid": "Stmt1384889624746",
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::my-bucket/*"
    }
  ]
}

समान परिणाम।

जवाबों:


39

मैं भी इससे जूझ रहा था, लेकिन मुझे यहाँ पर एक जवाब मिला https://stackoverflow.com/a/17162973/1750869 जिसने मेरे लिए इस समस्या को हल करने में मदद की। नीचे रिपोटिंग उत्तर।


आपको सभी के लिए अनुमतियां खोलने की आवश्यकता नहीं है। IAM उपयोगकर्ता का उपयोग करके एक खाते से दूसरे खाते में एक बाल्टी से नकल करने के लिए स्रोत और गंतव्य पर नीचे की बाल्टी नीतियों का उपयोग करें

बाल्टी से कॉपी करने के लिए - SourceBucket

बाल्टी टू कॉपी - डेस्टिनेशनबकेट

स्रोत AWS खाता आईडी - XXXX-XXXX-XXXX

स्रोत IAM उपयोगकर्ता - src-iam-user

नीचे दी गई नीति का अर्थ है - IAM उपयोगकर्ता - XXXX-XXXX-XXXX: src – iam- उपयोगकर्ता के पास s3: ListBucket और s3: GetObject के विशेष स्रोत SourceBucket / * और s3: ListBucket और s3: PutObject के विशेषाधिकारों पर गंतव्यBucket / *

SourceBucket पर पॉलिसी इस प्रकार होनी चाहिए:

{
"Id": "Policy1357935677554",
"Statement": [
    {
        "Sid": "Stmt1357935647218",
        "Action": [
            "s3:ListBucket"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::SourceBucket",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
    },
    {
        "Sid": "Stmt1357935676138",
        "Action": ["s3:GetObject"],
        "Effect": "Allow",
        "Resource": "arn:aws:s3::: SourceBucket/*",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
   }
]
}

गंतव्य बकेट पर नीति होनी चाहिए:

{
"Id": "Policy1357935677554",
"Statement": [
    {
        "Sid": "Stmt1357935647218",
        "Action": [
            "s3:ListBucket"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:s3::: DestinationBucket",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
    },
    {
        "Sid": "Stmt1357935676138",
        "Action": ["s3:PutObject"],
        "Effect": "Allow",
        "Resource": "arn:aws:s3::: DestinationBucket/*",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
   }
]
}

चलाने की आज्ञा है s3cmd cp s3://SourceBucket/File1 s3://DestinationBucket/File1


1
हे भगवान, तुम मेरे हीरो हो। मुझे बस बाल्टी स्तर पर ListBucket अनुमति याद आ रही थी। मुझे अभी तक नहीं पता है कि मुझे किसी वस्तु को cp करने के लिए बाल्टी की आवश्यकता क्यों है, लेकिन यह ठीक है। शायद यह केवल कमांड कमांड का उपयोग करने की एक विचित्रता है?
जोश गगनोन

हाँ, यह बहुत अजीब है। आपको लगता है कि s3: * की एक एकल नीति होनी चाहिए (हालांकि यह असुरक्षित हो सकती है) पवित्रता परीक्षण के लिए पर्याप्त होगी।
सर्जियो

fml, 2 दिन उस ListBucket अनुमति के लिए बर्बाद हो गए। अच्छी पकड़
बजे

बहुत समय बिताया .. यह आवश्यक उत्तर था। ListBucket - bucketname, GetObject - bucketname / *
rsmoorthy

12

जब मैंने उसी मुद्दे का सामना किया, तो यह पता चला कि AWS को सक्षम होने के लिए सर्वर-साइड एन्क्रिप्शन की आवश्यकता थी। तो निम्न आदेश मेरे लिए सफलतापूर्वक काम किया:

aws s3 cp test.txt s3://my-s3-bucket --sse AES256

3
धन्यवाद! मेरे मामले में यह --sse aws:kmsबाल्टी "डिफ़ॉल्ट" का उपयोग करना था ...
माइकल यू

यदि आप एक गैर-डिफ़ॉल्ट KMS कुंजी का उपयोग कर रहे हैं, तो आपको उसे भी पास करना होगा: --sse-kms-key-id 0123-abc-etc हालाँकि, जो भाग स्पष्ट नहीं है, वह यह है कि आपकी अपनी KMS कुंजी का उपयोग करने के लिए आपके पास IAM की अनुमति होनी चाहिए kms:GenerateDataKeyया आपको अभी भी एक्सेस अस्वीकृत मिलेगा।
दिारोक

प्रश्न डाउनलोड के बारे में है .. आप एक एन्क्रिप्टेड S3 को अपलोड कर रहे हैं, इसलिए कुंजी की आवश्यकता है।
इलियास

4

मैं जेम्स द्वारा उल्लिखित 'किसी भी प्रमाणित AWS उपयोगकर्ता' विकल्प की सिफारिश नहीं करूंगा।

ऐसा करने से एक बाल्टी-स्तर ACL जुड़ जाता है जो किसी भी AWS खाते (न केवल आपके IAM उपयोगकर्ताओं) को उस बाल्टी के लिए सूची / हटाने / संशोधित करने की अनुमति देता है।

यानी सार्वजनिक रूप से किसी के लिए भी लिखा / लिखा हुआ है।


क्या आपने इसका परीक्षण किया है? मैं इस धारणा के तहत था कि AWS खाते का अर्थ वास्तव में मेरे संगठन के साथ कोई इकाई है - यानी एक उपयोगकर्ता, एक EC2 उदाहरण, एक IAM भूमिका, लेकिन किसी अन्य खाते से कोई व्यक्ति नहीं। मैं गलत हो सकता है, और मैं अपने योगदान को संपादित करूंगा और यदि मेरी स्थिति ठीक है तो मैं अपनी बाल्टियों का ऑडिट करवाता हूं। धन्यवाद।
जेम्स डनमोर

1
हाँ। S3 ACLs में "प्रमाणीकृत उपयोगकर्ता" अनुदानदाता का अर्थ है सभी AWS खाते। यह हस्ताक्षरित अनुरोधों को लागू करता है, लेकिन अधिक कुछ नहीं। यहाँ एक संदर्भ है: लिंक
एंड्रयू

3

मैंने पॉलिस लिखने के बिना इसे ठीक करने में कामयाब रहा - एस 3 कंसोल (वेब ​​यूआई) से मैंने बाल्टी का चयन किया और अनुमतियों के टैब में "किसी भी प्रामाणिक एडब्ल्यूएस उपयोगकर्ता" को चुना और सभी बक्से को टिकट दिया।

अद्यतन: जैसा कि टिप्पणियों में कहा गया है "कोई भी प्रमाणित एडब्ल्यूएस उपयोगकर्ता" आपके खाते में सिर्फ उपयोगकर्ता नहीं है, यह सभी एडब्ल्यूएस प्रमाणित उपयोगकर्ता हैं, कृपया सावधानी के साथ उपयोग करें


मुझे लगता है कि यह आपके लिए एक नीति बना रहा है। सभी बॉक्स को टिक करने से आपको ListBucket, इत्यादि मिलेंगे।
जोश गगनोन

मुझे यकीन है कि यह है - मुझे सिर्फ इतना पता है कि लेखन नीतियां एक दर्द हो सकती हैं, जो टिक बॉक्स आपको थोड़ा और अधिक दे सकते हैं लेकिन एक अच्छा त्वरित समाधान
जेम्स डनमोर

2

यहां तक ​​कि अगर आपकी IAM नीतियों को सही तरीके से सेट किया गया है, तो भी आप An error occurred (AccessDenied) when calling the <OPERATION-NAME> operation: Access Deniedअपनी क्रेडेंशियल्स पर MFA (मल्टी-फैक्टर ऑथेंटिकेशन) आवश्यकताओं के कारण त्रुटि प्राप्त कर सकते हैं । यदि आप पहले से ही एडब्ल्यूएस कंसोल में लॉग इन कर चुके हैं तो यह आपको रोक सकता है क्योंकि ऐसा प्रतीत होता है कि आपके क्रेडेंशियल्स ठीक काम कर रहे हैं, और एनआईएस क्ली से त्रुटि संदेश से इनकार करने की अनुमति विशेष रूप से उपयोगी नहीं है।

कुछ अच्छे निर्देश पहले से ही हैं कि एमएफए को अवी क्ली के साथ कैसे सेट किया जाए:

असल में, आपको अपने एमएफए डिवाइस का पता प्राप्त करने की आवश्यकता है, और अस्थायी टोकन प्राप्त करने के लिए अपने डिवाइस से कोड के साथ भेजें।


तुमने मेरा दिन बचा लिया भाई!
शिनटायरॉयड

यस, यही कारण है! AWS ने आउटपुट में यह कारण क्यों नहीं दिखाया?
tommy.qichang

0

मैं बस वेबयूआई पर गया और बाल्टी पर क्लिक किया, फिर अनुमतियों में गया और फिर नीति पर चला गया। जब मैंने इसे खोला तो मैंने डिलीट पर क्लिक किया। मुझे लगता है कि मुझे लगता है कि यह विन्यास था।

मैं मुख्य s3 पृष्ठ पर वापस गया, फिर बाल्टी पर क्लिक किया और इसे हटाने का प्रयास किया और यह काम किया।

यहां तक ​​कि जब मैं इसे aws-cli का उपयोग करके किया

$ aws s3 rb s3://bucket-name --force  

वैसे भी, यह वह चीज है जो मेरे लिए काम करती है। अनुमतियों पर नीति आपको बाल्टी हटाने से रोक रही है।


0

एक बार बस चलाने की कोशिश करके मुझे यह त्रुटि मिली:

aws s3 cp s3://[bucketName]/[fileName] .

एक फ़ोल्डर में जहां मेरे पास अनुमति नहीं थी। यह मूर्खतापूर्ण है, लेकिन सुनिश्चित करें कि आप उस फ़ोल्डर के मालिक हैं जिस पर आप जाने से पहले हैं!


0

समस्या तब आती है जब आप अमान्य संसाधन या ऑब्जेक्ट नाम सम्मिलित करते हैं। मेरे पास boto3 के साथ एक ही समस्या थी (मेरे मामले में यह अमान्य लॉकेट था)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.