我是 aws 和 Angular 的新手。該門戶托管在 aws cloudfront 和 s3 存盤桶上。根頁面的 url 作業正常,但是當我嘗試從(特定組件的)不同 url 訪問門戶時,它會重定向到禁止的 403 頁面。
場景:用戶被重定向以在第三方應用程式的不同頁面上添加一些詳細資訊。當該應用程式重定向到成功頁面時,門戶會被重定向到 403 頁面。
它托管在 cloudfront 和 s3 上,其中存盤桶策略設定為阻止公共訪問。會不會是因為這個?如果我們需要將策略保密,如何解決這個問題?
謝謝你的時間。
uj5u.com熱心網友回復:
你可以通過兩種方式做到這一點:
選項 1 - 通過 S3 存盤桶靜態 Web 托管配置只需按照 @Allan Chua 的描述添加路由規則
選項 2 - 通過云端分發配置只需添加自定義錯誤頁面:
Error code: 403, Response page path: index.html, Response code: 200
Error code: 404, Response page path: index.html, Response code: 200
如果可以通過云端和 S3 URL 訪問網頁,則選項 1 很好如果您只想限制對云端 URL 的訪問,請使用選項 2(使用 Origin 訪問身份以允許云端訪問 S3 存盤桶)
uj5u.com熱心網友回復:
您將需要在 CloudFront 或 S3 級別實施重定向規則。發生這種情況是因為分配給非根組件的路由在 S3 中不存在,它們僅虛擬駐留在瀏覽器的運行時中。因此 S3 / CloudFront 以404/403狀態代碼回應。
為了解決這個問題,需要在 S3 或 CloudFront 層中實施重定向規則。有幾種方法可以做到這一點:
- 如果您手動設定了 S3 靜態站點,則可以按照本指南手動配置:
- 如果您已通過 Terraform 配置存盤桶,我建議您為重定向規則添加路由規則。
resource "aws_s3_bucket" "main_bucket" {
bucket = join("-", [var.project_name, "website-main-s3"])
acl = "private"
server_side_encryption_configuration {
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}
# Redirect rules for 404 and 403
# Assuming the logical routes are the primary cause of the 404 and 403 hits.
routing_rules = <<EOF
[{
"Condition": {
"HttpErrorCodeReturnedEquals": "403"
},
"Redirect": {
"ReplaceKeyWith": "index.html"
}
},
{
"Condition": {
"HttpErrorCodeReturnedEquals": "404"
},
"Redirect": {
"ReplaceKeyWith": "index.html"
}
}]
EOF
tags = {
Name = join("-", [var.project_name, "website-main-s3"])
Environment = var.environment
}
}
- 就像我分享的 terraform 模板一樣,也有一些方法可以使用 AWS
CDK和Cloud Formation
如果您喜歡我正在使用的 terraform 模板的完整副本,您可以按照Github中的這個示例進行操作
PS:您可能還需要考慮檢查您的 CloudFront 是否OAI有足夠的權限來拉取存盤桶中的非根組件。如果您說根路徑服務良好,則此問題的可能性很低。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/420359.html
標籤:
