2016-08-04 39 views
31

Tôi nhận được An error occurred (AccessDenied) when calling the ListObjects operation: Access Denied khi tôi cố gắng lấy thư mục từ thùng S3 của mình.AccessDenied cho ListObjects cho thùng S3 khi quyền là s3: *

sử dụng lệnh này aws s3 cp s3://bucket-name/data/all-data/ . --recursive

Các điều khoản IAM cho xô giống như thế này

{ 
"Version": "version_id", 
"Statement": [ 
    { 
     "Sid": "some_id", 
     "Effect": "Allow", 
     "Action": [ 
      "s3:*" 
     ], 
     "Resource": [ 
      "arn:aws:s3:::bucketname/*" 
     ] 
    } 
] } 

gì tôi cần phải thay đổi để có thể copyls thành công?

Trả lời

61

Bạn đã được phép thực hiện các lệnh trên các đối tượng bên trong nhóm S3, nhưng bạn chưa được phép thực hiện bất kỳ hành động nào trên chính nhóm đó. Sửa đổi chính sách của mình để được như sau:

{ 
"Version": "version_id", 
"Statement": [ 
    { 
     "Sid": "some_id", 
     "Effect": "Allow", 
     "Action": [ 
      "s3:*" 
     ], 
     "Resource": [ 
      "arn:aws:s3:::bucketname", 
      "arn:aws:s3:::bucketname/*" 
     ] 
    } 
] } 
+5

Đây là danh sách tác vụ quá rộng. Đối với danh sách và quyền sao chép, những gì bạn sẽ đề nghị là những hành động cần thiết. –

+1

@domfarr Tôi chỉ đang làm tối thiểu có thể để điều chỉnh chính sách OPs để làm cho nó hoạt động cho anh ta. Nếu bạn có một câu hỏi cụ thể, bạn nên đăng câu hỏi đó dưới dạng câu hỏi riêng trên trang web này thay vì gắn thẻ vào câu hỏi này với nhận xét. Mặc dù nó thực sự dễ dàng để xem danh sách các hành động của S3 và xây dựng chính sách bạn muốn. –

+1

Tôi không gắn thẻ. OP đã yêu cầu những gì cần thiết cho bản sao và ls. Việc thiếu arn cấp độ đã được bao gồm, nhưng bạn đã không điều chỉnh Hành động ... do đó nhận xét của tôi. –

1

tôi đã không thể truy cập vào S3 vì

  • đầu tiên tôi được cấu hình truy cập phím trên dụ (nó đã không thể đính kèm vai trò sau khi khởi động sau đó)
  • quên nó trong một vài tháng
  • vai trò được đính kèm cho ví dụ
  • cố gắng truy cập. Khóa được định cấu hình có mức độ ưu tiên cao hơn vai trò và quyền truy cập bị từ chối do người dùng không được cấp quyền S3 cần thiết.

Giải pháp: rm -rf .aws/credentials, sau đó aws sử dụng vai trò.

+0

Chính xác cùng một vấn đề. Một triệu chứng của điều này sẽ là một người dùng có thể truy cập vào những thứ mà người dùng khác không thể trên cùng một nút EC2. –

4

Bạn phải chỉ định Tài nguyên cho nhóm thông qua "arn: aws: 3 ::: bucketname" hoặc "arn: aws: 3 ::: bucketname *". Loại thứ hai được ưu tiên vì nó cũng cho phép thao tác trên các vật thể của thùng. Chú ý không có dấu gạch chéo!

Đối tượng danh sách là một hoạt động trên Nhóm. Do đó, hành động "s3: ListBucket" là bắt buộc. Thêm một đối tượng vào Thùng là một thao tác trên đối tượng. Do đó, hành động "s3: PutObject" là cần thiết. Chắc chắn, bạn có thể muốn thêm các hành động khác theo yêu cầu.

{ 
"Version": "version_id", 
"Statement": [ 
    { 
     "Sid": "some_id", 
     "Effect": "Allow", 
     "Action": [ 
      "s3:ListBucket", 
      "s3:PutObject" 
     ], 
     "Resource": [ 
      "arn:aws:s3:::bucketname*" 
     ] 
    } 
] 
} 
+4

vấn đề với 'arn: aws: s3 ::: bucketname * 'là nó cũng cho phép truy cập vào' arn: aws: s3 ::: bucketname-with-suffix ' – Guss

0

Tôi gặp lỗi tương tự khi sử dụng chính sách như dưới đây, mặc dù tôi có "s3: ListBucket" cho hoạt động s3: ListObjects.

{ 
"Version": "2012-10-17", 
"Statement": [ 
    { 
     "Action": [ 
      "s3:ListBucket", 
      "s3:GetObject", 
      "s3:GetObjectAcl" 
     ], 
     "Resource": [ 
      "arn:aws:s3:::<bucketname>/*", 
      "arn:aws:s3:::*-bucket/*" 
     ], 
     "Effect": "Allow" 
    } 
    ] 
} 

Sau đó, tôi cố định nó bằng cách thêm một dòng "ARN: AWS: s3 ::: bucketname"

{ 
"Version": "2012-10-17", 
"Statement": [ 
    { 
     "Action": [ 
      "s3:ListBucket", 
      "s3:GetObject", 
      "s3:GetObjectAcl" 
     ], 
     "Resource": [ 
      "arn:aws:s3:::<bucketname>", 
      "arn:aws:s3:::<bucketname>/*", 
      "arn:aws:s3:::*-bucket/*" 
     ], 
     "Effect": "Allow" 
    } 
] 
} 
3

Nếu bạn muốn sao chép một cách đệ quy tất cả xô s3 đối tượng bằng cách sử dụng lệnh " AWS s3 cp s3:. // xô-name/dữ liệu/all-data/--recursive" như bạn đề cập, đây là chính sách tối thiểu cần thiết để làm điều đó:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "s3:ListBucket" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::bucket-name" 
      ] 
     }, 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "s3:GetObject" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::bucket-name/data/all-data/*" 
      ] 
     } 
    ] 
} 

các linh sam tuyên bố st trong chính sách này cho phép liệt kê các đối tượng bên trong nhóm. Lưu ý rằng với cài đặt này, bạn sẽ cho phép cũng liệt kê các đối tượng trong các thư mục con của nhóm này.Nó dường như không thể chỉ cho phép ls cho các thư mục con s3, vì vậy cố gắng áp dụng hành động này cho tài nguyên "arn: aws: s3 ::: // bucket-name/data/all-data /" won ' t làm việc như mong đợi (Tôi đã thử nghiệm và thử nhiều cách để làm điều này, giúp ở đây sẽ được đánh giá cao).

Câu lệnh thứ hai trong chính sách này cho phép nhận các đối tượng bên trong thùng tại một thư mục con cụ thể. Điều này có nghĩa là bất cứ điều gì bên trong đường dẫn "s3: // bucket-name/data/all-data /" bạn sẽ có thể sao chép. Lưu ý rằng điều này không cho phép bạn sao chép từ đường dẫn gốc như "s3: // bucket-name/data /".

Một vấn đề tương tự với điều này có thể được tìm thấy ở đây dẫn tôi đến giải pháp mà tôi đang đưa ra. https://github.com/aws/aws-cli/issues/2408

Hy vọng trợ giúp này!

+0

Thực ra, có vẻ như bạn * có thể * hạn chế' ListBucket' đến một khóa con: https://stackoverflow.com/a/35952877/89218 – paleozogt

+0

Cảm ơn bạn đã cho tôi biết, tôi sẽ thử điều này trên một số dự án hiện tại của tôi! –

Các vấn đề liên quan