Điều gì gây ra Access Denied khi sử dụng aws cli để tải xuống từ Amazon S3?


57

Tôi thực sự loanh quanh trong AWS đang cố gắng tìm ra những gì tôi đang thiếu ở đây. Tôi muốn làm cho nó để người dùng IAM có thể tải xuống các tệp từ nhóm S3 - mà không làm cho các tệp hoàn toàn công khai - nhưng tôi bị từ chối truy cập. Nếu bất cứ ai có thể phát hiện ra những gì tôi sẽ bị đánh cắp.

Những gì tôi đã làm cho đến nay:

  • Tạo một người dùng được gọi là my-user (ví dụ)
  • Đã tạo các khóa truy cập cho người dùng và đặt chúng vào ~ / .aws trên phiên bản EC2
  • Tạo chính sách xô mà tôi hy vọng cấp quyền truy cập cho người dùng của tôi
  • Chạy lệnh aws s3 cp --profile my-user s3://my-bucket/thing.zip .

Chính sách xô:

{
  "Id": "Policy1384791162970",
  "Statement": [
    {
      "Sid": "Stmt1384791151633",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::my-bucket/*",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:user/my-user"
      }
    }
  ]
}

Kết quả là A client error (AccessDenied) occurred: Access Deniedmặc dù tôi có thể tải xuống bằng cùng một lệnh và các khóa truy cập mặc định (tài khoản gốc?).

Tôi cũng đã thử thêm chính sách người dùng. Mặc dù tôi không biết tại sao nó lại cần thiết nhưng tôi nghĩ nó sẽ không đau, vì vậy tôi đã đính kèm nó với người dùng của mình.

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

Kết quả tương tự.

Câu trả lời:


39

Tôi cũng đang vật lộn với điều này, nhưng tôi đã tìm thấy câu trả lời ở đây https://stackoverflow.com/a/17162973/1750869 đã giúp giải quyết vấn đề này cho tôi. Đăng lại câu trả lời dưới đây.


Bạn không phải mở quyền cho mọi người. Sử dụng các chính sách Nhóm bên dưới về nguồn và đích để sao chép từ nhóm trong tài khoản này sang tài khoản khác bằng người dùng IAM

Nhóm để sao chép từ - SourceBucket

Nhóm để sao chép vào - DestinationBucket

ID tài khoản AWS nguồn - XXXXTHER XXXX-XXXX

Nguồn người dùng IAM - src từ iam-user

Chính sách dưới đây có nghĩa là - người dùng IAM - XXXX triệt

Trên SourceBucket, chính sách sẽ như sau:

{
"Id": "Policy1357935677554",
"Statement": [
    {
        "Sid": "Stmt1357935647218",
        "Action": [
            "s3:ListBucket"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::SourceBucket",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
    },
    {
        "Sid": "Stmt1357935676138",
        "Action": ["s3:GetObject"],
        "Effect": "Allow",
        "Resource": "arn:aws:s3::: SourceBucket/*",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
   }
]
}

Trên DestinationBucket, chính sách sẽ là:

{
"Id": "Policy1357935677554",
"Statement": [
    {
        "Sid": "Stmt1357935647218",
        "Action": [
            "s3:ListBucket"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:s3::: DestinationBucket",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
    },
    {
        "Sid": "Stmt1357935676138",
        "Action": ["s3:PutObject"],
        "Effect": "Allow",
        "Resource": "arn:aws:s3::: DestinationBucket/*",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
   }
]
}

lệnh được chạy là s3cmd cp s3://SourceBucket/File1 s3://DestinationBucket/File1


1
Ôi chúa ơi, anh là người hùng của tôi. Tôi chỉ thiếu sự cho phép ListBucket ở cấp độ nhóm. Tôi vẫn không biết tại sao tôi cần phải lấy cái xô để cp một đối tượng từ nó, nhưng không sao. Có lẽ đó chỉ là một sự châm biếm khi sử dụng lệnh aws?
Josh Gagnon

Vâng, nó khá lạ. Bạn sẽ nghĩ rằng có một chính sách duy nhất là s3: * (tuy nhiên không chắc chắn có thể) sẽ đủ để thử nghiệm độ tỉnh táo.
Sergio

fml, 2 ngày lãng phí cho sự cho phép ListBucket đó. bắt tốt
chaqke

Đã dành rất nhiều thời gian .. Đây là câu trả lời cần thiết. ListBucket - xô tên, GetObject - xô tên / *
rsmoorthy

12

Khi tôi gặp vấn đề tương tự, hóa ra AWS yêu cầu mã hóa phía máy chủ để được bật. Vì vậy, lệnh sau đã làm việc thành công cho tôi:

aws s3 cp test.txt s3://my-s3-bucket --sse AES256

3
Cảm ơn! Trong trường hợp của tôi, đó là --sse aws:kmssử dụng cái xô "mặc định" ...
Michael Yoo

Nếu bạn đang sử dụng khóa KMS không mặc định, bạn cũng cần phải chuyển khóa đó: --sse-kms-key-id 0123-abc-etc Tuy nhiên, phần không rõ ràng là sử dụng khóa KMS của riêng bạn, bạn phải có quyền IAM kms:GenerateDataKeynếu không bạn vẫn sẽ bị từ chối truy cập.
digarok

Câu hỏi là về Tải xuống .. bạn đang thực hiện tải lên S3 được mã hóa, do đó yêu cầu về khóa.
Ilhicas

4

Tôi sẽ không đề xuất tùy chọn 'Bất kỳ người dùng AWS xác thực nào' được đề cập bởi James.

Làm như vậy sẽ thêm ACL cấp độ nhóm cho phép mọi tài khoản AWS (không chỉ người dùng IAM của bạn) liệt kê / xóa / sửa đổi acls cho nhóm đó.

tức là đọc / ghi công khai cho bất cứ ai có tài khoản aws.


Bạn đã thử nghiệm điều này? Tôi có ấn tượng rằng tài khoản AWS thực sự có nghĩa là bất kỳ thực thể nào chống lại tổ chức của tôi - tức là người dùng, ví dụ EC2, vai trò IAM, nhưng không phải ai đó từ một tài khoản khác. Tôi có thể sai, và tôi sẽ chỉnh sửa đóng góp của mình và nhanh chóng kiểm tra các thùng của tôi nếu đó là trường hợp. Cảm ơn.
James Dunmore

1
Vâng Người được cấp "Người dùng xác thực" trong S3 ACL có nghĩa là tất cả các tài khoản AWS. Nó thi hành các yêu cầu đã ký, nhưng không có gì hơn. Đây là một tài liệu tham khảo: link
Andrew

3

Tôi đã cố gắng khắc phục vấn đề này mà không phải viết chính sách - từ bảng điều khiển S3 (web ui) Tôi đã chọn nhóm và trong tab quyền đã chọn "Bất kỳ người dùng AWS xác thực nào" và đặt vé cho tất cả các hộp.

CẬP NHẬT: như đã chỉ ra trong các nhận xét "Bất kỳ người dùng AWS được xác thực nào" không chỉ là người dùng trong tài khoản của bạn, đó là tất cả người dùng được xác thực AWS, vui lòng sử dụng một cách thận trọng


Tôi tưởng tượng rằng đó là một chính sách cho bạn. Lừa tất cả các hộp sẽ giúp bạn có được ListBucket, v.v. và hơn thế nữa.
Josh Gagnon

Tôi chắc chắn là như vậy - Tôi chỉ biết rằng chính sách bằng văn bản có thể là một nỗi đau, những hộp đánh dấu đó có thể cung cấp cho bạn nhiều hơn một chút nhưng cách khắc phục nhanh chóng
James Dunmore

2

Ngay cả khi các chính sách IAM của bạn được thiết lập chính xác, bạn vẫn có thể gặp lỗi như An error occurred (AccessDenied) when calling the <OPERATION-NAME> operation: Access Denieddo yêu cầu MFA (Xác thực đa yếu tố) trên thông tin đăng nhập của bạn. Những điều này có thể khiến bạn mất cảnh giác vì nếu bạn đã đăng nhập vào bảng điều khiển AWS, có vẻ như thông tin đăng nhập của bạn đang hoạt động tốt và thông báo lỗi từ chối từ aws cli không đặc biệt hữu ích.

Có một số hướng dẫn tốt về cách thiết lập MFA với aws cli:

Về cơ bản, bạn cần có địa chỉ của thiết bị MFA và gửi mã đó từ thiết bị của bạn để nhận mã thông báo tạm thời.


Bạn đã lưu bro ngày của tôi!
shintaroid

Yas, đó là lý do! Tại sao AWS không hiển thị lý do này trong đầu ra?
tummy.qichang

0

Tôi chỉ đơn giản là vào webUI và nhấp vào nhóm, sau đó đi đến quyền và sau đó đi đến chính sách. Khi tôi mở nó lên, tôi chỉ cần nhấp vào xóa. Tôi đã làm điều này vì tôi nghĩ đó là cấu hình.

Tôi quay lại trang s3 chính, sau đó nhấp vào nhóm và cố gắng xóa nó và nó hoạt động.

ngay cả khi tôi đã làm điều đó bằng aws-cli bằng cách sử dụng

$ aws s3 rb s3://bucket-name --force  

Dù sao, đó là điều làm việc cho tôi. Chính sách về quyền đang ngăn bạn xóa xô.


0

Khi tôi gặp lỗi này, chỉ cần cố gắng chạy:

aws s3 cp s3://[bucketName]/[fileName] .

trong một thư mục mà tôi không có quyền. Thật ngớ ngẩn, nhưng hãy chắc chắn rằng bạn là chủ sở hữu của thư mục bạn đang ở trước khi tiếp tục!


0

Vấn đề phát sinh khi bạn chèn tên tài nguyên hoặc đối tượng không hợp lệ. Tôi có cùng vấn đề với boto3 (trong trường hợp của tôi đó là tên nhóm không hợp lệ)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.