Как удалить разрешение «удалить» на Amazon S3 - PullRequest
14 голосов
/ 22 февраля 2012

В консоли Amazon S3 я вижу только вариант разрешения для «загрузки / удаления».Есть ли способ разрешить загрузку, но не удаление?

Ответы [ 4 ]

19 голосов
/ 25 февраля 2012

Разрешения, которые вы видите в Консоль управления AWS напрямую, основаны на исходных и сравнительно простых списках контроля доступа (ACL) , доступных для S3, которые существенно различаются ЧИТАТЬ и ЗАПИСАТЬ разрешения, см. Указание разрешения :

  • READ - позволяет получателю перечислять объекты в корзине
  • WRITE - позволяет получателю создавать, перезаписывать и удалять любые объекты в Ковш

Эти ограничения были устранены путем добавления Политики корзины (разрешения, применяемые на уровне корзины) и Политики IAM (разрешения, применяемые на уровне пользователя), и все три можно использовать вместе (что может стать довольно сложным, как указано ниже), см. Контроль доступа для всей картины.

Ваш вариант использования, вероятно, запрашивает соответствующую политику корзины, которую вы также добавляете непосредственно из консоли S3. При нажатии на Добавить политику корзины открывается Редактор политики корзины , который содержит ссылки на пару примеров, а также настоятельно рекомендуемый Генератор политики AWS , который позволяет вам составить политику для вашего варианта использования.

Для заблокированной корзины простейшая форма может выглядеть так (пожалуйста, убедитесь, что Principal и Resource под свои нужды):

{
  "Statement": [
    {
      "Action": [
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::<bucket_name>/<key_name>",
      "Principal": {
        "AWS": [
          "*"
        ]
      }
    }
  ]
}

В зависимости от вашего варианта использования вы можете легко составлять довольно сложные политики, комбинируя различные Разрешить и Запретить действия и т. Д. ключ как обычно; поэтому, пожалуйста, позаботьтесь о последствиях при использовании Совместное использование ACL и политик Bucket или Совместных политик IAM и Bucket .

Наконец, возможно, вы захотите взглянуть на мой ответ на Проблемы с указанием отдельного сегмента в простой политике пользователя AWS , которая устраняет другую часто встречающуюся ошибку с политиками.

7 голосов
/ 01 февраля 2017

Вы можете прикрепить политику отсутствия удаления к вашей корзине s3. Например, если вы не хотите, чтобы этот пользователь IAM выполнял какую-либо операцию удаления для любых сегментов или любых объектов, вы можете установить что-то вроде этого:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1480692207000",
            "Effect": "Deny",
            "Action": [
                "s3:DeleteBucket",
                "s3:DeleteBucketPolicy",
                "s3:DeleteBucketWebsite",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::*"
            ]
        }
    ]
}

Кроме того, вы можете проверить свою политику с помощью имитатора политики https://policysim.aws.amazon.com, чтобы проверить, соответствуют ли ваши настройки вашим ожиданиям.

Надеюсь, это поможет!

4 голосов
/ 05 мая 2017

Это сработало идеально.Спасибо Пунг Воратити Маносрой.в сочетании его упомянутая политика в соответствии с ниже:

{    

"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": {}    

    }
]
}    
1 голос
/ 24 января 2015

Да, s3:DeleteObject является опцией:

http://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html

Однако нет никакой разницы между изменением существующего объекта (что позволило бы эффективно удалить его) и созданием нового объекта.

...