Cloud DNS 다루기

이 페이지에서는 Cloud DNS와 Cloud Tools for PowerShell을 사용하여 도메인의 DNS 설정을 구성하는 방법을 보여줍니다. 도메인과 하위 도메인을 관리하는 관리형 영역을 만든 다음 이 영역에 리소스 레코드를 추가하여, 영역의 도메인에 대한 요청을 처리할 때 DNS 서버의 동작을 결정하는 정보를 제공하는 간단한 예제를 살펴봅니다.

이 문서에서는 도메인 이름과 이 도메인 이름을 가리킬 수 있는 IP 주소가 있다고 가정합니다. 그렇지 않으면 Google Domains 또는 원하는 다른 도메인 등록 기관을 통해 도메인 이름을 등록할 수 있습니다.

Cloud DNS cmdlet에 대한 자세한 내용은 Cloud Tools for PowerShell cmdlet 참조를 참조하세요. 일반적인 Cloud DNS에 대한 자세한 내용은 Cloud DNS 개요를 읽어보세요.

도메인의 관리형 영역 만들기

DNS 네임스페이스 전체는 여러 도메인으로 구성되며, 여기에는 고유한 도메인 이름이 포함됩니다. Cloud DNS의 관리형 영역은 DNS 영역을 모델링하며 DNS 이름 서픽스가 동일한 DNS 레코드(예: A, CNAME, TXT 항목)를 구성하는 컨테이너 역할을 합니다. 예를 들어 'example.com.'과 'first.example.com.' 같은 하위 도메인의 레코드는 'example.com.' 서픽스를 공유하므로 동일한 영역에 속합니다. 맨 뒤의 점은 반드시 필요하며 절대 DNS 이름을 나타냅니다.

시작하려면 관리형 영역을 설정하여 도메인 이름을 적용해서 만들 DNS 레코드를 구성합니다. 새로운 관리형 영역을 만들고 Add-GcdManagedZone cmdlet를 사용하여 이를 GCP Console 프로젝트에 추가할 수 있습니다.

Add-GcdManagedZone `
    -Name "my-new-zone" `
    -DnsName "example.com." `
    -Description "This is my first zone."

이렇게 하면 지정한 세부정보를 사용하여 새로운 영역이 생성되고 활성 Cloud SDK 구성의 현재 프로젝트에 추가되지만, 원하는 경우 다른 프로젝트 ID를 지정할 수도 있습니다. 이렇게 하면 영역에 기본 NS 및 SOA 레코드가 추가로 생성됩니다.

하지만 영역(zone)의 새 레코드를 인터넷에 게시하려면 도메인의 이름 서버가 Cloud DNS를 사용하도록 업데이트해야 합니다. 도메인이 Google Domains에 등록되어 있어도 이름 서버를 업데이트해야 합니다.

도메인을 관리하는 관리형 영역에 Get-GcdManagedZone cmdlet를 사용해서 이 영역에 대한 정보를 반환하도록 하여 도메인에 할당된 Cloud DNS 이름 서버를 찾을 수 있습니다.

Get-GcdManagedZone -Zone "my-new-zone"

리소스 레코드 세트 추가 및 제거

DNS 리소스 레코드는 도메인에 전송된 요청을 처리할 때 DNS 서버의 동작을 지시하는 정보를 제공합니다. 예를 들어 서버에 도메인을 확인하는 IP 주소를 알려주거나, 도메인에 사용할 수 있는 메일 교환 서버를 나타내는 등의 작업에 DNS 레코드를 사용할 수 있습니다.

Cloud DNS에서는 영역에서 DNS 레코드를 추가하거나 제거하여 이러한 동작을 구성할 수 있습니다. 변경 불가능한 리소스 레코드를 추가하거나 제거하려면 영역의 레코드를 직접 조작하지 마세요. 대신 각각 New-GcdResourceRecordSetGet-GcdResourceRecordSet cmdlet를 사용하여 독립적인 리소스 레코드를 만들거나 기존 리소스 레코드를 검색한 다음, Add-GcdChange cmdlet를 사용하여 이 레코드를 사용한 변경 요청을 특정 영역에 보냅니다.

리소스 레코드 세트 만들기

도우미 cmdlet New-GcdResourceRecordSet를 사용하면 변경 내용에 포함한 다음 관리형 영역(zone)에 추가하거나 관리형 영역(zone)에서 제거할 수 있는 리소스 레코드 세트를 만들 수 있습니다.

예를 들어 도메인이 #.#.#.# 형식의 외부 IPv4 주소를 가리키도록 A 레코드를 만들려면(IPv6 주소가 있으면 AAAA 레코드를 사용) 다음 명령어를 사용합니다.

$ARecord = New-GcdResourceRecordSet `
    -Name "example.com." -Rrdata "107.1.23.134" -Type "A"

마찬가지로 'www.example.com.'이 'example.com.'과 동일한 IP로 확인되고 이와 동일하게 동작하도록 www 하위 도메인의 CNAME 레코드를 만들려면 다음 명령어를 사용합니다.

