CloudFront 배포에 대한 CNAME 별칭을 설정할 때 CNAMEAlreadyExists 오류를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 8월 18일

Amazon CloudFront 배포에 대한 CNAME 별칭을 설정할 때 CNAMEAlreadyExists 오류가 표시됩니다.

간략한 설명

CloudFront 배포에 CNAME 별칭을 추가하려고 하면 다음과 유사한 오류가 표시됩니다.

One or more of the CNAMEs you provided are already associated with a different resource. (Service: AmazonCloudFront; Status Code: 409; Error Code: CNAMEAlreadyExists; Request ID: a123456b-c78d-90e1-23f4-gh5i67890jkl*

이 오류는 둘 이상의 CloudFront 배포에 동일한 CNAME 별칭을 사용할 수 없기 때문에 표시됩니다. 추가하려는 CNAME 별칭이 이미 다른 CloudFront 배포와 연결되어 있는 경우 CNAMEAlreadyExists 오류가 발생합니다.

이 오류를 해결하려면 AssociateAlias 또는 ListConflictingAliases CloudFront API를 사용하여 CNAME을 찾아 이동할 수 있습니다.

시나리오에 따라 다음 해결 방법 중 하나를 선택합니다.

  • 소스 배포와 대상 배포가 동일한 계정에 있는 경우 AssociateAlias API를 사용하여 CNAME 이동 섹션의 단계를 완료합니다.
  • 소스 배포와 대상 배포가 다른 계정에 있는 경우 ListConflictingAliases API를 사용하여 CNAME 이동 섹션의 단계를 완료합니다.

해결 방법

AssociateAlias API를 사용하여 CNAME 이동

1.    (필수) 소스 배포와 대상 배포 모두에 대한 AWS Identity and Access Management(IAM) 정책에서 API 요청을 수행하는 IAM 사용자 또는 역할에 다음과 같은 리소스 수준 권한을 추가합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "CloudFrontCnameSwapSameAcc",
      "Effect": "Allow",
      "Action": [
        "cloudfront:GetDistribution",
        "cloudfront:ListConflictingAliases",
        "cloudfront:AssociateAlias",
        "cloudfront:UpdateDistribution"
      ],
      "Resource": [
        "arn:aws:cloudfront::123456789:distribution/SourceDistroID",
        "arn:aws:cloudfront::123456789:distribution/TargetDistroID"
      ]
    }
  ]
}

중요: 요청을 수행하는 IAM 사용자 또는 역할에는 소스 배포 및 대상 배포 모두에 대한 IAM 정책에 이 리소스 수준 권한이 있어야 합니다.

2.    충돌하는 CNAME이 있는 배포를 식별합니다.

어느 배포에 CNAME 충돌이 있는지 모르는 경우 ListConflictingAliases API를 사용하여 해당 배포를 찾습니다. 예를 들면 다음과 같습니다.

$ aws cloudfront list-conflicting-aliases --distribution-id YourDistributiontID --alias YourCNAME

참고: 소유권을 확인하려면 YourDistributionID에 대한 읽기 권한이 있어야 합니다. 충돌하는 CNAME을 보호하는, CloudFront 배포와 연결된 SSL 인증서도 있어야 합니다.

3.    대상 배포의 정식 이름으로 확인되는, CNAME에 대한 DNS TXT 레코드를 생성하여 도메인 소유권을 확인합니다. TXT 레코드에는 CNAME, Apex 또는 와일드카드 앞에 밑줄이 포함되어야 합니다. 예를 들면 다음과 같습니다.

_.example.com.         900   IN   TXT     "dexample123456.cloudfront.net"
_cname.example.com.    900   IN   TXT     "dexample123456.cloudfront.net"
_*.example.com.        900   IN   TXT     "dexample123456.cloudfront.net"

4.    대상 배포에 유효한 인증서가 있는지 확인합니다.

참고: 주체 이름 또는 주체 대체 이름은 지정된 CNAME 별칭과 일치하거나 겹쳐야 합니다. Mozilla 포함 CA 인증서 목록 또는 AWS Certificate Manager에 나열된 신뢰할 수 있는 CA에서 발급된 유효한 인증서를 사용하는 것이 좋습니다.

5.    소스 및 대상 배포가 속한 동일한 계정에서 AssociateAlias API 요청을 실행합니다.

$ aws cloudfront associate-alias --target-distribution-id YourTargeDistributiontID --alias your_cname.example.com

ListConflictingAliases API를 사용하여 CNAME 이동

중요: 엣지 최적화 Amazon API Gateway와 같은 AWS 관리형 서비스는 사용자를 대신하여 소스 배포를 배포할 수 없습니다.

소스 배포 상태를 비활성화됨(Disabled)으로 설정해야 합니다. 배포를 비활성화하려면 다음을 수행합니다.

1.    CloudFront 콘솔을 엽니다.

2.    탐색 창에서 배포(Distributions)를 선택합니다.

3.    배포를 선택한 다음 사용 중지(Disable)를 선택합니다.

어느 배포에 CNAME 충돌이 있는지 모르는 경우 ListConflictingAliases API를 사용하여 해당 배포를 찾습니다. 예를 들면 다음과 같습니다.

$ aws cloudfront list-conflicting-aliases --distribution-id YourDistributiontID --alias YourCNAMEtoAdd

ListConflictingAliases API에는 GetDistributionListConflictingAliases 권한이 필요합니다.

참고: 소유권을 확인하려면 YourDistritionID에 대한 읽기 권한이 있어야 합니다. 또한 충돌하는 CNAME을 보호하는 인증서가 연결되어 있어야 합니다.

이어서, 다음 작업을 수행합니다.

1.    (필수) 대상 배포에 대한 IAM 정책에서 API 요청을 수행하는 IAM 사용자 또는 역할에 다음과 같은 리소스 수준 권한을 추가합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "CloudFrontCnameSwapCrossAcc",
      "Effect": "Allow",
      "Action": [
        "cloudfront:AssociateAlias",
        "cloudfront:UpdateDistribution"
      ],
      "Resource": [
        "arn:aws:cloudfront::123456789:distribution/TargetDistroID"
      ]
    }
  ]
}

2.    대상 배포의 정식 이름으로 확인되는, CNAME에 대한 DNS TXT 레코드를 생성하여 도메인 소유권을 확인합니다. TXT 레코드에는 CNAME 또는 Apex 앞에 밑줄이 포함되어야 합니다. 예를 들면 다음과 같습니다.

_cname.example.com.   900   IN   TXT     "dexample123456.cloudfront.net"
_.example.com.        900   IN   TXT     "dexample123456.cloudfront.net

3.    대상 배포에 유효한 인증서가 있는지 확인합니다.

참고: 주체 이름 또는 주체 대체 이름은 지정된 CNAME 별칭과 일치하거나 겹쳐야 합니다. Mozilla 포함 CA 인증서 목록 또는 AWS Certificate Manager에 나열된 신뢰할 수 있는 CA에서 발급된 유효한 인증서를 사용하는 것이 좋습니다.

4.    ListConflictingAliases API를 실행합니다.

$ aws cloudfront associate-alias --target-distribution-id YourTargetDistributionID --alias your_cname.example.com

이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?