Jak powinny wyglądać moje zasady IAM, aby umożliwić użytkownikowi my-user
dostęp do wiadra Amazon S3 o nazwie my-bucket
?Prosta zasada Amazon IAM dla s3 przy użyciu szyn i spinacza
Obecnie mam następujący polityka przypisany my-user
:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::my-bucket"]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": ["arn:aws:s3:::my-bucket/*"]
}
]
}
mam tę politykę z "Sample 1" na poniższym linkiem:
W moim pliku production.rb
, Zaimplementowałem ustawienia konfiguracji, aby poinformować spinacz o użyciu S3:
config.paperclip_defaults = {
:storage => :s3,
:s3_credentials => {
:bucket => 'my-bucket',
:access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
}
}
Gdy próbuję użyć mojej aplikacji do przesłania zdjęcia, otrzymuję wyjątek od AWS::S3::Errors::AccessDenied
.
dziwne, gdybym załadować konsolę szynach i uruchomić następujący kod ręcznie przesłać plik, to działa prawidłowo:
s3 = AWS::S3.new(access_key_id: ENV['AWS_ACCESS_KEY_ID'], secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'])
bucket = s3.buckets['my-bucket']
obj = bucket.objects['new_file']
obj.write(Pathname.new('/path/to/file'))
to poprawnie przesyła plik do mojego S3 wiadra. Jestem zdezorientowany, dlaczego wyraźnie mam pozwolenie na przesłanie pliku w ten sposób, ale kiedy próbuję zrobić to za pomocą spinacza z tymi samymi poświadczeniami, otrzymuję błąd odmowy uprawnień.
Jeszcze bardziej zagmatwany, gdy przypisuję polisę AdministratorAccess
do my-user
, spinacz jest w stanie pomyślnie przesłać plik.
Każdy pomysł, jak mogę to rozwiązać?