অনুমতিগুলি এস 3 থাকলে এস 3 বালতির জন্য তালিকাভুক্ত সংস্থাগুলির জন্য অ্যাক্সেসডেইনড: *


134

আমি পাচ্ছি:

তালিকার অবজেক্টস ক্রিয়াকলাপে কল করার সময় একটি ত্রুটি ঘটেছে (অ্যাক্সেসডেইনড): অ্যাক্সেস অস্বীকার

যখন আমি আমার এস 3 বালতি থেকে ফোল্ডারটি পাওয়ার চেষ্টা করি।

এই আদেশটি ব্যবহার করে:

aws s3 cp s3://bucket-name/data/all-data/ . --recursive

বালতিটির জন্য আইএএম অনুমতিগুলি দেখতে দেখতে:

{
"Version": "version_id",
"Statement": [
    {
        "Sid": "some_id",
        "Effect": "Allow",
        "Action": [
            "s3:*"
        ],
        "Resource": [
            "arn:aws:s3:::bucketname/*"
        ]
    }
] }

সফল copyএবং lsসাফল্যের জন্য আমার কী পরিবর্তন করতে হবে ?


1
আমার ক্ষেত্রে, আমি awsএকজন ব্যবহারকারীর জন্য কনফিগার করেছি এবং এটিকে অন্য ব্যবহারকারীর ক্রোনজব-বলা বাশ স্ক্রিপ্টের মধ্যে ব্যবহার করেছি, যার অর্থ অ্যাক্সেস কী এবং অ্যাক্সেস টোকেন ভুল / আনসেট ছিল। আমার সমাধান সরাসরি প্রমাণ-পত্র (লাগাতে ছিল AWS_ACCESS_KEY_IDএবং AWS_SECRET_ACCESS_KEYআমার ব্যাশ স্ক্রিপ্ট ফাইলে) হিসাবে এখানে বর্ণিত
উওয়ে কেইম

উত্তর:


199

আপনি এস 3 বালতির অভ্যন্তরে বস্তুগুলিতে কমান্ড সম্পাদনের অনুমতি দিয়েছেন, তবে আপনি বালতিতে কোনও ক্রিয়াকলাপ করার অনুমতি দেননি।

আপনার নীতিটিকে সামান্য সংশোধন করা দেখতে এরকম দেখাবে:

{
  "Version": "version_id",
  "Statement": [
    {
        "Sid": "some_id",
        "Effect": "Allow",
        "Action": [
            "s3:*"
        ],
        "Resource": [
            "arn:aws:s3:::bucketname",
            "arn:aws:s3:::bucketname/*"
        ]
    }
  ] 
}

তবে এটি সম্ভবত প্রয়োজনের চেয়ে বেশি অনুমতি দেয়। স্বল্প সুযোগ-সুবিধা দেওয়ার জন্য অ্যাডাব্লুএস আইএএম সেরা অনুশীলন অনুসরণ করলে এরকম কিছু দেখাবে:

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

40
এটি ক্রিয়া তালিকা খুব চওড়া। তালিকা এবং অনুলিপি অধিকারের জন্য, আপনি কী পরামর্শ করবেন তা প্রয়োজনীয় ক্রিয়াগুলি।
ডোম ফরার

6
@ দফার আমি ওপিএসের নীতিটি এটি কার্যকর করার জন্য সামঞ্জস্য করার জন্য সর্বনিম্ন সম্ভব চেষ্টা করছিলাম। আপনার যদি একটি নির্দিষ্ট প্রশ্ন থাকে তবে আপনার মন্তব্যগুলির সাথে এটিকে ট্যাগ করার পরিবর্তে এটিকে পৃথক প্রশ্ন হিসাবে পোস্ট করা উচিত। যদিও এস 3 টি ক্রিয়াকলাপগুলির তালিকাটি দেখানো এবং আপনার নীতিটি তৈরি করা সত্যই সহজ হওয়া উচিত।
বি বি

4
আমি ট্যাগিং ছিল না। কপি এবং এলএসের জন্য ওপি কী প্রয়োজন তা অনুরোধ করেছিল। বালতি স্তরের আরনের অভাব অন্তর্ভুক্ত ছিল তবে আপনি ক্রিয়াগুলি সামঞ্জস্য করেন নি ... সুতরাং আমার মন্তব্য।
ডোম ফরার

1
হয়তো ইসি 3 কে সরাসরি কোনও উপযুক্ত ভূমিকা দেওয়ার কাজ করা উচিত। :)
চিকুমিকু

