故障診斷分佈問題 - Amazon CloudFront

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

故障診斷分佈問題

使用此處的資訊協助診斷和修復使用 Amazon CloudFront 分佈來設定網站或應用程式時可能遇到的憑證錯誤、存取遭拒問題或其他常見問題。

CloudFront 傳回Access Denied錯誤

如果您使用 Amazon S3 儲存貯體做為 CloudFront 分佈的原始伺服器,您可能會在下列範例中看到存取遭拒 (403) 錯誤訊息。

您已從 Amazon S3 原始伺服器指定遺失的物件

確認儲存貯體中請求的物件是否存在。物件名稱區分大小寫。輸入無效的物件名稱可能會傳回存取遭拒的錯誤代碼。

例如,如果您遵循 CloudFront 教學課程來建立基本分佈,您可以建立 Amazon S3 儲存貯體做為原始伺服器,並上傳範例index.html檔案。

在 Web 瀏覽器中,如果您輸入 https://d111111abcdef8.cloudfront.net/INDEX.HTML而不是 https://d111111abcdef8.cloudfront.net/index.html,您可能會看到類似訊息,因為 URL 路徑中的index.html檔案區分大小寫。

<Error> <Code>AccessDenied</Code> <Message>Access Denied</Message> <RequestId>22Q367AHT7Y1ABCD</RequestId> <HostId> ABCDE/Vg+7PSNa/d/IfFQ8Fb92TGQ0KH0ZwG5iEKbc6+e06DdMS1ZW+ryB9GFRIVtS66rSSy6So= </HostId> </Error>

您的 Amazon S3 原始伺服器缺少 IAM 許可

確認您已選取正確的 Amazon S3 儲存貯體做為原始網域和名稱。原始伺服器 (Amazon S3) 必須具有正確的許可。

如果您未指定正確的許可,檢視者可能會出現下列存取遭拒訊息。

<Code>AccessDenied</Code> <Message>User: arn:aws:sts::856369053181:assumed-role/OriginAccessControlRole/EdgeCredentialsProxy+EdgeHostAuthenticationClient is not authorized to perform: kms:Decrypt on the resource associated with this ciphertext because the resource does not exist in this Region, no resource-based policies allow access, or a resource-based policy explicitly denies access</Message> <RequestId>22Q367AHT7Y1ABCD/RequestId> <HostId> ABCDE/Vg+7PSNa/d/IfFQ8Fb92TGQ0KH0ZwG5iEKbc6+e06DdMS1ZW+ryB9GFRIVtS66rSSy6So= </HostId> </Error>
注意

在此錯誤訊息中,帳戶 ID 為 856369053181 是 AWS 受管帳戶。

當您從 Amazon S3 分發內容,而且您也使用 AWS Key Management Service (AWS KMS) 服務端加密 (SSE-KMS) 時,您需要為 KMS 金鑰和 Amazon S3 儲存貯體指定額外的 IAM 許可。您的 CloudFront 分佈需要這些許可才能使用 KMS 金鑰,用於加密原始伺服器 Amazon S3 儲存貯體。

Amazon S3 儲存貯體政策的組態允許 CloudFront 分佈擷取加密物件以進行內容交付。

驗證 Amazon S3 儲存貯體和 KMS 金鑰許可
  1. 確認您使用的 KMS 金鑰與您的 Amazon S3 儲存貯體用於預設加密的金鑰相同。如需詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的使用 AWS KMS (SSE-KMS) 指定伺服器端加密

  2. 確認儲存貯體中的物件已使用相同的 KMS 金鑰加密。您可以從 Amazon S3 儲存貯體中選取任何物件,並檢查伺服器端加密設定以驗證 KMS 金鑰 ARN。

  3. 編輯 Amazon S3 儲存貯體政策,以授予 CloudFront 從 Amazon S3 儲存貯體呼叫 GetObject API 操作的許可。如需使用原始存取控制的 Amazon S3 儲存貯體政策範例,請參閱 授予 CloudFront 存取 S3 儲存貯體的許可

  4. 編輯 KMS 金鑰政策,以授予 CloudFront 對 EncryptDecrypt和 執行動作的許可GenerateDataKey*。若要符合最低權限許可,請指定 Condition元素,以便只有指定的 CloudFront 分佈可以執行列出的動作。您可以自訂現有政策 AWS KMS 的政策。如需範例 KMS 金鑰政策,請參閱 SSE-KMS

