S3 बाल्टी कार्रवाई किसी भी संसाधन पर लागू नहीं होती है


124

मैं इस उत्तर से निर्देशों का पालन कर रहा हूँ S3 बाल्टी नीति का पालन करें:

{
  "Id": "Policy1495981680273",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1495981517155",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::surplace-audio",
      "Principal": "*"
    }
  ]
}

मुझे निम्नलिखित त्रुटि वापस मिली:

कथन में किसी भी संसाधन पर कार्रवाई लागू नहीं होती है

मुझे अपनी नीति से क्या याद आ रही है?


1
मैंने लिंक में समाधान की कोशिश की है: stackoverflow.com/a/36551238/2786039 और यह अब काम कर रहा है। सादर
वुंग गुयेन

जवाबों:


218

IAM डॉक्स, http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Action से

कुछ सेवाएं आपको व्यक्तिगत संसाधनों के लिए कार्य निर्दिष्ट नहीं करने देतीं; इसके बजाय, आप जिस भी क्रिया या सूचना तत्व में सूचीबद्ध होते हैं, उस सेवा में सभी संसाधनों पर लागू होते हैं। इन मामलों में, आप संसाधन तत्व में वाइल्डकार्ड * का उपयोग करते हैं।

इस जानकारी के साथ, संसाधन में नीचे जैसा मूल्य होना चाहिए:

"Resource": "arn:aws:s3:::surplace-audio/*"

40
विश्वास नहीं कर सकते कि बाल्टी की नीति और / या पॉलिसी जनरेटर में इसका उल्लेख नहीं है!
कार्ल्स अल्कोली

4
मैं * का उपयोग कर रहा हूं और यह अभी भी वह त्रुटि देता है। क्या कोई मेरी मदद कर सकता है?
येहुदा क्लिंटन

@ युहेदाक्लिंटन, मेरे लिए काम करता है।
RMati

74

s3:ListBucketअनुमति को हटाना वास्तव में मेरे लिए एक अच्छा पर्याप्त समाधान नहीं था, और शायद कई अन्य लोगों के लिए नहीं है।

