Tôi đang thêm một câu trả lời có cùng hướng với câu trả lời được chấp nhận nhưng với sự khác biệt nhỏ (quan trọng) và thêm chi tiết.
Hãy xem xét cấu hình dưới đây:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::<Bucket-Name>"]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": ["arn:aws:s3:::<Bucket-Name>/*"]
}
]
}
Chính sách cấp theo chương trình ghi-xóa truy cập và được chia thành hai phần:
Các ListBucket
hành động cung cấp quyền truy cập vào các mức xô và một PutObject/DeleteObject
hành động đòi hỏi quyền truy cập vào các đối tượng bên trong xô.
Các quy định cụ thể các yếu tố tài nguyên đầu tiên arn:aws:s3:::<Bucket-Name>
cho ListBucket
hành động để ứng dụng có thể liệt kê tất cả các đối tượng trong xô.
Phần tử tài nguyên thứ hai chỉ định arn:aws:s3:::<Bucket-Name>/*
cho PutObject
và DeletObject
các hành động để các ứng dụng có thể viết hoặc xóa bất kỳ đối tượng nào trong nhóm.
Việc tách thành hai 'arns' khác nhau rất quan trọng từ các lý do bảo mật để chỉ định các quyền truy cập chi tiết ở cấp độ xô và mức đối tượng.
Lưu ý rằng nếu tôi đã chỉ định GetObject
trong khối 2 thì điều gì sẽ xảy ra là trong các trường hợp truy cập theo chương trình, tôi sẽ nhận được một lỗi như:
Upload failed: <file-name> to <bucket-name>:<path-in-bucket> An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
.
aws
cho một người dùng và sử dụng nó trong tập lệnh bash được gọi là cronjob từ một người dùng khác, nghĩa là khóa truy cập và mã thông báo truy cập bị sai / không được đặt. Giải pháp của tôi là trực tiếp đưa thông tin đăng nhập (AWS_ACCESS_KEY_ID
vàAWS_SECRET_ACCESS_KEY
) vào tệp tập lệnh bash của tôi như được mô tả ở đây .