2011-11-20 22 views
25

Mam foo użytkownika z następującymi uprawnieniami (nie jest członkiem żadnej grupy):muszę użytkownik Amazon S3 z pełnym dostępem do jednego wiadra

{ 
    "Statement": [ 
    { 
     "Sid": "Stmt1308813201865", 
     "Action": "s3:*", 
     "Effect": "Allow", 
     "Resource": "arn:aws:s3:::bar" 
    } 
    ] 
} 

że użytkownik jednak nie są w stanie przesłać lub wykonuj wiele czynności, dopóki nie udzielę pełnego dostępu uwierzytelnionym użytkownikom (które mogą dotyczyć każdego). To nadal nie pozwala użytkownikowi zmienić uprawnienia, ponieważ po przesłaniu wysyła komunikat o błędzie, gdy próbuje zrobić key.set_acl('public-read').

Idealnie ten użytkownik miałby pełny dostęp do wiaderka bar i nic więcej, co robię źle?

Odpowiedz

36

Musisz udzielić użytkownikowi s3: ListBucket uprawnień do samego zasobnika. Wypróbuj poniższe zasady.

{ 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": "S3:*", 
     "Resource": "arn:aws:s3:::bar/*", 
     "Condition": {} 
    }, 
    { 
     "Effect": "Allow", 
     "Action": [ 
     "s3:ListBucket" 
     ], 
     "Resource": "arn:aws:s3:::bar", 
     "Condition": {} 
    } 
    ] 
} 
+4

Some niuans: Wydaje się, że 'bar/*' jest potrzebne do obiektów dostępu do wnętrza 'bar' wiadra, podczas gdy' jest potrzebne bar' notować/modyfikacja samego wiadra. – phyzome

+0

Używanie Cyberducka do uzyskiwania dostępu do S3 z powyższymi uprawnieniami nie działa. Być może Cyberduck potrzebuje ListAllMyBuckets jak wspomina @Suman. Jednak jeśli używasz narzędzia wiersza poleceń z [timkay.com] (http://www.timkay.com/aws/), działa to doskonale. –

+4

Dzięki za milion. I F $% # @^ING hate s3 z jego kłopotliwymi zasadami. Właśnie zmarnowałem 2 godziny, aż w końcu znalazłem rozwiązanie. – Nimo

18

Wybrana odpowiedź nie działa dla mnie, ale ten zrobił:

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

kredytowe: http://mikeferrier.com/2011/10/27/granting-access-to-a-single-s3-bucket-using-amazon-iam/

+3

Umożliwia to wyświetlanie wszystkich wiader i nie ogranicza dostępu tylko do danego kubełka. –

+2

+1 dla mnie: wybrana jedna nie działała z klejnotem Ruby's Fog, ale ta kombinacja zadziałała. –

+4

@Thanh Nguyen: Wrong. Wyświetli listę wszystkich wiader, ale zapewni dostęp tylko do wspomnianej łyżki w polisie. – slayedbylucifer

0

To działa dla mnie:

{ 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "s3:ListBucket", 
       "s3:GetBucketLocation", 
       "s3:ListBucketMultipartUploads", 
       "s3:ListBucketVersions" 
      ], 
      "Resource": "arn:aws:s3:::bucket_name_here" 
     }, 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "s3:*Object*", 
       "s3:ListMultipartUploadParts", 
       "s3:AbortMultipartUpload" 
      ], 
      "Resource": "arn:aws:s3:::bucket_name_here/*" 
     } 
    ] 
} 
0

Jeśli już Wyciąganie włosów, ponieważ nie można zrozumieć, dlaczego Cyberduck nie jest w stanie ustawić obiektów ACL, ale działa z innym klientem (np. Panic Transmit) tutaj jest rozwiązanie:

Trzeba dodać s3:GetBucketAcl do listy działań, np:

{ 
    "Statement": [ 
     { 
      "Sid": "Stmt1", 
      "Action": [ 
       "s3:GetBucketAcl", 
       "s3:ListBucket", 
       "s3:DeleteObject", 
       "s3:GetObject", 
       "s3:GetObjectAcl", 
       "s3:PutObject", 
       "s3:PutObjectAcl" 
      ], 
      "Effect": "Allow", 
      "Resource": "arn:aws:s3:::your-bucket-name" 
     } 
    ] 
} 

Oczywiście nie trzeba tego robić, jeśli są mniej restrykcyjne z s3:* ale myślę, że to dobrze wiedzieć.

1

Istnieje oficjalna dokumentacja AWS w Writing IAM Policies: How to Grant Access to an Amazon S3 Bucket

Wystarczy skopiować i wkleić odpowiednią regułę i zmienić klucz „resource” do ARN wiadro we wszystkich sprawozdań.

Dla programamtic dostępu polityka powinna być:

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

I dostępu konsoli dostęp powinien być:

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

@ odpowiedź cloudberryman jest poprawna, ale chciałbym, aby rzeczy jak krótkie jak to możliwe. Odpowiedź ta może być zmniejszona do:

{ 
    "Statement":[ 
     { 
     "Effect":"Allow", 
     "Action":"S3:*", 
     "Resource":[ 
      "arn:aws:s3:::bar", 
      "arn:aws:s3:::bar/*" 
     ] 
     } 
    ] 
}