6
এছাড়াও "Resource": [ "arn:aws:s3:::bucketname/", "arn:aws:s3:::bucketname/*" ]আমি যেমন লিখেছি তা নিশ্চিত না করে নিশ্চিত করুন (যেমন আপনি কেবল এর আগে একটি স্ল্যাশ চান *) - আমার এই ভুল বুঝতে আমার দীর্ঘ 4 ঘন্টা সময় নিয়েছিল আমার সমস্ত listObjectsকলকে ব্যর্থ করে দিয়েছে ...
ডানিয়েল কিস-নাগি

35

আপনি উল্লিখিত হিসাবে "aws s3 cp s3: // bucket-name / data / all-data /। --Recursive" কমান্ডটি ব্যবহার করে যদি সমস্ত এস 3 বালতি অবজেক্টগুলি অনুলিপি করতে চান, তবে এটি করার জন্য এখানে একটি নিরাপদ এবং ন্যূনতম নীতি:

{
  "Version": "2012-10-17",
  "Statement": [
      {
          "Effect": "Allow",
          "Action": [
              "s3:ListBucket"
          ],
          "Resource": [
              "arn:aws:s3:::bucket-name"
          ],
          "Condition": {
              "StringLike": {
                  "s3:prefix": "data/all-data/*"
              }
          }
      },
      {
          "Effect": "Allow",
          "Action": [
              "s3:GetObject"
          ],
          "Resource": [
              "arn:aws:s3:::bucket-name/data/all-data/*"
          ]
      }
  ]
}

এই নীতিতে প্রথম বিবৃতিটি একটি নির্দিষ্ট বালতির সাব ডিরেক্টরিতে থাকা অবজেক্টগুলিকে তালিকাভুক্ত করার অনুমতি দেয়। রিসোর্সটি এস 3 বালতির আর্ট হওয়া দরকার, এবং সেই বালতিতে কেবলমাত্র সাব-ডিরেক্টরিতে তালিকা সীমাবদ্ধ করার জন্য আপনি "s3: উপসর্গ" মানটি সম্পাদনা করতে পারেন।

এই নীতিমালার দ্বিতীয় বিবৃতিটি বালতিটির ভিতরে নির্দিষ্ট সাব-ডিরেক্টরিতে থাকা জিনিসগুলি পাওয়ার অনুমতি দেয়। এর অর্থ হ'ল "s3: // বালতি-নাম / ডেটা / সমস্ত ডেটা /" পথের ভিতরে থাকা যে কোনও কিছুই আপনি অনুলিপি করতে সক্ষম হবেন। সচেতন হন যে এটি আপনাকে "s3: // বালতি-নাম / ডেটা /" এর মতো প্যারেন্ট পাথগুলি থেকে অনুলিপি করতে দেয় না।

এই সমাধানটি এডাব্লুএস সি এল আই কমান্ডগুলির ব্যবহার সীমিত করার জন্য নির্দিষ্ট; আপনার যদি AWS কনসোল বা API এর মাধ্যমে এস 3 অ্যাক্সেস সীমাবদ্ধ করতে হয় তবে আরও নীতিমালা প্রয়োজন হবে। আমি এখানে একবার দেখার পরামর্শ দিই: https://aws.amazon.com/blogs/security/writing-iam-pol नीति-grant-access-to-user-specific-folders-in-an-amazon-s3- bucket/

এর সাথে অনুরূপ একটি ইস্যু এখানে পাওয়া যাবে যা আমাকে প্রদত্ত সমাধানের দিকে নিয়ে গিয়েছিল। https://github.com/aws/aws-cli/issues/2408

আশাকরি এটা সাহায্য করবে!


1
আসলে, এটা দেখে মনে হচ্ছে আপনি করতে পারেন সীমিত ListBucketএকটি subkey হবে: stackoverflow.com/a/35952877/89218
paleozogt

আমাকে জানানোর জন্য ধন্যবাদ, আমি আমার বর্তমান কয়েকটি প্রকল্পে এটি চেষ্টা করব!
রবার্ট স্মিথ

ধন্যবাদ। কখনও ভাবেন নি যে অ-প্রথম উত্তরটি আমাকে সাহায্য করতে পারে
ভ্যাচাস্লাভ সোভিনা

এটি সত্যিই সম্ভব, aws.amazon.com/blogs/security/…
সিটিএনরম্যান

একটি নির্দিষ্ট সাব-ফোল্ডারের অধীনে তালিকাভুক্ত অবজেক্টগুলিকে সীমাবদ্ধ করার শর্ত অন্তর্ভুক্ত করার জন্য আমি উত্তরটি সম্পাদনা করেছি। সাহায্যের জন্য ধন্যবাদ!
রবার্ট স্মিথ

8

