배포 문제 해결 - Amazon CloudFront

배포 문제 해결

이 문서의 정보를 사용하여 Amazon CloudFront 배포로 웹 사이트 또는 애플리케이션 설정 시 발생할 수 있는 인증서 오류, 액세스 거부 문제 또는 기타 일반적인 문제를 진단하고 해결할 수 있습니다.

CloudFront에서 Access Denied 오류가 반환되는 경우

Amazon S3 버킷을 CloudFront 배포의 오리진으로 사용하는 경우 다음 예시에서 액세스 거부됨(403) 오류 메시지가 표시될 수 있습니다.

Amazon S3 오리진에서 누락된 객체를 지정함

요청된 객체가 버킷에 존재하는지 확인하세요. 객체 이름은 대/소문자를 구분합니다. 잘못된 객체 이름을 입력하면 액세스 거부됨 오류 코드가 반환될 수 있습니다.

예를 들어 CloudFront 자습서에 따라 기본 배포를 생성하는 경우 Amazon S3 버킷을 오리진으로 생성하고 예시 index.html 파일을 업로드합니다.

웹 브라우저에서 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 배포에서 오리진 Amazon S3 버킷의 암호화에 사용되는 KMS 키를 사용하려면 이러한 권한이 필요합니다.

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 버킷에서 GetObject API 작업을 직접적으로 호출할 권한을 CloudFront에 부여하도록 Amazon S3 버킷 정책을 편집합니다. 오리진 액세스 제어를 사용하는 Amazon S3 버킷 정책의 예시는 S3 버킷에 액세스할 수 있는 오리진 액세스 제어 권한 부여 섹션을 참조하세요.

  4. Encrypt, DecryptGenerateDataKey*에 작업을 수행할 권한을 CloudFront에 부여하도록 KMS 키 정책을 편집합니다. 최소 권한에 맞추려면 지정된 CloudFront 배포만 나열된 작업을 수행할 수 있도록 Condition 요소를 지정하세요. 기존 AWS KMS 정책에 맞게 정책을 사용자 지정할 수 있습니다. 예시 KMS 키 정책은 SSE-KMS 섹션을 참조하세요.

OAC 대신 오리진 액세스 ID(OAI)를 사용하는 경우 Amazon S3 버킷에 대한 권한은 약간 다릅니다. AWS 서비스 대신 ID에 권한을 부여하기 때문입니다. 자세한 내용은 오리진 액세스 ID에 Amazon S3 버킷의 파일을 읽을 수 있는 권한 부여 단원을 참조하십시오.

배포에 있는 파일을 여전히 볼 수 없는 경우 배포에서 파일을 볼 수 없습니다. 섹션을 참조하세요.

잘못된 자격 증명을 사용하고 있거나 충분한 권한이 없음

올바르지 않거나 만료된 AWS SCT 자격 증명(액세스 키 및 비밀 키)을 사용하거나 IAM 역할 또는 사용자에게 CloudFront 리소스에서 작업을 수행하는 데 필요한 권한이 없는 경우 액세스 거부됨 오류 메시지가 나타날 수 있습니다. 액세스 거부됨 오류 메시지에 대한 자세한 내용은 IAM 사용 설명서의 액세스 거부됨 오류 메시지 문제 해결을 참조하세요.

CloudFront에서 IAM이 작동하는 방식에 대한 자세한 내용은 Amazon CloudFront용 Identity and Access Management 섹션을 참조하세요.

대체 도메인 이름을 추가하려고 하면 CloudFront에서 InvalidViewerCertificate 오류가 반환됩니다.

배포에 대체 도메인 이름(CNAME)을 추가하려고 하면 CloudFront 에서 InvalidViewerCertificate 오류를 반환하는 경우, 다음 정보를 검토하여 문제를 해결하십시오. 이 오류는 대체 도메인 이름을 추가하려면 먼저 다음 문제 중 하나를 해결해야 함을 뜻할 수 있습니다.

다음 오류는 CloudFront에서 대체 도메인 이름을 추가할 권한이 있는지 확인하는 순서대로 나열한 것입니다. 이는 CloudFront가 반환하는 오류를 기반으로 하여 어떤 확인 검사가 성공적으로 완료되었는지 알 수 있으므로 문제를 해결하는 데 도움이 됩니다.

