openplanning

Tạo các chính sách S3 Bucket

  1. Thay đổi chính sách Bucket ở đâu?
  2. Chính sách công cộng tối thiểu
  3. Cho phép tất cả các quyền
  4. Cho phép tất các quyền Get và List
  5. Chính sách dựa trên IP
  6. Chính sách dựa trên HTTP/HTTPS
  7. Tham khảo
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:
  • Nếu bạn không có quyền s3:ListObject, bạn sẽ nhận được lỗi 403 (Access Denied).
  • Nếu bạn có quyền s3:ListObject, bạn sẽ nhận được lỗi 404 (No Such Key / Page Not Found).
s3:GetObjects3: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ỉ IPv4IPv6 để 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:GetObjects3: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

Show More