フォールト トレラントな Microsoft Active Directory 環境のデプロイ

このチュートリアルは、Microsoft Active Directory、SQL Server、Internet Information Services(IIS)を使用して高可用性の Windows アーキテクチャを Google Cloud にデプロイする方法を説明するシリーズの第 1 部です。このチュートリアルでは、新しい Virtual Private Cloud(VPC)ネットワークと複数のサブネットを使用して、Active Directory と Windows ドメイン コントローラの冗長ペアを設定します。

このシリーズは次のチュートリアルで構成されています。

各チュートリアルは、前のチュートリアルで作成したインフラストラクチャに基づいています。

このチュートリアルでは、他のアーキテクチャで使用する Active Directory の構成方法についても説明します。このガイドでは、リモートの Active Directory 環境を新しい Google Cloud ベースの Active Directory 環境に複製する方法については説明しませんが、Cloud VPN と追加の Active Directory 構成を使用して複製を行うことができます。

アーキテクチャ

Google Cloud でのフォールト トレラントな Active Directory アーキテクチャ。

目標

  • 2 つのゾーンにまたがる 2 つのサブネットがあるカスタムモードの VPC ネットワークを作成する。
  • Windows Server 仮想インスタンスを作成し、Active Directory ドメイン サービスを有効にする。
  • Active Directory を使用して新しいドメインを構成する。
  • 新しい Windows Server インスタンスを新しいドメインに参加させる。
  • 仮想マシンへのトラフィックを許可するようにファイアウォール ルールを構成する。
  • 構成をテストする。

費用

このチュートリアルでは、Google Cloud の課金対象となる以下のコンポーネントを使用します。

料金計算ツールの見積もりでは、この環境の費用は 1 日あたり約 $4 です。

始める前に

  1. Cloud Console のプロジェクト セレクタページで、Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタのページに移動

  2. Google Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

  3. Compute Engine API を有効にします。

    API を有効にする

共通変数の初期化

インフラストラクチャの要素がデプロイされる場所を制御する環境変数をいくつか定義する必要があります。

  1. Cloud Shell に移動します。

    Cloud Shell を開く

  2. Cloud Shell で次の環境変数を作成して、チュートリアルの以降の部分で必要となる値を設定します。

    下のコマンドは、リージョンを us-east-1 に設定します。別のリージョンを使用できますが、同じリージョンを以降のチュートリアルでも使用するので、設定したリージョンを覚えておいてください。

    export region=us-east1
    export zone_1=${region}-b
    export zone_2=${region}-c
    export vpc_name=webappnet
    export project_id=your-project-id
    

    your-project-id は、使用している Google Cloud プロジェクトの ID に置き換えます。

  3. 次のコマンドを実行して、デフォルトのリージョンとプロジェクト ID を設定します。これにより、以降の各コマンドでこれらの値を指定する必要がなくなります。

    gcloud config set compute/region ${region}
    gcloud config set project ${project_id}
    

ネットワーク インフラストラクチャの作成

インフラストラクチャ変数を定義したら、Active Directory が使用するネットワークとサブネットを作成します。

  1. Cloud Shell で、次のコマンドを実行して VPC ネットワークを作成します。

    gcloud compute networks create ${vpc_name}  \
        --description "VPC network to deploy Active Directory" \
        --subnet-mode custom
    

    これらのファイアウォール ルールは後の手順で作成するため、次のような警告が表示されますが、無視してかまいません。

    Instances on this network will not be reachable until firewall rules
    are created.
    
  2. 2 つのサブネットを VPC ネットワークに追加します。

    gcloud compute networks subnets create private-ad-zone-1 \
        --network ${vpc_name} \
        --range 10.1.0.0/24
    
    gcloud compute networks subnets create private-ad-zone-2 \
        --network ${vpc_name} \
        --range 10.2.0.0/24
    
  3. サブネット間のトラフィックを許可する内部ファイアウォール ルールを作成します。

    gcloud compute firewall-rules create allow-internal-ports-private-ad \
        --network ${vpc_name} \
        --allow tcp:1-65535,udp:1-65535,icmp \
        --source-ranges  10.1.0.0/24,10.2.0.0/24
    
  4. あらゆる場所からポート 3389 経由での RDP 接続を許可するファイアウォール ルールを作成します。

    gcloud compute firewall-rules create allow-rdp \
        --network ${vpc_name} \
        --allow tcp:3389 \
        --source-ranges 0.0.0.0/0
    

1 番目のドメイン コントローラの作成