如果您使用的是原始存取身分 (OAI) 而非 OAC,Amazon S3 儲存貯體的許可會略有不同,因為您將許可授予身分而非 AWS 服務。如需詳細資訊,請參閱授予原始存取身分許可,以讀取 Amazon S3 儲存貯體中的檔案

如果您仍然無法檢視分佈中的檔案,請參閱 我無法在我的分佈中檢視檔案

您使用的登入資料無效或沒有足夠的許可

如果您使用不正確或過期的 AWS SCT 登入資料 (存取金鑰和私密金鑰),或者您的 IAM 角色或使用者缺少在 CloudFront 資源上執行動作所需的許可,則可能會出現存取遭拒錯誤訊息。如需存取遭拒錯誤訊息的詳細資訊,請參閱《IAM 使用者指南》中的對存取遭拒錯誤訊息進行故障診斷

如需 IAM 如何搭配 CloudFront 運作的詳細資訊,請參閱 適用於 Amazon CloudFront 的 Identity and Access Management

當我嘗試新增替代網域名稱時,CloudFront 傳回 InvalidViewerCertificate 錯誤

若 CloudFront 在您嘗試新增替代網域名稱 (CNAME) 到分佈時傳回 InvalidViewerCertificate 錯誤,請檢閱以下資訊來協助針對問題進行故障診斷。此錯誤可指出必須解決以下其中一個問題,才能成功新增替代網域名稱。

以下錯誤會根據 CloudFront 檢查授權以新增替代網域名稱的順序列出。這可協助您根據 CloudFront 傳回的錯誤,針對問題進行故障診斷;您可以得知哪些驗證檢查已成功完成。

沒有將憑證連接到您的分佈。

若要新增替代網域名稱 (CNAME),您必須將信任、有效的憑證連接到您的分佈。請檢閱需求、取得足以滿足需求的有效憑證、將它連接到您的分佈,然後再試一次。如需詳細資訊,請參閱 使用備用網域名稱的需求

您已連接憑證的憑證鏈結中有太多憑證。

您在憑證鏈結中最多只能有五個憑證。請減少鏈結中的憑證數,然後再試一次。

憑證鏈結中包含一或多個在目前日期無效的憑證。

您已新增憑證的憑證鏈結中有一或多個無效憑證,可能是因為憑證尚未有效或已過期。請檢查您憑證鏈結中憑證內的 Not Valid Before (生效日期) 和 Not Valid After (失效日期) 欄位,確保根據您所列出的日期,所有憑證都是有效的。

您已連接的憑證沒有經過信任的憑證授權單位 (CA) 簽章。

您連接到 CloudFront 以驗證您替代網域名稱的憑證不能是自我簽章憑證。它必須經過信任 CA 的簽章。如需詳細資訊,請參閱 使用備用網域名稱的需求

您連接的憑證格式不正確

包含在憑證中的網域名稱和 IP 地址格式,以及憑證本身的格式必須遵循憑證的標準。

發生 CloudFront 內部錯誤。

CloudFront 因內部問題遭到封鎖,無法進行憑證的驗證檢查。在此情況下,CloudFront 會傳回 HTTP 500 狀態碼,指出 CloudFront 連接憑證時發生內部問題。請等待幾分鐘,然後再次嘗試新增替代網域名稱和憑證。

您已連接的憑證並未涵蓋您嘗試新增的替代網域名稱。

針對每個您新增的替代網域名稱,CloudFront 需要您連接來自信任憑證授權單位 (CA) 的有效 SSL/TLS 憑證,且該憑證必須涵蓋網域名稱,以驗證您已獲得授權使用它。請更新您的憑證,以包含能涵蓋您嘗試新增之 CNAME 的網域名稱。如需搭配萬用字元使用網域名稱的詳細資訊和範例,請參閱使用備用網域名稱的需求

當我嘗試新增 CNAME 時,CloudFront 會傳回設定不正確的 DNS 記錄錯誤

當您有指向 CloudFront 分佈的現有萬用字元 DNS 項目時,如果您嘗試新增具有更具體名稱的新 CNAME,您可能會遇到下列錯誤:

One or more aliases specified for the distribution includes an incorrectly configured DNS record that points to another CloudFront distribution. You must update the DNS record to correct the problem.

發生此錯誤是因為 CloudFront 針對 CNAME 查詢 DNS,且萬用字元 DNS 項目解析為另一個分佈。

