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

5분 분량
0

Amazon CloudFront 배포에 대한 Canonical Name record (CNAME) 별칭을 설정할 때, "CNAMEAlreadyExists"라는 오류가 발생합니다.

간단한 설명

한 개 이상의 CloudFront 배포에 대해 같은 CNAME 별칭을 사용할 수 없습니다. 사용자가 추가하려는 CNAME 별칭이 이미 다른 CloudFront 배포와 연결되어 있다면, 오류가 발생합니다.

"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로 바뀔 때까지 기다려야 할 수 있습니다.

배포 ID를 모르는 경우에는 ListConflictingAliases CloudFront API를 사용하세요. 이렇게 하면 충돌하는 CNAME 별칭의 배포와 계정 ID에 대한 일부 정보를 찾을 수 있습니다. 그런 다음, AssociateAlias API를 사용하여 사용자의 CNAME을 기존 배포(소스 배포) 에서 새 배포(대상 배포)로 이동합니다. 사용자의 시나리오에 따라 다음 해결 방법 중 하나를 사용하세요.

  • 같은 계정에 있는 소스 및 대상 배포의 경우, AssociateAlias API를 사용하여 사용자의 CNAME 이동 섹션을 참조하세요.
  • 계정 간 소스 및 대상 배포에 대해서는 충돌하는 CNAME이 있는 소스 배포 비활성화 섹션을 참조하세요.
  • 기존 트래픽의 정지 시간으로 인해 소스 배포를 비활성화할 수 없는 경우, 와일드카드를 사용하여 대체 도메인 이름 이동을 참조하세요.
    참고: Apex 도메인(example.com)을 이동하는 데는 와일드카드를 사용할 수 없습니다. 소스 및 대상 배포가 서로 다른 AWS 계정에 있을 때 어펙스 도메인을 이동하려면, AWS Support에 문의하여 대체 도메인 이름을 이동하세요.

해결 방법

AssociateAlias API를 사용하여 사용자의 CNAME을 이동하세요

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

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

중요: 요청을 보내는 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"
      ]
    }
  ]
}

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

2.    충돌하는 CNAME이 있는 배포를 식별하세요. 어느 배포에 충돌하는 CNAME이 있는지 모르는 경우 ** ListConflictingAliases** API를 사용하여 해당 배포를 찾으세요.

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

참고:****YourDistributionID를 사용자의 배포 ID로 바꿉니다. YourCNAME을 충돌하는 CNAME 별칭으로 바꿉니다.

3.    도메인의 소유권을 확인하려면 YourDistributionID에 대한 읽기 액세스가 있어야 합니다. 또한 충돌하는 CNAME을 보호하는 CloudFront 배포와 연결된 SSL 인증서가 있어야 합니다.

소유권을 확인할 준비가 되면 대상 배포의 정식 이름으로 확인한 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의 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.    탐색 창에서 배포를 선택합니다

3.    소스 배포를 선택한 다음, 비활성화를 선택합니다.

어느 배포에 충돌하는 CNAME이 있는지 모르는 경우 ListConflictingAliases API를 사용하여 해당 배포를 찾으세요. YourDistributionID를 사용자의 배포 ID로 바꾸고 YourCNAME를 충돌하는 CNAME의 이름으로 바꾸세요.

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

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

소스 배포를 비활성화한 후에는 AssociateAlias API를 사용하여 사용자의 CNAME 이동 섹션에 있는 단계를 따르세요.

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

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

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

이 프로세스에는 소스와 대상 배포 모두에 대한 여러 업데이트가 포함되어 있습니다. 다음 단계로 진행하기 전에 각 배포에서 최신 변경 사항이 완전히 배포될 때까지 기다리세요.

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.    CNAME의 DNS 기록을 입증하려면, dig 또는 유사한 DNS 쿼리 도구를 사용하세요.

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

6.    (선택 사항) 와일드카드 대체 도메인 이름을 제거하려면, 대상 배포를 업데이트하세요.

AWS 공식
AWS 공식업데이트됨 일 년 전
댓글 없음