次に、以下のプロパティでドメイン コントローラを作成します。

  • 名前: ad-dc1
  • IP アドレス: 10.1.0.100
  1. 最初のドメイン コントローラとして使用する Windows Server 2016 の Compute Engine インスタンスを作成します。

    gcloud compute instances create ad-dc1 --machine-type n1-standard-2 \
        --boot-disk-type pd-ssd \
        --boot-disk-size 50GB \
        --image-family windows-2016 --image-project windows-cloud \
        --network ${vpc_name} \
        --zone ${zone_1} --subnet private-ad-zone-1 \
        --private-network-ip=10.1.0.100
    
  2. 1 分ほど待ってから、Windows インスタンス ad-dc1 のパスワードを作成します。

    gcloud compute reset-windows-password ad-dc1 --zone ${zone_1} --quiet
    

    ユーザー名は Google アカウントのユーザー名です。今後の使用のためにユーザー名とパスワードを記録しておきます。

  3. RDP を使用して、前のステップで作成した認証情報でドメイン コントローラ インスタンスに接続します。

  4. Administrator として PowerShell ターミナルを開きます([スタート] をクリックし、「PowerShell」と入力して Shift+Ctrl+Enter キーを押します)。

  5. Administrator アカウントの Windows 認証情報を設定します。

    net user Administrator *
    

    パスワードを作成するよう求められます。強力なパスワードを使用し、今後使用するためにパスワードを安全な場所に保管してください。

    Administrator アカウントは、Active Director フォレストの作成後にドメイン管理者アカウントになります。

  6. アカウントを有効にします。

    net user Administrator /active:yes
    
  7. Active Directory ドメイン サービス(管理ツールを含む)をインストールします。

    Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools
    
  8. 以下の変数を設定します。

    $DomainName = "example-gcp.com"
    $DomainMode = "7"
    $ForestMode = "7"
    $DatabasePath = "C:\Windows\NTDS"
    $SysvolPath = "C:\Windows\SYSVOL"
    $LogPath = "C:\Logs"
    
  9. 新しい Active Directory フォレスト構成を Windows Server 2016 モードでインストールします。

    Install-ADDSForest -CreateDnsDelegation:$false `
        -DatabasePath $DatabasePath `
        -LogPath $LogPath `
        -SysvolPath $SysvolPath `
        -DomainName $DomainName `
        -DomainMode $DomainMode `
        -ForestMode $ForestMode `
        -InstallDNS:$true `
        -NoRebootOnCompletion:$true `
        -Force:$true
    
  10. プロンプトが表示されたら、セーフモード Administrator パスワードを入力します。パスワードは、将来使用できるように安全な場所に保管してください。

  11. 次の警告を無視して作業を続けます。それぞれの警告が 2 回(前提条件の確認中とインストール プロセスの実行中に)表示されます。

    WARNING: Windows Server 2016 domain controllers have a default for the
    security setting named Allow cryptography algorithms compatible with
    Windows NT 4.0 that prevents weaker cryptography algorithms when
    establishing security channel sessions.
    For more information about this setting, see Knowledge Base article 942564 (http://go.microsoft.com/fwlink/?LinkId=104751).
    WARNING: This computer has at least one physical network adapter that does
    not have static IP address(es) assigned to its IP Properties. If both IPv4
    and IPv6 are enabled for a network adapter, both IPv4 and IPv6 static IP
    addresses should be assigned to both IPv4 and IPv6 Properties of the
    physical network adapter. Such static IP address(es) assignment should be
    done to all the physical network adapters for reliable Domain Name
    System (DNS) operation.
    
    WARNING: A delegation for this DNS server cannot be created because the
    authoritative parent zone cannot be found or it does not run Windows DNS
    server. If you are integrating with an existing DNS infrastructure, you
    should manually create a delegation to this DNS server in the parent zone
    to ensure reliable name resolution from outside the domain "example-gcp.com".
    Otherwise, no action is required.
    
  12. 仮想マシンを再起動します。

    Restart-Computer
    
  13. RDP を使用し、Active Directory フォレストのインストール時に定義した Administrator の認証情報を使ってドメイン コントローラ ad-dc1 に接続します。EXAMPLE-GCP\Administrator のように、ドメイン名をプレフィックスとして追加します。

  14. Administrator として PowerShell ターミナルを開きます。

  15. 以下の変数を設定します。

    $DNSPrimary = "10.2.0.100"
    $DNSSecondary = "127.0.0.1"
    $LocalStaticIp = "10.1.0.100"
    $DefaultGateway = "10.1.0.1"
    
  16. IP アドレスとデフォルト ゲートウェイを設定します。

    netsh interface ip set address name=Ethernet static `
        $LocalStaticIp 255.255.255.0 $DefaultGateway 1
    
  17. プライマリ DNS サーバーを構成します。

    netsh interface ip set dns Ethernet static $DNSPrimary
    

    DNS サーバー ad-dc2 は、2 番目のドメイン コントローラのデプロイ後に使用可能になるため、次のエラー メッセージは無視します。

    The configured DNS server is incorrect or does not exist.
  18. セカンダリ DNS サーバーを構成します。

    netsh interface ip add dns Ethernet $DNSSecondary index=2
    

    このドメイン コントローラ(ad-dc1)の DNS サーバー エントリが、リストの 2 番目に位置する必要があります。これは、Active Directory ともう一方のコントローラの間の接続が頻繁に失われることを防止するためです。2 番目のドメイン コントローラ ad-dc2 をプライマリ DNS サーバーとして使用します。次のセクションで ad-dc2 ドメイン コントローラを作成します。このパターンに従わないと、[サーバー マネージャー] > [Active Directory ドメイン サービス] の下に次のエラーが表示されます。

    The DFS Replication service failed to update configuration in Active
    Directory Domain Services. The service will retry this operation
    periodically.
    

    両方のサーバーの構成がすべて完了する前に、ad-dc1 サーバーでエラーが表示されることがあります。これらのエラーは無視します。

