[AWS] Route53 Domain 다른 AWS 계정으로 이전하기
소마 연수 기간이 끝나갑니다. 발표가 끝나면 해당 기관에서 발급해준 AWS 계정을 사용할 수가 없어서 다른 AWS 계정으로 이전해야 했습니다. 지원받은 AWS 계정의 Route53에서 산 도메인을 다른 AWS 계정으로 이전하며 겪은 것을 공유해보고자 합니다.
Route53의 도메인을 다른 계정으로 이전해보자
Route53에서 구매한 도메인은 3가지 방법으로 이전할 수 있습니다.
- AWS에 직접 연락해서 이전하기
- AWS SDK를 사용해서 코드로 이전하기
- AWS CLI로 이전하기
저는 AWS CLI로 옮겨보았습니다. 문서가 잘 없네용..
준비물
- Route53에서 구매한 도메인을 가진 계정
- 도메인을 받아올 계정
- AWS CLI 2
AWS CLI 2로 도메인 이전하는 법
A계정의 Route53에서 구매한 Domain을 B계정으로 도메인을 옮긴다고 가정하고 설명하겠습니다.
AWS CLI 2 Route53 Domain관련 기본 명령어
route53domains는 한국 endpoint가 없다!!
먼저 시작하기 전에 알아야 할 것과 디버깅할 때 필요한 기본 명령어부터 알려드리겠습니다.
보통 AWS CLI에 기본으로 서울 리전이 선택되어 있을 겁니다. 그러면 aws route53domains 명령어를 사용할 때 다음과 같은 오류가 날 겁니다.
Could not connect to the endpoint URL: "https://route53domains.ap-northeast-2.amazonaws.com/"
endpoint를 가져올 수 없다고 나옵니다.
그 이유는 Route53 domain을 (구매하고 수정하는 등) 다루는 부분은 글로벌 서비스이기 때문에 서울(ap-northeast-2)에는 서비스하지 않기 때문입니다. 그래서 endpoint를 찾을 수 없는 겁니다.
관련 Issue 링크: https://github.com/aws/aws-cli/issues/1354#issuecomment-686465465
이런 경우 aws route53domains 명령어를 쓸 때 명시적으로 버지니아 region을 붙여줘서 해결할 수 있습니다. (아니면 일시적으로 기본 리전을 aws configure 명령어로 us-east-1으로 바꿔두세요.)
앞으로 aws로 도메인 작업을 할 때는 리전명과 세트로 아래 명령어를 기본 명령어 구성이라고 생각합시다!
aws route53domains --region us-east-1 사용할_명령어
aws route53과 aws route53domains 명령어는 다른 명령어입니다.
domain과 관련된 operation(이전하거나 사거나 등)을 하고 싶을 때 공용 리전으로 쓰이는 US East (N. Virginia) us-east-1로 접속해서 사용합니다.
A계정으로 로그인된 AWS CLI로 먼저 내가 가진 도메인을 출력해봅니다.
aws route53domains --region us-east-1 list-domains
제가 Route53으로 구매하거나 옮기거나 하는 모든 작업은 Operations입니다.
그리고 이 Operation은 각자 Id가 부여됩니다.
저는 웹 콘솔 상에서 클릭해서 도메인을 3개를 구매했었습니다(이것도 Operation입니다).
다음의 명령어로 제 계정의 Operation을 모두 확인해보겠습니다.
aws route53domains --region us-east-1 list-operations
보면 domain을 등록하는 Operation 3개가 뜹니다. 구매한 도메인을 Register하는 Operation들이네요.
앞으로 저희는 도메인을 다른 계정을 이전하는 Operation을 할 겁니다.
Tip. Operation 상세 정보 출력하기
가끔 각 Operation을 상세하게 보고 싶을 때가 있습니다. 그럴 때는 아래의 명령어로 조금 더 각각의 Operation의 상세정보를 볼 수 있습니다.
aws route53domains --region us-east-1 get-operation-detail --operation-id Operation-아이디
"Operation-아이디"에 자기가 상세하게 보고 싶은 Operation Id를 넣습니다.
그러면 더 추가적인 정보를 보여줍니다.
예를 들어서 우리가 도메인 이전 요청을 다른 계정으로 보냈을 때 상대방이 이것을 수락했는지 여부와 이 Operation이 어떤 도메인에 대한 작업인지를 이 명령어를 통해 확인할 수 있습니다.
Status가 성공이네용!
이제 aws route53domains 명령어로 직접 도메인을 다른 계정으로 옮겨보겠습니다.
1. 구매한 도메인을 B계정으로 보낸다
B계정으로 도메인 소유권을 이전하려면 다음의 2가지 정보가 필요합니다.
- 이전할 도메인명
- B계정의 Account Id
이전할 도메인명은 당연히 A계정에서 소유하고 계신 도메인 주소입니다.
ex. modocode.com
B계정의 계정 아이디는 웹페이지 상에서 B계정으로 로그인하면 우측 상단에 있습니다.
transfer-domain-to-another-aws-account
transfer-domain-to-another-aws-account 레퍼런스 문서 : https://awscli.amazonaws.com/v2/documentation/api/latest/reference/route53domains/transfer-domain-to-another-aws-account.html
원래 도메인을 보유하고 있는 A계정으로 인증된 AWS CLI에서 실행합니다!
아니라면 aws configure로 AWS CLI의 인증 정보를 바꾸세용
도메인을 이전하는 명령어는 aws route53domains transfer-domain-to-another-aws-account입니다.
Domain을 보유하고 있는 A계정 CLI에서 transfer-domain-to-another-aws-account 명령어를 실행합니다.
aws route53domains --region us-east-1 transfer-domain-to-another-aws-account --domain-name 도메인명 --account-id 계정ID
예를 들어서, A계정에서 구매한 a.com을 B계정(B계정 Id가 12345라고 가정)으로 이전을 하고 싶다면?
aws route53domains --region us-east-1 transfer-domain-to-another-aws-account --domain-name a.com --account-id 12345
transfer-domain-to-another-aws-account 결과
성공한다면 OperationId와 Password를 발급해줍니다.
{
"OperationId": "1q3323j2jk32jk2n4b23n1m1kl2m3",
"Password": "[w2_w1w0asdOaop"
}
이 비밀번호를 잘 저장해두세용.
B계정에서 domain 이전 요청을 수락할 때 필요합니다.
2. B계정에서 계정 이전 요청을 수락합니다.
B계정에 온 domain 요청 확인
B계정으로 AWS 웹 콘솔에 로그인해서 Route53 페이지로 이동해보면 위와 같이 도메인이 이전 진행 중이라고 뜰 겁니다.
아직 수락하지 않아서 그렇습니다.
(수락하지 않은 채로 며칠 두면 Operation이 자동으로 요청이 취소됩니다)
accept-domain-transfer-from-another-aws-account
accept-domain-transfer-from-another-aws-account 레퍼런스 문서 : https://awscli.amazonaws.com/v2/documentation/api/latest/reference/route53domains/accept-domain-transfer-from-another-aws-account.html
위의 명령어와 달리 도메인을 받아올 B계정으로 인증된 AWS CLI에서 실행합니다!
아니라면 aws configure로 바꾸세용
도메인 이전 operation을 수락하는 명령어는 aws route53domains accept-domain-transfer-from-another-aws-account입니다.
이 명령어는 아래의 두 가지 정보를 필요로 합니다.
- 수락할 도메인명
- 비밀번호
수락할 도메인명과 A계정에서 transfer-domain-to-another-aws-account을 했을 때 반환해준 비밀번호가 필요합니다.
도메인을 받아올 B계정에서 다음과 같이 명령어를 실행해서 도메인 이전 요청을 수락합니다.
aws route53domains accept-domain-transfer-from-another-aws-account --region us-east-1 --domain-name "도메인명" --password "반환 받은 비번"
예를 들어서, A계정으로부터 온 a.com에 관한 도메인 이전 요청을 수락하려면?
aws route53domains accept-domain-transfer-from-another-aws-account --region us-east-1 --domain-name "a.com" --password "[w2_w1w0asdOaop"
[참고] "aws: error: argument --password: expected one argument"가 출력되는 경우
password에 -가 포함되는 경우 버그가 발생합니다.
password뿐만이 아니라 인자에 '-'가 포함되는 경우 여러 argument로 파싱해버리는 AWS CLI 자체적인 버그가 있더라고용..
관련 버그가 언급된 문서 : https://docs.aws.amazon.com/Route53/latest/APIReference/API_domains_AcceptDomainTransferFromAnotherAwsAccount.html
관련 Issue 링크: https://github.com/aws/aws-cli/issues/1135#issuecomment-77254897
'-'면 무조건 다른 argument로 인식해버리다니... 상상도 못 했습니다. AWS에서는 json format으로 받으면 해결된다고 하는데 더 간단한 해결법이 있습니다.
"--option value" 형태로 값(value)을 넘겨주던 것을 "--option=value"로 바꿔서 주면 됩니다.
예를 들어서, password가 "aaa-bbb"인 도메인 이전 요청을 수락하고 싶은 경우 다음과 같이 실행하면 됩니다.
aws route53domains accept-domain-transfer-from-another-aws-account --region us-east-1 --domain-name "a.com" --password="aaa-bbb"
accept-domain-transfer-from-another-aws-account 결과
수락이 성공하면 다음과 같이 수락한 Operation의 Id를 반환해줍니다.
제대로 도메인이 이전되었는지 확인하려면 다시 B계정으로 로그인해서 Route53에서 확인해보면 됩니다.
도메인이 이전되기까지 시간이 걸릴 수도 있습니다.
이전이 완료되면 다음과 같이 뜹니닷.
도메인 이전하기 끝!
기존의 Hosted zone들은 어떻게 되나요?
위의 도메인을 옮기는 명령만으로는 hosted zone이 옮겨지진 않습니다.
AWS 문서에 따르면 이전했다고 바로 호스팅 영역이 날아가는 것은 아닙니다. A계정에서 Hosted Zone을 지우지 않는 이상 살아있을 겁니다. 단지 hosted zone을 보려면 다른 계정을 사용해야 합니다.
Hosted zone을 옮기는 것은 친절하게 안내가 되어있습니다. 호스팅 영역까지 완전히 이전시켜주려면 다음의 AWS 공식 문서를 참고해보세요.
https://docs.aws.amazon.com/ko_kr/Route53/latest/DeveloperGuide/hosted-zones-migrating.html
Hosted Zone 옮길 때 주의사항
만약 예전 계정의 hosted zone을 삭제하고 새로 도메인을 이전한 AWS 계정에서 hosted zone을 만든 경우 참고하세요.
도메인을 다른 계정으로부터 옮기면 registered domain과 route53에서 새로 생성한 hosted zone의 name server 주소가 다를 수 있습니다.
만약에 다른 경우 nslookup [도메인_주소]를 해보면 nxdomain이 없다고 뜹니다.
** server can't find ***.com: NXDOMAIN
그런 경우 registered domain을 route53이 가지고 있는 기본 nameserver로 업데이트해주면 됩니다.
Route53 hosted zone의 기본 Name Server 주소 확인하는 법
1. Route53 hosted zone으로 이동합니다
2. 원하는 호스팅 영역을 선택합니다
없다면 하나 생성하고 선택하세요.
3. View details를 클릭합니다
4. Hosted zone details를 클릭합니다
5. Name servers를 확인합니다.
우측에 뜨는 Name servers가 바로 제 Hosted Zone의 기본 Name server들입니다.
여기에 뜨는 주소가 registered domain의 hosted zone이랑 일치해야 합니다.
이제 이 name server 주소로 registered domain의 name server를 업데이트해보겠습니다.
Registered Domain의 Name Server 업데이트하는 법
먼저 route53의 registered domain으로 이동합니다.
확인할 registered domain을 클릭합니다.
등록된 도메인의 name server가 만약 hosted zone의 기본 name server랑 다르면 수정해줍시다.
우측의 Name servers란의 Add or edit name servers를 누릅니다
누르면 팝업창이 뜨는데 여기서 저희가 원하는 name server로 업데이트하면 됩니다.
route53의 기본 name server로 업데이트해줍시다.
완료됐다면 Update를 누릅니다.
업데이트하고 적용이 되는데 시간이 걸립니다. (Cache 때문에 최대 2일 정도 걸릴 수 있습니다.)
저는 반나절 정도 기다리니깐 register domain의 name server가 업데이트가 완료됐습니다.
그러면 새로운 계정의 hosted zone에서 생성한 DNS record도 제대로 전파되며 정상 작동하기 시작할 겁니다.
댓글
이 글 공유하기
다른 글
-
[AWS] 2월부터 늘어난 VPC 비용 - In-use Public IPv4 Address
[AWS] 2월부터 늘어난 VPC 비용 - In-use Public IPv4 Address
2024.03.03 -
[AWS] AWS 비용 절감하기 :: 0. Free Tier가 끝나며 흥미로워진 AWS 비용
[AWS] AWS 비용 절감하기 :: 0. Free Tier가 끝나며 흥미로워진 AWS 비용
2023.08.16 -
[AWS] Elastic Beanstalk graceful shutdown (feat. AutoScaling Lifecycle Hook - TERMINATING)
[AWS] Elastic Beanstalk graceful shutdown (feat. AutoScaling Lifecycle Hook - TERMINATING)
2022.11.10 -
[AWS] AWS SES API를 사용해서 메일 보내기 (feat. NodeJS)
[AWS] AWS SES API를 사용해서 메일 보내기 (feat. NodeJS)
2022.10.09