क्या केवल एक बाल्टी को देखने / उपयोग करने के लिए पहुँच को सीमित करने के लिए S3 नीति है?


123

मेरे पास एक साधारण बाल्टी है जो images.mysite.comमेरे S3 और बैकअप वाली अन्य बाल्टियों आदि की तरह दिखती है ।

मैं एक विशिष्ट उपयोगकर्ता को images.mysite.comछवियों को अपलोड करने के लिए बाल्टी तक पहुंचने में सक्षम होने की अनुमति देना चाहता हूं । हालाँकि, मैं नहीं चाहता कि वह किसी और बाल्टी को देखे; यह भी नहीं कि वे मौजूद हैं।

मैं ऐसी नीति नहीं बना सका जो ऐसा करती हो; हर बार जब मैं कुछ प्रतिबंधों की कोशिश करता हूं, तो यह किसी भी बाल्टी की सूची को अवरुद्ध करता है।


मैं इस प्रश्न को ऑफ-टॉपिक के रूप में बंद करने के लिए मतदान कर रहा हूं क्योंकि यह सुपरसर्स पर होना चाहिए
टॉन्नी मैडसेन

यहाँ एक नीति बनाई जा सकती है: awspolicygen.s3.amazonaws.com/policygen.html
सुहैल गुप्ता


1
क्यों न सिर्फ बाल्टी का URL साझा - https://s3.console.aws.amazon.com/s3/buckets/my-bucket-name/। इस तरह आप उन्हें पूरी सूची देखने से रोकते हैं और अपनी वर्तमान नीति पर कुछ भी नहीं बदलते हैं।
ट्रेकोडर

जवाबों:


119

मैं थोड़ी देर के लिए यह कोशिश कर रहा था और अंत में एक काम कर समाधान के साथ आया था। आप जिस प्रकार की क्रिया कर रहे हैं, उसके आधार पर आपको अलग-अलग "संसाधन" का उपयोग करना चाहिए। इसके अलावा, मैंने पिछले उत्तर (जैसे DeleteObject) में कुछ लापता कार्यों को शामिल किया और कुछ और (जैसे PutBucketAcl) को प्रतिबंधित किया ।

निम्नलिखित IAM नीति अब मेरे लिए काम कर रही है:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation",
        "s3:ListBucketMultipartUploads"
      ],
      "Resource": "arn:aws:s3:::itnighq",
      "Condition": {}
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:AbortMultipartUpload",
        "s3:DeleteObject",
        "s3:DeleteObjectVersion",
        "s3:GetObject",
        "s3:GetObjectAcl",
        "s3:GetObjectVersion",
        "s3:GetObjectVersionAcl",
        "s3:PutObject",
        "s3:PutObjectAcl",
        "s3:PutObjectVersionAcl"
      ],
      "Resource": "arn:aws:s3:::itnighq/*",
      "Condition": {}
    },
    {
      "Effect": "Allow",
      "Action": "s3:ListAllMyBuckets",
      "Resource": "*",
      "Condition": {}
    }
  ]
}

एक बाल्टी के बारे में और वस्तुओं के संबंध में कार्रवाई अलग-अलग होनी चाहिए।


9
यह एक शानदार जवाब है, धन्यवाद। यह ध्यान देने योग्य हो सकता है कि s3 का निहितार्थ: ListAllMyBuckets अनुमति यह है कि इस पॉलिसी को प्राप्त करने वाला आपके सभी (रूट की) बाल्टियों को देख सकता है। सीधे तौर पर कोई डेटा प्रकटीकरण नहीं है, लेकिन बाल्टी नामों के आसपास संवेदनशीलता / भ्रम हो सकता है। यह इस विशेष अनुमति को हटाने के लिए संभव है और चीजों को अभी भी काम करना चाहिए (हालांकि "s3cmd ls" आदि लक्ष्य बाल्टी वापस नहीं करेंगे)।
माइक रिपास

91
यह उपयोगकर्ता को अन्य बकेट नाम देखने के लिए नहीं रोकता है!
मेट्सोस

