Есть ли политика S3 для ограничения доступа только для просмотра / доступа к одной корзине?

123

У меня есть простая корзина, которая выглядит как images.mysite.comна моем S3 и других корзинах, содержащих резервные копии и т. Д.

Я хочу разрешить конкретному пользователю доступ к images.mysite.comкорзине для загрузки изображений. Однако я НЕ хочу, чтобы он видел другие ведра; даже не то, что они существуют.

Я не мог создать такую ​​политику; Каждый раз, когда я пытаюсь сделать что-то ограничивающее, это приводит к блокировке списка любых сегментов.

Alex
источник
Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что он должен быть о суперпользователях
Тонни Мэдсен,
Политика может быть создана здесь: awspolicygen.s3.amazonaws.com/policygen.html
Сухайль Гупта,
1
Почему бы просто не поделиться URL-адресом корзины - https://s3.console.aws.amazon.com/s3/buckets/my-bucket-name/. Таким образом, вы не дадите им увидеть весь список и ничего не измените в вашей текущей политике.
treecoder

Ответы:

119

Я пробовал это некоторое время и наконец нашел рабочее решение. Вы должны использовать разные «Ресурсы» в зависимости от того, какое действие вы выполняете. Также я включил некоторые недостающие действия в предыдущий ответ (например DeleteObject) и ограничил еще несколько (например PutBucketAcl).

Сейчас у меня работает следующая политика IAM:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation",
        "s3:ListBucketMultipartUploads"
      ],
      "Resource": "arn:aws:s3:::itnighq",
      "Condition": {}
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:AbortMultipartUpload",
        "s3:DeleteObject",
        "s3:DeleteObjectVersion",
        "s3:GetObject",
        "s3:GetObjectAcl",
        "s3:GetObjectVersion",
        "s3:GetObjectVersionAcl",
        "s3:PutObject",
        "s3:PutObjectAcl",
        "s3:PutObjectVersionAcl"
      ],
      "Resource": "arn:aws:s3:::itnighq/*",
      "Condition": {}
    },
    {
      "Effect": "Allow",
      "Action": "s3:ListAllMyBuckets",
      "Resource": "*",
      "Condition": {}
    }
  ]
}

Действия с ведром и с объектами должны иметь разные arn.

rogercampos
источник
9
Это отличный ответ, спасибо. Возможно, стоит отметить, что значение разрешения s3: ListAllMyBuckets состоит в том, что получатель этой политики может видеть все ваши (корневые) корзины. Непосредственного раскрытия данных нет, но может возникнуть недоразумение / путаница с именами сегментов. Возможно удалить это конкретное разрешение, и все должно работать (хотя «s3cmd ls» и т. Д. Не вернет целевое ведро).
Майк Репасс
91
Это не мешает пользователю видеть другие названия корзин!
metdos
2
@metdos, вы можете запретить пользователям видеть другие имена корзин, удалив последнюю политику.
Хендра Узия
20
Чтобы увидеть список сегментов в консоли (и, следовательно, использовать консоль для доступа к сегментам), вы должны предоставить ListAllMyBucketsи GetBucketLocationдля всех сегментов S3 ( "arn:aws:s3:::*"будет работать, а не "*"для ресурса). Как указано в этом сообщении в блоге AWS, «в стороне, в настоящее время вы не можете выборочно отфильтровать определенные сегменты, поэтому у пользователей должно быть разрешение на перечисление всех сегментов для консольного доступа».
jwadsack
10
Это ужасный совет. Это опасно и особенно то, чего ОП не хотела. См. Ответы Андреаса Станкевица и BFar, чтобы узнать о возможных обходных путях .
AndreKR
37

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

Как объяснил cloudberryman: «Вы можете либо перечислить все сегменты, либо ни одного», поэтому нам нужно найти обходной путь. Задний план:

