2016-09-27 21 views
5

Tôi đang cố gắng để Cloudflare hoạt động như CDN cho các tệp được lưu trữ trên S3, theo cách mà không ai có thể truy cập tệp trực tiếp. Ví dụ:S3 với Cloudflare không cho phép truy cập trực tiếp

S3 xô: cdn.mydomain.com.s3.amazonaws.com

CDN (CloudFlare): cdn.mydomain.com

Những gì tôi muốn là để có thể truy cập vào cdn.mydomain.com/file.jpg (CloudFlare) nhưng không cdn.mydomain.com.s3.amazonaws.com/file.jpg (S3).

Ngay bây giờ tôi có một CNAME cấu hình trên CloudFlare trỏ đến xô tôi, và CORS sau:

<?xml version="1.0" encoding="UTF-8"?> 
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
    <CORSRule> 
     <AllowedOrigin>*</AllowedOrigin> 
     <AllowedMethod>GET</AllowedMethod> 
     <MaxAgeSeconds>3000</MaxAgeSeconds> 
     <AllowedHeader>Authorization</AllowedHeader> 
    </CORSRule> 
</CORSConfiguration> 

Nếu tôi cố gắng truy cập vào bất kỳ tập tin, qua S3 hoặc CDN, tôi nhận được sự cho phép từ chối. Nếu tôi tạo một tệp công khai (aka người được cấp phép Tất cả), tôi có thể truy cập tệp đó qua S3 và CDN.

Tôi đã thử thay đổi AllowedOrigin bằng *.mydomain.com, nhưng không có may mắn.

+0

Hope bài viết này giúp bạn https://www.maxcdn.com/one/tutorial/s3-access/ – rocketspacer

Trả lời

7

Tôi đã tìm thấy giải pháp. Số article at CloudFlare's support center không đề cập đến điều này.

Bạn phải chỉnh sửa chính sách nhóm nhóm, không phải là CORS. Và thay vì cho phép miền của bạn, giống như bài viết đó, để có quyền truy cập vào nhóm, bạn phải cho phép CloudFlare IP. Đối với các tài liệu tham khảo, đây là danh sách các IP: https://www.cloudflare.com/ips

Đây là mẫu chính sách xô để làm việc với CloudFlare:

{ 
     "Sid": "SOME_STRING_ID_HERE", 
     "Effect": "Allow", // or deny 
     "Principal": {"AWS": "*"}, // or whatever principal you want 
     "Action": "s3:GetObject", // or whatever action you want 
     "Resource": "arn:aws:s3:::cdn.mydomain.com/*", // or whatever resource you want 
     "Condition": { 
      "IpAddress": { 
       "aws:SourceIp": [ 
        "103.21.244.0/22", 
        "103.22.200.0/22", 
        "103.31.4.0/22", 
        "104.16.0.0/12", 
        "108.162.192.0/18", 
        "131.0.72.0/22", 
        "141.101.64.0/18", 
        "162.158.0.0/15", 
        "172.64.0.0/13", 
        "173.245.48.0/20", 
        "188.114.96.0/20", 
        "190.93.240.0/20", 
        "197.234.240.0/22", 
        "198.41.128.0/17", 
        "199.27.128.0/21" 
       ] 
      } 
     } 
    } 
0

Nó tốt hơn để sử dụng tên miền của bạn như bảo vệ nhập cảnh vào S3, chứ không phải là danh sách các IP.

Đến S3 Console của trang web của bạn
Chọn Properties Panel
Dưới Permission
Chọn Thêm Cấu hình CORS
Thêm bạn CORSRules cho tên miền của bạn

S3-CORS-Config example

More CORS cấu hình có thể được tìm thấy here


Kinda một sai lầm, nhưng câu trả lời này chỉ cấm các trang web khác từ tham khảo bạn tài sản, chứ không phải từ các thiết bị đầu cuối gốc S3 tạo ra cho bạn ...

0

Giải pháp được chấp nhận không hoạt động chính xác. Nó chỉ cho phép truy cập vào CloudFlare. Để giải pháp đó hoạt động, bạn phải từ chối rõ ràng mọi thứ trong chính sách. Chính sách nhóm này được cập nhật cho các địa chỉ IP gần đây nhất của Cloudflare (bao gồm cả IPv6) và nó cũng từ chối tất cả các truy cập không phải từ địa chỉ IP Cloudflare ngoài hộp.

{ 
"Id": "Policy1517260196123", 
"Version": "2012-10-17", 
"Statement": [ 
    { 
     "Sid": "A string ID here", 
     "Action": "s3:*", 
     "Effect": "Deny", 
     "Resource": "arn:aws:s3:::yourbucket.example.com/*", 
     "Condition": { 
      "NotIpAddress": { 
       "aws:SourceIp": [ 
        "103.21.244.0/22", 
        "103.22.200.0/22", 
        "103.31.4.0/22", 
        "104.16.0.0/12", 
        "108.162.192.0/18", 
        "131.0.72.0/22", 
        "141.101.64.0/18", 
        "162.158.0.0/15", 
        "172.64.0.0/13", 
        "173.245.48.0/20", 
        "188.114.96.0/20", 
        "190.93.240.0/20", 
        "197.234.240.0/22", 
        "198.41.128.0/17", 
        "2400:cb00::/32", 
        "2405:8100::/32", 
        "2405:b500::/32", 
        "2606:4700::/32", 
        "2803:f800::/32", 
        "2c0f:f248::/32", 
        "2a06:98c0::/29" 
       ] 
      } 
     }, 
     "Principal": { 
      "AWS": "*" 
     } 
    } 
] 

}

+0

Vâng, tôi quên đề cập đến mà xô đã không được công khai. Vì vậy, không ai có thể truy cập nó anyway. Cách tiếp cận của bạn cũng hoạt động. Nó chỉ giả định rằng các thùng là công khai, sau đó chính sách của bạn chặn truy cập vào nó nếu 'NotIpAddress'. Cùng ý tưởng;) – rlcabral

Các vấn đề liên quan