Как вы разрешаете предоставлять publi c доступ на чтение к объектам, загруженным в AWS S3? - PullRequest
0 голосов
/ 22 февраля 2020

Я создал политику, которая разрешает доступ к одной корзине S3 в моей учетной записи. Затем я создал группу, которая имеет только эту политику, и пользователя, который является частью этой группы.

Пользователь может просматривать, удалять и загружать файлы в корзину, как и ожидалось. Однако пользователь, похоже, не может предоставить publi c доступ для чтения к загруженным файлам .

enter image description here

Если выбран параметр Предоставить доступ c для чтения для этого объекта (ов) , загрузка завершится неудачно.

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

Ниже приведена политика для роли пользователя:

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

Вот что происходит, когда пользователь IAM пытается предоставить publi c доступ к загруженному файлу: enter image description here

Ошибка прокси-сервера не связана, но, по сути, загрузка зависла и ничего не происходит. Если они не выберут параметр Предоставить публикацию c доступ , загрузка будет завершена немедленно (несмотря на то, что также отображается ошибка прокси-сервера).

Ответы [ 2 ]

1 голос
/ 22 февраля 2020

Это можно сделать с помощью AWS ACL объекта обновления CLI

Опция 1: объект, который уже хранится в Amazon S3, вы можете запустить эту команду, чтобы обновить ACL для publi c доступ на чтение:

aws s3api put-object-acl --bucket <<S3 Bucket Name>> --key <<object>> --acl public-read

Вариант 2: Запустите эту команду, чтобы предоставить полный контроль над объектом AWS владельцу учетной записи и доступ для чтения всем остальным :

aws s3api put-object-acl --bucket <<S3 Bucket Name>> --key <<object>> --grant-full-control emailaddress=<<Accountowneremail@emaildomain.com>> --grant-read uri=http://acs.amazonaws.com/groups/global/AllUsers
1 голос
/ 22 февраля 2020

Чтобы воспроизвести вашу ситуацию, я сделал следующее:

  • Создан новый Amazon S3 bucket с настройками по умолчанию (Block Publi c Access = On)
  • Создан Пользователь IAM (без прикрепленных политик)
  • Создан Группа IAM (без прикрепленных политик)
  • Добавлен IAM Пользователь в IAM Group
  • Прикрепил вашу политику (из Вопроса) к IAM Group (обновляя имя корзины) в виде встроенной политики
  • Зарегистрировался в Amazon S3 консоль управления как новый пользователь IAM

В этот момент пользователь получил ошибку Access Denied, поскольку ему не было разрешено перечислить все корзины Amazon S3. Таким образом, консоль была непригодна для использования.

Вместо этого я запустил команду AWS CLI:

aws s3 cp foo.txt s3://new-bucket/ --acl public-read

Результат был:

Произошла ошибка (AccessDenied) при вызове операции PutObject: Access Denied

Однако операция завершилась следующим образом:

aws s3 cp foo.txt s3://new-bucket/

Это означает, что --acl является компонентом, который был отклонен.

Затем я перешел к Block Publi c Access для корзины и отключил опцию, названную «Block publi c Доступ к корзинам и объектам, предоставленным через новые списки контроля доступа (ACLs). )». Мои настройки:

Block Public Access

Затем я снова запустил эту команду:

aws s3 cp foo.txt s3://new-bucket/ --acl public-read

Это сработало!

Чтобы проверить это, я вернулся в Block Publi c Access и включил все опции (через верхний флажок). Я повторно выполнил команду, и это было Доступ запрещен снова, , подтверждающий, что причиной была Блокировка Publi c Настройка доступа .

Нижняя строка : Отключить первый блок Publi c Настройка доступа.

...