若要解決此問題,請先建立另一個分佈,然後建立指向新分佈的 DNS 項目。最後,新增更具體的 CNAME。如需如何新增 CNAMEs的詳細資訊,請參閱 新增替代網域名稱

我無法在我的分佈中檢視檔案

如果無法查看 CloudFront 分佈裡的檔案,請參閱下列一些常見解決方案的主題。

您是否同時註冊 CloudFront 和 Amazon S3?

若要將 Amazon CloudFront 與 Amazon S3 原始伺服器搭配使用,您必須同時註冊 CloudFront 和 Amazon S3。如需註冊 CloudFront 和 Amazon S3 的詳細資訊,請參閱 設定您的 AWS 帳戶

Amazon S3 儲存貯體與物件許可是否設定正確?

如果您將 CloudFront 與 Amazon S3 原始伺服器搭配使用,則內容的原始版本會存放在 S3 儲存貯體中。若要將內容提供給檢視器,建議您使用 CloudFront Origin Access Control (OAC) 來保護 Amazon S3 儲存貯體存取。這表示您的 S3 儲存貯體只能透過 CloudFront 存取。OAC 會透過 CloudFront 控制檢視器存取和安全交付。如需 OAC 的詳細資訊,請參閱 限制對 Amazon S3 原始伺服器的存取

如需管理儲存貯體存取的詳細資訊,請參閱《Amazon S3 使用者指南》中的封鎖對 Amazon S3 儲存體的公開存取Amazon S3

物件屬性與儲存貯體屬性無關。您必須明確授予 Amazon S3 儲存貯體中每個物件的權限。物件不會從儲存貯體繼承屬性,必須獨立於儲存貯體設定物件屬性。

替代網域名稱 (CNAME) 是否正確設定?

如果網域名稱已有現有的 CNAME 記錄,請更新該記錄或將其替換為指向分佈網域名稱的新記錄。

此外,請確保 CNAME 記錄指向分佈的網域名稱,而不是 Amazon S3 儲存貯體。可確認 DNS 系統中的 CNAME 記錄指向分佈的網域名稱。若要執行此作業,請使用像 dig 這樣的 DNS 工具。

以下範例顯示了一個名為images.example.com 的網域名稱的 dig 請求和回應的相關部分。在 ANSWER SECTION,查看包含 CNAME 的列。如果 CNAME 右側的值為 CloudFront 分佈的網域名稱,則網域名稱的 CNAME 記錄設定正確。如果是 Amazon S3 原始伺服器儲存貯體或某些其他網域名稱,則 CNAME 記錄設定便不正確。

[prompt]> dig images.example.com ; <<> DiG 9.3.3rc2 <<> images.example.com ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15917 ;; flags: qr rd ra; QUERY: 1, ANSWER: 9, AUTHORITY: 2, ADDITIONAL: 0 ;; QUESTION SECTION: ;images.example.com. IN A ;; ANSWER SECTION: images.example.com. 10800 IN CNAME d111111abcdef8.cloudfront.net. ... ...

如需 CNAME 的詳細資訊,請參閱透過新增備用網域名稱 (CNAMEs來使用自訂 URLs

是否參考了適用於 CloudFront 分佈的正確 URL?

確保參照的 URL 使用 CloudFront 分佈的網域名稱 (或 CNAME),而不是 Amazon S3 儲存貯體或自訂原始伺服器。

是否需要協助故障診斷自訂原始伺服器?

如果您需要 AWS 協助您對自訂原始伺服器進行疑難排解,我們可能需要檢查請求中的X-Amz-Cf-Id標頭項目。如果尚未記錄這些項目,可能要考慮未來的記錄。如需詳細資訊,請參閱 使用 Amazon EC2 (或其他自訂原始伺服器)。如需進一步協助,請參閱 AWS 支援中心

錯誤訊息:Certificate: <certificate-id> is being used by CloudFront

問題:嘗試從 IAM 憑證存放區刪除 SSL/TLS 憑證,您會取得訊息「Certificate: <certificate-id> is being used by CloudFront.」。

解決方案:每個 CloudFront 分佈皆必須與預設 CloudFront 憑證或自訂 SSL/TLS 憑證相關聯。在刪除 SSL/TLS 憑證之前,您必須輪換憑證 (將目前的自訂 SSL/TLS 憑證替換成另一個自訂 SSL/TLS 憑證),或從使用自訂 SSL/TLS 憑證還原為使用預設 CloudFront 憑證。若要進行修復,請完成以下其中一個程序中的步驟: