Nie mogę przesłać pracy z Paperclip przy użyciu zasad S3 IAM. Mam nawet problemy z bezpośrednim przesyłaniem jQuery (bez spinacza). Mój scenariusz jest następujący: mam aplikację, która będzie mieć wiele stron. Każda strona będzie miała swój własny zasobnik i powinna mieć dostęp tylko do własnego kubła, nikogo innego. Dokumentacja IAM Example Policies wyjaśnia dokładnie, co chcę zrobić w "Przykład: Pozwól każdemu użytkownikowi IAM uzyskać dostęp do folderu w wiadrze". Mam skonfigurowaną grupę IAM dla aplikacji i mam jednego użytkownika na witrynę w grupie. Ci użytkownicy IAM należą do grupy. Polityka na grupy przedstawia się następująco:Odmowa dostępu przy wysyłaniu plików do Amazon przy użyciu zasad Paperclip i IAM
{
"Version":"2012-10-17",
"Statement":[{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:DeleteObject",
"s3:DeleteObjectVersion"
],
"Resource":"arn:aws:s3:::my-app/${aws:username}/*"
}
]
}
Oto moja konfiguracja CORS na wiadrze, na dev oczywiście, to dostanie zablokowana później:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Oto moje ustawienia Paperclip:
has_attached_file :background_image,
storage: :s3,
s3_credentials: {
access_key_id: "xxx",
secret_access_key: "xxx"
},
bucket: "my-app",
s3_permissions: "public-read",
path: "/background_images/:id/:filename"
byłem poprzednio pracujący z politykami bezpośrednio na wiadrze, które zadziałało, ale nie był tak elastyczny, jak trzeba go mieć, kiedy przenieść się do środowiska produkcyjnego z wielu „stron”. O ile mogę powiedzieć, śledziłem dokładnie dokumentację, ale wszystko, co robię, skutkuje "Odmowa dostępu". W tym momencie nie jestem nawet pewien, czy mój problem dotyczy polityki IAM czy konfiguracji Paperclip.
edytuj: wyjaśnienia.
edit 2: ostateczne rozwiązanie
Tutaj opiera moja ostateczna polityka IAM na this article:
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "AllowUserToSeeBucketListInTheConsole",
"Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::*"]
},
{
"Sid": "AllowRootAndHomeListingOfCompanyBucket",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::my-app"],
"Condition":{"StringEquals":{"s3:prefix":["","home/"],"s3:delimiter":["/"]}}
},
{
"Sid": "AllowListingOfUserFolder",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::estimator-app"],
"Condition":{"StringLike":{"s3:prefix":["home/${aws:username}/*"]}}
},
{
"Sid": "AllowAllS3ActionsInUserFolder",
"Effect": "Allow",
"Action": ["s3:*"],
"Resource": ["arn:aws:s3:::my-app/home/${aws:username}/*"]
}
]
}
i mój aktualizowane ustawienia spinacza:
has_attached_file :background_image,
storage: :s3,
s3_credentials: {
access_key_id: "xxx",
secret_access_key: "xxx"
},
bucket: "estimator-app",
s3_permissions: "public-read",
path: "/home/my_s3_username/background_images/:id/:filename"
Ważne było aby uwzględnić nazwa użytkownika w ścieżce Paperclip. Zakładałem, że Amazon wyciągnie to z poświadczeń, ale tak nie jest.
Zrobiłem aktualizację uprawnień do "Akcja": "s3: *" tylko po to, aby przetestować. Działa, jeśli zaktualizuję także "Zasób": "arn: aws: s3 ::: my-app/*". W chwili, gdy wstawiam $ {aws: username}, otrzymuję ponownie odmowę dostępu. Dzięki za podpowiedź, jednak na pewno dodam to do uprawnień. edit: W rzeczywistości wygląda na to, że mój zasób to coś innego niż źródło zasobu, którego nie mogę przesłać. –
Twoja polityka użytkownika IAM wydaje się być poprawna, ponieważ używasz poprawnej "wersji" w zasadach. Jak nazywa się Twój użytkownik i jaka jest ścieżka S3, którą próbujesz przesłać? ('$ {aws: nazwa użytkownika}' tłumaczy się na [przyjazną nazwę] (http://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html#Identifiers_FriendlyNames) dla tego użytkownika). Z twojego przykładu ścieżka wydaje się być 'background_images', ale czy twój użytkownik IAM również nazywa się' background_images'? – dcro
Użytkownik to aplikacja localhost-estimator, a grupa to aplikacja do szacowania. Zastanawiam się, ile [tego artykułu] (http://blogs.aws.amazon.com/security/post/Tx1P2T3LFXXCNB5/Writing-IAM-policies-Grant-access-to-user-specific-folders-in-an- Amazon-S3-bucke) dotyczy mojej sytuacji. –