2
@metdos आप अंतिम नीति को हटाकर उपयोगकर्ताओं को अन्य बकेट नाम देखने के लिए रोक सकते हैं।
हेंद्रा उज़िया

20
आदेश कंसोल में बाल्टियों की सूची देखने के लिए (और इसलिए बाल्टी पहुँच के लिए कंसोल का उपयोग) आप में करना होगा अनुदान ListAllMyBucketsऔर GetBucketLocationके लिए सभी S3 बाल्टी ( "arn:aws:s3:::*"बजाय काम करेंगे "*"संसाधन के लिए)। जैसा कि इस एडब्ल्यूएस ब्लॉग पोस्ट में कहा गया है "एक तरफ के रूप में, आप वर्तमान में चुनिंदा बाल्टियों को फ़िल्टर नहीं कर सकते हैं, इसलिए उपयोगकर्ताओं को कंसोल एक्सेस के लिए सभी बाल्टी सूचीबद्ध करने की अनुमति होनी चाहिए।"
जुवाडेक

10
यह भयानक सलाह है। यह खतरनाक है और विशेष रूप से ओपी नहीं चाहता था। संभव वर्कअराउंड के लिए एंड्रियास स्टेनकेविट और बीफ़र द्वारा जवाब देखें ।
आंद्रेकेआर

37

हमारे उपयोग का मामला: हमारे क्लाउड एप्लिकेशन के ग्राहकों के लिए बैकअप स्थान प्रदान करें, जिन्हें आम S3 टूल का उपयोग करके सीधे क्लाइंट द्वारा एक्सेस किया जा सकता है। बेशक, किसी भी ग्राहक को यह नहीं देखना चाहिए कि अन्य ग्राहकों के पास क्या है।

जैसा कि क्लाउडबेरीमैन ने समझाया, "आप या तो सभी बाल्टियों को सूचीबद्ध कर सकते हैं या किसी को भी नहीं।", इसलिए हमें एक काम के साथ आना होगा। पृष्ठभूमि:

उपयोगकर्ता को ListAllMyBuckets अधिकार प्रदान करना आवश्यक है ताकि AWS S3 कंसोल या S3Fox एक त्रुटि संदेश के बिना कनेक्ट हो। लेकिन ListAllMyBuckets सभी बाल्टियों को सूचीबद्ध करता है, सौंपे गए संसाधनों के संबंध में (वास्तव में, केवल arn: ... ::: "काम करता है")। यह एक गंभीर बग है, अगर आप मुझसे पूछें। Btw। सभी बकेट के लिए लिस्टबकेट से इनकार करना उन्हें सूचीबद्ध होने से नहीं रोकता है, क्योंकि लिस्टबकेट ने बाल्टी की सामग्री को सूचीबद्ध करने के लिए अधिकार प्रदान किया है।

वहाँ 3 possiblities मैं चारों ओर काम के रूप में माना जाता है। मैंने आखिरी वाला चुना।

(1) गुप्त बकेट नाम का उपयोग करें, जैसे GUIDs

लाभ: स्थापित करने में आसान

नुकसान: प्रबंधन के लिए, विशेष रूप से क्लाइंट के लिए मुश्किल। (अन्य लोगों के हजारों के लिए एक विशिष्ट GUID खोजने के लिए कल्पना।) भी बैकअप सेवा का उपयोग कर बाल्टी = ग्राहकों की संख्या से पता चलता है।

(2) क्लाइंट विशिष्ट फ़ोल्डरों के साथ एक बाल्टी का उपयोग करें

अमेजन अपने S3 / IAM उदाहरणों से यह बताता है कि केवल कुछ उपयोगकर्ताओं या उपयोगकर्ता समूहों द्वारा ही पहुँच प्रदान करने के लिए स्थान उपलब्ध कराया गया है। देख: AWS उदाहरण IAM नीतियां

लाभ: सेट अप करने के लिए काफी आसान, AWS विचारों के साथ जाता है

नुकसान: सभी बाल्टियों की मौजूदगी को सार्वजनिक करने के लिए मजबूर करता है, इसलिए ग्राहक अपने "घर" बाल्टी को पा सकते हैं। AWS लेखांकन बाल्टी उपयोग के आँकड़े प्रदान करता है, लेकिन फ़ोल्डर उपयोग का नहीं, जिससे ग्राहक द्वारा लागत की गणना करना मुश्किल हो जाता है।

