बकेट-स्तरीय अनुमति के साथ पुटओबजेक्ट ऑपरेशन को कॉल करते समय एक्सेस अस्वीकृत हो रहा है


108

मैंने http://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_examples.html#iam-policy-example-s3 पर उदाहरण का अनुसरण किया कि कैसे केवल एक बाल्टी के लिए उपयोगकर्ता को अनुदान दिया जाए।

मैंने तब W3 टोटल कैश वर्डप्रेस प्लगइन का उपयोग करके कॉन्फिगर का परीक्षण किया। परीक्षण विफल रहा।

मैंने भी समस्या का उपयोग करके पुन: प्रस्तुत करने का प्रयास किया

aws s3 cp --acl=public-read --cache-control='max-age=604800, public' ./test.txt s3://my-bucket/

और जो असफल रहा

upload failed: ./test.txt to s3://my-bucket/test.txt A client error (AccessDenied) occurred when calling the PutObject operation: Access Denied

मैं अपनी बाल्टी पर अपलोड क्यों नहीं कर सकता?

जवाबों:


204

मेरे अपने प्रश्न का उत्तर देने के लिए:

उदाहरण नीति ने PutObject पहुंच प्रदान की, लेकिन मुझे भी PutObjectAcl एक्सेस देना पड़ा।

मुझे बदलना पड़ा

"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"

उदाहरण से:

"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:DeleteObject"

आपको यह भी सुनिश्चित करने की आवश्यकता है कि इन दो बक्सों को खोलकर सार्वजनिक-सुलभ ACL सेट करने के लिए आपकी बाल्टी ग्राहकों के लिए कॉन्फ़िगर की गई है:

यहां छवि विवरण दर्ज करें


2
धन्यवाद! सुनिश्चित नहीं हैं कि अमेज़न का अपना दस्तावेज़ बंद क्यों है। आप "s3: AbortMultipartUpload" को भी शामिल करना चाह सकते हैं ताकि एक निरस्त अपलोड को ठीक से साफ़ किया जा सके।
हैशकट

S3 नीतियों के लिए नमूने यहां रखे गए हैं docs.aws.amazon.com/IAM/latest/UserGuide/…
E.Big

1
btw यह मेरे लिए काम नहीं करता है। boto3 इंटरैक्शन, यहां तक ​​कि s3fullaccess पॉलिसी के साथ भी मैं "PutDbject के लिए एक्सेसडेन" प्राप्त कर रहा हूं
E.Big

2
मेरे मामले में इसकी एडब्ल्यूएस क्ली के साथ काम कर रहा है, लेकिन यह बोटो के साथ नहीं है
हार्दिक गज्जर

3
मेरे पास S3 की पूर्ण पहुँच थी, लेकिन ब्लॉक नई सार्वजनिक ACL को याद कर रहा था और सार्वजनिक वस्तुओं को अपलोड कर रहा था। धन्यवाद!
the_ccalderon

37

मुझे भी ऐसी ही समस्या हो रही थी। मैं एसीएल सामान का उपयोग नहीं कर रहा था, इसलिए मुझे ज़रूरत नहीं थी s3:PutObjectAcl

मेरे मामले में, मैं ( सर्वरहीन फ्रेमवर्क YML में) कर रहा था :

- Effect: Allow
  Action:
    - s3:PutObject
  Resource: "arn:aws:s3:::MyBucketName"

के बजाय:

- Effect: Allow
  Action:
    - s3:PutObject
  Resource: "arn:aws:s3:::MyBucketName/*"

