ゾーンの管理

マネージド ゾーンとは、同じドメイン名(例: example.com)を共有する DNS レコードをすべて格納するコンテナを指します。マネージド ゾーンを作成すると、そのゾーンに対する DNS クエリへのレスポンスを処理するためにネームサーバーのセットが自動的に割り当てられます。マネージド ゾーンには、含めることができるリソース レコード数の割り当てがあります。

始める前に

Cloud DNS API を使用するには、Cloud DNS プロジェクトを作成して、Cloud DNS API を有効にする必要があります。

REST API を使用するアプリケーションを作成している場合は、OAuth 2.0 のクライアント ID も作成する必要があります。

  1. Google アカウントをまだお持ちでない場合は、Google アカウントを登録します。
  2. GCP Console で Cloud DNS API を有効にします。既存の Compute Engine または App Engine プロジェクトを選択するか、新しいプロジェクトを作成できます。
  3. REST API にリクエストを行う必要がある場合は、OAuth 2.0 の ID を作成する必要があります。OAuth 2.0 を設定
  4. プロジェクト内の以下の情報は、後の手順で入力するために必要になります。
    • クライアント ID(xxxxxx.apps.googleusercontent.com
    • 使用するプロジェクト ID。この ID は、GCP Console の [概要] ページの上部に表示されます。また、ユーザーがアプリで使用するプロジェクト名を入力するようにもできます。

これまでに gcloud コマンドライン ツールを実行したことがない場合は、次のコマンドを実行してプロジェクト名を指定し、GCP Console で認証する必要があります。

gcloud auth login

また、コマンドに --project パラメータを指定すると、さまざまなプロジェクトを呼び出してコマンドを実行できます。

マネージド ゾーンの作成

Cloud DNS API の使用を開始する際に、DNS レコードを格納するためのマネージド ゾーンを作成する必要があります。マネージド ゾーンは、Cloud DNS プロジェクトに接続されています。ゾーンを作成した場合、ドメイン登録を更新するか、明示的にいくつかのリゾルバをポイントするか、またはゾーンのネームサーバーのいずれか 1 つに直接クエリを実行するまで、新しいゾーンは使用できないことに注意してください。

ゾーンを作成するには、DNS ゾーン名、説明、ゾーンを識別するための名前を指定する必要があります。--visibility フラグを使用してマネージド ゾーンを一般公開または限定公開として指定するか、--networks フラグを使用して限定公開ゾーンが表示される VPC ネットワークを指定します。

gcloud

限定公開ゾーンを作成するには:

gcloud dns managed-zones create my-zone-name \
    --dns-name="example.com" \
    --description="A zone" \
    --visibility=private \
    --networks=default

一般公開ゾーンを作成するには:

gcloud dns managed-zones create my-zone-name \
    --dns-name="example.com" \
    --description="A zone" \
    --visibility=public

限定公開ゾーンが表示されるネットワークを変更するには、次のコマンドを実行します。

gcloud dns managed-zones update my-zone-name \
    --networks default,newnetwork

このコマンドは、限定公開ゾーンが default および newnetwork というネットワークに表示されるようにします。限定公開ゾーンが表示されていたすべてのネットワークは、新しいリストのネットワークで置き換えられます。

Python

def create_zone(project_id, name, dns_name, description):
    client = dns.Client(project=project_id)
    zone = client.zone(
        name,  # examplezonename
        dns_name=dns_name,  # example.com.
        description=description)
    zone.create()
    return zone

accessNotConfigured エラーが表示された場合は、Cloud DNS API を有効にする必要があります。

転送ゾーンの作成

転送ゾーンは、指定ゾーンの通常の DNS 解決よりも優先されます。指定ゾーンのクエリはリストの転送先に転送されます。

gcloud beta dns managed-zones create example-forwarding-zone \
    --dns-name="example.com" \
    --description="A zone" \
    --networks="default,my-network" \
    --visibility=private \
    --forwarding-targets="8.8.8.8,8.8.4.4"

ここで

  • --dns-name は、転送ゾーンによって解決されるドメインのリストです。
  • --networks は、転送ゾーンを使用するネットワークのリストです。
  • --visibility は、転送ゾーンが publicprivate かを示します。
  • --forwarding-targets は静的 IP アドレスのリストです。同じ VPC ネットワークか、VPN またはインターコネクト経由で到達可能なネットワーク上にある場合、これらの IP アドレスは RFC 1918 形式のアドレスにできます。それ以外の場合は、公開でアクセス可能な IP アドレスにする必要があります。

要件: 転送された DNS クエリを外部のネームサーバーで受信できるようにするには、以下のことを行う必要があります。

  • 外部ネームサーバーが VPC ネットワークから到達可能であることを確認します。
    • オンプレミス ネットワークで、Google の 35.199.192.0/19 IP アドレス範囲からのトラフィックを許可するようにルーティングを設定し、ファイアウォールを構成します。
      • このアドレス ブロックは、VPC ネットワークから別のネームサーバーに DNS クエリを転送するために、Google のプロキシが排他的に使用します。
      • このアドレス ブロックは VPC ネットワーク内からのみ到達可能で、転送が構成されている場合はオンプレミス ネットワークから接続できます。
      • すべての GCP ユーザーに対して 35.199.192.0/19 が使用されていても、オンプレミスのネームサーバーは、限定公開ゾーンへのアクセスが許可されている(転送が有効になっている)VPC ネットワークからのリクエストのみを受信します。
  • GCP では、転送されたクエリを受信するオンプレミスのネームサーバーの IP アドレスからレスポンスを送信する必要があります。オンプレミスのネームサーバーが異なる送信元 IP アドレスから応答した場合、セキュリティ上の理由から GCP はこのレスポンスを無視します。

ピアリング ゾーンの構成

2 つのネットワークがピアリングされている場合、それらは自動的には DNS 情報を共有しません。DNS ピアリングを使用すると、あるネットワーク(コンシューマ ネットワーク)から別のネットワーク(プロデューサー ネットワーク)に DNS リクエストを転送できます。これを行うには、一致する DNS リクエストをプロデューサー ネットワークに転送するピアリング ゾーンをコンシューマ ネットワークに作成します。

この手順は、すでに 2 つのネットワークをピアリングしていることを前提としています。

  1. まだピアリングしていない場合は、実際に DNS リクエストを処理するネットワーク(プロデューサー ネットワーク)に限定公開ゾーンまたは転送ゾーンを作成します。

    gcloud beta dns managed-zones create example-private-zone \
        --dns-name="example.com" \
        --networks="default,my-network" \
        --visibility=private
    

    ここで

    • --dns-name は、ゾーンによって解決される接尾辞です。
    • --networks は、このゾーンを使用できるプロジェクト内のネットワークのリストです。
    • --visibility は、限定公開ゾーンを作成するため、private に設定します。
  2. リソース レコードをゾーンに追加します。

  3. プロデューサー ネットワーク プロジェクトで、他のネットワークにピアリング ゾーンを作成するアカウントに dns.peer IAM 役割を付与します。通常、ピアリング ゾーンを作成するアカウントはサービス アカウントです。

    gcloud beta projects add-iam-policy-binding [PRODUCER_PROJECT] \
        --member=[SERVICE_ACCOUNT] \
        --role=dns.peer
    

    ここで

    • [SERVICE_ACCOUNT] の形式は serviceAccount:test123@example.domain.com です。
  4. DNS リクエストをプロデューサー ネットワークに転送するピアリング ゾーンをコンシューマ ネットワークに作成します。リクエストを処理する限定公開ゾーンの名前は指定せず、ネットワークだけを指定します。そうすれば、プロデューサー ネットワーク内のどのゾーンでもリクエストを処理できます。

    gcloud beta dns managed-zones create example-peering-zone \
        --account=[SERVICE_ACCOUNT] \
        --dns-name="example.com" \
        --networks=[CONSUMER_NETWORK] \
        --visibility=private \
        --target_network=[PRODUCER_NETWORK] \
        --target_project=[PRODUCER_PROJECT]
    

    ここで

    • --account=[SERVICE_ACCOUNT] は、プロデューサー ネットワークに対する dns.peer 役割を持つサービス アカウントです。
    • --dns-name は、ピアリングされたゾーンによって解決されるドメインのリストです。
    • --networks=[CONSUMER_NETWORK] は、ピアリング ゾーンを作成するネットワークです。
    • ピアリング ゾーンは限定公開のみが可能なため、--visibilityprivate に設定します。
    • --target_network=[PRODUCER_NETWORK] は、ピアリング ゾーンをピアリングするネットワークです。
    • --target_project=[PRODUCER_PROJECT] は、ピアリング ゾーンをピアリングするネットワークを含むプロジェクトです。

構成がすべて完了したら、コンシューマ ネットワークのインスタンスにログインし、構成したゾーンに対して DNS リクエストを行います。ピアリング ゾーンはプロデューサー ネットワーク内の限定公開ゾーンにリクエストを転送し、プロデューサー ネットワークから IP アドレスの応答があるはずです。

マネージド ゾーンの更新

DNS レコードを格納するマネージド ゾーンを作成したら、そのプロパティの一部を更新してください。現在更新できるのは、説明と DNSSEC 構成だけです。

ゾーンを更新するには、ゾーンリソース名(DNS 名とは異なり、ゾーンリソース名には . を使用できません)と、ゾーンに関連付けられている最新情報を提供する必要があります。

コマンドライン

gcloud dns managed-zones update --description="My zone" "myzonename"

Python

     BODY = {
          'name' : 'myzonename',
          'description' : 'My zone'
        }
        service = build('dns', 'v1')
        response = service.managedZones().create(project=PROJECT_NAME,
                                                 body=BODY
                                                 ).execute()
     

マネージド ゾーンのラベルの追加と更新

マネージド ゾーンにラベルを追加したり、既存のラベルを削除したりできます。

次の例で、[KEY]:[VALUE] は任意の Key-Value ペアです(Dept:MarketingProject:project1 など)。

マネージド ゾーンを作成するときにラベルを追加する

gcloud dns managed-zones create \
    --dns-name="example.com." \
    --labels [KEY]:[VALUE] \
    --description="A zone" "myzonename"

既存のマネージド ゾーンにラベルを追加する

次のコマンドは、既存のマネージド ゾーンにラベルを追加します。

gcloud dns managed-zones update \
    --labels [KEY]:[VALUE],[[KEY]:[VALUE]] \
    "myzonename"

ラベルの Key-Value ペアの値を更新する

次のコマンドは、既存のラベルの Key-Value ペアの value を更新します。key が存在しない場合は、新しい Key-Value ペアが作成されます。

gcloud dns managed-zones update \
    --update-labels [KEY]:[VALUE],[[KEY]:[VALUE]] \
    "myzonename"

ラベルの Key-Value ペアを削除する

次のコマンドは、指定されたラベルの Key-Value ペアを削除します。

gcloud dns managed-zones update \
    --remove-labels [KEY]:[VALUE],[[KEY]:[VALUE]] \
    "myzonename"

すべてのラベルの Key-Value ペアをクリアする

次のコマンドは、すべてのラベルをクリアします。

gcloud dns managed-zones update \
    --clear-labels \
    "myzonename"

マネージド ゾーンのリスト

プロジェクト内のすべてのゾーンを一覧表示するには:

gcloud

gcloud dns managed-zones list

Python

def list_zones(project_id):
    client = dns.Client(project=project_id)
    zones = client.list_zones()
    return [zone.name for zone in zones]

マネージド ゾーンの詳細の取得

マネージド ゾーンに関する詳細情報(関連付けられているネームサーバーを検索する必要があるかなどの情報)を取得する方法は、次のとおりです。

gcloud

gcloud dns managed-zones describe "myzonename"

Python

def get_zone(project_id, name):
    client = dns.Client(project=project_id)
    zone = client.zone(name=name)

    try:
        zone.reload()
        return zone
    except NotFound:
        return None

マネージド ゾーンの削除

ゾーンを削除するには、delete コマンドにゾーン名を指定します。

gcloud

gcloud dns managed-zones delete "myzonename"

削除できるのは、空のゾーンのみです。空のマネージド ゾーンには、SOA と NS のレコードセットしかありません。次のように import コマンドを使用すると、簡単にゾーンを空にできます。

touch empty-file
gcloud dns record-sets import -z "myzonename" --delete-all-existing empty-file
rm empty-file

Python

def delete_zone(project_id, name):
    client = dns.Client(project=project_id)
    zone = client.zone(name)
    zone.delete()

DNS サーバー ポリシーの使用

DNS サーバー ポリシーは、ゾーンをホストするネームサーバーの動作を制御する Cloud DNS ルールのコレクションです。DNS サーバー ポリシーを使用すると、次のことができます。

  • 指定されたネットワークからの DNS クエリをすべて処理する代替ネームサーバーを指定する
  • DNS クエリの受信転送の受け入れを有効または無効にする

DNS サーバー ポリシーは 1 つ以上の GCP ネットワークに適用できます。

概要については、DNS サーバー ポリシーをご覧ください。

受信 DNS 転送を有効にする DNS ポリシーを作成する

このポリシーは、プロジェクトの default ネットワークで受信 DNS 転送を有効にします。

gcloud beta dns policies create my-policy --project=myproject \
    --description="Inbound DNS forwarding for default network" \
    --enable-inbound-forwarding \
    --networks=default

受信フォワーダの IP アドレスを一覧表示する

gcloud compute addresses list --filter='name ~ ^dns-forwarding.*' \
    --format='csv[no-heading](address, subnetwork)'

代替ネームサーバーを有効にする DNS ポリシーを作成する

このポリシーは、プロジェクト内の default ネットワークの代替ネームサーバーを有効にします。

gcloud beta dns policies create alt-dns-policy --project=myproject \
    --description="Alternative nameservers for default network" \
    --networks=default \
    --alternative-name-servers="8.8.8.8,8.8.4.4"

DNS ポリシーを一覧表示する

gcloud beta --project=my-project dns policies list

DNS ポリシーを削除する

gcloud beta --project=my-project dns policies delete example-policy

DNS ポリシーを更新する

gcloud beta --project=myproject dns policies update --networks="default, somenewnetwork"

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud DNS のドキュメント