(3) ListAllMyBuckets के लिए पहुँच अधिकार प्रदान न करें

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

नुकसान: ग्राहक अपनी बाल्टी खुद नहीं देख सकता। S3Browser एक अच्छा "संदेश नहीं कर सकता" संदेश के साथ आता है और बाल्टी नाम दर्ज करने के लिए कहता है। S3Fox रूट से कनेक्ट होने पर एक एरर मैसेज फेंकता है, लेकिन क्लाइंट के बकेट को डायरेक्ट नेवीगेशन की अनुमति देता है अगर बकेट का नाम पता हो। अमेज़न S3 कंसोल बिल्कुल काम नहीं करता है।

आशा है कि इसने S3 IAM को संभालने में मदद की क्योंकि आपको इसकी आवश्यकता है।


1
इसके अलावा, समाधान (1) के लिए यदि आप एक बाल्टी के साथ वेब होस्टिंग का उपयोग करना चाहते हैं तो बाल्टी नाम को डोमेन नाम से मेल खाना चाहिए।
एंडी फुस्नीक

31

एस 3 कंसोल को एक्सेस प्रदान किए बिना संभव नहीं है ListAllMyBucketsअनुमति ।

मेरे मामले में (और शायद आपका भी, भविष्य का पाठक) एक स्वीकार्य विकल्प उपयोगकर्ताओं को सीधे उस बाल्टी पर साइन इन करने के लिए पुनर्निर्देशित करना है जिसे आप उन्हें देखना चाहते हैं।

इसे पूरा करने के लिए, url में अपने IAM चिन्ह के साथ निम्नलिखित संलग्न करें: /s3/?bucket=bucket-name

पूर्ण साइन-इन URL ( अपने उपनाम को बदलें) और बाल्टी-नाम ):

https://your-alias.signin.aws.amazon.com/console/s3/?bucket=bucket-name

IAM नीति (बदलें) बाल्टी-नाम ):

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::bucket-name",
                "arn:aws:s3:::bucket-name/*"
            ]
        }
    ]
}

उपयोगकर्ताओं के लिए बाल्टी विशिष्ट अनुमतियाँ बनाने के बारे में अधिक जानकारी के लिए, इस ब्लॉग को पढ़ें: http://mikeferrier.com/2011/10/27/granting-access-to-a-single-s3-bucket-use-amazon-iam /


1
यह अच्छा काम करता है। यदि उपयोगकर्ता बाल्टी दृश्य के बाहर का पता नहीं लगा सके, तो यह इष्टतम होगा .... लेकिन मैं इसे ले लूंगा। धन्यवाद @BFar
जेमी पॉपकिन

यह एक सही जवाब है, अन्य सभी हर बाल्टी को सूचीबद्ध करेंगे - जिसे मूल अनुरोध के अनुसार छिपाया जाना चाहिए।
स्टीव होर्वाथ

वास्तव में मुझे क्या चाहिए। धन्यवाद।
दि झांग

20

