Проблема дозволу Amazon S3 - Як встановити дозволи для всіх файлів одночасно?


76

Я завантажив деякі файли за допомогою консолі керування Amazon AWS.

Я отримав повідомлення про HTTP 403 Access deniedпомилку. Я з’ясував, що мені потрібно встановити дозвіл view.

Як я можу це зробити для всіх файлів у відрі?

Я знаю, що можна встановити дозвіл для кожного файлу, але це вимагає багато часу, коли є багато файлів, які мають бути доступними для перегляду для всіх.

Відповіді:


123

Я пропоную вам застосувати політику сегмента 1 до сегмента, де ви хочете зберігати загальнодоступний вміст. Таким чином, вам не потрібно встановлювати ACL для кожного об’єкта. Ось приклад політики, яка зробить усі файли у відрі mybucket загальнодоступними.

{
    "Version": "2008-10-17",
    "Id": "http better policy",
    "Statement": [
        {
            "Sid": "readonly policy",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::mybucket/sub/dirs/are/supported/*"
        }
    ]
}

Це *в "Resource": "arn:aws:s3:::mybucket/sub/dirs/are/supported/*"дозволяє рекурсії.


1 Зауважте, що політика сегмента відрізняється від політики IAM. (Для одного ви отримаєте повідомлення про помилку, якщо спробуєте включити його Principalв політику IAM.) Політику сегмента можна відредагувати, перейшовши до кореня сегмента на веб-консолі AWS і розгорнувши Властивості> Дозволи. Підкаталоги сегмента також мають Властивості> Дозволи, але немає можливостіEdit bucket policy


4
На всякий випадок, якщо когось ще це спіймає, Версія повинна бути точно такою, як зазначено.
opsb

9
Про всяк випадок, якщо хтось задається питанням, як встановити політику сегмента, ось офіційна документація AWS: docs.amazonwebservices.com/AmazonS3/latest/dev/…
Герман Дж. Радтке III,

6
Вони також мають корисний інструмент для їх створення: awspolicygen.s3.amazonaws.com/policygen.html
Бен Шарп,

2
S3 Browser - це інструментарій інтерфейсу, який може зробити його. У ньому є безкоштовна версія, яка, на мою думку, повинна робити те, що вам потрібно. s3browser.com ми використовуємо їх платну версію (приблизно 30 доларів), і я знаю, що робить усі ці речі за пару кліків для швидких завдань, де ви не платите за кодування
Гленн,

3
Я спробував скопіювати вставку цього в консоль S3. Він скаржиться, що це неприпустимий json, вам потрібно видалити завершальну кому після рядка "Ресурс" та початковий пробіл перед першим {.
Jon Tirsen

5

Ви можете вибрати каталог, який ви хочете, щоб він був загальнодоступним.

Натисніть "більше" та позначте його як загальнодоступний; це зробить каталог та всі файли доступними як загальнодоступні.


4

Ви можете змінювати списки контролю доступу лише для унікального предмета (відро чи предмет), тому вам доведеться міняти їх по одному.

Деякі програми управління S3 дозволяють застосовувати один і той же ACL до всіх елементів у сегменті, але внутрішньо він застосовує ACL до кожного по одному.

Якщо ви завантажуєте файли програмно, важливо вказати ACL під час завантаження файлу, тому вам не доведеться змінювати його пізніше. Проблема використання програми управління S3 (наприклад, Cloudberry, Transmit, ...) полягає в тому, що більшість із них використовує ACL за замовчуванням (приватне лише для читання) під час завантаження кожного файлу.



2

За допомогою браузера S3 ви можете оновлювати дозволи за допомогою графічного інтерфейсу, також рекурсивно. Це корисний інструмент і безкоштовний для некомерційного використання.


2

Ви можете встановити ACL для кожного файлу, використовуючи aws cli:

BUCKET_NAME=example
BUCKET_DIR=media
NEW_ACL=public-read

aws s3 ls $BUCKET_NAME/$BUCKET_DIR/ | \
awk '{$1=$2=$3=""; print $0}' | \
xargs -t -I _ \
aws s3api put-object-acl --acl $NEW_ACL --bucket $BUCKET_NAME --key "$BUCKET_DIR/_"

Це рішення добре, якщо файли мають погані властивості, встановлені безпосередньо на них :) Можна також написати щось подібне у python, використовуючи boto3'ObjectAcl' або точніше, S3.ObjectAcl.putщо призведе до чогось легшого для читання.
GabLeRoux

2

У мене була така сама проблема під час завантаження файлів через програму (java) у відро s3 ..

Помилка: на запитаному ресурсі немає заголовка 'Access-Control-Allow-Origin'.
Таким чином, походження ' http: // localhost: 9000 ' не має доступу. Відповідь мала код стану HTTP 403

Я додав ідентифікатор джерела та змінив політику сегмента та конфігурацію CORS, тоді все працювало нормально.


1

Передача 5

Я хотів додати це тут для потенційних користувачів macOS, які вже мають прекрасно створену програму FTP під назвою Transmit by Panic.

У мене вже був Panic, і він підтримує сегменти S3 (не знаю, в якій версії це вийшло, але я думаю, оновлення було безкоштовним). Він також підтримує рекурсивне оновлення дозволів на читання та запис.

Ви просто клацаєте правою кнопкою миші каталог, який ви хочете оновити, і вибираєте дозволи на читання та запис, для яких ви хочете їх встановити.

Це не здається надзвичайно швидким, але ви можете відкрити файл журналу, перейшовши Window> Transcript, щоб ви принаймні знали, що він щось робить.


1

Щоб зробити більшу частину файлів загальнодоступною, виконайте такі дії:

  1. Перейдіть до веб-інтерфейсу S3
  2. Відкрийте потрібне відро
  3. Виберіть необхідні файли та папки, встановивши прапорці ліворуч у списку
  4. Натисніть кнопку «Більше» у верхній частині списку, натисніть «Зробити загальнодоступною»
  5. Підтвердьте, натиснувши «Зробити загальнодоступним». Файли не матимуть загальнодоступного запису, незважаючи на те, що в попередженні сказано «... прочитати цей об’єкт, дозволи на читання та запис».

0

Використовуйте генератор політик AWS, щоб створити політику, яка відповідає вашим потребам. Основним у генераторі політик повинен бути користувач / роль IAM, який ви використовували б для доступу до об’єктів. Ресурс ARN повинен бутиarn:aws:s3:::mybucket/sub/dirs/are/supported/*

Далі натисніть "Додати заяву" і виконайте подальші дії. Ви нарешті отримаєте JSON, що представляє політику. Вставте це у розділ керування політикою сегмента s3, який знаходиться на сторінці "сторінка сегмента s3 в AWS -> дозволи -> політика сегмента".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.