Trong giao diện điều khiển Amazon S3, tôi chỉ thấy tùy chọn cấp phép cho "tải lên/xóa". Có cách nào để cho phép tải lên nhưng không xóa không?Cách xóa quyền "xóa" trên Amazon S3
Trả lời
Các quyền mà bạn đang nhìn thấy trong AWS Management Console trực tiếp dựa trên ban đầu và tương đối đơn giản Access Control Lists (ACL) sẵn cho S3, trong đó chủ yếu phân biệt ĐỌC và VIẾT quyền, xem Specifying a Permission:
- ĐỌC - Cho phép người được cấp quyền liệt kê các đối tượng trong thùng
- VIẾT - Cho phép được cấp để tạo, ghi đè và xóa bất kỳ đối tượng trong xô
Những hạn chế này đã được giải quyết bằng cách thêm Bucket Policies (điều khoản áp dụng trên mức xô) và IAM Policies (điều khoản áp dụng trên cấp độ người dùng) và cả ba có thể được sử dụng cùng nhau (có thể trở nên khá phức tạp, như được giải quyết bên dưới), xem Access Control cho toàn bộ hình ảnh.
Trường hợp sử dụng của bạn có thể yêu cầu chính sách nhóm tương ứng mà bạn thêm trực tiếp từ bảng điều khiển S3. Nhấp vào Thêm chính sách nhóm mở Trình biên tập chính sách nhóm , có các liên kết đến một vài mẫu cũng như được đề xuất là AWS Policy Generator, cho phép bạn lắp ráp chính sách giải quyết trường hợp sử dụng của bạn.
Đối với một xô khác khóa xuống, hình thức đơn giản nhất có thể trông như vậy (xin đảm bảo điều chỉnh Principal và Resource yêu cầu của bạn):
{
"Statement": [
{
"Action": [
"s3:PutObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::<bucket_name>/<key_name>",
"Principal": {
"AWS": [
"*"
]
}
}
]
}
Tùy thuộc vào trường hợp sử dụng của bạn, bạn có thể dễ dàng soạn các chính sách khá phức tạp bằng cách kết hợp các hành động khác nhau Cho phép và Từ chối - điều này rõ ràng có thể mang lại các quyền vô ý, do đó kiểm tra thích hợp là chìa khóa như bình thường; theo đó, hãy chú ý đến các tác động khi sử dụng Using ACLs and Bucket Policies Together hoặc IAM and Bucket Policies Together.
Cuối cùng, bạn cũng có thể muốn xem câu trả lời của mình cho số Problems specifying a single bucket in a simple AWS user policy, giải quyết một sự cố khác thường gặp phải với các chính sách.
Vâng, s3:DeleteObject
là một lựa chọn:
http://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html
Tuy nhiên, không có sự khác biệt giữa việc thay đổi một đối tượng hiện (mà sẽ cho phép một cách hiệu quả xóa nó) và tạo ra một đối tượng mới.
Bạn có thể đính kèm chính sách không xóa vào nhóm s3 của mình.Ví dụ, nếu bạn không muốn sử dụng IAM này để thực hiện bất kỳ hoạt động xóa bất kỳ xô hoặc bất kỳ đối tượng, bạn có thể đặt một cái gì đó như thế này:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1480692207000",
"Effect": "Deny",
"Action": [
"s3:DeleteBucket",
"s3:DeleteBucketPolicy",
"s3:DeleteBucketWebsite",
"s3:DeleteObject",
"s3:DeleteObjectVersion"
],
"Resource": [
"arn:aws:s3:::*"
]
}
]
}
Ngoài ra, bạn có thể kiểm tra chính sách của bạn với mô phỏng chính sách https://policysim.aws.amazon.com để kiểm tra nếu bạn thiết lập là những gì bạn mong đợi hay không.
Hy vọng điều này sẽ hữu ích!
Điều này hoạt động hoàn hảo. Cảm ơn Pung Worathiti Manosroi. kết hợp chính sách được đề cập của anh ấy như sau:
{
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:GetObjectAcl",
"s3:PutObjectAcl",
"s3:ListBucket",
"s3:GetBucketAcl",
"s3:PutBucketAcl",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::mybucketname/*",
"Condition": {}
},
{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*",
"Condition": {}
},
{
"Effect": "Deny",
"Action": [
"s3:DeleteBucket",
"s3:DeleteBucketPolicy",
"s3:DeleteBucketWebsite",
"s3:DeleteObject",
"s3:DeleteObjectVersion"
],
"Resource": "arn:aws:s3:::mybucketname/*",
"Condition": {}
}
]
}