यदि आप s3:ListBucketअनुमति चाहते हैं , तो आपको केवल बाल्टी के समतल मेहराब (बिना /*सिरे के) की आवश्यकता है क्योंकि यह अनुमति बाल्टी पर ही लागू होती है, बाल्टी के भीतर वस्तुओं पर नहीं।

जैसा कि नीचे दिखाया गया है, आपको s3:ListBucketबाल्टी के भीतर वस्तुओं से संबंधित अनुमतियों से एक अलग कथन के रूप में अनुमति लेनी होगी s3:GetObjectऔर s3:PutObject:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"        
      ],
      "Principal": {
        "AWS": "[IAM ARN HERE]"
      },
      "Resource": "arn:aws:s3:::my-bucket-name"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject", 
        "s3:PutObject"
      ],
      "Principal": {
        "AWS": "[IAM ARN HERE]"
      },
      "Resource": "arn:aws:s3:::my-bucket-name/*"
    }
  ]
}

माना। कुछ कार्यों के लिए, आप GetObject का प्रदर्शन करने से पहले ListBucket अनुमति की आवश्यकता होती है, इसलिए यह उत्तर अधिक गहन है।
शेवसेल

2
यह मेरे लिए काम करता है और केवल इस बात पर प्रकाश डालता है कि AWS को अभी भी उपयोगकर्ताओं को बुनियादी काम करने के लिए कितना काम करना है।
Volvox

41

त्रुटि कार्रवाई कथन में किसी भी संसाधन पर लागू नहीं होती है

बस इसका मतलब है कि कार्रवाई (आपने नीति में लिखी है) संसाधन पर लागू नहीं होती है। मैं अपनी बाल्टी को सार्वजनिक करने की कोशिश कर रहा था ताकि कोई भी मेरी बाल्टी से डाउनलोड कर सके। जब तक मैं अपने बयान से ("s3: ListBucket") को हटाता हूं तब तक मुझे त्रुटि हो रही थी।

{
  "Id": "Policyxxxx961",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmtxxxxx4365",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::bucket-name/*",
      "Principal": "*"
    }
  ]
}

क्योंकि बाल्टी के अंदर सूची बकेट लागू नहीं होती है, इस प्रकार इस एक्शन पॉलिसी को हटाने से काम ठीक हो जाता है।


धन्यवाद, कि मेरे लिए काम किया, "s3: ListBucket" को हटा दिया।
पॉल वाटसन

14

बस इस मुद्दे में भाग गया और उन लोगों के लिए एक छोटा समाधान मिला जो एक ही नीति में ListBucket और GetObject होना चाहते हैं।

{
  "Id": "Policyxxxx961",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmtxxxxx4365",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": [
          "arn:aws:s3:::bucket-name",
          "arn:aws:s3:::bucket-name/*"
      ],
      "Principal": "*"
    }
  ]
}

गलत - PrincipalS3 नीति व्याकरण के लिए अनुमति नहीं है।
azec-pdx

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

यह सही है, संसाधन इस मामले में एक सरणी होना चाहिए और उन 2 लाइनों को शामिल करना चाहिए ... वोट करें।
Assil

4

मैंने बाल्टी बनाते समय भी इसी तरह के मुद्दे का सामना किया है

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::mrt9949"
            ]
        }
    ]
}

मैंने उपरोक्त कोड को बदल दिया है

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::mrt9949/*"
            ]
        }
    ]
}

अपने बकेट नाम में / * जोड़ें यह समस्या को हल करेगा

यहाँ मेरे बकेट का नाम mrt9949 है


धन्यवाद! इसके लिए उम्र की तलाश
जैक_हार्डी

4

मेरे मामले में इस त्रुटि का समाधान कुछ ऐसी कार्रवाइयों को हटाने की कोशिश कर रहा था जो मैं लागू कर रहा था। उनमें से कुछ इस संसाधन के साथ प्रासंगिक नहीं हैं, या काम नहीं कर सकते हैं। इस मामले में यह मुझे इनमें शामिल नहीं होने देगा:

GetBucketAcl ListBucket ListBucketMultipartUploads


ListBucket मुझे मिल गया! इसके लिए धन्यवाद
Quad64Bit

मेरे लिए, जब केवल getObjet
LittleTiger

0

आपको पॉलिसी के लिए संसाधन टैग के तहत परिभाषित arn के पैटर्न की जांच करनी होगी-

"संसाधन": "arn: aws: s3 ::: s3mybucketname / *"

अंत में "/ *" को जोड़ने के साथ अगर आप अपनी बकेट के लिए पब्लिक एक्सेस पॉलिसी अनब्लॉक होने के बाद भी समस्या का समाधान करने में मदद करेंगे।


0
  • अपने उदाहरण में अमेज़न S3 पर जाएं।
  • अनुमतियाँ पर जाएँ -> सार्वजनिक एक्सेस टैब।
  • संपादित करें का चयन करें और सभी सार्वजनिक पहुंच को ब्लॉक और अनचेक करें।
  • आपको अनुमति टैब और पहुंच नियंत्रण सूची में 'सार्वजनिक' टैग दिखाई देगा।

0

आप प्रत्येक फ़ोल्डर के लिए ListBuckets को भी कॉन्फ़िगर कर सकते हैं, जैसे

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowSESPuts-1521238702575",
            "Effect": "Allow",
            "Principal": {
                "Service": "ses.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::buckets.email/*",
            "Condition": {
                "StringEquals": {
                    "aws:Referer": "[red]"
                }
            }
        },
        {
            "Sid": "Stmt1586754972129",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::596322993031:user/[red]"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::buckets.email",
            "Condition": {
                "StringEquals": {
                    "s3:delimiter": "/",
                    "s3:prefix": [
                        "",
                        "domain.co",
                        "domain.co/user"
                    ]
                }
            }
        },
        {
            "Sid": "Stmt1586754972129",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::596322993031:user/[red]"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::buckets.email",
            "Condition": {
                "StringLike": {
                    "s3:prefix": "domain.co/user/*"
                }
            }
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::596322993031:user/[red]"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::buckets.email/domain.co/user/*"
        }
    ]
}

इन नियमों का उपयोग ईमेल प्राप्त करने के लिए SES के साथ किया जाता है, लेकिन बाहरी उपयोगकर्ता को SES द्वारा बाल्टी में रखी गई फ़ाइलों को देखने की अनुमति देता है। मैंने यहां से निर्देशों का पालन किया: https://aws.amazon.com/blogs/security/writing-iam-policies-grant-access-to-user-specific-folders-in-an-amazon-s3-bucket/

इसके अलावा, आपको domain.co/user/एसडीके का उपयोग करते समय अंत में स्लैश के रूप में उपसर्ग निर्दिष्ट करना होगा , अन्यथा आपको एक्सेस से वंचित कर दिया जाएगा। आशा है कि यह किसी को भी मदद करता है

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