$CNAMERecord = New-GcdResourceRecordSet `
    -Name "www.example.com." -Rrdata "example.com." -Type "CNAME"

사용자가 만들어 영역의 변경에 포함할 수 있는 지원되는 리소스 레코드 유형은 A, AAAA, CNAME, MX, NAPTR, NS, PTR, SOA, SPF, SRV, TXT입니다. 어떤 레코드가 필요한지를 결정하는 데 그리고 레코드를 만드는 방법과 관련하여 도움이 필요하면 Cloud DNS에 지원되는 리소스 레코드 형식을 참조하세요.

리소스 레코드 세트 검색

영역에서 기존 리소스 레코드 세트를 검색하려면 Get-GcdResourceRecordSet cmdlet를 사용하여 영역 안의 모든 레코드를 반환한 다음 결과를 인덱싱할 수 있습니다.

$allRecords = Get-GcdResourceRecordSet -Zone "my-new-zone"
$record0 = $allRecords[0]

특정한 유형의 레코드만 필요하면 결과를 적절하게 필터링할 수 있습니다.

$ARecord = Get-GcdResourceRecordSet -Zone "my-new-zone" -Filter "A"

관리형 영역에 변경사항 적용

cmdlet New-GcdResourceRecordSetGet-GcdResourceRecordSet는 둘 다 리소스 레코드 세트를 반환하지만, 어디에서도 레코드를 추가하거나 제거하지 않습니다. 그렇게 하려면 Add-GcdChange cmdlet를 사용하세요.

Add-GcdChange `
    -Zone "my-new-zone" -Add $record1,$record2 -Remove $record0

예를 들어 위에서 만든 A 및 CNAME 레코드를 영역에 추가하려면 다음을 사용하세요.

Add-GcdChange -Zone "my-new-zone" -Add $ARecord,$CNAMERecord

나중에 도메인이 확인되는 IPv4 주소를 변경하려면 새로운 A 유형 레코드를 만든 다음 이전 A 레코드를 삭제하고 새 레코드를 관리형 영역에 추가하세요.

$oldARecord = Get-GcdResourceRecordSet -Zone "my-new-zone" -Filter "A"
$newARecord = New-GcdResourceRecordSet `
    -Name "example.com." -Rrdata "104.1.34.167" -Type "A"
Add-GcdChange -Zone "my-new-zone" -Remove $oldARecord -Add $newARecord

Add-GcdChange cmdlet에 대한 각 호출은 새로 실행된 변경 요청 객체를 반환합니다. Add-GcdChange cmdlet에 리소스 레코드 세트의 목록 대신 변경 요청 객체를 전달하여 직접 실행할 수도 있습니다.

Add-GcdChange -Zone "my-new-zone" -ChangeRequest $change0

변경 요청 객체를 수동으로 만드는 방법은 권장하지 않지만, 이전에 변경한 내용이나 다른 영역에서 변경한 내용을 다시 적용하려는 경우에는 유용합니다. Get-GcdChange cmdlet를 사용하여 영역에 적용된 이전의 모든 요청 객체를 검색할 수 있습니다.

$allChanges = Get-GcdChange -Zone "my-new-zone"

이전 결과의 색인을 생성하여 특정 변경사항을 선택하거나, ChangeId를 사용하여 검색할 변경사항을 지정할 수 있습니다. 변경 요청은 일반적으로 영역으로 보내진 순서에 따라 0부터 번호가 지정됩니다.

$firstChange = Get-GcdChange -Zone "my-new-zone" -ChangeId 0
Add-GcdChange -Zone "my-new-zone" -ChangeRequest $firstChange

관리형 영역 삭제

때로는 관리형 영역을 모두 제거해야 하는 경우가 있으며, 그 이유는 다양할 수 있습니다. 예를 들어 하위 도메인 'user1.example.com.'에 관리형 영역 'user1-zone'이 있지만 user1이 자신의 계정을 삭제하면 이 하위 도메인과 모든 관련 DNS 레코드를 제거해야 할 수 있습니다.

프로젝트에서 관리형 영역을 제거하려면 Remove-GcdManagedZone cmdlet를 사용하세요.

Remove-GcdManagedZone -Zone "user1-zone"

성공하면 이 명령어는 아무 것도 반환하지 않습니다.

하지만 이 cmdlet는 Cloud DNS가 '비어있지 않은' 관리형 영역이라고 간주하는 영역에 또는 비NS 또는 비SOA 유형 레코드(비기본 레코드)를 포함하는 영역에 즉시 적용되지 않습니다. 예를 들어 -Force 스위치를 처리하거나 사용하는 중에 cmdlet에 대한 권한을 부여하지 않고 A 및 CNAME 유형 레코드를 추가한 'my-new-zone'을 삭제할 수 없습니다.

Remove-GcdManagedZone -Zone "my-new-zone" -Force

Remove-GcdManagedZone cmdlet는 삭제할 영역에 대한 파이프라인 입력도 허용합니다. 예를 들어 다음 명령어는 현재 프로젝트에서 모든 관리형 영역을 강제로 삭제합니다. 이는 프로젝트에 설정된 도메인을 더 이상 유지관리하지 않는 경우에 유용합니다.

Get-GcdManagedZone | Remove-GcdManagedZone -Force