2011-11-20 28 views
25

Tôi có một foo người dùng với các ưu đãi sau (nó không phải là thành viên của bất kỳ nhóm):Tôi cần một người dùng với quyền truy cập đầy đủ Amazon S3 để một xô đơn

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

Đó sử dụng tuy nhiên dường như không thể tải lên hoặc làm nhiều thứ cho đến khi tôi cấp quyền truy cập đầy đủ cho người dùng được xác thực (có thể áp dụng cho bất kỳ ai). Điều này vẫn không cho phép người dùng thay đổi quyền là đang ném một lỗi sau khi tải lên khi nó cố gắng làm key.set_acl('public-read').

Lý tưởng nhất người dùng này sẽ có toàn quyền truy cập vào nhóm bar và không có gì khác, tôi đang làm gì sai?

Trả lời

36

Bạn cần cấp cho quyền sở hữu s3: ListBucket cho chính nhóm đó. Hãy thử chính sách bên dưới.

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

Một số sắc thái: Có vẻ như 'bar/*' là cần thiết để liệt kê/sửa đổi chính thùng. – phyzome

+0

Sử dụng Cyberduck để truy cập S3 với sự cho phép ở trên dường như không hoạt động. Có thể Cyberduck cần ListAllMyBuckets như được đề cập bởi @Suman. Tuy nhiên, nếu bạn sử dụng công cụ dòng lệnh từ [timkay.com] (http://www.timkay.com/aws/), công cụ này hoàn hảo. –

+4

Cảm ơn một triệu. I F $% # @^ING ghét s3 với các chính sách rườm rà. Chỉ cần lãng phí 2 giờ cho đến khi tôi cuối cùng đã tìm ra giải pháp. – Nimo

7

Bạn có biết về AWS Policy Generator không?

+0

Tôi hiện là ngày! : D –

+0

Có, nhưng nó không trả lời câu hỏi. – dannyman

18

Câu trả lời được lựa chọn không làm việc cho tôi, nhưng điều này đã làm:

{ 
    "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:::*" 
    } 
    ] 
} 

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

+3

Điều này cho phép liệt kê tất cả các nhóm và không giới hạn quyền truy cập vào chỉ nhóm được đề cập. –

+2

+1 cho tôi: người bình chọn đã không làm việc với đá quý Fog của Ruby nhưng conf này làm việc. –

+4

@Thanh Nguyen: Sai. Nó sẽ liệt kê tất cả các nhóm nhưng sẽ chỉ cung cấp quyền truy cập vào nhóm được cho biết trong chính sách. – slayedbylucifer

0

đó làm việc cho tôi:

{ 
    "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

Nếu bạn đã kéo tóc của bạn ra bởi vì bạn không thể tìm ra lý do tại sao Cyberduck không thể đặt đối tượng ACL nhưng nó hoạt động với một máy khách khác (như Panic Transmit) ở đây là giải pháp:

Bạn cần phải thêm s3:GetBucketAcl vào danh sách hành động của bạn, ví dụ:

{ 
    "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" 
     } 
    ] 
} 

Tất nhiên bạn không cần phải làm điều này nếu bạn là ít hạn chế với s3:* nhưng tôi nghĩ rằng đây là tốt để biết.

1

Có một tài liệu chính thức AWS tại Writing IAM Policies: How to Grant Access to an Amazon S3 Bucket

Chỉ cần sao chép và dán cai trị thích hợp và thay đổi "Resource" chìa khóa để ARN của xô của bạn trong tất cả các báo cáo.

Đối truy cập programamtic chính sách nên được:

{ 
    "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/*"] 
     } 
    ] 
} 

Và đối với console truy cập truy cập nên là:

{ 
    "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

@ câu trả lời cloudberryman là đúng nhưng tôi thích làm những thứ như ngắn nhất có thể. Câu trả lời này có thể được giảm xuống:

{ 
    "Statement":[ 
     { 
     "Effect":"Allow", 
     "Action":"S3:*", 
     "Resource":[ 
      "arn:aws:s3:::bar", 
      "arn:aws:s3:::bar/*" 
     ] 
     } 
    ] 
} 
Các vấn đề liên quan