Tôi đang gặp một vấn đề rất lạ mà dường như tôi không thể giải quyết được. Tôi đã định cấu hình bản phân phối CloudFront riêng tư để phân phối nội dung từ bộ chứa S3 riêng tư. Tôi đang sử dụng cookie đã ký để cấp quyền truy cập vào tệp. Tôi cũng đang thực hiện các yêu cầu nguồn gốc chéo từ một trình duyệt cho các tệp, vì vậy tôi cần cho phép thông tin đăng nhập để gửi cookie. Tôi đã định cấu hình chính sách tiêu đề phản hồi tùy chỉnh để thực hiện việc này (tôi đặt chính sách này thành đặt Access-Control-Allow-Credentials thành true, đặt rõ ràng Access-Control-Allow-Origin cho miền dự định của tôi và đặt Access-Control-Allow-Methods / Access-Control-Max-Age một cách thích hợp và nó được đặt thành ghi đè gốc), đồng thời tôi cũng thiết lập chính sách bộ đệm tùy chỉnh cho bộ đệm dựa trên tiêu đề gốc và kiểm soát truy cập.
lệnh cURL này không đưa ra phản hồi chính xác:
curl -v -H "nguồn gốc: https://my-subdomain.my-domain.com" -H "cookie: CloudFront-Key-Pair-Id=MyKeyPairID; CloudFront-Policy=Base64EncodedPolicy; CloudFront-Signature=SignedPolicy" https ://my-other-subdomain.my-domain.com/key/to/my/private/file.txt
nó mang lại như sau:
< HTTP/1.1 200 OK
< Loại nội dung: ứng dụng/octet-stream
< Độ dài nội dung: 576
< Kết nối: giữ nguyên
< Ngày: Thứ Sáu, ngày 18 tháng 2 năm 2022 18:34:09 GMT
< Sửa đổi lần cuối: Thứ năm, ngày 16 tháng 12 năm 2021 14:45:12 GMT
< ETag: "a50884915242f9876bea4bb633963191"
< Phạm vi chấp nhận: byte
< Máy chủ: AmazonS3
< Khác nhau: Nguồn gốc,Kiểm soát truy cập-Yêu cầu-Tiêu đề,Kiểm soát truy cập-Yêu cầu-Phương thức
< Kiểm soát truy cập-Cho phép-Xuất xứ: https://my-subdomain.my-domain.com
< Khác nhau: Xuất xứ
< X-Cache: Hit từ cloudfront
< Thông qua: 1.1 redacted.cloudfront.net (CloudFront)
< X-Amz-Cf-Pop: EWR50-C1
< X-Amz-Cf-Id: JxMbPWHeQr0a9AAlf9PI5ksF6xGKVWL1LvpEC9XEoR_PVuVgiJ5zGA==
< Tuổi: 626
Chú ý thiếu Kiểm soát truy cập-Cho phép-Thông tin đăng nhập
tiêu đề.
Tuy nhiên, lệnh này, mang lại phản hồi chính xác:
curl -v -H "X-some-header:vô nghĩa" -H "xuất xứ: https://my-subdomain.my-domain.com" -H "cookie: CloudFront-Key-Pair-Id=MyKeyPairID; CloudFront- Chính sách=Base64EncodedPolicy; CloudFront-Signature=SignedPolicy" https://my-other-subdomain.my-domain.com/key/to/my/private/file.txt
trả lại:
< HTTP/1.1 200 OK
< Loại nội dung: ứng dụng/octet-stream
< Độ dài nội dung: 576
< Kết nối: giữ nguyên
< Ngày: Thứ Sáu, ngày 18 tháng 2 năm 2022 18:34:09 GMT
< Sửa đổi lần cuối: Thứ năm, ngày 16 tháng 12 năm 2021 14:45:12 GMT
< ETag: "a50884915242f9876bea4bb633963191"
< Phạm vi chấp nhận: byte
< Máy chủ: AmazonS3
< Khác nhau: Nguồn gốc,Kiểm soát truy cập-Yêu cầu-Tiêu đề,Kiểm soát truy cập-Yêu cầu-Phương thức
< Kiểm soát truy cập-Cho phép-Thông tin xác thực: đúng
< Kiểm soát truy cập-Cho phép-Xuất xứ: https://my-subdomain.my-domain.com
< Khác nhau: Xuất xứ
< X-Cache: Hit từ cloudfront
< Thông qua: 1.1 redacted.cloudfront.net (CloudFront)
< X-Amz-Cf-Pop: EWR50-C1
< X-Amz-Cf-Id: pUSouCDwLH5Zu6-NBUZqKrb5kY407GLqXXtH4EK2-Th0Z9zZNb54ag==
< Tuổi: 693
lần này, với chính xác Kiểm soát truy cập-Cho phép-Thông tin đăng nhập
tiêu đề. Tôi không biết mình có thể đã định cấu hình sai điều gì để gây ra sự cố này hoặc tại sao điều này có thể xảy ra. Mọi thông tin chi tiết sẽ được đánh giá rất cao, bất kỳ cấu hình hoặc đầu ra thử nghiệm nào cần thiết, chỉ cần cho tôi biết.
Cảm ơn bạn
CHỈNH SỬA:
Sau một số thử nghiệm và lỗi, tôi đã xác định cài đặt ghi đè gốc trên Chính sách tiêu đề phản hồi đang gây ra sự cố. Khi điều đó được đặt thành true, nó sẽ không gửi tiêu đề Kiểm soát truy cập-Cho phép-Thông tin xác thực trừ khi bạn gửi một số tiêu đề không liên quan cùng với yêu cầu của mình. Đây là một vấn đề vì nó cũng gây ra các yêu cầu chiếu trước không mong muốn trong trình duyệt.
Tắt cài đặt đó và sau đó định cấu hình CORS của Bộ chứa S3 của tôi trông giống như bên dưới đã sửa nó:
[
{
"Tiêu đề được phép": [
"*"
],
"Phương thức được phép": [
"ĐƯỢC",
"CÁI ĐẦU"
],
"AllowedOrigins": [
"https://*",
"http://*"
],
"Những tiêu đề phơi bày": [
"Tag"
]
}
]
Tuy nhiên, tôi vẫn tò mò liệu tôi có hiểu nhầm cài đặt ghi đè gốc và có cách nào để thực hiện điều đó một cách chính xác hay đây là một loại lỗi nào đó trong CloudFront
CHỈNH SỬA 2:
Chính sách yêu cầu gốc: AWS Managed CORS-S3Oriign (Tôi đã thử với chính sách này và không có chính sách nào, kết quả tương tự)
Chính sách bộ đệm: Chính sách tùy chỉnh đối với bộ đệm dựa trên tiêu đề Nguồn gốc và kiểm soát truy cập, cũng đã thử với chính sách CacheOptimized được quản lý tiêu chuẩn và chính sách NoCache để đảm bảo rằng tôi không gặp sự cố với các yêu cầu không được xác thực bị kẹt trong bộ đệm. Cũng đã thử vô hiệu hóa bộ đệm theo cách thủ công và xem liệu các lần truy cập hoặc bỏ lỡ có tạo ra sự khác biệt hay không.
Chính sách tiêu đề phản hồi: Tùy chỉnh để cho phép thông tin đăng nhập, đây là cấu hình ban đầu. Cuối cùng, tôi đã đặt ghi đè gốc thành sai và mọi thứ bắt đầu hoạt động nếu tôi định cấu hình lại chính sách S3 CORS của mình để đặt tiêu đề. Tôi có một giá trị ngẫu nhiên dưới Kiểm soát truy cập-Cho phép-Tiêu đề
bởi vì tôi không được phép để trống trường đó vì bất kỳ lý do gì. Tiêu đề ngẫu nhiên được gửi không nhất thiết phải khớp với tiêu đề được đặt ở đây để nhận được tiêu đề thông tin xác thực được trả về, nhưng nó phải khớp để vượt qua kiểm tra ánh sáng trước của trình duyệt. Tôi cũng đã thực hiện một số thao tác với cài đặt tiêu đề hiển thị, không giúp được gì.
Lưu ý thêm, khi tôi có S3 đặt tiêu đề CORS chính xác, tôi có thể xóa hoàn toàn chính sách tiêu đề Phản hồi, nhưng tôi phải giữ chính sách bộ đệm tùy chỉnh nếu không các nguồn gốc khác nhau có thể nhận được tiêu đề sai. Điều này cũng kém lý tưởng hơn vì tôi sẽ cho phép người dùng truy cập các tệp này từ các nguồn gốc khác nhau và tôi tin rằng nếu chính sách về tiêu đề phản hồi hoạt động chính xác, thì nó sẽ đặt các tiêu đề sau khi được lấy từ bộ đệm thay vì lưu vào bộ đệm các tiêu đề (nhưng tôi có thể sai về điều đó). Có vẻ như tùy chọn duy nhất khác của tôi là một số chức năng CF chạy trên phản hồi, nhưng điều đó phát sinh thêm chi phí và chi phí hoạt động, trong khi chính sách tiêu đề phản hồi hoạt động sẽ miễn phí và hiệu quả hơn.
Nhưng điều rất lạ là ngay cả khi S3 đang đặt tiêu đề CORS chính xác, nếu tôi sử dụng Chính sách tiêu đề phản hồi với giá trị gốc ghi đè đúng, thì nó vẫn phá vỡ phản hồi mà không có tiêu đề ngẫu nhiên được đính kèm.