इस नीति का प्रयास करें। यह भी ध्यान रखें कि उपयोगकर्ता सूची को केवल चयनित बकेट को जाने देने का कोई तरीका नहीं है। आप या तो सभी बाल्टियों को सूचीबद्ध कर सकते हैं या कोई नहीं।

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:GetObjectAcl",
                "s3:PutObjectAcl",
                "s3:ListBucket",
                "s3:GetBucketAcl",
                "s3:PutBucketAcl",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::your_bucket_here/*",
            "Condition": {}
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "*",
            "Condition": {}
        }
    ]
}

2
यह बहुत अच्छा काम करता है! मुझे s3:*मेरे लिए काम करने के लिए इसे बदलने के लिए कार्रवाई करनी थी । मेरे पास भी था "Resource": ["arn:aws:s3:::your_bucket_here", "arn:aws:s3:::your_bucket_here/*"], लेकिन इसकी जरूरत नहीं हो सकती है।
माइकल यगुदैव

3
s3: * एक बाल्टी हटाने सहित कुछ भी करने के लिए पहुँच प्रदान करता है। यकीन है कि तुम चाहते हो?
डेव ग्रेगोरी

10

मैं इस प्रश्न की व्याख्या कर रहा हूं: "क्या मैं एक बाल्टी तक पहुंच की अनुमति दे सकता हूं जहां कोई अन्य बाल्टी सुलभ नहीं होगी और इस प्रकार अदृश्य है।" क्योंकि, उस बाल्टी का नाम दिखा, जिस तक कोई पहुंच नहीं दी गई थी, फिर भी सूचना रिसाव के बराबर है।

और सही उत्तर नहीं है। आवश्यक अनुमति ListAllMyBuckets है जो उपयोगकर्ता को सभी बाल्टी देखने की अनुमति देगा। इस अनुमति को छोड़ने से कंसोल बेकार हो जाएगा।


6

उपयोगकर्ताओं को अन्य बाल्टी के ज्ञान को शामिल किए बिना एक विशिष्ट बाल्टी तक पहुंचने की अनुमति देने का एक शानदार तरीका है। एक समूह नीति जो नीचे की तरह है, उपयोगकर्ताओं को केवल "बाल्टी" देखने की अनुमति देगा। एकमात्र पकड़ यह है कि उपयोगकर्ता केवल कभी बाल्टी का उपयोग करने में सक्षम होगा यदि वे दिए गए बाल्टी समापन बिंदु से जुड़ते हैं। नीचे दिए गए उदाहरण के लिए कि बकेट- a.s3.amazonaws.com होगा। बाल्टी को "प्रमाणित उपयोगकर्ता" भी हो सकते हैं जो इसके लिए अनुमति देते हैं।

{
    "Statement": [
     {
         "Sid": "<EXAMPLE_SID>",
         "Action": [
           "s3:ListBucket",
           "s3:GetBucketLocation"
          ],
         "Effect": "Allow",
         "Resource": [
           "arn:aws:s3:::bucket-a"
         ]
     },
     {
      "Sid": "<EXAMPLE_SID>",
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::bucket-a/*"
      ]
     }
   ]
}

इस विधि को मैक ओएस / एक्स पर साइबरडैक और s3cmd पैकेज का उपयोग करके परीक्षण किया गया था

./s3cmd ls s3://bucket-a --access_key=ACCESS_KEY --secret_key=SECRET_KEY --bucket-locat
ion=ap-southeast-2

मैं अभी भी सभी बाल्टियों की सूची देख सकता हूं। काम नहीं कर रहे हैं :(
ऋषिकेश चंद्र

5

इस बारे में उलझन में है कि कोई जवाब क्यों नहीं दिया गया?

उपरोक्त समाधान से प्रत्येक नीति विवरण को तोड़ते हैं:

यह नीति बयान से बाल्टी की सामग्री पर लागू होता है, लेकिन नहीं हिरन ही। यह शायद वह सवाल नहीं है , जिसके लिए आपने पूछा था, क्योंकि आप देख नहीं सकते कि बाल्टी में क्या है।

{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:GetObjectAcl",
"s3:PutObjectAcl",
"s3:ListBucket",
"s3:GetBucketAcl",
"s3:PutBucketAcl",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::your_bucket_here/*",
"Condition": {}
}

यह दो बयान नीति से ली गई पर बाल्टी को पढ़ने के लिए पहुंच (देता है arn:aws:s3:::your_bucket_here/) केवल पढ़ने के लिए बाल्टी की सामग्री पर, लेकिन अभी भी अनुमति देता है CRUD ऑप्स ( arn:aws:s3:::your_bucket_here/*)।

{
  "Effect": "Allow",
  "Action": [
    "s3:ListBucket",
    "s3:GetBucketLocation",
    "s3:ListBucketMultipartUploads"
  ],
  "Resource": "arn:aws:s3:::your_bucket_here",
  "Condition": {}
},
{
  "Effect": "Allow",
  "Action": [
    "s3:AbortMultipartUpload",
    "s3:DeleteObject",
    "s3:DeleteObjectVersion",
    "s3:GetObject",
    "s3:GetObjectAcl",
    "s3:GetObjectVersion",
    "s3:GetObjectVersionAcl",
    "s3:PutObject",
    "s3:PutObjectAcl",
    "s3:PutObjectAclVersion"
  ],
  "Resource": "arn:aws:s3:::your_bucket_here/*",
  "Condition": {}
}

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

{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*",
"Condition": {}
}

हालाँकि, उपरोक्त बहुत उपयोगी है यदि आप एक क्लाइंट का उपयोग करते हैं जो S3 स्टोर ब्राउज़ करता है। यदि आपका क्लाइंट सीधे स्टोर पर पहुंचता है न कि सीधे बाल्टी में, तो आपको रूट पर बाल्टी की सूची तक पहुंच की आवश्यकता होती है।


3

संभवतः सबसे सरल उपयोग मामला:

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

1
एडब्ल्यूएस प्रतिक्रिया:This policy contains the following error: The policy must contain a valid version string
मैक्सिमबर्नार्ड

यह सही है - मैंने अपनी प्रतिक्रिया को सही किया -> <br/> यहां केवल दो संभावित मान हैं: <br/> * 2012-10-17 * और 2008-10-17 । <br/> आगे के संदर्भ यहां देखे
jjanczyszyn

इस (listing included)अर्थ के बारे में कोई विचार कि उपयोगकर्ता को केवल बाल्टी की सूची कैसे दी जाए? अब तक (और अन्य सभी उत्तरों के अनुसार), ऐसा लगता है कि AWS आपको ऐसा नहीं करने देगा।
मैक्सिमबर्नार्ड

3

AWS संगठनों का उपयोग करके ऐसा करने का आसान तरीका या समाधान है। AWS संगठन आपको कई उपयोगकर्ता खाते रखने की अनुमति देता है। आपके मुख्य खाते में कई AWS खाते (सब) हो सकते हैं और जो भी सेवाएं (s3 / EC2 / *) जो भी AWS खातों में जोड़ी जाती हैं, केवल वही संसाधन दिखाई देंगे।

कृपया देखें https://aws.amazon.com/blogs/aws/aws-organizations-policy-based-management-for-multiple-aws-accounts/ https://aws.amazon.com/organizations/

मेरा खाता पृष्ठ पर संगठन


3

मुझे यह समाधान मिला:
AWS FLOW:
एडब्ल्यूएस फ्लो

बाल्टी नीति:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::MyExampleBucket",
        "arn:aws:s3:::MyExampleBucket/*"
      ],
      "Condition": {
        "StringNotLike": {
          "aws:userId": [
            "AROAEXAMPLEID:*", #Role ID
            "111111111111" #AccountID
          ]
        }
      }
    }
  ]
}

IAM नीति:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::MyExampleBucket",
        "arn:aws:s3:::MyExampleBucket/*"
      ],
      "Condition": {
        "StringNotLike": {
          "aws:userId": [
            "AROAEXAMPLEID:*",  #Role ID
            "AIDAEXAMPLEID",  #UserID
            "111111111111"  #AccountID
          ]
        }
      }
    }
  ]
}

aws iam get-user -user-name USER-NAME --profile = ExampleProfile

aws iam get-role --role-name ROLE-NAME --profile = ExampleProfile

स्रोत: https://aws.amazon.com/blogs/security/how-to-restrict-amazon-s3-bucket-access-to-a-specific-iam-role/

PS बकेट पॉलिसी से सावधान रहें, आप बिना परमिशन के बाहर रह सकते हैं


2

जैसा कि ऊपर अच्छी तरह से चर्चा की गई है, कंसोल पर केवल एक बाल्टी को सूचीबद्ध करना संभव नहीं है। लेकिन अगर S3 बाल्टी की पहुँच IAM से जुड़ी है, तो IAM बाल्टी को सीधे एक्सेस कर सकता है यदि URL से बाल्टी उपलब्ध है। S3 बाल्टी url की तरह होगा:

https://s3.console.aws.amazon.com/s3/buckets/BucketName

जहां बकेटनेम का नाम बाल्टी है IAM की पहुंच है


1
मुझे लगता है कि यह 2018 में भी एकमात्र संभव समाधान है।
सौरभ

1

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

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetBucketLocation",
        "s3:ListAllMyBuckets"
      ],
      "Resource": "arn:aws:s3:::test"
    },
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::test"]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": ["arn:aws:s3:::test/*"]
    }
  ]
}

मैं इस कनेक्शन का परीक्षण करने के लिए साइबरडक का उपयोग कर रहा था।


1

हालांकि s3:ListAllMyBucketsविशिष्ट बाल्टी के लिए कार्रवाई को प्रतिबंधित करना संभव नहीं है , क्योंकि वर्कअराउंड के लिए आप उन्हें विशिष्ट बाल्टी के लिए कंसोल URL भेज सकते हैं, जैसे

  • https://s3.console.aws.amazon.com/s3/buckets/BUCKET_NAME/

स्रोत: S3 कंसोल से S3 बाल्टी की प्रतिबंधित सूची

ऐसा करने के लिए, आपको दिए गए उपयोगकर्ता या समूह के लिए निम्न नीति दस्तावेज़ निर्दिष्ट करना होगा:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:ListBucketMultipartUploads"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket-1",
                "arn:aws:s3:::my-bucket-2"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectVersion",
                "s3:GetObjectVersionAcl",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:PutObjectVersionAcl"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket-1/*",
                "arn:aws:s3:::my-bucket-2/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets"
            ],
            "Resource": "arn:aws:s3:::*"
        }
    ]
}

पढ़ने और लिखने की पहुँच देने के लिए आपकी बाल्टियाँ कहाँ my-bucket-1और कहाँ my-bucket-2हैं।

सम्बंधित:


1

इस नीति का प्रयास करें। उपयोगकर्ता किसी भी बाल्टी को सूचीबद्ध नहीं कर सकते हैं, उन्हें अनुमत बाल्टी के लिए सीधे लिंक का उपयोग करना होगा।

उदाहरण के लिए: s3.console.aws.amazon.com/s3/buckets/bucketname/?region=us-east-1&tab=overview

{
  "Statement": [
    {
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::bucketname"
      ]
    },
    {
      "Action": [
        "s3:PutObject",
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::bucketname*"
      ]
    },

  ],
  "Version": "2012-10-17"
}

1

ऊपर वर्णित अन्य लोगों के समान:

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "s3:ListBucket"
         ],
         "Resource":"arn:aws:s3:::awsexamplebucket"
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:PutObject",
            "s3:GetObject"
         ],
         "Resource":"arn:aws:s3:::awsexamplebucket/*"
      }
   ]
}

हालांकि यहाँ लापता टुकड़ा है। जबकि S3-> होम के माध्यम से बाल्टी तक पहुंचना संभव नहीं है, केवल एक सीधी लिंक के माध्यम से वांछित बाल्टी तक पहुंचना संभव है।

https://s3.console.aws.amazon.com/s3/buckets/yourawsbucket/

आप निम्न पोस्ट में अधिक जानकारी पा सकते हैं:

https://aws.amazon.com/premiumsupport/knowledge-center/s3-console-access-certain-bucket/


0

सॉल्यूशन बेलो ने मेरे लिए काम किया। मैं एक विशिष्ट बाल्टी my- s3- बाल्टी पर एक विशिष्ट उपयोगकर्ता my_iam_user को एक्सेस देने के लिए एक नीति चाहता था ।

यह नीति मेरे उपयोगकर्ता को एक विशिष्ट s3 बाल्टी पर ई पुट फाइल को लिस्ट, डिलीट करने की अनुमति देती है।

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListBucket",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/my_iam_user"
            },
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::my-s3-bucket"
        },
        {
            "Sid": "AddDeleteFiles",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/my_iam_user"
            },
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::my-s3-bucket/*"
        }
    ]
}

0

मैं इसके द्वारा हल की गई समान आवश्यकता को जोड़ता हूं:

{
  "Version": "2012-10-17",
  "Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "s3:Get*",
            "s3:Put*",
            "s3:DeleteObject",
            "s3:ListBucket"
        ],
        "Resource": [
            "arn:aws:s3:::my-bucket-name",
            "arn:aws:s3:::my-bucket-name/*"
        ]
    }
  ]
}

0

मैं अन्य उपयोगकर्ताओं से बाल्टी की सामग्री को छिपाने के लिए निम्नलिखित सामान का उपयोग करता हूं। यह न केवल अन्य बाल्टी को छिपाने में मदद करता है (ListAllMyBuckets का उपयोग न करें), लेकिन एक ही बाल्टी में फ़ोल्डर भी, जब आप एक बाल्टी बनाते हैं, लेकिन चाहते हैं कि इसमें सबफ़ोल्डर हों IAM उपयोगकर्ता या सबफ़ोल्डर को उचित अनुमति प्रदान करें।

निम्न नीति IAM समूह पर लागू होती है और सभी उपयोगकर्ता इस समूह में हैं। आपको aws:useridबाल्टी में एक ही नाम के साथ एक सबफ़ोल्डर लेना और बनाना होगा।

उपयोगकर्ता को लिया जा सकता है: aws iam get-user --user-name "user_name_for_folder_access":

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::bucket_name/${aws:userid}/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::bucket_name"
            ]
        }
    ]
}

0

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

 {
"Statement": [
    {
        "Effect": "Allow",
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::folder-name*",
        "Condition": {}
    }
]
}

0

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

मैंने स्पष्ट रूप से बाल्टी नाम का उपयोग करने के लिए ग्राहक से पूछने के लिए चुना।



-1

इसने मेरे लिए एकदम सही काम किया। उपयोगकर्ता फ़ाइलों की सूची अपलोड, डाउनलोड और प्राप्त कर सकता है, लेकिन अन्य बाल्टी से फ़ाइलों को देखने में सक्षम नहीं होगा।

 {    

"Statement": [    

{
    "Effect": "Allow",
    "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:GetObjectAcl",
        "s3:PutObjectAcl",
        "s3:ListBucket",
        "s3:GetBucketAcl",
        "s3:PutBucketAcl",
        "s3:GetBucketLocation"
    ],
    "Resource": "arn:aws:s3:::mybucketname/*",
    "Condition": {}
},
{
    "Effect": "Allow",
    "Action": "s3:ListAllMyBuckets",
    "Resource": "*",
    "Condition": {}
},
{
    "Effect": "Deny",
    "Action": [
        "s3:DeleteBucket",
        "s3:DeleteBucketPolicy",
        "s3:DeleteBucketWebsite",
        "s3:DeleteObject",
        "s3:DeleteObjectVersion"
    ],
    "Resource": "arn:aws:s3:::mybucketname/*",    

    "Condition": {}    

}
]
}      

-2

Denyबाल्टी (नों) के लिए एक खंड जोड़ें जिसे आप एक्सेस नहीं करना चाहते हैं। याद रखें कि वे अभी भी सूचीबद्ध हो सकते हैं, लेकिन आप उनके अंदर की सामग्री तक नहीं पहुँच पाएंगे।

{
    "संस्करण": "2012-10-17",
    "बयान": [
        {
            "प्रभाव": "अनुमति दें",
            "एक्शन": "s3: *",
            "संसाधन": "*"
        },
        {
            "प्रभाव": "इंकार",
            "एक्शन": "s3: *",
            "संसाधन": [
                "अर्न: एडब्ल्यूएस: S3 ::: बाल्टी-नाम",
                "अर्न: एडब्ल्यूएस: S3 ::: बाल्टी-नाम / *"
            ]
        }
    ]
}

1
आपको संसाधनों के लिए स्पष्ट रूप से पहुंच प्रदान करनी चाहिए। जब आप सभी संसाधनों तक पहुंच प्रदान करते हैं, तो आप गलती से उन संसाधनों को छोड़ सकते हैं जिन्हें आप निजी रखना चाहते हैं। इसके अलावा सभी S3 कार्यों तक पहुंच प्रदान करने का मतलब है कि उपयोगकर्ता संसाधनों को सार्वजनिक या सेटअप स्थिर होस्टिंग या अन्य हानिकारक चीजें कर सकते हैं।
ओंद्रेज गलबावी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.