Предоставление прав ListAllMyBuckets пользователю необходимо, чтобы консоль AWS S3 или S3Fox подключались без сообщения об ошибке. Но ListAllMyBuckets перечисляет все сегменты независимо от назначенных ресурсов (на самом деле работает только arn: ... ::: *). Если вы спросите меня, это серьезная ошибка. Btw. запрет ListBucket для всех сегментов не препятствует их включению в список, поскольку ListBucket предоставляет права на перечисление содержимого корзины.

Есть 3 возможности, которые я рассмотрел как обходные. Я выбрал последний.

(1) используйте загадочные имена корзин, например GUID

Преимущество: простота настройки

Недостаток: сложно управлять, особенно для клиента. (представьте, что вы нашли конкретный GUID среди тысяч других.) Также показывает количество сегментов = количество клиентов, использующих службу резервного копирования.

(2) используйте одну корзину с папками для конкретных клиентов

Вот как Amazon предлагает в своих примерах S3 / IAM предоставлять пространство для доступа только определенным пользователям или группам пользователей. См .: AWS Примеры политик IAM.

Преимущество: довольно проста в настройке, соответствует идеям AWS.

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

(3) не предоставлять права доступа для ListAllMyBuckets

Преимущество: вы получаете то, что хотите: клиенты не видят корзины других клиентов

Недостаток: клиент не видит своего ведра. S3Browser поставляется с красивым сообщением «не могу сделать» и запрашивает имя сегмента для ввода. S3Fox выдает сообщение об ошибке при подключении к корневому каталогу, но разрешает прямую навигацию к клиентскому сегменту, если имя сегмента известно. Консоль Amazon S3 вообще не работает.

Надеюсь, это помогло справиться с S3 IAM по мере необходимости.

Андреас Станкевиц
источник
1
Кроме того, для Решения (1), если вы хотите использовать веб-хостинг с корзиной, имя корзины должно соответствовать имени домена.
Энди Фусняк
31

Невозможно предоставить доступ к консоли S3 без ListAllMyBucketsразрешения.

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

Для этого добавьте к URL-адресу входа в IAM следующую строку: /s3/?bucket=bucket-name

Полный URL-адрес для входа (замените свой псевдоним и имя корзины ):

https://your-alias.signin.aws.amazon.com/console/s3/?bucket=bucket-name

Политика IAM (заменить название корзины ):

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::bucket-name",
                "arn:aws:s3:::bucket-name/*"
            ]
        }
    ]
}

Для получения дополнительной информации о том, как создавать разрешения для конкретных сегментов для пользователей, прочтите этот блог: http://mikeferrier.com/2011/10/27/granting-access-to-a-single-s3-bucket-using-amazon-iam /

BFar
источник
1
Это хорошо работает. Было бы оптимально, если бы пользователи не могли исследовать за пределами представления корзины ... Но я возьму это. Спасибо @BFar.
Джейми Попкин
Это ОДИН ПРАВИЛЬНЫЙ ответ, все остальные будут перечислять каждую корзину, которая должна быть скрыта в соответствии с исходным запросом.
Стив Хорват
Именно то, что мне нужно. Спасибо.
Ди Чжан
20

Попробуйте эту политику. также примите во внимание, что нет возможности разрешить пользователю отображать только выбранный сегмент. Вы можете перечислить все сегменты или ни одного.

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:GetObjectAcl",
                "s3:PutObjectAcl",
                "s3:ListBucket",
                "s3:GetBucketAcl",
                "s3:PutBucketAcl",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::your_bucket_here/*",
            "Condition": {}
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "*",
            "Condition": {}
        }
    ]
}
cloudberryman
источник
2
Отлично работает! Мне пришлось внести изменения, s3:*чтобы заставить его работать на меня. У меня тоже было "Resource": ["arn:aws:s3:::your_bucket_here", "arn:aws:s3:::your_bucket_here/*"], но это могло и не понадобиться.
Михаил Ягудаев 05
3
s3: * предоставляет доступ для любых действий, включая удаление корзины. Вы уверены, что этого хотите?
Дэйв Грегори,
10

Я интерпретирую этот вопрос как: «Могу ли я разрешить доступ к одному сегменту, если другие сегменты не будут доступны и, следовательно, невидимы». Потому что отображение имени корзины, к которой не был предоставлен доступ, все равно приравнивается к утечке информации.

И правильный ответ - нет. Требуемое разрешение - ListAllMyBuckets, которое позволит пользователю видеть ВСЕ сегменты. Отсутствие этого разрешения сделает консоль непригодной для использования.


источник
6

Существует отличный способ предоставить пользователям доступ к определенному сегменту без знания других сегментов. Групповая политика, подобная приведенной ниже, позволит пользователям видеть только «сегмент А». Единственная загвоздка в том, что пользователь сможет получить доступ к корзине, только если он подключится к данной конечной точке корзины. В примере ниже это bucket-a.s3.amazonaws.com. Для этого, возможно, в корзине также должны быть разрешены «Прошедшие проверку пользователи».

{
    "Statement": [
     {
         "Sid": "<EXAMPLE_SID>",
         "Action": [
           "s3:ListBucket",
           "s3:GetBucketLocation"
          ],
         "Effect": "Allow",
         "Resource": [
           "arn:aws:s3:::bucket-a"
         ]
     },
     {
      "Sid": "<EXAMPLE_SID>",
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::bucket-a/*"
      ]
     }
   ]
}

Этот метод был протестирован с Cyberduck в Mac OS / X и с использованием пакета s3cmd.

./s3cmd ls s3://bucket-a --access_key=ACCESS_KEY --secret_key=SECRET_KEY --bucket-locat
ion=ap-southeast-2
joevartuli
источник
Я все еще вижу список всех корзин. Не работает :(
Ришикеш Чандра
5

Не знаете, почему не было проверено ни одного ответа?

Давайте разберем каждое заявление о политике из приведенных выше решений:

Это заявление политики от применяется к содержимому корзины, но не к самому понятию. Вероятно, не об этом вопрос, потому что вы не можете увидеть, что находится в ведре.

{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:GetObjectAcl",
"s3:PutObjectAcl",
"s3:ListBucket",
"s3:GetBucketAcl",
"s3:PutBucketAcl",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::your_bucket_here/*",
"Condition": {}
}

Эта политика с двумя операторами, полученная из, дает доступ только для чтения к корзине at ( arn:aws:s3:::your_bucket_here/) только для чтения , но по-прежнему позволяет выполнять операции CRUD с содержимым корзины ( arn:aws:s3:::your_bucket_here/*).

{
  "Effect": "Allow",
  "Action": [
    "s3:ListBucket",
    "s3:GetBucketLocation",
    "s3:ListBucketMultipartUploads"
  ],
  "Resource": "arn:aws:s3:::your_bucket_here",
  "Condition": {}
},
{
  "Effect": "Allow",
  "Action": [
    "s3:AbortMultipartUpload",
    "s3:DeleteObject",
    "s3:DeleteObjectVersion",
    "s3:GetObject",
    "s3:GetObjectAcl",
    "s3:GetObjectVersion",
    "s3:GetObjectVersionAcl",
    "s3:PutObject",
    "s3:PutObjectAcl",
    "s3:PutObjectAclVersion"
  ],
  "Resource": "arn:aws:s3:::your_bucket_here/*",
  "Condition": {}
}

Однако политика включает в себя приведенный ниже оператор, который позволяет пользователю видеть все сегменты в конечной точке. Это , вероятно , не то , что вопрос просили.

{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*",
"Condition": {}
}

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

Донал Лафферти
источник
3

Наверное, самый простой вариант использования:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::bucket-name"]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": ["arn:aws:s3:::bucket-name/*"]
    }
  ]
}
jjanczyszyn
источник
1
This policy contains the following error: The policy must contain a valid version string
Ответ
правильно - я исправил свой ответ -> <br/> здесь есть только два возможных значения: <br/> * 2012-10-17 * и 2008-10-17 . <br/> Дополнительную информацию можно найти здесь: <br/> docs.aws.amazon.com/IAM/latest/UserGuide/…
jjanczyszyn
Есть идеи о том, (listing included)как перечислить только ведро, в которое может попасть пользователь? Пока (и согласно всем другим ответам) кажется, что AWS не позволит вам это сделать.
MaximeBernard
3

Для этого есть простой способ или обходной путь с помощью AWS Organizations. Организация AWS позволяет иметь несколько учетных записей пользователей. В вашей основной учетной записи может быть несколько учетных записей AWS (Sub), и какие бы сервисы (s3 / EC2 / *) ни добавлялись, в какие бы учетные записи AWS были видны только эти ресурсы.

См. Https://aws.amazon.com/blogs/aws/aws-organizations-policy-based-management-for-multiple-aws-accounts/ https://aws.amazon.com/organizations/

Организация на странице моей учетной записи

Шайк Исмаил
источник
3

Я нашел это решение:
AWS FLOW:
AWS FLOW

Политика ведра:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::MyExampleBucket",
        "arn:aws:s3:::MyExampleBucket/*"
      ],
      "Condition": {
        "StringNotLike": {
          "aws:userId": [
            "AROAEXAMPLEID:*", #Role ID
            "111111111111" #AccountID
          ]
        }
      }
    }
  ]
}

Политика IAM:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::MyExampleBucket",
        "arn:aws:s3:::MyExampleBucket/*"
      ],
      "Condition": {
        "StringNotLike": {
          "aws:userId": [
            "AROAEXAMPLEID:*",  #Role ID
            "AIDAEXAMPLEID",  #UserID
            "111111111111"  #AccountID
          ]
        }
      }
    }
  ]
}

aws iam get-user -–user-name ИМЯ-ПОЛЬЗОВАТЕЛЯ --profile = ExampleProfile

aws iam get-role --role-name ИМЯ-РОЛИ --profile = ExampleProfile

Источник: https://aws.amazon.com/blogs/security/how-to-restrict-amazon-s3-bucket-access-to-a-specific-iam-role/

PS будьте осторожны с политикой ведра, вы можете остаться без разрешений

Константин Пайгин
источник
2

Как хорошо обсуждалось выше, перечислить только одну корзину на консоли невозможно. Но если доступ к сегменту S3 привязан к IAM, IAM может напрямую обращаться к сегменту, если доступен URL-адрес сегмента. URL-адрес корзины S3 будет таким:

https://s3.console.aws.amazon.com/s3/buckets/BucketName

Где BucketName - это имя сегмента, к которому IAM имеет доступ

Ишан Томар
источник
1
Думаю, это единственно возможное решение и в 2018 году.
Saurabh
1

Мне удалось получить следующую работу. Означает, что перечисление других сегментов получило сообщение Доступ запрещен. Но я все еще мог видеть ведро, которое я хотел, если бы я подключился с именем ведра, установленным в качестве пути.

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

Я использовал Cyberduck, чтобы проверить это соединение.

Codeplay
источник
1

Хотя невозможно ограничить s3:ListAllMyBucketsдействие определенными сегментами, в качестве обходного пути вы можете отправить им URL-адрес консоли для определенного сегмента, например

  • https://s3.console.aws.amazon.com/s3/buckets/BUCKET_NAME/

Источник: ограничивающий список сегментов S3 из консоли S3.

Для этого вам необходимо указать следующий документ политики для данного пользователя или группы:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:ListBucketMultipartUploads"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket-1",
                "arn:aws:s3:::my-bucket-2"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectVersion",
                "s3:GetObjectVersionAcl",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:PutObjectVersionAcl"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket-1/*",
                "arn:aws:s3:::my-bucket-2/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets"
            ],
            "Resource": "arn:aws:s3:::*"
        }
    ]
}

Где my-bucket-1и my-bucket-2находятся ваши ведра, чтобы дать доступ для чтения и записи.

Связанный:

kenorb
источник
1

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

Например: s3.console.aws.amazon.com/s3/buckets/bucketname/?region=us-east-1&tab=overview.

{
  "Statement": [
    {
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::bucketname"
      ]
    },
    {
      "Action": [
        "s3:PutObject",
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::bucketname*"
      ]
    },

  ],
  "Version": "2012-10-17"
}
Lam
источник
1

Подобно тому, что описано выше:

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

Однако вот недостающая часть. Хотя получить доступ к корзине через S3-> Home невозможно, можно получить доступ только к желаемой корзине по прямой ссылке.

https://s3.console.aws.amazon.com/s3/buckets/yourawsbucket/

Вы можете найти дополнительную информацию в следующем сообщении:

https://aws.amazon.com/premiumsupport/knowledge-center/s3-console-access-certain-bucket/

crandorf80s
источник
0

Решение, приведенное ниже, сработало для меня. Я хотел, чтобы политика предоставляла доступ определенному пользователю my_iam_user в конкретном сегменте my-s3-bucket .

Эта политика позволяет моему пользователю перечислять, удалять и загружать файлы в определенное ведро s3.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListBucket",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/my_iam_user"
            },
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::my-s3-bucket"
        },
        {
            "Sid": "AddDeleteFiles",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/my_iam_user"
            },
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::my-s3-bucket/*"
        }
    ]
}
Карлос Коэльо
источник
0

Я просто добавляю аналогичную потребность, решаемую этим:

{
  "Version": "2012-10-17",
  "Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "s3:Get*",
            "s3:Put*",
            "s3:DeleteObject",
            "s3:ListBucket"
        ],
        "Resource": [
            "arn:aws:s3:::my-bucket-name",
            "arn:aws:s3:::my-bucket-name/*"
        ]
    }
  ]
}
Xavinsky
источник
0

Я использую следующее, чтобы скрыть содержимое корзины от других пользователей. Это не только помогает скрыть другие корзины (не используйте ListAllMyBuckets), но и папки в том же ведре, когда вы создаете одну корзину, но вы хотите, чтобы в ней были вложенные папки, назначающие соответствующие разрешения пользователю / подпапке IAM.

Следующая политика применяется к группе IAM, и все пользователи входят в эту группу. Вам нужно взять aws:useridи сделать в ведре подпапку с таким же названием.

UserID можно взять: aws iam get-user --user-name "user_name_for_folder_access":

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::bucket_name/${aws:userid}/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::bucket_name"
            ]
        }
    ]
}
Андрей Стариков
источник
0

Мы придумали хорошее простое решение - заблокировать пользователю вход в корневой каталог. Поэтому они должны войти в систему, указав удаленный путь к желаемой папке.

 {
"Statement": [
    {
        "Effect": "Allow",
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::folder-name*",
        "Condition": {}
    }
]
}
THRIVE
источник
0

Нет, в настоящее время невозможно ограничить пользователей просмотром отдельных сегментов под root или где-либо еще. Сейчас у вас есть только эти 3 варианта.

Я решил попросить клиента явно использовать имя корзины.

foggy_glasses
источник
-1

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

 {    

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

}
]
}      
s. Тэйт
источник
-2

Добавьте Denyпредложение для сегментов, к которым вы не хотите получать доступ. Помните, что они все еще могут быть перечислены, но вы не сможете получить доступ к содержимому внутри них.

{
    «Версия»: «2012-10-17»,
    "Утверждение": [
        {
            «Эффект»: «Разрешить»,
            «Действие»: «s3: *»,
            «Ресурс»: «*»
        },
        {
            «Эффект»: «Запретить»,
            «Действие»: «s3: *»,
            «Ресурс»: [
                "ARN: AWS: ::: ковшового имя s3",
                "ARN: AWS: s3 ковшового имя ::: / *"
            ]
        }
    ]
}
treecoder
источник
1
Вы должны явно предоставить доступ к ресурсам. Когда вы по умолчанию предоставляете доступ ко всем ресурсам, вы можете случайно пропустить ресурсы, которые хотите сохранить конфиденциальными. Кроме того, предоставление доступа ко всем действиям S3 означает, что пользователь может делать ресурсы общедоступными, настраивать статический хостинг или выполнять другие вредоносные действия.
Ондрей Галбавы