Политика разрешений пользователей AWS в отношении ресурса S3, не ограничивающая конкретного пользователя

sRuby 1.8.7 (да, я знаю, что он древний)
aws-sdk-v1 1.60.2
AWS S3

Я пытаюсь ограничить доступ к корзине S3, чтобы только один пользователь мог читать/писать в нее.

Я создал следующую политику разрешений и привязал ее к пользователю IAM, назовем его UserX:

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

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

Однако, если я подключаюсь к AWS без учетных данных, я могу без проблем писать в это ведро. Это не то, чего я хочу. Я не хочу, чтобы кто-либо, кроме UserX, писал в это ведро (или читал из него, если уж на то пошло).

Если я удаляю эту политику из UserX, то применяется поведение по умолчанию — ни один запрос (аутентифицированный или неаутентифицированный) на запись не работает, чего я и ожидаю.

Эта политика похоже открывает доступ для всех пользователей, даже если она привязана к UserX.

Вот код (эффективный - фактический код находится в методах), который я использую для этого:

Для неаутентифицированного запроса (который может писать, но не должен:

  s3 = AWS::S3.new
  bucket = s3.buckets[my_bucket_name]
  o = bucket.objects[aws_filename]
  o.write(:file => filename_on_local_system)

Для аутентифицированного запроса:

  AWS.config(:access_key_id => AWS_ACCESS_KEY_ID,
             :secret_access_key => AWS_SECRET_ACCESS_KEY,
             :region => 'us-west-2')
  s3 = AWS::S3.new
  bucket = s3.buckets[my_bucket_name]
  o = bucket.objects[aws_filename]
  o.write(:file => filename_on_local_system)

Я также пробовал:

  • прикрепление этой политики к группе и назначение UserX в эту группу с теми же результатами
  • создание политики корзины, позволяющей этому пользователю писать в нее, что приводит к такому же поведению
  • создание той же политики корзины в другой учетной записи AWS и получение такого же поведения
  • используя утилиту s3cmd и получая такое же поведение
  • вместо этого использовал гем aws-s3 (но не смог получить хороший запрос на переход в AWS).

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

Это очень расстраивает. Думаю, мне, возможно, придется изучить ACL, даже если они не одобряются.

Любая помощь приветствуется.

Уэс


person Wes Gamble    schedule 08.01.2015    source источник
comment
Вы пробовали редактировать права доступа к корзине?   -  person Hare Kumar    schedule 10.01.2015
comment
Для ясности... если вы удалите эту политику для этого пользователя, будут ли ведро доступны для записи другим пользователям? Если это так, то это предполагает, что доступ разрешается политикой корзины или другой политикой IAM, а не этой. Пожалуйста подтвердите. Это должно применяться только к присоединенному пользователю, но не будет подрывать гранты, предоставленные другим в другом месте.   -  person Michael - sqlbot    schedule 10.01.2015
comment
Правильный. Если я удалю эту политику, ведро больше не будет доступно для записи никому. Насколько мне известно, в игре нет других политик IAM или корзин.   -  person Wes Gamble    schedule 11.01.2015
comment
Кажется, вы правильно устанавливаете разрешения. Возможно, у вас есть другие учетные данные, хранящиеся локально на вашем компьютере (например, для использования с интерфейсом командной строки AWS), которые SDK использует для вашего «анонимного» доступа? Попробуйте протестировать доступ без проверки подлинности, обратившись к объекту из веб-браузера через URL-адрес S3 — вы можете получить другой результат.   -  person John Rotenstein    schedule 11.01.2015
comment
Я подумал об этом, но по мере продвижения проверял настройки учетных данных в клиенте Ruby. Кроме того, можно получить это поведение в другой учетной записи AWS. Но URL стоит попробовать. Где я могу узнать, каков формат этого HTTP-вызова?   -  person Wes Gamble    schedule 11.01.2015


Ответы (1)


Клиентское программное обеспечение, которое я использовал, по-прежнему получало учетные данные из файла конфигурации (aws.yml), хотя я явно не передавал учетные данные при его настройке.

Спасибо за помощь.

Уэс

person Wes Gamble    schedule 15.01.2015
comment
Вы должны принять свой собственный ответ, а не оставлять эту награду открытой, если дальнейшая помощь не требуется. - person ptierno; 16.01.2015