Подтвердить что ты не робот

Как удалить разрешение "удалить" на Amazon S3

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

4b9b3361

Ответ 1

Разрешения, которые вы видите в AWS Management Console, напрямую основаны на первоначальном и сравнительно простом Списки контроля доступа (ACL), доступные для S3, которые существенно дифференцировали разрешения READ и WRITE, см. Указание разрешения:

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

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

В вашем случае использования, возможно, запрашивается соответствующая политика ведра, которую вы также добавляете непосредственно с консоли S3. Нажав на команду Добавить политику ведра, вы откроете редактор политик Bucket, который содержит ссылки на пару образцов, а также рекомендуемый AWS Policy Generator, который позволяет вам собирать политику, использующую ваш прецедент.

В противном случае простейшая форма может выглядеть так (пожалуйста, убедитесь, что вы скорректировали Принципал и Ресурс для ваших нужд):

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

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

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

Ответ 2

Вы можете приложить политику no-delete к вашему ведро 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, чтобы проверить, соответствует ли ваша настройка ожидаемому или нет.

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

Ответ 3

Это сработало отлично. Благодаря Pung Worathiti Manosroi. объединил свою указанную политику в соответствии с ниже:

{    

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

    }
]
}    

Ответ 4

Да, s3:DeleteObject - это вариант:

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

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