배포에 연결된 인증서가 없습니다.

대체 도메인 이름(CNAME)을 추가하려면 배포에 신뢰할 수 있는 유효한 인증서를 연결해야 합니다. 요구 사항을 검토하고 요구 사항을 충족하는 유효한 인증서를 얻고 배포에 연결한 후 다시 시도하십시오. 자세한 내용은 대체 도메인 이름 사용과 관련된 요구 사항 단원을 참조하세요.

연결한 인증서에 대한 인증서 체인에 너무 많은 인증서가 있습니다.

인증서 체인 하나에 최대 5개의 인증서만 포함할 수 있습니다. 체인의 인증서 수를 줄인 후 다시 시도하십시오.

인증서 체인에 현재 날짜에 유효하지 않은 인증서가 하나 이상 포함되어 있습니다.

추가한 인증서의 인증서 체인에 인증서가 아직 유효하지 않거나 인증서가 만료된 이유로 유효하지 않은 인증서가 하나 이상 있습니다. 인증서 체인의 인증서에 있는 Not Valid BeforeNot 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을 추가합니다. CNAME를 추가하는 방법에 대한 자세한 내용은 대체 도메인 이름 사용 섹션을 참조하세요.

배포에서 파일을 볼 수 없습니다.

CloudFron 배포에서 파일을 볼 수 없는 경우, 몇 가지 일반적인 해결 방법은 다음 항목을 참조하십시오.

CloudFront와 Amazon S3에 모두 가입했습니까?

Amazon S3 오리진에서 Amazon CloudFront를 사용하려면 CloudFront와 Amazon S3에 각각 별도로 가입해야 합니다. CloudFront 및 Amazon S3 가입에 대한 자세한 내용은 AWS 계정 설정 단원을 참조하십시오.

Amazon S3 버킷과 객체 권한을 올바르게 설정했습니까?

Amazon S3 오리진에서 CloudFront를 사용하는 경우 콘텐츠의 원래 버전은 S3 버킷에 저장됩니다. Amazon S3에서 CloudFront를 사용하는 가장 쉬운 방법은 모든 객체를 Amazon S3에서 공개적으로 읽을 수 있도록 설정하는 것입니다. 이렇게 하려면 Amazon S3에 업로드하는 각 객체에 대해 퍼블릭 읽기 권한을 명시적으로 활성화해야 합니다.

콘텐츠를 공개적으로 사용할 수 없으면 CloudFront에서 액세스할 수 있도록 CloudFront 오리진 액세스 제어(OAC)를 만들어야 합니다. CloudFront 오리진 액세스 제어에 대한 자세한 내용은 Amazon Simple Storage Service 오리진에 대한 액세스 제한 섹션을 참조하세요.

객체 속성과 버킷 속성은 독립적입니다. 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에 대한 자세한 내용은 대체 도메인 이름(CNAME)을 추가하여 사용자 지정 URL 사용을 참조하십시오.

CloudFront 배포에 대한 올바른 URL을 참조하고 있습니까?

참조하고 있는 URL에 Amazon S3 버킷 또는 사용자 지정 오리진이 아닌 CloudFront 배포 도메인 이름(또는 CNAME)이 사용되는지 확인하십시오.

사용자 지정 오리진 문제 해결과 관련하여 도움이 필요합니까?

사용자 지정 오리진 문제를 해결하는 데 AWS의 도움이 필요한 경우 아마도 요청의 X-Amz-Cf-Id 헤더 항목을 검사해야 할 것입니다. 이러한 항목을 로그에 기록하고 있지 않은 경우 향후 참조를 위해 로그에 기록할 수 있습니다. 자세한 내용은 Amazon EC2(또는 기타 사용자 지정 오리진) 사용 단원을 참조하십시오. 자세한 도움말은 AWS Support Center를 참조하세요.

오류 메시지: 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 인증서 사용으로 되돌려야 합니다. 이를 해결하려면 다음 절차 중 하나의 단계를 수행합니다.