আপনি "আরন: আওস: 3 ::: বালতি নাম" বা "আরন: আওস: 3 ::: বালতি নাম *" এর মাধ্যমে বালতির জন্য রিসোর্স নির্দিষ্ট করতে হবে। পরেরটি পছন্দসই কারণ এটি বালতির বস্তুগুলিতেও ম্যানিপুলেশনগুলির অনুমতি দেয় allows খেয়াল করুন কোনও স্ল্যাশ নেই!

তালিকাবদ্ধ বস্তুগুলি বালতিতে একটি অপারেশন। অতএব, ক্রিয়া "s3: তালিকার বালতি" প্রয়োজনীয়। বালতিতে একটি বস্তু যুক্ত করা অবজেক্টের একটি ক্রিয়াকলাপ। অতএব, ক্রিয়া "s3: PutObject" প্রয়োজন। অবশ্যই, আপনি প্রয়োজন হিসাবে অন্যান্য ক্রিয়া যুক্ত করতে চাইতে পারেন।

{
"Version": "version_id",
"Statement": [
    {
        "Sid": "some_id",
        "Effect": "Allow",
        "Action": [
            "s3:ListBucket",
            "s3:PutObject"
        ],
        "Resource": [
            "arn:aws:s3:::bucketname*"
        ]
    }
] 
}

21
সমস্যাটি arn:aws:s3:::bucketname*হ'ল এটি arn:aws:s3:::bucketname-with-suffix
এতেও

1
যেমন লেখা আছে, এটি একটি খারাপ নীতি; এটি ব্যবহার করবেন না। এটি s3: আর্টের বিপরীতে তালিকার বালিট: আওস: এস3 ::: বালতি নাম এবং এস 3: পুটবজেক্ট আরনের বিরুদ্ধে: আউজ: এস3 ::: বালতি নাম / *
জারমড

7

আমি এস 3 এ অ্যাক্সেস করতে পারছিলাম না কারণ

  • প্রথমে আমি উদাহরণটিতে কী অ্যাক্সেসটি কনফিগার করেছি (তখন লঞ্চের পরে ভূমিকা সংযুক্ত করা অসম্ভব)
  • কয়েক মাসের জন্য এটি সম্পর্কে ভুলে গেছি
  • উদাহরণস্বরূপ সংযুক্ত ভূমিকা
  • অ্যাক্সেস চেষ্টা। কনফিগার করা কীটির ভূমিকার চেয়ে উচ্চ অগ্রাধিকার ছিল এবং অ্যাক্সেস অস্বীকার করা হয়েছিল কারণ ব্যবহারকারীকে প্রয়োজনীয় এস 3 অনুমতি দেওয়া হয়নি।

সমাধান:, rm -rf .aws/credentialsতারপর awsভূমিকা ব্যবহার করে।


1
ঠিক একই সমস্যা। এর লক্ষণ হ'ল এক ব্যবহারকারী এমন জিনিসগুলিতে অ্যাক্সেস করতে পারে যা অন্য ব্যবহারকারী একই ইসি 2 নোডে করতে পারে না।
ডক কাওস

6

নীচের মতো নীতি ব্যবহার করার সময় আমি একই ত্রুটি পেয়েছি, যদিও আমার কাছে এস 3 এর জন্য "এস 3: লিস্টবুকিট" রয়েছে: তালিকাঅবজেক্টস অপারেশন।

{
"Version": "2012-10-17",
"Statement": [
    {
        "Action": [
            "s3:ListBucket",
            "s3:GetObject",
            "s3:GetObjectAcl"
        ],
        "Resource": [
            "arn:aws:s3:::<bucketname>/*",
            "arn:aws:s3:::*-bucket/*"
        ],
        "Effect": "Allow"
    }
  ]
 }

তারপরে আমি "আরন: আউজ: এস3 ::: বালতি নাম" এক লাইন যুক্ত করে এটি ঠিক করেছি

{
"Version": "2012-10-17",
"Statement": [
    {
        "Action": [
            "s3:ListBucket",
            "s3:GetObject",
            "s3:GetObjectAcl"
        ],
        "Resource": [
             "arn:aws:s3:::<bucketname>",
            "arn:aws:s3:::<bucketname>/*",
            "arn:aws:s3:::*-bucket/*"
        ],
        "Effect": "Allow"
    }
 ]
}

4

আমি ভুল চিন্তা ছিল কারণে "S3: ListObjects" কর্ম কিন্তু আমি কর্ম যোগ করার জন্য ছিল "S3: ListBucket" বিষয় "এস 3 বালতি জন্য ListObjects জন্য AccessDenied" সমাধানের জন্য


4

আমি একই সমস্যার মুখোমুখি হয়েছিলাম। আমি কেবল শংসাপত্রের কনফিগারেশন যুক্ত করেছি:

aws_access_key_id = your_aws_access_key_id
aws_secret_access_key = your_aws_secret_access_key

মধ্যে "~ / .aws / পরিচয়পত্র" + + ডিফল্ট প্রোফাইলের জন্য টার্মিনাল পুনরায় আরম্ভ করুন।

বহু প্রোফাইলের ক্ষেত্রে - প্রোফাইলে আরগ যুক্ত করা দরকার:

aws s3 sync ./localDir s3://bucketName --profile=${PROFILE_NAME}

যেখানে PROFILE_NAME :

.bash_profile ( or .bashrc) -> export PROFILE_NAME="yourProfileName"

শংসাপত্র এবং মাল্টি প্রোফাইলগুলি কীভাবে কনফিগার করতে হয় সে সম্পর্কে আরও তথ্য এখানে পাওয়া যাবে


2

আমি নিম্নলিখিত চেষ্টা করেছিলাম:

aws s3 ls s3.console.aws.amazon.com/s3/buckets/{bucket name}

এটি আমাকে ত্রুটি দিয়েছে:

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

এই ফর্মটি ব্যবহার করে কাজ করা হয়েছে:

aws s3 ls {bucket name}

0

আমি স্বীকৃত উত্তর হিসাবে একই দিকের সাথে একটি উত্তর যুক্ত করছি তবে ছোট (গুরুত্বপূর্ণ) পার্থক্য সহ এবং আরও বিশদ যুক্ত করছি।

নীচে কনফিগারেশন বিবেচনা করুন:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::<Bucket-Name>"]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:DeleteObject"
      ],
      "Resource": ["arn:aws:s3:::<Bucket-Name>/*"]
    }
  ]
}

নীতি কর্মসূচি মঞ্জুর লেখ-Delete এক্সেস এবং দুটি অংশ বিভক্ত হয়: কর্ম বালতি স্তরের উপর অনুমতি প্রদান করে এবং অন্যান্য কর্মের বালতি ভিতরে বস্তুর উপর অনুমতির প্রয়োজন।
ListBucketPutObject/DeleteObject

প্রথম রিসোর্স উপাদান ক্রিয়াটির arn:aws:s3:::<Bucket-Name>জন্য নির্দিষ্ট করে ListBucketযাতে অ্যাপ্লিকেশনগুলি বালতিতে সমস্ত বস্তুর তালিকা করতে পারে।

দ্বিতীয় সংস্থান উপাদানটি এবং ক্রিয়াগুলির arn:aws:s3:::<Bucket-Name>/*জন্য নির্দিষ্ট করে যাতে অ্যাপ্লিকেশনগুলি বালতিতে কোনও অবজেক্ট লিখতে বা মুছতে পারে।PutObjectDeletObject

বালতি-স্তর এবং অবজেক্ট-স্তরের সূক্ষ্ম দানাদার অনুমতিগুলি নির্দিষ্ট করার জন্য সুরক্ষা কারণে দুটি পৃথক 'আর্ট'-এ বিভক্ত হওয়া গুরুত্বপূর্ণ।

লক্ষ্য করুন যে আমি যদি GetObject২ য় ব্লকে নির্দিষ্ট করে থাকতাম তবে কী হবে তা হ'ল প্রোগ্রামেটিক অ্যাক্সেসের ক্ষেত্রে আমি ত্রুটি পেয়েছি যেমন:

Upload failed: <file-name> to <bucket-name>:<path-in-bucket> An error occurred (AccessDenied) when calling the PutObject operation: Access Denied


-1

একটি অনুরূপ ইস্যুতে দৌড়ে, আমার জন্য সমস্যাটি হ'ল আমার বাশ_প্রফাইলে আমার আলাদা আলাদা এডাব্লুএস কী সেট ছিল।

আমি এখানে অনুরূপ প্রশ্নের উত্তর দিয়েছি: https://stackoverflow.com/a/57317494/11871462

আপনার বাশ_প্রফাইলে যদি আপনার বিরোধী AWS কী থাকে তবে এর পরিবর্তে এডাব্লুএস সিএলআই এর ডিফল্ট হয়।


-1

আমার এই সমস্যাটি ছিল আমার প্রয়োজনীয়তা আমি ব্যবহারকারীকে নির্দিষ্ট পথে লেখার অনুমতি দিতে চেয়েছিলাম

{
            "Sid": "raspiiotallowspecificBucket",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::<bucketname>/scripts",
                "arn:aws:s3:::<bucketname>/scripts/*"
            ]
        },

এবং এই পরিবর্তনটি দিয়ে সমস্যার সমাধান হয়েছিল

{
            "Sid": "raspiiotallowspecificBucket",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::<bucketname>",
                "arn:aws:s3:::<bucketname>/*"
            ]
        },
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.