2 番目のドメイン コントローラの作成

次に、別のゾーンに 2 つ目のドメイン コントローラを作成して、フォールト トレランスを提供します。2 番目のドメイン コントローラのプロパティは次のとおりです。

  • 名前: ad-dc2
  • IP アドレス: 10.2.0.100
  1. Cloud Shell ウィンドウの有効期限が切れたら、新しい Cloud Shell インスタンスを開き、以前に設定した変数を再設定します。これを行うには、次のスクリプトを編集して、前に使用したプロジェクト ID とリージョンを指定します。

    region=us-east1
    zone_2=${region}-c
    zone_1=${region}-b
    vpc_name=webappnet
    project_id=your-project-id
    
    gcloud config set compute/region ${region}
    gcloud config set project ${project_id}
    

    your-project-id は、使用している Cloud プロジェクトの ID に置き換えます。

  2. スクリプトを Cloud Shell ウィンドウにコピーして実行します。

  3. Cloud Shell を使用して、2 番目のドメイン コントローラ インスタンスを作成します。

    gcloud compute instances create ad-dc2 --machine-type n1-standard-2 \
        --boot-disk-size 50GB \
        --boot-disk-type pd-ssd \
        --image-family windows-2016 --image-project windows-cloud \
        --can-ip-forward \
        --network ${vpc_name} \
        --zone ${zone_2} \
        --subnet private-ad-zone-2 \
        --private-network-ip=10.2.0.100
    
  4. 1 分ほど待ってから、Windows インスタンス ad-dc2 のパスワードを作成します。

    gcloud compute reset-windows-password ad-dc2 --zone ${zone_2} --quiet
    

    ユーザー名は Google アカウントのユーザー名です。今後の使用のためにユーザー名とパスワードを記録しておきます。

  5. RDP を使用して、前のステップで作成した認証情報でドメイン コントローラ インスタンスに接続します。

  6. Administrator として PowerShell ターミナルを開きます。

  7. Active Directory ドメイン サービス(管理ツールを含む)をインストールします。

    Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools
    
  8. 以下の変数を設定します。

    $DomainName = "example-gcp.com"
    $DomainPrefix = "EXAMPLE-GCP"
    $DNSPrimary = "10.1.0.100"
    $DNSSecondary = "127.0.0.1"
    $LocalStaticIp = "10.2.0.100"
    $DefaultGateway = "10.2.0.1"
    $DatabasePath = "C:\Windows\NTDS"
    $SysvolPath = "C:\Windows\SYSVOL"
    $LogPath = "C:\Logs"
    
  9. プライマリ DNS サーバーを構成します。

    netsh interface ip set dns Ethernet static $DNSPrimary
    
  10. 2 番目のサーバーが自身のセカンダリ DNS サーバーとして機能するように構成します。

    netsh interface ip add dns Ethernet $DNSSecondary index=2
    

    ad-dc2 DNS サーバーは、ad-dc2 がドメイン コントローラとしてドメインに参加した後で初めて使用できるようになります。サーバーがまだ参加していないため、次のメッセージが表示されますが、これは無視できます。

    The configured DNS server is incorrect or does not exist.
  11. IP アドレスとデフォルト ゲートウェイを設定します。

    netsh interface ip set address name=Ethernet static `
        $LocalStaticIp 255.255.255.0 $DefaultGateway 1
    
  12. 次の PowerShell スクリプトを実行します。このスクリプトは、1 番目のドメイン コントローラが動作可能になったことを通知します。Domain controller is reachable メッセージが表示されるまで待ちます。

    $DomainIsReady=$False
    For ($i=0; $i -le 30; $i++) {
        nltest /dsgetdc:$DomainName
        if($LASTEXITCODE -ne 0) {
            Write-Host "Domain not ready, wait 1 more minute, then retry"
            Start-Sleep -s 60
        }
        else {
            $DomainIsReady=$True
            Write-Host "Domain controller is reachable"
            break
        }
    }
    if($DomainIsReady -eq $False) {
        Write-Host "Domain not ready. Check if it was deployed ok"
    }
    
  13. 仮想マシンを 2 番目のドメイン コントローラとしてフォレストに追加します。

    Install-ADDSDomainController `
        -Credential (Get-Credential "$DomainPrefix\Administrator") `
        -CreateDnsDelegation:$false `
        -DatabasePath $DatabasePath `
        -DomainName $DomainName `
        -InstallDns:$true `
        -LogPath $LogPath `
        -SysvolPath $SysvolPath `
        -NoGlobalCatalog:$false `
        -SiteName 'Default-First-Site-Name' `
        -NoRebootOnCompletion:$true `
        -Force:$true
    
  14. Administrator アカウントのパスワードを指定するように求められたら、Active Directory フォレストのインストール時に定義した Administrator の認証情報を使用します。EXAMPLE-GCP\Administrator のようにドメイン名をプレフィックスとして追加します。

  15. セーフモード Administrator アカウントのパスワードを指定するように求められたら、1 番目のドメイン コントローラに使用したものと同じパスワードを使用します。

  16. 次の警告を無視します。それぞれの警告が 2 回(前提条件の確認中とインストール プロセスの実行中に)表示されます。

    WARNING: Windows Server 2016 domain controllers have a default for the
    security setting named "Allow cryptography algorithms compatible with
    Windows NT 4.0" that prevents weaker cryptography algorithms when
    establishing security channel sessions.
    For more information about this setting, see Knowledge Base article 942564 (http://go.microsoft.com/fwlink/?LinkId=104751).
    WARNING: A delegation for this DNS server cannot be created because the
    authoritative parent zone cannot be found or it does not run Windows DNS
    server. If you are integrating with an existing DNS infrastructure, you
    should manually create a delegation to this DNS server in the parent zone
    to ensure reliable name resolution from outside the domain
    "example-gcp.com". Otherwise, no action is required.
    
  17. 仮想マシンを再起動します。

    Restart-Computer
    

インストールのテスト

  1. 5~10 分待って、両方のドメイン コントローラが動作し、情報を複製していることを確認します。

  2. RDP を使用して、1 番目のドメイン コントローラのインストール中に定義した管理者の認証情報を使用して、1 番目のドメイン コントローラ インスタンスに接続します。EXAMPLE-GCP\Administrator のようにドメイン名をプレフィックスとして追加します。

  3. Administrator として PowerShell ターミナルを開きます。

  4. 複製が機能していることをテストします。

    repadmin /replsum
    

    エラーや失敗がない場合は次のような出力が表示されます。

    複製のテスト結果(失敗なしを示す)

    ドメイン コントローラが使用できない場合は、次のようなメッセージが表示されます。

    Beginning data collection for replication summary, this may take awhile:
    .... Source DSA largest delta fails/total %% error
    Destination DSA largest delta fails/total %% error

    このメッセージが表示された場合は、数分待ってからコマンドを再試行してください。

クリーンアップ

このシリーズの次のチュートリアル(マルチ サブネット SQL Server のデプロイ)に進む場合は、このチュートリアルで作成したリソースをそのまま使用してください。ただし、このチュートリアルで作成した Active Directory 環境を使用しない場合は、Google Cloud で作成したリソースをクリーンアップして料金が発生しないようにします。以下のセクションでは、このようなリソースを削除または無効にする方法を説明します。

プロジェクトの削除

課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。

プロジェクトを削除するには:

  1. Cloud Console で [リソースの管理] ページに移動します。

    [リソースの管理] ページに移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

インスタンスの削除

Compute Engine インスタンスを削除するには:

  1. Cloud Console で、[VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. 削除するインスタンスをクリックします。
  3. [削除] をクリックしてインスタンスを削除します。

VPC ネットワークの削除

VPC ネットワーク、サブネット、ファイアウォール ルールを削除するには:

  1. Cloud Console で、[VPC ネットワーク] ページに移動します。

    [VPC ネットワーク] ページに移動

  2. 作成した VPC ネットワークを選択します。

  3. ページ上部にある [削除] ボタンをクリックします。

次のステップ