Tạo các chính sách S3 Bucket
Chính sách S3 Bucket là một chính sách dựa trên tài nguyên, cho phép bạn quản lý quyền truy cập vào các tài nguyên lưu trữ trên một S3 Bucket của bạn. Bạn có thể chỉ định quyền cho từng tài nguyên để cho phép hoặc từ chối các hành động do một chủ thể (principal) (người dùng hoặc vai trò) yêu cầu.
Trong bài viết này tôi sẽ hướng dẫn bạn tạo một vài chính sách S3 Bucket thông dụng, để tạo ra các chính sách nâng cao hơn bạn nên tham khảo các tài liệu chính thức của Amazon S3.
Để hỗ trợ việc tạo ra một chính sách Bucket một cách nhanh chóng và chính xác bạn có thể sử dụng công cụ "policygen" dưới đây:
1. Thay đổi chính sách Bucket ở đâu?
Đầu tiên, đăng nhập vào Amazon S3 Console.
Tiếp theo, nhấn vào một Bucket mà bạn quan tâm.
- [Selected Bucket] > Permissions > Bucket policy > Edit
2. Chính sách công cộng tối thiểu
Action | Description |
s3:GetObject | Quyền (permission) này cho phép người dùng truy xuất đối tượng. Trong trường hợp Bucket được bật tính năng "Static website hosting", quyền này sẽ cho phép người dùng download đối tượng. |
s3:ListBucket | Cho phép người dùng liệt kê các đối tượng trong Bucket. Chú ý: Nếu bạn truy cập vào một đối tượng không tồn tại trong Bucket, sẽ có hai tình huống xẩy ra:
|
s3:GetObject và s3:ListObject là hai quyền tối thiểu nhất dành cho những người dùng công cộng.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt-GetObject",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::your_bucket_name/*",
"Principal": "*"
},
{
"Sid": "Stmt-ListBucket",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::your_bucket_name",
"Principal": "*"
}
]
}
3. Cho phép tất cả các quyền
Chính sách Bucket này cho phép tất cả các quyền.
{
"Version": "2012-10-17",
"Id": "S3PolicyId1",
"Statement": [
{
"Sid": "AllowAll",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::your_bucket_name",
"arn:aws:s3:::your_bucket_name/*"
],
}
]
}
4. Cho phép tất các quyền Get và List
Chính sách Bucket này cho phép tất cả các quyền với tiếp đầu ngữ "Get" hoặc "List".
- s3:GetObject, s3:ListBucket, s3:GetBucketLocation, s3:GetBucketLocation,...
{
"Version":"2012-10-17",
"Id":"S3PolicyId1",
"Statement":[
{
"Sid":"AllowAll_GET_LIST",
"Effect":"Allow",
"Principal":"*",
"Action":[
"s3:Get*",
"s3:List*"
],
"Resource":[
"arn:aws:s3:::your_bucket_name",
"arn:aws:s3:::your_bucket_name/*"
]
}
]
}
5. Chính sách dựa trên IP
- IPv4 and IPv6
IPv4
Chính sách dưới đây từ chối tất cả những người dùng thực hiện bất kỳ một hành động nào trên Bucket, ngoại trừ những người dùng có IPv4 thuộc một dải được chỉ định.
Cảnh báo:Trước khi sử dụng chính sách này, hãy thay thế dải địa chỉ IPv4 (192.0.2.0/24) trong ví dụ này bằng một giá trị thích hợp cho trường hợp sử dụng của bạn. Nếu không, bạn sẽ mất khả năng truy cập vào Bucket của mình.
{
"Version": "2012-10-17",
"Id": "S3PolicyId1",
"Statement": [
{
"Sid": "IPAllow",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::your_bucket_name",
"arn:aws:s3:::your_bucket_name/*"
],
"Condition": {
"NotIpAddress": {
"aws:SourceIp": "192.0.2.0/24"
}
}
}
]
}
IPv4 & IPv6
Chính sách Bucket ví dụ sau đây cho biết cách trộn lẫn các dải địa chỉ IPv4 và IPv6 để bao phủ tất cả các địa chỉ IP hợp lệ của tổ chức bạn.
Chú ý: Các IPv6 phải tuân thủ định dạng tiêu chuẩn CIDR. :0000: có thể được thay thế bởi ::
{
"Id": "PolicyId2",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowIPmix",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::your_bucket_name",
"arn:aws:s3:::your_bucket_name/*"
],
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"192.0.2.0/24",
"2001:DB8:1234:5678::/64"
]
},
"NotIpAddress": {
"aws:SourceIp": [
"203.0.113.0/24",
"2001:DB8:1234:5678:ABCD::/80"
]
}
}
}
]
}
Kết quả:
Allowed | 192.0.2.1 & 2001:DB8:1234:5678::1 |
Denied | 203.0.113.1 & 2001:DB8:1234:5678:ABCD::1 |
6. Chính sách dựa trên HTTP/HTTPS
Chính sách này từ chối các yêu cầu HTTP (cho phép các yêu cầu HTTPS).
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "RestrictToTLSRequestsOnly",
"Action": "s3:*",
"Effect": "Deny",
"Resource": [
"arn:aws:s3:::your_bucket_name",
"arn:aws:s3:::your_bucket_name/*"
],
"Condition": {
"Bool": {
"aws:SecureTransport": "false"
}
},
"Principal": "*"
}]
}
HTTP Referer example:
Một chính sách cho phép các hành động s3:GetObject và s3:GetObjectVersion từ một website cụ thể, các yêu cầu cần phải đính kèm thông tin "Header referer". Chú ý: Những kẻ tấn công cũng có thể giả mạo các thông tin "Header referer" nếu chúng biết bạn đang sử dụng chính sách này.
{
"Version":"2012-10-17",
"Id":"HTTP referer policy example",
"Statement":[
{
"Sid":"Allow only GET requests originating from www.example.com and example.com.",
"Effect":"Allow",
"Principal":"*",
"Action":["s3:GetObject","s3:GetObjectVersion"],
"Resource":"arn:aws:s3:::your_bucket_name/*",
"Condition":{
"StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*"]}
}
}
]
}
Các hướng dẫn Amazon Web Services
- Giới thiệu về Amazon Web Services (AWS)
- Giới thiệu về Amazon S3
- Giới thiệu về Amazon Cloudfront và kiến trúc của nó
- Làm sao để giảm chi phí Amazon Cloudfront?
- Vô hiệu hoá bộ nhớ đệm CloudFront
- Giới thiệu về DigitalOcean Spaces
- Hướng dẫn tạo DigitalOcean Spaces Bucket
- Giới thiệu về Amazon ACM
- Java Awssdk S3 Tải tệp lên S3 Bucket với S3Client
- Tạo AWS accessKeyId/secretAccessKey
- Java Awssdk S3 Liệt kê các đối tượng trong S3 Bucket
- Lưu trữ (host) một Website tĩnh trên Amazon S3
- Vô hiệu hoá bộ nhớ đệm của CloudFront với Java
- Tạo DigitalOcean Spaces Access Key
- Java Awssdk Các Credentials Provider thông dụng
- Java Awssdk Tạo và sử dụng ProfileCredentialsProvider
- Java Awssdk Tạo và sử dụng EnvironmentVariableCredentialsProvider
- Java Awssdk Tạo và sử dụng SystemPropertyCredentialsProvider
- Java Awssdk S3 Tải object lên với S3TransferManager
- Java Awssdk S3 Tải object xuống với S3TransferManager
- Java thao tác với DigitalOcean Spaces sử dụng S3TransferManager
- Java tạo, liệt kê và xoá S3 Bucket
- Aws Console Tạo tài khoản người dùng IAM
- Tạo một vùng chứa Amazon S3 (S3 Bucket)
- Các quy tắc chuyển hướng cho S3 Static Website
- Cấu hình tên miền tuỳ chỉnh cho website tĩnh Amazon S3
- Tạo bản phân phối CloudFront cho S3 Bucket
- Cấu hình các trang phản hồi lỗi cho CloudFront
- Tạo các chính sách S3 Bucket
- Công cụ tạo các chính sách cho AWS - policygen
- So sánh Amazon S3 Rest API Endpoint và S3 Web Endpoint
- Chuyển hướng trong S3 Website với x-amz-website-redirect-location
- Di chuyển (migrate) dịch vụ DNS tới Amazon Route 53
- Chuyển (transfer) đăng ký tên miền tới Amazon Route 53
- Yêu cầu chứng chỉ SSL từ Amazon ACM
Show More