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

최종 업데이트 날짜: 2022년 9월 22일

Amazon CloudFront 배포에 대한 Canonical Name Record(CNAME) 별칭을 설정할 때 'CNAMEAlreadyExists' 오류가 발생합니다. 이 문제를 해결하려면 어떻게 해야 합니까?

간략한 설명

추가하려는 CNAME 별칭이 이미 다른 CloudFront 배포와 연결되어 있는 경우 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 배포에 연결합니다.

참고: CNAME을 수동으로 연결하는 경우 이전 배포의 상태가 배포됨(Deployed)이 될 때까지 CNAME을 새 배포와 연결하지 못할 수 있습니다.

배포 ID를 모르는 경우 ListConflictingAliases CloudFront API를 사용하여 충돌하는 CNAME 별칭에 대한 배포 및 계정 ID에 대한 부분 정보를 찾습니다. 그런 다음 AssociateAlias API를 사용하여 CNAME을 기존 배포(소스 배포)에서 새 배포(대상 배포)로 이동합니다. 시나리오에 따라 다음 해결 방법 중 하나를 선택합니다.

  • 소스 및 대상 배포가 동일한 계정에 있는 경우 AssociateAlias API를 사용하여 CNAME 이동 섹션의 단계를 완료합니다.
  • 소스 및 대상 배포가 서로 다른 AWS 계정에 있는 경우 충돌하는 CNAME이 있는 소스 배포 비활성화 섹션의 단계를 완료합니다.
  • 소스 및 대상 배포가 서로 다른 AWS 계정에 있고 기존 트래픽의 다운타임으로 인해 소스 배포를 비활성화할 수 없는 경우 와일드카드를 사용하여 대체 도메인 이름 이동 섹션의 단계를 완료합니다.

해결 방법

AssociateAlias API를 사용하여 CNAME 이동

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생할 경우 AWS CLI의 최신 버전을 사용하고 있는지 확인하세요.

1.    API를 요청하는 사용자 또는 역할의 AWS Identity and Access Management(IAM) 정책에서 다음과 같은 리소스 수준 권한을 추가합니다.

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

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

참고: SourceAccount를 소스 배포의 AWS 계정 번호로 바꿉니다. SourceDistroID를 소스 배포 ID로 바꿉니다. TargetAccountID를 대상 배포의 AWS 계정 번호로 바꿉니다. TargetDistroID를 대상 배포 ID로 바꿉니다.

2.    충돌하는 CNAME이 있는 배포를 식별합니다. 어느 배포에 CNAME 충돌이 있는지 모르는 경우 ListConflictingAliases API를 사용하여 해당 배포를 찾습니다. YourDistributionID를 사용자의 배포 ID로 바꿉니다. YourCNAME을 충돌하는 CNAME 별칭으로 바꿉니다.

$ aws cloudfront list-conflicting-aliases --distribution-id YourDistributionID --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.    대상 배포에 유효한 SSL 인증서가 있는지 확인합니다.
참고: 주체 이름 또는 주체 대체 이름은 지정된 CNAME 별칭과 일치하거나 겹쳐야 합니다. Mozilla Wiki의 CA 인증서 목록 또는 AWS Certificate Manager에 나열된 신뢰할 수 있는 CA에서 발급된 유효한 인증서를 사용하는 것이 좋습니다.

5.    대상 배포를 소유한 계정에서 AssociateAlias API 요청을 실행합니다.

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

충돌하는 CNAME이 있는 소스 배포 비활성화

소스 배포와 대상 배포가 서로 다른 AWS 계정에 있는 경우 먼저 충돌하는 도메인과 연결된 소스 배포를 비활성합니다. 그런 다음 AssociateAlias API를 사용하여 CNAME을 이동합니다.

associate-alias 명령을 사용하여 여러 AWS 계정 간에 Apex 도메인을 이동할 수도 있습니다.

1.    CloudFront 콘솔을 여십시오.

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

3.    소스 배포를 선택한 다음 비활성화(Disable)를 선택합니다.
어느 배포에 CNAME 충돌이 있는지 모르는 경우 ListConflictingAliases API를 사용하여 해당 배포를 찾습니다. YourDistributionID를 사용자의 배포 ID로 바꾸고, YourCNAME을 충돌하는 CNAME의 이름으로 바꿔야 합니다.

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

참고: ListConflictingAliases API에는 GetDistribution 및 ListConflictingAliases 권한이 필요합니다.

소스 배포를 비활성화한 후 AssociateAlias API를 사용하여 CNAME 이동 섹션의 단계를 따릅니다.

소스 배포가 있는 AWS 계정에 액세스할 수 없거나 소스 배포를 비활성화할 수 없는 경우 AWS Support에 문의하세요.

와일드카드를 사용하여 대체 도메인 이름 이동

소스 배포와 대상 배포가 서로 다른 AWS 계정에 있지만 소스 배포를 비활성화할 수 없는 경우 와일드카드를 사용하여 CNAME을 이동합니다. 이 프로세스를 수행하려면 소스 배포와 대상 배포에 모두 액세스할 수 있어야 합니다.

참고: Apex 도메인(example.com)을 이동하는 데 와일드카드를 사용할 수 없습니다. 소스 및 대상 배포가 서로 다른 AWS 계정에 있을 때 Apex 도메인을 이동하려면 AWS Support에 문의하여 대체 도메인 이름을 이동합니다.

중요: 이 과정에는 소스 및 대상 배포에 대한 여러 업데이트가 포함됩니다. 각 배포가 최신 변경 사항을 완전히 배포할 때까지 기다렸다가 다음 단계로 진행합니다.

1.    대상 배포를 업데이트하여 이동 중인 대체 도메인 이름을 포함하는 와일드카드 CNAME을 추가합니다. 도메인이 www.example.com인 경우 와일드카드 대체 도메인 이름*.example.com을 대상 배포에 추가합니다.

참고: 와일드카드 도메인 이름을 보호하는 대상 배포에 SSL/TLS 인증서가 있어야 합니다.

2.    대상 배포의 정식 이름을 가리키도록 CNAME에 대한 DNS 설정을 업데이트합니다. 도메인이 www.example.com인 경우 www.example.com에 대한 DNS 레코드를 업데이트하여 트래픽을 대상 배포의 정식 이름으로 라우팅합니다. 예:

www.example.com.         86400   IN   CNAME     "dexample123456.cloudfront.net"

참고: DNS 설정을 업데이트한 후에도 대체 도메인 이름을 사용하는 요청은 소스 배포에서 제공됩니다. 이는 대체 도메인 이름이 여전히 소스 배포에 연결되어 있기 때문입니다.

3.    소스 배포를 업데이트하여 대체 도메인 이름을 제거합니다.
참고: 이 단계에서는 라이브 트래픽이 중단되지 않습니다. 요청된 도메인 이름이 대상 배포에 추가된 와일드카드 도메인과 일치하므로 라이브 트래픽은 대상 배포 설정을 사용합니다.

4.    대상 배포를 업데이트하여 이동할 대체 도메인 이름을 추가합니다.

5.    dig 또는 유사한 DNS 쿼리 도구를 사용하여 CNAME에 대한 DNS 레코드를 검증합니다. 예를 들면 다음과 같습니다.

dig CNAME www.example.com +short
nslookup example.com

6.    (선택 사항) 대상 배포를 업데이트하여 와일드카드 대체 도메인 이름을 제거합니다.


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


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