故障診斷分佈問題 - 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>
注意

在這個錯誤訊息中,帳戶識別碼 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 簡單儲存服務使用者指南中的使用 AWS KMS (SSE-KMS) 指定伺服器端加密

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

  3. 編輯 Amazon S3 儲存貯體政策,以 CloudFront 授與從 Amazon S3 儲存貯體呼叫GetObjectAPI作業的權限。如需使用來源存取控制的 Amazon S3 儲存貯體政策範例,請參閱授予原始存取控制存取 S3 儲存貯體的權限

  4. 編輯KMS金鑰原則,以 CloudFront 授與對Encrypt、和執行動作的權DecryptGenerateDataKey*。若要以最低權限權限對齊,請指定Condition元素,以便只有指定的 CloudFront 分佈才能執行列出的動作。您可以自訂現有原則的 AWS KMS 原則。如需KMS金鑰原則範例,請參閱SSE-KMS

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

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

您使用的憑證無效或權限不足

如果您使用不正確或過期的 AWS SCT 認證 (存取金鑰和秘密金鑰),或者您的IAM角色或使用者缺少對 CloudFront 資源執行動作所需的權限,則會出現「拒絕存取」錯誤訊息。如需有關存取遭拒錯誤訊息的詳細資訊,請參閱《IAM使用手冊》中的「疑難排解拒絕存取」錯誤

若要取得有關如何使IAM用的資訊 CloudFront,請參閱Amazon 的身分和存取管理 CloudFront

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 需要附加來自受信任TLS憑證授權單位 (CA) 的有效SSL/憑證,該憑證涵蓋該網域名稱,以驗證您使用該網域名稱的授權。請更新您的憑證,以包含涵蓋您嘗試新增CNAME的網域名稱。如需搭配萬用字元使用網域名稱的詳細資訊和範例,請參閱使用備用網域名稱的需求

CloudFront 當我嘗試添加新的DNS記錄時返回錯誤配置的記錄錯誤 CNAME

當您有指向 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.

之所以發生這個錯誤,是因為DNS針對CNAME和萬用字元DNS項目的 CloudFront 查詢解析為另一個發行版。

若要解決此問題,請先建立另一個發行版,然後建立指向新發行版的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 與 Amazon S3 搭配使用最簡單的方法是讓所有物件在 Amazon S3 中公開讀取。若要執行此作業,必須確實啟用上傳至 Amazon S3 的每一個物件的公有讀取權限。

如果您的內容無法公開讀取,您必須建立 CloudFront 原始存取控制 (OAC),才 CloudFront 能存取該內容。如需 CloudFront 原始存取控制的詳細資訊,請參閱限制對 Amazon 簡單存儲服務來源的訪問

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

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

如果您已經有網域名稱的現有CNAME記錄,請更新該記錄,或將其取代為指向您分發網域名稱的新記錄。

此外,請確定您的CNAME記錄指向分發的網域名稱,而不是 Amazon S3 儲存貯體。您可以確認DNS系統中的CNAME記錄指向您分發的網域名稱。為此,請使用類似的DNS工具dig

以下範例顯示了一個名為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. ... ...

如需有關的更多資訊CNAMEs,請參閱新增替代網域名稱 (CNAMEs) URLs 以使用自訂

您是否URL為您的 CloudFront 發行版引用了正確的?

請確定您所參考的URL網域名稱 (或CNAME) 使用 CloudFront 分發的網域名稱,而不是 Amazon S3 儲存貯體或自訂來源。

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

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

錯誤訊息:憑證:<certificate-id>正在使用 CloudFront

問題:您嘗試從TLS憑證存放區刪除SSL/IAM憑證,且收到訊息「憑證:<certificate-id>正在使用中」 CloudFront。

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