Troubleshooting distribution issues
Use the information here to help you diagnose and fix certificate errors, access-denied issues, or other common issues that you might encounter when setting up your website or application with Amazon CloudFront distributions.
Topics
- CloudFront returns an Access Denied error
- CloudFront returns an InvalidViewerCertificate error when I try to add an alternate domain name
- CloudFront returns an incorrectly configured DNS record error when I try to add a new CNAME
- I can't view the files in my distribution
- Error message: Certificate: <certificate-id> is being used by CloudFront
CloudFront returns an Access Denied error
If you're using an Amazon S3 bucket as the origin for your CloudFront distribution, you might see an Access Denied (403) error message in the following examples.
Contents
You specified a missing object from the Amazon S3 origin
Verify that the requested object in your bucket exists. Object names are case sensitive. Entering an invalid object name can return an access denied error code.
For example, if you follow the CloudFront tutorial to
create a basic distribution, you create an Amazon S3 bucket as the origin and upload
an example index.html
file.
In your web browser, if you enter
https://d111111abcdef8.cloudfront.net/
instead of
INDEX
.HTMLhttps://d111111abcdef8.cloudfront.net/
,
you might see a similar message because the index
.htmlindex.html
file
in the URL path is case sensitive.
<Error> <Code>AccessDenied</Code> <Message>Access Denied</Message> <RequestId>22Q367AHT7Y1ABCD</RequestId> <HostId> ABCDE/Vg+7PSNa/d/IfFQ8Fb92TGQ0KH0ZwG5iEKbc6+e06DdMS1ZW+ryB9GFRIVtS66rSSy6So= </HostId> </Error>
Your Amazon S3 origin is missing IAM permissions
Verify that you've selected the correct Amazon S3 bucket as the origin domain and name. The origin (Amazon S3) must have the correct permissions.
If you don’t specify the correct permissions, the following access denied message can appear for your viewers.
<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>
Note
In this error message, the account ID 856369053181 is an AWS managed account.
When you distribute content from Amazon S3 and you’re also using AWS Key Management Service (AWS KMS) service-side encryption (SSE-KMS), there are additional IAM permissions that you need to specify for the KMS key and Amazon S3 bucket. Your CloudFront distribution needs these permissions to use the KMS key, which is used for encryption of the origin Amazon S3 bucket..
The configurations to the Amazon S3 bucket policy allow the CloudFront distribution to retrieve the encrypted objects for content delivery.
To verify your Amazon S3 bucket and KMS key permissions
-
Verify that the KMS key that you’re using is the same key that your Amazon S3 bucket uses for default encryption. For more information, see Specifying server-side encryption with AWS KMS (SSE-KMS) in the Amazon Simple Storage Service User Guide.
-
Verify that the objects in the bucket are encrypted with the same KMS key. You can select any object from the Amazon S3 bucket and check the server-side encryption settings to verify the KMS key ARN.
-
Edit the Amazon S3 bucket policy to grant CloudFront permission to call the
GetObject
API operation from the Amazon S3 bucket. For an example Amazon S3 bucket policy that uses origin access control, see Give the origin access control permission to access the S3 bucket. -
Edit the KMS key policy to grant CloudFront permission to perform the actions to
Encrypt
,Decrypt
, andGenerateDataKey*
. To align with least privilege permission, specify aCondition
element so that only the specified CloudFront distribution can perform the listed actions. You can customize the policy for your existing AWS KMS policy. For an example KMS key policy, see the SSE-KMS.
If you’re using origin access identity (OAI) instead of OAC, the permissions to the Amazon S3 bucket are slightly different because you grant permission to an identity instead of the AWS service. For more information, see Give an origin access identity permission to read files in the Amazon S3 bucket.
If you still can't view your files in your distribution, see I can't view the files in my distribution.
You're using invalid credentials or don't have sufficient permissions
An Access Denied error message can appear if you’re using incorrect or expired AWS SCT credentials (access key and secret key) or your IAM role or user is missing a required permission to perform an action on a CloudFront resource. For more information about access denied error messages, see Troubleshooting access denied error messages in the IAM User Guide.
For information about how IAM works with CloudFront, see Identity and Access Management for Amazon CloudFront.
CloudFront returns an InvalidViewerCertificate error when I try to add an alternate domain name
If CloudFront returns an InvalidViewerCertificate
error when you try to add
an alternate domain name (CNAME) to your distribution, review the following
information to help troubleshoot the problem. This error can indicate that one of
the following issues must be resolved before you can successfully add the alternate
domain name.
The following errors are listed in the order in which CloudFront checks for authorization to add an alternate domain name. This can help you troubleshoot issues because based on the error that CloudFront returns, you can tell which verification checks have completed successfully.
- There's no certificate attached to your distribution.
-
To add an alternate domain name (CNAME), you must attach a trusted, valid certificate to your distribution. Please review the requirements, obtain a valid certificate that meets them, attach it to your distribution, and then try again. For more information, see Requirements for using alternate domain names.
- There are too many certificates in the certificate chain for the certificate that you've attached.
-
You can only have up to five certificates in a certificate chain. Reduce the number of certificates in the chain, and then try again.
- The certificate chain includes one or more certificates that aren't valid for the current date.
-
The certificate chain for a certificate that you have added has one or more certificates that aren't valid, either because a certificate isn't valid yet or a certificate has expired. Check the Not Valid Before and Not Valid After fields in the certificates in your certificate chain to make sure that all of the certificates are valid based on the dates that you've listed.
- The certificate that you've attached isn't signed by a trusted Certificate Authority (CA).
-
The certificate that you attach to CloudFront to verify an alternate domain name cannot be a self-signed certificate. It must be signed by a trusted CA. For more information, see Requirements for using alternate domain names.
- The certificate that you've attached isn't formatted correctly
-
The domain name and IP address format that are included in the certificate, and the format of the certificate itself, must follow the standard for certificates.
- There was a CloudFront internal error.
-
CloudFront was blocked by an internal issue and couldn't make validation checks for certificates. In this scenario, CloudFront returns an HTTP 500 status code and indicates that there is an internal CloudFront problem with attaching the certificate. Wait a few minutes, and then try again to add the alternate domain name with the certificate.
- The certificate that you've attached doesn't cover the alternate domain name that you're trying to add.
-
For each alternate domain name that you add, CloudFront requires that you attach a valid SSL/TLS certificate from a trusted Certificate Authority (CA) that covers the domain name, to validate your authorization to use it. Please update your certificate to include a domain name that covers the CNAME that you're trying to add. For more information and examples of using domain names with wildcards, see Requirements for using alternate domain names.
CloudFront returns an incorrectly configured DNS record error when I try to add a new CNAME
When you have an existing wildcard DNS entry pointing to a CloudFront distribution, if you try to add a new CNAME with a more specific name, you might encounter the following error:
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.
This error occurs because CloudFront queries the DNS against the CNAME and the wildcard DNS entry resolves to another distribution.
To resolve this, first create another distribution, then create a DNS entry pointing to the new distribution. Finally, add the more specific CNAME. For more information on how to add CNAMEs, see Add an alternate domain name.
I can't view the files in my distribution
If you can't view the files in your CloudFront distribution, see the following topics for some common solutions.
Did you sign up for both CloudFront and Amazon S3?
To use Amazon CloudFront with an Amazon S3 origin, you must sign up for both CloudFront and Amazon S3, separately. For more information about signing up for CloudFront and Amazon S3, see Set up your AWS account.
Are your Amazon S3 bucket and object permissions set correctly?
If you are using CloudFront with an Amazon S3 origin, the original versions of your content are stored in an S3 bucket. The easiest way to use CloudFront with Amazon S3 is to make all of your objects publicly readable in Amazon S3. To do this, you must explicitly enable public read privileges for each object that you upload to Amazon S3.
If your content is not publicly readable, you must create a CloudFront origin access control (OAC) so that CloudFront can access it. For more information about CloudFront origin access control, see Restrict access to an Amazon Simple Storage Service origin.
Object properties and bucket properties are independent. You must explicitly grant privileges to each object in Amazon S3. Objects do not inherit properties from buckets, and object properties must be set independently of the bucket.
Is your alternate domain name (CNAME) correctly configured?
If you already have an existing CNAME record for your domain name, update that record or replace it with a new one that points to your distribution's domain name.
Also, make sure that your CNAME record points to your distribution's domain name, not your Amazon S3 bucket. You can confirm that the CNAME record in your DNS system points to your distribution's domain name. To do so, use a DNS tool like dig.
The following example shows a dig request for a domain name called
images.example.com
and the relevant part of the response. Under
ANSWER SECTION
, see the line that contains CNAME
.
The CNAME record for your domain name is set up correctly if the value on the
right side of CNAME is your CloudFront distribution's domain name. If it's your Amazon S3
origin server bucket or some other domain name, then the CNAME record is set up
incorrectly.
[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. ... ...
For more information about CNAMEs, see Use custom URLs by adding alternate domain names (CNAMEs).
Are you referencing the correct URL for your CloudFront distribution?
Make sure that the URL that you're referencing uses the domain name (or CNAME) of your CloudFront distribution, not your Amazon S3 bucket or custom origin.
Do you need help troubleshooting a custom origin?
If you need AWS to help you troubleshoot a custom origin, we probably will
need to inspect the X-Amz-Cf-Id
header entries from your requests.
If you are not already logging these entries, you might want to consider it for
the future. For more information, see Use Amazon EC2 (or another custom origin).
For further help, see the AWS
Support Center
Error message: Certificate: <certificate-id> is being used by CloudFront
Problem: You're trying to delete an SSL/TLS certificate from the IAM certificate store, and you're getting the message "Certificate: <certificate-id> is being used by CloudFront."
Solution: Every CloudFront distribution must be associated either with the default CloudFront certificate or with a custom SSL/TLS certificate. Before you can delete an SSL/TLS certificate, you must either rotate the certificate (replace the current custom SSL/TLS certificate with another custom SSL/TLS certificate) or revert from using a custom SSL/TLS certificate to using the default CloudFront certificate. To fix that, complete the steps in one of the following procedures: