Mô tả ngắn:
Để khắc phục lỗi Truy cập bị từ chối, hãy xác định xem bản phân phối của bạn có
tên miền gốc là điểm cuối trang web S3 hoặc API S3 REST
điểm cuối. Làm theo các bước sau để xác định loại điểm cuối:
- Mở bảng điều khiển CloudFront.
- Chọn phân phối CloudFront của bạn rồi chọn Cài đặt phân phối.
- Chọn tab Nguồn gốc và Nhóm gốc.
- Chọn tab Nguồn gốc và Nhóm gốc.
Xem lại tên miền trong Tên miền gốc và Đường dẫn, sau đó
xác định loại điểm cuối dựa trên định dạng của tên miền.
Điểm cuối API REST sử dụng định dạng này:
DOC-VÍ DỤ-BUCKET.s3.amazonaws.com
Ghi chú: Đảm bảo tuân theo quy tắc đặt tên bộ chứa Amazon S3.
Điểm cuối trang web sử dụng định dạng này:
DOC-VÍ DỤ-BUCKET.s3-website-us-east-1.amazonaws.com
Ghi chú: Tùy thuộc vào Khu vực AWS, định dạng điểm cuối có thể sử dụng định dạng dấu gạch ngang (s3-trang web-Khu vực) hoặc định dạng dấu chấm
(s3-trang web.Khu vực).
Nếu bản phân phối của bạn đang sử dụng điểm cuối API REST, hãy xem Tôi đang sử dụng S3
Điểm cuối API REST làm nguồn gốc của bản phân phối CloudFront của tôi. Tại sao
tôi có gặp lỗi 403 Access Denied không?
Nếu bản phân phối của bạn đang sử dụng điểm cuối trang web, hãy xác minh những điều sau
các yêu cầu để tránh lỗi Access Denied:
- Các đối tượng trong thùng phải được truy cập công khai.
- Các đối tượng trong bộ chứa không thể được mã hóa bằng AWS Key Management Service (AWS KMS).
- Chính sách bộ chứa phải cho phép truy cập vào s3:GetObject.
- Nếu chính sách bộ chứa cấp quyền truy cập đọc công khai thì tài khoản AWS sở hữu bộ chứa đó cũng phải sở hữu đối tượng.
5.Các đối tượng được yêu cầu phải tồn tại trong thùng.
- Amazon S3 Block Public Access phải được tắt trên bộ chứa.
- Nếu Người yêu cầu thanh toán được bật thì yêu cầu phải bao gồm thông số người yêu cầu thanh toán.
- Nếu bạn đang sử dụng tiêu đề Người giới thiệu để hạn chế quyền truy cập từ CloudFront vào nguồn gốc S3 của mình, hãy xem lại tiêu đề tùy chỉnh.
Ghi chú: Nếu bạn không muốn cho phép public (vô danh) truy cập vào các đối tượng S3 của bạn, sau đó thay đổi cấu hình của bạn để sử dụng API REST của S3
điểm cuối làm nguồn gốc phân phối của bạn. Sau đó, cấu hình của bạn
phân phối và nhóm S3 để hạn chế quyền truy cập bằng cách sử dụng quyền truy cập gốc
danh tính (OAI). Để biết hướng dẫn, hãy xem Sử dụng điểm cuối API REST làm điểm cuối
Origin với quyền truy cập bị hạn chế bởi OAI trong Làm cách nào để tôi sử dụng CloudFront để
phục vụ một trang web tĩnh được lưu trữ trên Amazon S3?
Nghị quyết
Các đối tượng trong thùng phải được truy cập công khai
Bản phân phối sử dụng điểm cuối trang web chỉ hỗ trợ công khai
nội dung có thể truy cập. Để xác định xem một đối tượng trong bộ chứa S3 của bạn có
có thể truy cập công khai, hãy mở URL của đối tượng trong trình duyệt web. Hoặc, bạn
có thể chạy lệnh cuộn tròn trên URL.
Sau đây là một ví dụ về URL của một đối tượng S3:
http://DOC-EXAMPLE-BUCKET.s3-website-us-east-1.amazonaws.com/index.html
Nếu trình duyệt web hoặc lệnh cuộn tròn trả về lỗi Truy cập bị từ chối,
thì đối tượng không thể truy cập công khai.
Cho phép truy cập đọc công khai vào đối tượng theo một trong các cách sau:
- Tạo chính sách bộ chứa cho phép truy cập đọc công khai đối với tất cả các đối tượng trong bộ chứa.
- Sử dụng bảng điều khiển Amazon S3 để cho phép truy cập đọc công khai đối với đối tượng.
- Không thể mã hóa các đối tượng trong bộ chứa bằng AWS KMS
- Bản phân phối CloudFront không hỗ trợ các đối tượng được mã hóa AWS KMS. Bạn phải xóa mã hóa KMS khỏi các đối tượng S3 mà bạn muốn
phục vụ bằng cách sử dụng phân phối.
Ghi chú: Thay vì sử dụng mã hóa AWS KMS, hãy sử dụng AES-256 để mã hóa các đối tượng của bạn.
Sử dụng một trong các cách sau để kiểm tra xem một đối tượng trong bộ chứa của bạn có
Mã hóa KMS:
Sử dụng bảng điều khiển Amazon S3 để xem các thuộc tính của đối tượng. Ôn tập
hộp thoại Mã hóa. Nếu AWS-KMS được chọn, thì đối tượng là
được mã hóa KMS. Chạy lệnh đối tượng đầu bằng Dòng lệnh AWS
Giao diện (AWS CLI). Nếu lệnh trả về ServerSideEncryption là
aws:kms, thì đối tượng được mã hóa KMS. Lưu ý: Nếu bạn gặp lỗi
khi chạy các lệnh AWS CLI, hãy đảm bảo rằng bạn đang sử dụng nhiều nhất
phiên bản mới nhất của AWS CLI. Để thay đổi mã hóa của đối tượng
cài đặt bằng bảng điều khiển Amazon S3, hãy xem Làm cách nào để thêm mã hóa vào
một đối tượng S3?
Để thay đổi cài đặt mã hóa của đối tượng bằng cách sử dụng AWSCLI,
trước tiên hãy xác minh rằng bộ chứa của đối tượng không có mã hóa mặc định.
Nếu nhóm không có mã hóa mặc định, thì hãy chạy như sau
lệnh xóa mã hóa của đối tượng bằng cách sao chép đối tượng qua
chính nó:
aws s3 cp s3://DOC-EXAMPLE-BUCKET/index.html s3://DOC-EXAMPLE-BUCKET/index.html
Cảnh báo: Sao chép đối tượng lên chính nó sẽ xóa cài đặt cho lớp lưu trữ và
trang web-chuyển hướng-vị trí. Để duy trì các cài đặt này trong phiên bản mới
đối tượng, hãy đảm bảo chỉ định rõ ràng lớp lưu trữ hoặc
giá trị vị trí chuyển hướng trang web trong yêu cầu sao chép.
Chính sách nhóm phải cho phép truy cập vào s3:GetObject Để sử dụng
phân phối với điểm cuối trang web S3, chính sách bộ chứa của bạn không được
có một tuyên bố từ chối chặn quyền truy cập đọc công khai vào
hành động s3:GetObject.
Ngay cả khi bạn có câu lệnh cho phép rõ ràng đối với s3:GetObject trong
chính sách nhóm, hãy xác nhận rằng không có xung đột từ chối rõ ràng
bản tường trình. Một tuyên bố từ chối rõ ràng luôn ghi đè lên một tuyên bố rõ ràng
cho phép tuyên bố.
Thực hiện theo các bước sau để xem lại chính sách bộ chứa của bạn cho s3:GetObject:
Mở bộ chứa S3 của bạn từ bảng điều khiển Amazon S3.
Chọn tab Quyền.
Chọn Chính sách nhóm.
Xem lại chính sách bộ chứa cho các câu lệnh có "Action": "s3:GetObject" hoặc "Action": "s3:*".
Ví dụ chính sách sau đây chứa một câu lệnh cho phép rõ ràng đối với
truy cập công khai vào s3:GetObject. Tuy nhiên, cũng có một sự từ chối rõ ràng
tuyên bố cho s3:GetObject chặn truy cập trừ khi yêu cầu là
từ một Amazon Virtual Private Cloud (Amazon VPC) cụ thể.
{
"Phiên bản": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Bản tường trình": [
{
"Sid": "Cho phép-OAI-Truy cập vào Bộ chứa",
"Hiệu ứng": "Cho phép",
"Hiệu trưởng": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EAF5XXXXXXXXX"
},
"Hành động": "s3:GetObject",
"Nguồn": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
]
},
{
"Sid": "Cho phép truy cập công khai vào nhóm",
"Hiệu ứng": "Cho phép",
"Hiệu trưởng": "*",
"Hành động": "s3:GetObject",
"Nguồn": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
]
},
{
"Sid": "Chỉ truy cập vào VPCE cụ thể",
"Hiệu ứng": "Từ chối",
"Hiệu trưởng": "*",
"Hành động": "s3:GetObject",
"Nguồn": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
],
"Điều kiện, tình trạng, trạng thái": {
"StringNotEquals": {
"aws:sourceVpce": "vpce-1a2b3c4d"
}
}
}
]
}
- Sửa đổi chính sách bộ chứa để xóa hoặc chỉnh sửa các câu lệnh chặn quyền truy cập đọc công khai vào s3:GetObject.
Ghi chú: CloudFront lưu trữ kết quả của lỗi Truy cập bị từ chối trong bộ đệm trong khoảng thời gian được chỉ định trong TTL tối thiểu của bộ đệm lỗi. Các
giá trị mặc định là một phút. Sau khi loại bỏ một tuyên bố từ chối từ
chính sách bộ chứa, bạn có thể thực hiện vô hiệu hóa bản phân phối của mình tới
xóa đối tượng khỏi bộ đệm.
Nếu chính sách bộ chứa cấp quyền truy cập đọc công khai thì tài khoản AWS
sở hữu thùng cũng phải sở hữu đối tượng Đối với một chính sách xô để
cho phép truy cập đọc công khai đối với các đối tượng, tài khoản AWS sở hữu
xô cũng phải sở hữu các đối tượng. Một thùng hoặc đối tượng được sở hữu bởi
tài khoản của danh tính AWS Identity and Access Management (IAM) mà
đã tạo thùng hoặc đối tượng.
Ghi chú: Yêu cầu về quyền sở hữu đối tượng áp dụng cho quyền truy cập đọc công khai được cấp bởi chính sách bộ chứa. Nó không áp dụng cho đọc công khai
quyền truy cập được cấp bởi danh sách kiểm soát truy cập của đối tượng (ACL).
Thực hiện theo các bước sau để kiểm tra xem thùng và đối tượng có giống nhau không
chủ nhân:
- Chạy lệnh AWS CLI này để lấy ID chính tắc S3 của chủ sở hữu bộ chứa:
aws s3api list-buckets --query Owner.ID
- Chạy lệnh này để lấy ID chính tắc S3 của chủ sở hữu đối tượng:
Lưu ý: Ví dụ này hiển thị một đối tượng, nhưng bạn có thể sử dụng danh sách
lệnh để kiểm tra một số đối tượng.
đối tượng danh sách aws s3api --bucket DOC-EXAMPLE-BUCKET --prefix index.html
- Nếu ID chính tắc không khớp thì bộ chứa và đối tượng có chủ sở hữu khác nhau.
Lưu ý: Bạn cũng có thể sử dụng bảng điều khiển Amazon S3 để kiểm tra bộ chứa và
chủ sở hữu đối tượng. Chủ sở hữu được tìm thấy trong tab Quyền của
xô hoặc đối tượng tương ứng.
Làm theo các bước sau để thay đổi chủ sở hữu của đối tượng thành chủ sở hữu bộ chứa:
- Từ tài khoản của chủ sở hữu đối tượng, hãy chạy lệnh này để truy xuất các quyền ACL được gán cho đối tượng:
aws s3api get-object-acl --bucket DOC-EXAMPLE-BUCKET --key object-name
- Nếu đối tượng có quyền ACL toàn quyền kiểm soát của chủ sở hữu bộ chứa, thì hãy chuyển sang bước #3. Nếu đối tượng không có
quyền ACL của nhóm chủ sở hữu toàn quyền kiểm soát, sau đó chạy lệnh này từ
tài khoản của chủ sở hữu đối tượng:
aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key object-name --acl bucket-owner-full-control
- Từ tài khoản của chủ sở hữu bộ chứa, hãy chạy lệnh này để thay đổi chủ sở hữu của đối tượng bằng cách sao chép đối tượng lên chính nó:
aws s3 cp s3://DOC-EXAMPLE-BUCKET/index.html s3://DOC-EXAMPLE-BUCKET/index.html
Các đối tượng được yêu cầu phải tồn tại trong nhóm Nếu người dùng không có quyền s3:ListBucket thì người dùng đó bị Từ chối truy cập
lỗi đối tượng bị thiếu thay vì lỗi 404 Not Found. Chạy
lệnh AWS CLI head-object để kiểm tra xem một đối tượng có tồn tại trong
Gầu múc.
Ghi chú: Xác nhận rằng yêu cầu đối tượng được gửi tới CloudFront khớp chính xác với tên đối tượng S3. Tên đối tượng S3 phân biệt chữ hoa chữ thường. Nếu
yêu cầu không có tên đối tượng chính xác thì Amazon S3 sẽ phản hồi
như thể đối tượng bị mất. Để xác định đối tượng nào CloudFront
đang yêu cầu từ Amazon S3, hãy sử dụng ghi nhật ký truy cập máy chủ.
Nếu đối tượng tồn tại trong nhóm, thì lỗi Truy cập bị Từ chối không xảy ra
che giấu lỗi 404 Not Found. Xác minh các yêu cầu cấu hình khác để giải quyết lỗi Access Denied.
Nếu đối tượng không có trong bộ chứa thì lỗi Truy cập bị Từ chối là
che giấu lỗi 404 Not Found. Giải quyết vấn đề liên quan đến đối tượng bị thiếu.
Ghi chú: Đây không phải là phương pháp hay nhất về bảo mật để cho phép truy cập s3:ListBucket công khai. Kích hoạt quyền truy cập s3:ListBucket công khai cho phép
người dùng để xem và liệt kê tất cả các đối tượng trong một nhóm. Điều này phơi bày đối tượng
chi tiết siêu dữ liệu (ví dụ: khóa và kích thước) cho người dùng ngay cả khi
người dùng không có quyền tải xuống đối tượng.
Amazon S3 Block Public Access phải được tắt trên bộ chứa Xác nhận rằng không có bất kỳ cài đặt Truy cập công khai khối Amazon S3 nào
áp dụng cho xô. Các cài đặt này có thể ghi đè các quyền mà
cho phép truy cập đọc công khai. Cài đặt Quyền truy cập công khai khối Amazon S3 có thể
áp dụng cho các bộ chứa riêng lẻ hoặc tài khoản AWS.
Nếu Người yêu cầu thanh toán được bật, thì yêu cầu phải bao gồm
tham số request-payer Nếu Requester Pays được bật trên một bộ chứa, thì
truy cập ẩn danh vào nhóm không được phép. Người dùng từ khác
tài khoản phải chỉ định tham số người trả yêu cầu khi họ gửi
yêu cầu vào xô. Nếu không, những người dùng đó sẽ nhận được Truy cập bị Từ chối
lỗi.
Nếu bạn đang sử dụng tiêu đề Người giới thiệu để hạn chế quyền truy cập từ CloudFront đến
nguồn gốc S3 của bạn, sau đó xem lại tiêu đề tùy chỉnh Nếu bạn đang sử dụng
Tiêu đề người giới thiệu để hạn chế quyền truy cập từ CloudFront vào trang web S3 của bạn
nguồn gốc của điểm cuối, hãy kiểm tra giá trị bí mật hoặc mã thông báo được đặt trên bộ chứa S3
chính sách. Sau đó, xác nhận rằng giá trị bí mật hoặc mã thông báo khớp với giá trị
trên tiêu đề tùy chỉnh nguồn gốc CloudFront.
Nếu bạn đang sử dụng một tuyên bố từ chối rõ ràng trong chính sách bộ chứa, thì
xác nhận rằng cũng có một tuyên bố cho phép cấp quyền truy cập dựa trên
trên tiêu đề Người giới thiệu. Bạn không thể cấp quyền truy cập chỉ với một thông báo rõ ràng
tuyên bố phủ nhận.
Ví dụ, chính sách bộ chứa sau sẽ cấp quyền truy cập vào nguồn gốc S3 khi yêu cầu chứa chuỗi
"aws:Referer":"MY_SECRET_TOKEN_CONFIGURED_ON_CLOUDFRONT_ORIGIN_CUSTOM_HEADER":
{
"Phiên bản":"2012-10-17",
"Id":"ví dụ về chính sách người giới thiệu http",
"Bản tường trình":[
{
"Sid":"Cho phép nhận các yêu cầu bắt nguồn từ CloudFront của tôi với tiêu đề người giới thiệu",
"Hiệu ứng":"Cho phép",
"Hiệu trưởng":"*",
"Hành động":"s3:GetObject",
"Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
"Điều kiện, tình trạng, trạng thái":{
"StringLike":{"aws:Referer":"MY_SECRET_TOKEN_CONFIGURED_ON_CLOUDFRONT_ORIGIN_CUSTOM_HEADER"}
}
}
]
}
Với chính sách nhóm ví dụ này, tiêu đề tùy chỉnh nguồn gốc CloudFront
cần phải:
- tiêu đề: Người giới thiệu
- Giá trị: MY_SECRET_TOKEN_CONFIGURED_ON_CLOUDFRONT_ORIGIN_CUSTOM_HEADER
Ghi chú:
Chính sách bộ chứa ví dụ cấp quyền truy cập công khai (ẩn danh) vào
xô vì Hiệu trưởng là một giá trị ký tự đại diện ("Hiệu trưởng":"*").
Tuy nhiên, do câu lệnh điều kiện, truy cập vào nguồn gốc S3
chỉ được cấp nếu yêu cầu bao gồm tiêu đề Người giới thiệu và
giá trị tiêu đề khớp với giá trị trong chính sách bộ chứa.