AWS announces preview of AWS Interconnect - multicloud
AWS announces AWS Interconnect – multicloud (preview), providing simple, resilient, high-speed private connections to other cloud service providers. AWS Interconnect - multicloud is easy to configure and provides high-speed, resilient connectivity with dedicated bandwidth, enabling customers to interconnect AWS networking services such as AWS Transit Gateway, AWS Cloud WAN, and Amazon VPC to other cloud service providers with ease.
為什麼當我使用 S3 REST API 端點作為 CloudFront 發佈項目的來源時,會收到 "403 Access Denied" (403 存取遭拒) 錯誤?
我想對 Amazon CloudFront 從 Amazon Simple Storage Service (Amazon S3) 傳回的 "403 Access Denied" (403 存取遭拒) 錯誤進行疑難排解。
簡短描述
若要避免 "Access Denied" (存取遭拒) 錯誤,請使用以下設定:
- 讓 S3 物件可以公開存取。
- 對於包含使用 AWS Key Management Service (AWS KMS) 在伺服器端加密的物件的 S3 儲存貯體,請使用來源存取控制 (OAC)。
**注意:**您必須使用 OAC 而不是原始存取身分 (OAI)。因為 OAI 不提供 AWS KMS 加密物件。 - 修改 S3 儲存貯體政策,以允許存取 s3:GetObject。
- 確定擁有 S3 儲存貯體的 AWS 帳戶也擁有該物件。
- 確認請求的物件存在於 S3 儲存貯體中。
- 定義預設根物件,以便用戶端可以請求發佈項目的根目錄。
- 對於 OAI 組態,您必須將 OAI 包含在 S3 儲存貯體政策中。對於 OAC 組態,您必須在 S3 儲存貯體政策中包含 CloudFront 服務主體。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
讓 S3 物件可以公開存取
若要確定 S3 儲存貯體中的物件是否可公開存取,請在 Web 瀏覽器中開啟 S3 物件的網址。或者,在網址上執行 curl 命令。
以下是 S3 物件的範例網址:
https://DOC-EXAMPLE-BUCKET.s3.amazonaws.com/index.html
如果 Web 瀏覽器或 curl 命令傳回 "Access Denied" (存取遭拒) 錯誤,則表示該物件不可公開存取。
若要讓物件可公開存取,請執行下列其中一個動作:
- 建立儲存貯體政策,此政策授予儲存貯體的唯讀權限。
- 使用 S3 主控台允許對物件的公開讀取存取權。
- 使用 REST API 端點為發佈項目設定 OAC 或 OAI。
- 使用 AWS 第 4 版簽署程序驗證對 S3 的請求。
對 AWS KMS 加密的物件使用 OAC
若要使用 OAC,請為 AWS KMS key 政策新增陳述式,以授予 CloudFront 服務主體使用金鑰的權限。您也可以使用 Lambda@Edge 而不是 OAC。如需詳細資訊,請參閱使用 CloudFront 從 S3 提供 SSE-KMS 加密內容。
若要確認您已使用 AWS KMS 加密物件,請執行下列其中一個動作:
- 使用 S3 主控台查看物件的屬性。查看 Encryption (加密) 對話方塊。如果選取了 AWS KMS,則該物件已經 AWS KMS 加密。
- 執行 head-object 命令。如果該命令以 aws:kms 傳回 ServerSideEncryption,則表示該物件已進行 AWS KMS 加密。
允許存取 s3:GetObject
即使您的儲存貯體政策中存在 s3:GetObject 的明確 Allow 陳述式,也請確認其與明確 Deny 陳述式沒有衝突。明確的 Deny 陳述式會覆寫明確的 Allow 陳述式。如需 Deny 和 Allow 陳述式的詳細資訊,請參閱政策評估邏輯。
若要確認您的儲存貯體政策允許 s3:GetObject,且沒有明確的 Deny 陳述式,請完成下列步驟:
-
開啟 Amazon S3 console (Amazon S3 主控台)。
-
選取您的儲存貯體。
-
選擇 Permissions (權限) 索引標籤。
-
選擇 Bucket policy (儲存貯體政策)。
-
檢查具有 "Action": "s3:GetObject" 或 "Action": "s3:*" 的陳述式。
以下範例政策包含 Allow 陳述式,該陳述式授予 CloudFront OAC 和 CloudFront OAI 對 s3:GetObject 的存取權。其也包含 Allow 陳述式,用於授予 s3:GetObject 的公開存取權。不過,s3:GetObject 有明確的 Deny 陳述式,除非請求來自特定的 Amazon Virtual Private Cloud (Amazon VPC),否則會阻止存取。{ "Version": "2012-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [{ "Sid": "Allow-OAC-Access-To-Bucket", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::111122223333:distribution/EDFDVBD6EXAMPLE" } } }, { "Sid": "Allow-OAI-Access-To-Bucket", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EAF5XXXXXXXXX" }, "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ] }, { "Sid": "Allow-Public-Access-To-Bucket", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ] }, { "Sid": "Access-to-specific-VPCE-only", "Effect": "Deny", "Principal": "*", "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpce-1a2b3c4d" } } } ] } -
修改儲存貯體政策,以移除或編輯那些封鎖 CloudFront OAI、CloudFront OAC 或公開存取 s3:GetObject 的陳述式。
**注意:**CloudFront 會快取 "Access Denied" (存取遭拒) 錯誤的結果,最多可快取 5 分鐘。從儲存貯體政策中移除 Deny 陳述式後,您可以對發佈項目進行執行失效,以從快取中移除物件。
授予 S3 儲存貯體和物件的擁有權
確認建立儲存貯體或物件的 AWS Identity and Access Management (IAM) 身分的帳戶是否擁有該儲存貯體或物件。
**注意:**物件擁有權要求僅適用於儲存貯體政策所授予的存取權。其不適用於物件存取控制清單 (ACL) 授予的存取權。
若要檢查儲存貯體和物件是否具有相同的擁有者,請完成以下步驟:
-
執行 list-buckets 命令以取得儲存貯體擁有者的 S3 規範 ID:
aws s3api list-buckets --query Owner.ID -
執行 list-objects 命令以取得物件所有者的 S3 標準 ID:
aws s3api list-objects --bucket DOC-EXAMPLE-BUCKET --prefix index.html**注意:**上述範例命令顯示單一物件,但您可以執行 list-objects 命令來檢查多個物件。
如果規範 ID 不相符,則儲存貯體和物件有不同的擁有者。
**注意:**您也可以使用 Amazon S3 主控台檢查儲存貯體和物件擁有者。您可以在儲存貯體或物件的 Permissions (權限) 索引標籤中找到擁有者。
若要將物件的擁有者變更為儲存貯體擁有者,請完成下列步驟:
-
從物件擁有者的帳戶執行 get-object-acl 命令來擷取 ACL 權限:
aws s3api get-object-acl --bucket DOC-EXAMPLE-BUCKET --key object-name -
如果物件具有 bucket-owner-full-control ACL 權限,請繼續執行步驟 3。如果物件沒有 bucket-owner-full-control ACL 權限,則從物件擁有者的帳戶執行 put-object-acl 命令:
aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key object-name --acl bucket-owner-full-control -
從儲存貯體所有者的帳戶中,執行下列命令,將物件複製到自身並變更物件的所有者:
aws s3 cp s3://DOC-EXAMPLE-BUCKET/index.html s3://DOC-EXAMPLE-BUCKET/index.html --storage-class STANDARD**注意:**將 --storage-class 替換為您的儲存類別。
將物件移到儲存貯體
若要檢查儲存貯體中是否存在物件,請執行 head-object 命令。
**注意:**S3 物件名稱區分大小寫。確認傳送至 CloudFront 的物件請求與 S3 物件名稱相符。如果請求沒有正確的物件名稱,則 Amazon S3 會像物件遺失那樣回應。若要識別 CloudFront 從 Amazon S3 請求的物件,請使用伺服器存取日誌記錄。
如果儲存貯體中存在該物件,則 "Access Denied" (存取遭拒) 錯誤不會遮罩 "404 Not Found" (404 找不到) 錯誤。檢查其他組態需求,以解決 "Access Denied" (存取遭拒) 錯誤。
如果物件不在儲存貯體中,"Access Denied" (存取遭拒) 錯誤會遮罩 "404 Not Found" (404 找不到) 錯誤。您必須解決與遺失物件相關的問題。
定義預設根物件
若要定義預設根物件,請參閱指定預設根物件。
**注意:**最佳安全實務是拒絕公開存取 s3:ListBucket。如果您允許公開存取 s3:ListBucket,則使用者可以查看和列出儲存貯體中的所有物件。這會向所有使用者公開物件中繼資料詳細資訊,例如索引鍵和大小。
在 S3 儲存貯體政策中新增 OAI 或 CloudFront 服務主體權限
若要檢查您的儲存貯體政策是否允許 OAI,請開啟 Amazon S3 主控台。找到您的儲存貯體,然後在 Permissions (權限) 索引標籤上選擇 Bucket policy (儲存貯體政策)。
當您設定 OAC 時,下列範例政策包含針對 CloudFront 服務主體的 Allow 陳述式:
{ "Sid": "Allow-OAC-Access-To-Bucket", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::111122223333:distribution/EDFDVBD6EXAMPLE" } } }
以下範例政策包含 OAI 的 Allow 陳述式:
{ "Sid": "1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EAF5XXXXXXXXX" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" }
若要在 CloudFront 主控台上更新儲存貯體政策,請完成以下步驟:
- 開啟 CloudFront console (CloudFront 主控台)。
- 選取您的發佈項目。
- 選擇 Origins and Origin Groups (來源和來源群組) 索引標籤。
- 選取 S3 來源,然後選擇 Edit (編輯)。
- 在 Restrict Bucket Access (限制儲存貯體存取),選擇 Yes (是)。
- 在 Origin Access Identity (原始存取身分),選擇現有身分或建立新身分。
- 在 Grant read permissions on bucket (授予儲存貯體讀取權限),選擇 Yes, update bucket policy (是,更新儲存貯體政策)。
- 選擇 Yes, edit (是,編輯)。
相關資訊
如何對來自 Amazon S3 的 403 access denied (403 存取遭拒) 錯誤進行疑難排解?
為什麼當我使用 Amazon S3 網站端點作為 CloudFront 發佈項目的來源時,會收到 "403 access denied" (403 存取遭拒) 錯誤?
- 語言
- 中文 (繁體)

相關內容
- 已提問 2 年前
- 已提問 1 年前
