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, даже если они не одобряются.
Любая помощь приветствуется.
Уэс