जो /*बाल्टी ARN के अंत में जोड़ता है ।

उम्मीद है की यह मदद करेगा।


2
मुझे
६/२६ को

मेरे लिए भी यही हाल था
विजुअलस्पार्क

10

मैं बस एक दीवार के खिलाफ अपना सिर पीट रहा था बस बड़ी फ़ाइलों के साथ काम करने के लिए एस 3 अपलोड प्राप्त करने की कोशिश कर रहा था। प्रारंभ में मेरी त्रुटि थी:

An error occurred (AccessDenied) when calling the CreateMultipartUpload operation: Access Denied

फिर मैंने एक छोटी फाइल कॉपी करने की कोशिश की और मिल गया:

An error occurred (AccessDenied) when calling the PutObject operation: Access Denied

मैं वस्तुओं को ठीक से सूचीबद्ध कर सकता था लेकिन मैं s3:*अपनी भूमिका नीति में अनुमति के बावजूद कुछ और नहीं कर सकता था । मैंने इस तक नीति को समाप्त कर दिया:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::my-bucket/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucketMultipartUploads",
                "s3:AbortMultipartUpload",
                "s3:ListMultipartUploadParts"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket",
                "arn:aws:s3:::my-bucket/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "*"
        }
    ]
}

अब मैं किसी भी फाइल को अपलोड करने में सक्षम हूं। my-bucketअपने बकेट नाम के साथ बदलें । मुझे आशा है कि यह किसी और की मदद करता है जो इस के माध्यम से जा रहा है।


2
यह देता है: लापता आवश्यक क्षेत्र प्रिंसिपल :(
समीरा के

2
मुझे निम्न त्रुटि भी मिल रही है: आवश्यक फ़ील्ड प्रधानाचार्य
करण शर्मा

आप इसे yml में कैसे करते हैं
ichimaru

खबरदार: यह आपके आईएएम उपयोगकर्ता / भूमिका को सभी बाल्टियों में चाबियाँ सूचीबद्ध करने के लिए उपयोग देगा। देखभाल के साथ उपयोग करें; आदर्श रूप से कभी भी उपयोग करने से बचें "Resource": "*"
डारियन मूडी

जोड़ें - "प्रिंसिपल": "*", - नीचे "प्रभाव": "अनुमति दें", लापता आवश्यक फ़ील्ड के साथ समस्या को हल करने के लिए
meck373

9

यदि यह किसी और की मदद करता है, तो मेरे मामले में, मैं एक सीएमके का उपयोग कर रहा था (यह डिफ़ॉल्ट aws / s3x का उपयोग करके ठीक काम करता है)

मुझे IAM में अपनी एन्क्रिप्शन कुंजी परिभाषा में जाना था और प्रोग्राम उपयोगकर्ता को boto3 में लॉग इन किया गया था, जो "उपयोगकर्ताओं को एन्क्रिप्ट करने और डिक्रिप्ट करने के लिए इस कुंजी का उपयोग अनुप्रयोगों के भीतर और KMS के साथ एकीकृत AWS सेवाओं का उपयोग करते समय कर सकता है।"


इससे मुझे मदद मिली। धन्यवाद! अनुमतियों के रूप में एक ही त्रुटि, लेकिन वास्तव में एन्क्रिप्शन था।
विसेंट रोचा

6

मेरे पास केडब्ल्यूएस एन्क्रिप्शन के साथ संरक्षित एस 3 बाल्टी पर अपलोड करने के लिए एक समान मुद्दा था। मेरी एक न्यूनतम नीति है जो एक विशिष्ट s3 कुंजी के तहत वस्तुओं को जोड़ने की अनुमति देती है।

मुझे अपनी नीति में निम्नलिखित KMS अनुमतियों को जोड़ने की आवश्यकता थी ताकि भूमिका को बाल्टी में डाल सकें। (सख्ती की आवश्यकता से थोड़ा अधिक हो सकता है)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "kms:ListKeys",
                "kms:GenerateRandom",
                "kms:ListAliases",
                "s3:PutAccountPublicAccessBlock",
                "s3:GetAccountPublicAccessBlock",
                "s3:ListAllMyBuckets",
                "s3:HeadBucket"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "kms:ImportKeyMaterial",
                "kms:ListKeyPolicies",
                "kms:ListRetirableGrants",
                "kms:GetKeyPolicy",
                "kms:GenerateDataKeyWithoutPlaintext",
                "kms:ListResourceTags",
                "kms:ReEncryptFrom",
                "kms:ListGrants",
                "kms:GetParametersForImport",
                "kms:TagResource",
                "kms:Encrypt",
                "kms:GetKeyRotationStatus",
                "kms:GenerateDataKey",
                "kms:ReEncryptTo",
                "kms:DescribeKey"
            ],
            "Resource": "arn:aws:kms:<MY-REGION>:<MY-ACCOUNT>:key/<MY-KEY-GUID>"
        },
        {
            "Sid": "VisualEditor2",
            "Effect": "Allow",
            "Action": [
            <The S3 actions>
            ],
            "Resource": [
                "arn:aws:s3:::<MY-BUCKET-NAME>",
                "arn:aws:s3:::<MY-BUCKET-NAME>/<MY-BUCKET-KEY>/*"
            ]
        }
    ]
}

बहुत बढ़िया। मैंने aws/s3एक भूमिका से जुड़ी IAM नीति (KMS नीति में नहीं) में डिफ़ॉल्ट प्रबंधित कुंजी से अनुमतियों की प्रतिलिपि बनाई , और यह अच्छी तरह से काम करती है। केवल कार्यों मैं किलोमीटर Arns के खिलाफ की जरूरत थे: kms:Encrypt, kms:Decrypt, kms:ReEncrypt*, kms:GenerateDataKey*, kms:DescribeKey। तो बस मानक S3 अनुमतियाँ।
zrr

3

मेरे द्वारा की गई गलती के लिए मुझे वही त्रुटि संदेश मिल रहा था: सुनिश्चित करें कि आप सही s3 uri का उपयोग करते हैं जैसे: s3://my-bucket-name/

(यदि मेरा बकेट-नाम आपके a3 s के मूल में है)

मैं उस पर जोर देता हूं क्योंकि जब आपके ब्राउज़र से s3 बाल्टी पेस्ट करते हैं तो आपको कुछ मिलता है https://s3.console.aws.amazon.com/s3/buckets/my-bucket-name/?region=my-aws-regiontab=overview

इस प्रकार मैंने गलती का उपयोग किया है s3://buckets/my-bucket-nameजो उठता है:

An error occurred (AccessDenied) when calling the PutObject operation: Access Denied



1

ऊपर के एक पद के समान, (मैं 50 क्रेडेंशियल्स का उपयोग कर रहा था) सिवाय S3 अपलोड को प्राप्त करने के लिए बड़ी 50M फाइल के साथ काम करने के लिए।

प्रारंभ में मेरी त्रुटि थी:

An error occurred (AccessDenied) when calling the CreateMultipartUpload operation: Access Denied

मैंने मल्टीमार्ट_होल्ड को 50M से ऊपर होने के लिए स्विच किया

aws configure set default.s3.multipart_threshold 64MB

और मुझे मिल गया:

An error occurred (AccessDenied) when calling the PutObject operation: Access Denied

मैंने बकेट पब्लिक एक्सेस सेटिंग्स की जाँच की और सभी को अनुमति दी गई। इसलिए मैंने पाया कि सभी S3 बकेट्स के लिए पब्लिक एक्सेस को अकाउंट लेवल पर ब्लॉक किया जा सकता है :

S3 खाता स्तर पर सार्वजनिक ACL को ब्लॉक कर सकता है


1

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

    {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::yourbucketnamehere",
                "arn:aws:s3:::yourbucketnamehere/*"
            ],
            "Effect": "Allow",
            "Principal": "*"
        }
    ]
}

मेरे लिए काम किया, मैंने एक नया S3 बाल्टी बनाया, इसे पूरी तरह से सार्वजनिक कर दिया। इसके लिखने योग्य put_object, लेकिन put_object w / ACL = विकल्प करते समय विफल रहता है। अजीब?
डॉग एफ

0

यदि आपने S3 एन्क्रिप्शन के लिए अपने स्वयं के ग्राहक प्रबंधित KMS कुंजी निर्दिष्ट की है, तो आपको ध्वज प्रदान करने की आवश्यकता है --server-side-encryption aws:kms, उदाहरण के लिए:

aws s3api put-object --bucket bucket --key objectKey --body /path/to/file --server-side-encryption aws:kms

यदि आप ध्वज नहीं जोड़ते हैं --server-side-encryption aws:kmsतो cli एक AccessDeniedत्रुटि प्रदर्शित करता है


0

मैं नीतियों से लैम्ब्डा तक पूर्ण s3 पहुंच प्रदान करके समस्या को हल करने में सक्षम था। लैम्ब्डा के लिए एक नई भूमिका बनाएं और पॉलिसी को पूर्ण S3 एक्सेस के साथ संलग्न करें।

आशा है कि यह मदद करेगा।

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