ドメインコントローラーとタイムゾーンが異なる場合もドメインに参加できるか確認してみた

NTPによる時刻同期はタイムゾーンの影響を受けない
2022.11.04

AWS上のリソースのタイムゾーンは大体UTCだけど大丈夫かな

こんにちは、のんピ(@non____97)です。

皆さんは「Active Directory のドメインコントローラー(以降AD DC)とタイムゾーンが異なる場合にドメインに参加できるか」気になったことはありますか? 私はあります。

EC2インスタンスやAmazon FSx for NetApp ONTAP(以降FSx for ONTAP)などのマネージドサービスのタイムゾーンは特に設定しなければUTCです。

AD環境はオンプレミス上にあるものをそのまま使うケースが多いと思います。そして、オンプレミス上にあるサーバーのタイムゾーンはAsia/Tokyoにしていることが多いのではないでしょうか

Active Directory(以降AD DC)ではユーザー認証にKerberos認証を使用しています。

Active Directory Domain ServicesとWindowsは、サービス プリンシパル名 (SPN) のサポートを提供します。これは、クライアントがサービスを認証する Kerberos メカニズムの主要なコンポーネントです。

Kerberos を使用した相互認証 - Win32 apps | Microsoft Learn

 

Microsoft Windows Server オペレーティング システムには、公開キー認証に対応した Kerberos Version 5 認証プロトコルと拡張機能が実装されています。

Windows 認証の概要 | Microsoft Learn

そして、Kerberos認証がAD DCと参加したいコンピュータとの時刻の差の最大許容値のデフォルトは5分です。また、ベストプラクティスも5分となっています。

ベスト プラクティス

  • コンピューターのクロック同期の最大許容値を 5 分の値に設定することをお勧めします。

コンピューターのクロック同期の最大許容値 (Windows 10) - Windows security | Microsoft Learn

タイムゾーンが異なれば、ローカルタイムが5分以上時刻がズレるのは必至です。

ということで、AD DCと参加したいコンピュータのタイムゾーンが異なる場合でもドメイン参加できるか確認してみました。

いきなりまとめ

  • AD DCとドメインに参加するコンピューターのタイムゾーンが異なる場合もドメインに参加できる
  • Windowsは正確な実装ではないが、NTPの使用で定義されているアルゴリズムで時刻同期をする
  • NTPは時刻同期する際にUTCを使用しており、タイムゾーンの設定の影響を受けない

ドキュメントから時刻同期の仕組みを確認

まずはドキュメントからWindowsの時刻同期の仕組みを確認してみましょう

すると、以下のような文言を見つけました。

Windows タイム サービスは、ネットワーク タイム プロトコル (NTP) の正確な実装ではありませんが、ネットワーク全体のコンピューターのクロックが可能な限り正確であることを確認する NTP 仕様で定義されているアルゴリズムの複雑なスイートを使用します。

. . (中略) . .

AD DS フォレストでは、あらかじめ決められた時間同期階層を持ちます。 Windows タイム サービスは、上部にある最も正確な参照時計と、階層内のコンピューター間の時間を同期します。 1 つ以上のタイム ソースがコンピューターで構成されている場合、Windows タイムはそのタイム ソースと同期するコンピューターの機能に基づいて構成されたソースから最適なタイム ソースを選択する NTP アルゴリズムを使用します。 Windows タイム サービスは、ネットワークのブロードキャストまたはマルチキャストのピアからの同期をサポートしていません。 これらの NTP 機能に関する詳細については、IETF RFC データベースでの RFC 1305 を参照してください。

. . (中略) . .

ネットワーク タイム プロトコル

ネットワーク タイム プロトコル (NTP) は、既定のオペレーティング システムで Windows タイム サービスによって使用される同期プロトコルの時間します。 NTP はフォールト トレラントで拡張性の高いタイム プロトコルで、指定された時刻に参照を使用してコンピューターのクロックを同期するために最もよく使用されるプロトコルです。

NTP 時刻の同期では、時間の期間にわたってが行われ、ネットワーク経由で NTP パケットの転送は、です。 NTP のパケットには、時刻の同期に、クライアントと参加しているサーバーの両方からタイム サンプルが含まれるタイムスタンプが含まれています。

NTP では、使用する最も正確な時間を定義する参照クロックに基づいてし、その参照の時計をネットワーク上のすべてのクロックを同期します。 NTP は、普遍的な基準として、現在の時刻を世界協定時刻 (UTC) を使用します。 UTC はタイム ゾーンから独立しており、タイム ゾーンの設定に関係なく、世界中どこでも使用する NTP を使用します。

Windows タイム サービスのしくみ | Microsoft Learn

正確な実装ではないようですが、NTPで時刻同期をしているようです。NTPは時刻同期する際にUTCを使用しており、タイムゾーンの設定は関係ないことも明記されていますね。

また、システムはローカルタイムではなく、UTCを使用していることもMicrosoft公式ドキュメントに記載がありました。

システムは内部的に UTC ベースの時刻を使用しますが、通常、アプリケーションには ローカル時刻 (タイム ゾーンの日付と時刻) が表示されます。 したがって、正しい結果を得るには、関数が UTC ベースの時刻または現地時間を受け取る必要があるかどうか、および関数が UTC ベースの時刻またはローカル時刻を返すかどうかを認識する必要があります。

ローカル時刻 - Win32 apps | Microsoft Learn

以上のことから、AD DCと参加したいコンピュータのタイムゾーンが異なる場合でもドメイン参加できそうですね。

試してみる

検証環境

検証環境は以下の通りです。

NTPの検証環境構成図

AD DCとタイムゾーンが異なるEC2インスタンスと、FSx for ONTAPを用意してそれぞれドメイン参加できるか確認します。

EC2インスタンスのドメイン参加

それでは、タイムゾーンが異なるWindows ServerのEC2インスタンスをドメインに参加させてみます。

AD DCのタイムゾーンはUTCになっています。

> tzutil /g
UTC

また、AD DCの時刻同期の設定も確認します。

# 時刻同期の状態確認
> w32tm /query /status
Leap Indicator: 0(no warning)
Stratum: 4 (secondary reference - syncd by (S)NTP)
Precision: -23 (119.209ns per tick)
Root Delay: 0.0564918s
Root Dispersion: 0.9390326s
ReferenceId: 0xA83DD74A (source IP:  168.61.215.74)
Last Successful Sync Time: 11/4/2022 12:20:31 AM
Source: time.windows.com,0x8
Poll Interval: 7 (128s)

# 時刻同期の設定確認
> w32tm /query /configuration
[Configuration]

EventLogFlags: 2 (Local)
AnnounceFlags: 10 (Local)
TimeJumpAuditOffset: 28800 (Local)
MinPollInterval: 6 (Local)
MaxPollInterval: 10 (Local)
MaxNegPhaseCorrection: 172800 (Local)
MaxPosPhaseCorrection: 172800 (Local)
MaxAllowedPhaseOffset: 300 (Local)

FrequencyCorrectRate: 4 (Local)
PollAdjustFactor: 5 (Local)
LargePhaseOffset: 50000000 (Local)
SpikeWatchPeriod: 900 (Local)
LocalClockDispersion: 10 (Local)
HoldPeriod: 5 (Local)
PhaseCorrectRate: 7 (Local)
UpdateInterval: 100 (Local)


[TimeProviders]

NtpClient (Local)
DllName: C:\Windows\system32\w32time.dll (Local)
Enabled: 1 (Local)
InputProvider: 1 (Local)
CrossSiteSyncFlags: 2 (Local)
AllowNonstandardModeCombinations: 1 (Local)
ResolvePeerBackoffMinutes: 15 (Local)
ResolvePeerBackoffMaxTimes: 7 (Local)
CompatibilityFlags: 2147483648 (Local)
EventLogFlags: 1 (Local)
LargeSampleSkew: 3 (Local)
SpecialPollInterval: 1024 (Local)
Type: AllSync (Local)
NtpServer: 169.254.169.123,0x9 time.windows.com,0x8 (Local)

NtpServer (Local)
DllName: C:\Windows\system32\w32time.dll (Local)
Enabled: 1 (Local)
InputProvider: 0 (Local)
AllowNonstandardModeCombinations: 1 (Local)

VMICTimeProvider (Local)
DllName: C:\Windows\System32\vmictimeprovider.dll (Local)
Enabled: 1 (Local)
InputProvider: 1 (Local)

# 時刻同期先との同期状態確認
> w32tm /query /peers
#Peers: 3

Peer: time.windows.com,0x8
State: Active
Time Remaining: 14.2024429s
Mode: 3 (Client)
Stratum: 3 (secondary reference - syncd by (S)NTP)
PeerPoll Interval: 6 (64s)
HostPoll Interval: 6 (64s)

Peer:
State: Pending
Time Remaining: 785.9387454s
Mode: 0 (reserved)
Stratum: 0 (unspecified)
PeerPoll Interval: 0 (unspecified)
HostPoll Interval: 0 (unspecified)

Peer: 169.254.169.123,0x9
State: Pending
Time Remaining: 898.6229488s
Mode: 0 (reserved)
Stratum: 0 (unspecified)
PeerPoll Interval: 0 (unspecified)
HostPoll Interval: 0 (unspecified)

AllSyncでAmazon Time Sync Serviceとtime.windows.comに時刻同期するようになっており、現在はtime.windows.comと時刻同期していますね。

同様にドメインに参加するEC2インスタンスのタイムゾーンと時刻同期設定を確認します。

# タイムゾーン確認
> tzutil /g
UTC

# 時刻同期の状態確認
> w32tm /query /status
Leap Indicator: 0(no warning)
Stratum: 4 (secondary reference - syncd by (S)NTP)
Precision: -23 (119.209ns per tick)
Root Delay: 0.0006558s
Root Dispersion: 3.7744759s
ReferenceId: 0xA9FEA97B (source IP:  169.254.169.123)
Last Successful Sync Time: 11/4/2022 12:21:29 AM
Source: 169.254.169.123,0x9
Poll Interval: 9 (512s)

# 時刻同期の設定確認
> w32tm /query /configuration
[Configuration]

EventLogFlags: 2 (Local)
AnnounceFlags: 10 (Local)
TimeJumpAuditOffset: 28800 (Local)
MinPollInterval: 9 (Local)
MaxPollInterval: 11 (Local)
MaxNegPhaseCorrection: 54000 (Local)
MaxPosPhaseCorrection: 54000 (Local)
MaxAllowedPhaseOffset: 1 (Local)

FrequencyCorrectRate: 4 (Local)
PollAdjustFactor: 5 (Local)
LargePhaseOffset: 50000000 (Local)
SpikeWatchPeriod: 900 (Local)
LocalClockDispersion: 10 (Local)
HoldPeriod: 5 (Local)
PhaseCorrectRate: 1 (Local)
UpdateInterval: 120 (Local)


[TimeProviders]

NtpClient (Local)
DllName: C:\Windows\system32\w32time.dll (Local)
Enabled: 1 (Local)
InputProvider: 1 (Local)
AllowNonstandardModeCombinations: 1 (Local)
ResolvePeerBackoffMinutes: 15 (Local)
ResolvePeerBackoffMaxTimes: 7 (Local)
CompatibilityFlags: 2147483648 (Local)
EventLogFlags: 1 (Local)
LargeSampleSkew: 3 (Local)
SpecialPollInterval: 900 (Local)
Type: NTP (Local)
NtpServer: 169.254.169.123,0x9 (Local)

VMICTimeProvider (Local)
DllName: C:\Windows\System32\vmictimeprovider.dll (Local)
Enabled: 1 (Local)
InputProvider: 1 (Local)

NtpServer (Local)
DllName: C:\Windows\system32\w32time.dll (Local)
Enabled: 0 (Local)
InputProvider: 0 (Local)

タイムゾーンはUTCでAmazon Time Sync Serviceと時刻同期するようになっていますね。

それでは、タイムゾーンを変更して、ドメイン参加してみます。

まず、タイムゾーンを日本標準時に変更します。

# タイムゾーンを日本標準時に変更
> tzutil /s "Tokyo Standard Time"

# タイムゾーンが変更されたことを確認
> tzutil /g
Tokyo Standard Time

> Get-TimeZone


Id                         : Tokyo Standard Time
DisplayName                : (UTC+09:00) Osaka, Sapporo, Tokyo
StandardName               : Tokyo Standard Time
DaylightName               : Tokyo Daylight Time
BaseUtcOffset              : 09:00:00
SupportsDaylightSavingTime : False

次に、ドメイン参加するために参照先のDNSサーバーとして、AD DCのIPアドレスを指定します。

# 現在のDNSサーバーのIPアドレスを確認
> Get-DnsClientServerAddress

InterfaceAlias               Interface Address ServerAddresses
                             Index     Family
--------------               --------- ------- ---------------
Ethernet                             7 IPv4    {10.0.1.2}
Ethernet                             7 IPv6    {}
Loopback Pseudo-Interface 1          1 IPv4    {}
Loopback Pseudo-Interface 1          1 IPv6    {fec0:0:0:ffff::1, fec0:0:0:ffff::2, fec0:0:0:ffff::3}

# 参照先のDNSサーバーとして、AD DCのIPアドレスを指定
> Set-DnsClientServerAddress -InterfaceIndex 7 -ServerAddresses ("10.0.1.10")

# 参照先のDNSサーバーのIPアドレスが変更されたことを確認
> Get-DnsClientServerAddress

InterfaceAlias               Interface Address ServerAddresses
                             Index     Family
--------------               --------- ------- ---------------
Ethernet                             7 IPv4    {10.0.1.10}
Ethernet                             7 IPv6    {}
Loopback Pseudo-Interface 1          1 IPv4    {}
Loopback Pseudo-Interface 1          1 IPv6    {fec0:0:0:ffff::1, fec0:0:0:ffff::2, fec0:0:0:ffff::3}

続いて、DNSサフィックスを修正します。

デフォルトでは、ec2.internalus-east-1.ec2-utilities.amazonaws.comが指定されており、corp.non-97.netの名前解決をしようとすると2回タイムアウトします。

# DNSサフィックスの確認
> ipconfig /all

Windows IP Configuration

   Host Name . . . . . . . . . . . . : EC2AMAZ-1484DCE
   Primary Dns Suffix  . . . . . . . :
   Node Type . . . . . . . . . . . . : Hybrid
   IP Routing Enabled. . . . . . . . : No
   WINS Proxy Enabled. . . . . . . . : No
   DNS Suffix Search List. . . . . . : us-east-1.ec2-utilities.amazonaws.com
                                       ec2.internal

Ethernet adapter Ethernet:

   Connection-specific DNS Suffix  . : ec2.internal
   Description . . . . . . . . . . . : Amazon Elastic Network Adapter
   Physical Address. . . . . . . . . : 0E-45-B9-A0-88-D3
   DHCP Enabled. . . . . . . . . . . : Yes
   Autoconfiguration Enabled . . . . : Yes
   Link-local IPv6 Address . . . . . : fe80::b8de:ed67:b206:d72d%7(Preferred)
   IPv4 Address. . . . . . . . . . . : 10.0.1.27(Preferred)
   Subnet Mask . . . . . . . . . . . : 255.255.255.192
   Lease Obtained. . . . . . . . . . : Friday, November 4, 2022 9:06:14 AM
   Lease Expires . . . . . . . . . . : Friday, November 4, 2022 10:36:13 AM
   Default Gateway . . . . . . . . . : 10.0.1.1
   DHCP Server . . . . . . . . . . . : 10.0.1.1
   DHCPv6 IAID . . . . . . . . . . . : 118145671
   DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-2A-F6-0F-CE-0E-45-B9-A0-88-D3
   DNS Servers . . . . . . . . . . . : 10.0.1.10
   NetBIOS over Tcpip. . . . . . . . : Enabled

# corp.non-97.net のゾーンの名前解決
> nslookup a.corp.non-97.net
Server:  ip-10-0-1-10.ec2.internal
Address:  10.0.1.10

DNS request timed out.
    timeout was 2 seconds.
DNS request timed out.
    timeout was 2 seconds.
Name:    a.corp.non-97.net
Address:  10.2.2.2

DNSサフィックスを修正して、名前解決の際にタイムアウトしないように設定します。

# 現在の Connection-specific DNS Suffix の確認
> Get-DnsClient

InterfaceAlias               Interface ConnectionSpecificSuffix ConnectionSpecificSuffix RegisterThisConn UseSuffixWhen
                             Index                              SearchList               ectionsAddress   Registering
--------------               --------- ------------------------ ------------------------ ---------------- -------------
Ethernet                             7 ec2.internal             {}                       True             False
Loopback Pseudo-Interface 1          1                          {}                       True             False

# Connection-specific DNS Suffix を corp.non-97,net に変更
> Set-DnsClient "Ethernet" -ConnectionSpecificSuffix "corp.non-97.net"

# 変更されたことを確認
> Get-DnsClient

InterfaceAlias               Interface ConnectionSpecificSuffix ConnectionSpecificSuffix RegisterThisConn UseSuffixWhen
                             Index                              SearchList               ectionsAddress   Registering
--------------               --------- ------------------------ ------------------------ ---------------- -------------
Ethernet                             7 corp.non-97.net          {}                       True             False
Loopback Pseudo-Interface 1          1                          {}                       True             False

# 現在の DNS Suffix Search List の確認
> Get-DnsClientGlobalSetting


UseSuffixSearchList : True
SuffixSearchList    : {us-east-1.ec2-utilities.amazonaws.com, ec2.internal}
UseDevolution       : True
DevolutionLevel     : 0



# DNS Suffix Search List を corp.non-97,net に変更
> Set-DnsClientGlobalSetting -SuffixSearchList @("corp.non-97.net")

# 変更されたことを確認
> Get-DnsClientGlobalSetting


UseSuffixSearchList : True
SuffixSearchList    : {corp.non-97.net}
UseDevolution       : True
DevolutionLevel     : 0


# 名前解決の際にタイムアウトしないことを確認
> nslookup a.corp.non-97.net
Server:  ip-10-0-1-10.ec2.internal
Address:  10.0.1.10

Name:    a.corp.non-97.net
Address:  10.2.2.2

下準備ができたので、ドメイン参加させます。

> $password=ConvertTo-SecureString -AsPlainText -Force "<ADのAdministratorのパスワード>"
> $credential=New-Object System.Management.Automation.PSCredential("corp.non-97.net\Administrator",$password)

> Add-Computer -DomainName corp.non-97.net -Credential $credential -Restart -Force

再起動後、ドメインに参加できているか確認します。

> Get-WMIObject Win32_ComputerSystem


Domain              : corp.non-97.net
Manufacturer        : Amazon EC2
Model               : t3.micro
Name                : EC2AMAZ-1484DCE
PrimaryOwnerName    : EC2
TotalPhysicalMemory : 1043886080

ドメイン参加できましたね。タイムゾーンが異なっていてもドメインに参加できることを確認できました。

なお、タイムゾーンは日本標準時のままです。

> Get-TimeZone

Id                         : Tokyo Standard Time
DisplayName                : (UTC+09:00) Osaka, Sapporo, Tokyo
StandardName               : Tokyo Standard Time
DaylightName               : Tokyo Daylight Time
BaseUtcOffset              : 09:00:00
SupportsDaylightSavingTime : False

また、時刻同期のタイプはNTPからAllSyncに、時刻同期先はAmazon Time Sync Serviceのみからtime.windows.comが追加されました。

# 時刻同期の状態確認
> w32tm /query /status
Leap Indicator: 0(no warning)
Stratum: 4 (secondary reference - syncd by (S)NTP)
Precision: -23 (119.209ns per tick)
Root Delay: 0.0495899s
Root Dispersion: 1.8007270s
ReferenceId: 0xA83DD74A (source IP:  168.61.215.74)
Last Successful Sync Time: 11/4/2022 10:01:56 AM
Source: time.windows.com,0x8
Poll Interval: 6 (64s)

# 時刻同期の設定確認
> w32tm /query /configuration
[Configuration]

EventLogFlags: 2 (Local)
AnnounceFlags: 10 (Local)
TimeJumpAuditOffset: 28800 (Local)
MinPollInterval: 6 (Local)
MaxPollInterval: 10 (Local)
MaxNegPhaseCorrection: 4294967295 (Local)
MaxPosPhaseCorrection: 4294967295 (Local)
MaxAllowedPhaseOffset: 300 (Local)

FrequencyCorrectRate: 4 (Local)
PollAdjustFactor: 5 (Local)
LargePhaseOffset: 50000000 (Local)
SpikeWatchPeriod: 900 (Local)
LocalClockDispersion: 10 (Local)
HoldPeriod: 5 (Local)
PhaseCorrectRate: 1 (Local)
UpdateInterval: 100 (Local)


[TimeProviders]

NtpClient (Local)
DllName: C:\Windows\system32\w32time.dll (Local)
Enabled: 1 (Local)
InputProvider: 1 (Local)
CrossSiteSyncFlags: 2 (Local)
AllowNonstandardModeCombinations: 1 (Local)
ResolvePeerBackoffMinutes: 15 (Local)
ResolvePeerBackoffMaxTimes: 7 (Local)
CompatibilityFlags: 2147483648 (Local)
EventLogFlags: 1 (Local)
LargeSampleSkew: 3 (Local)
SpecialPollInterval: 1024 (Local)
Type: AllSync (Local)
NtpServer: 169.254.169.123,0x9 time.windows.com,0x8 (Local)

VMICTimeProvider (Local)
DllName: C:\Windows\System32\vmictimeprovider.dll (Local)
Enabled: 1 (Local)
InputProvider: 1 (Local)

NtpServer (Local)
DllName: C:\Windows\system32\w32time.dll (Local)
Enabled: 0 (Local)
InputProvider: 0 (Local)

FSx for ONTAPのCIFSサーバーのドメイン参加

次に、タイムゾーンが異なるFSx for ONTAPのCIFSサーバーをドメインに参加させてみます。

まず、デフォルトのタイムゾーンを確認してみます。

FsxId0985568f56d10b4a2::> timezone
    Timezone: Etc/UTC

FsxId0985568f56d10b4a2::> cluster date show
Node      Date                      Time zone
--------- ------------------------- -------------------------
FsxId0985568f56d10b4a2-01
          11/4/2022 01:20:15 +00:00 Etc/UTC
FsxId0985568f56d10b4a2-02
          11/4/2022 01:20:15 +00:00 Etc/UTC
2 entries were displayed.

FSx for ONTAPのクラスター及び、ノードに設定されているタイムゾーンはUTCでした。

時刻同期先も確認してみましょう。

FsxId0985568f56d10b4a2::> cluster time-service ntp server show
                                        Is
                                        Authentication
Server                         Version  Enabled        Key ID
------------------------------ -------  -------------- ------
169.254.169.123                auto     false          -

Amazon Time Sync Serviceと時刻同期していますね。

それでは、FSx for ONTAPのクラスターのタイムゾーンを変更してみます。

# タイムゾーンを日本標準時に変更
FsxId0985568f56d10b4a2::> cluster date modify -timezone Asia/Tokyo

Error: "modify" is not a recognized command

# 権限を変更して再チャレンジ
FsxId0985568f56d10b4a2::> set advanced

Warning: These advanced commands are potentially dangerous; use them only when directed to do so by NetApp personnel.
Do you want to continue? {y|n}: y

FsxId0985568f56d10b4a2::*> cluster date modify -timezone Asia/Tokyo

Error: "modify" is not a recognized command

どうやらFSx for ONTAPでは時刻の修正をするコマンドであるcluster date modifyは実行できないようです。

仕方がないので、AD DC側のタイムゾーンを変更します。

# AD DCの現在のタイムゾーンを確認
> tzutil /g
UTC

# AD DCのタイムゾーンをハワイの標準時刻に変更
> tzutil /s "Hawaiian Standard Time"

# タイムゾーンが変更されたことを確認
> tzutil /g
Hawaiian Standard Time

> Get-TimeZone


Id                         : Hawaiian Standard Time
DisplayName                : (UTC-10:00) Hawaii
StandardName               : Hawaiian Standard Time
DaylightName               : Hawaiian Daylight Time
BaseUtcOffset              : -10:00:00
SupportsDaylightSavingTime : False

(PowerShellを別ウィンドウで開く)

# 現在の時刻を確認
> Get-Date -Format "yyyy/MM/dd hh:mm:ss zzz"
2022/11/03 05:19:11 -10:00

AD DCのタイムゾーンがハワイの標準時刻で、FSx for ONTAPのタイムゾーンがUTCの状態でSVMを作成します。

# SVMを作成するときに使用するパラメーターの指定
$ filesystem_id=fs-0985568f56d10b4a2
$ svm_name=ntp-test
$ net_bios_name=NTP-TEST
$ domain_name=corp.non-97.net
$ organizational_unit_distinguished_name='OU=FSxForONTAP,DC=corp,DC=non-97,DC=net'
$ service_account_user_name=FSxServiceAccount
$ service_account_password='<ADのAdministratorのパスワード>'
$ dns_ip=10.0.1.10

$ create_storage_virtual_machine_input=$(cat <<EOM
{
    "ActiveDirectoryConfiguration": {
        "NetBiosName": "$net_bios_name",
        "SelfManagedActiveDirectoryConfiguration": {
            "DomainName": "$domain_name",
            "OrganizationalUnitDistinguishedName": "$organizational_unit_distinguished_name",
            "UserName": "$service_account_user_name",
            "Password": "$service_account_password",
            "DnsIps": [
                "$dns_ip"
            ]
        }
    },
    "FileSystemId": "$filesystem_id",
    "Name": "$svm_name",
    "Tags": [
        {
            "Key": "Name",
            "Value": "$svm_name"
        }
    ],
    "RootVolumeSecurityStyle": "NTFS"
}
EOM
)

# SVMの作成
$ create_storage_virtual_machine_output=$(aws fsx create-storage-virtual-machine \
    --cli-input-json "$create_storage_virtual_machine_input"
)

# aws fsx create-storage-virtual-machine のレスポンス確認
$ echo $create_storage_virtual_machine_output \
    | jq -r
{
  "StorageVirtualMachine": {
    "ActiveDirectoryConfiguration": {
      "NetBiosName": "NTP-TEST",
      "SelfManagedActiveDirectoryConfiguration": {
        "DomainName": "corp.non-97.net",
        "OrganizationalUnitDistinguishedName": "OU=FSxForONTAP,DC=corp,DC=non-97,DC=net",
        "UserName": "FSxServiceAccount",
        "DnsIps": [
          "10.0.1.10"
        ]
      }
    },
    "CreationTime": "2022-11-04T01:31:06.708000+00:00",
    "Endpoints": {
      "Iscsi": {
        "DNSName": "iscsi.svm-06704545782b37da4.fs-0985568f56d10b4a2.fsx.us-east-1.amazonaws.com"
      },
      "Management": {
        "DNSName": "svm-06704545782b37da4.fs-0985568f56d10b4a2.fsx.us-east-1.amazonaws.com"
      },
      "Nfs": {
        "DNSName": "svm-06704545782b37da4.fs-0985568f56d10b4a2.fsx.us-east-1.amazonaws.com"
      },
      "Smb": {
        "DNSName": "NTP-TEST.corp.non-97.net"
      }
    },
    "FileSystemId": "fs-0985568f56d10b4a2",
    "Lifecycle": "PENDING",
    "Name": "ntp-test",
    "ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:storage-virtual-machine/fs-0985568f56d10b4a2/svm-06704545782b37da4",
    "StorageVirtualMachineId": "svm-06704545782b37da4",
    "Subtype": "DEFAULT",
    "Tags": [
      {
        "Key": "Name",
        "Value": "ntp-test"
      }
    ]
  }
}

# SVMのID確認
$ svm_id=$(echo $create_storage_virtual_machine_output \
    | jq -r ".StorageVirtualMachine.StorageVirtualMachineId"
)

# SVMが作成されたか確認
$ aws fsx describe-storage-virtual-machines \
    --storage-virtual-machine-ids "$svm_id"
{
    "StorageVirtualMachines": [
        {
            "ActiveDirectoryConfiguration": {
                "NetBiosName": "NTP-TEST",
                "SelfManagedActiveDirectoryConfiguration": {
                    "DomainName": "corp.non-97.net",
                    "OrganizationalUnitDistinguishedName": "OU=FSxForONTAP,DC=corp,DC=non-97,DC=net",
                    "UserName": "FSxServiceAccount",
                    "DnsIps": [
                        "10.0.1.10"
                    ]
                }
            },
            "CreationTime": "2022-11-04T01:31:06.708000+00:00",
            "Endpoints": {
                "Iscsi": {
                    "DNSName": "iscsi.svm-06704545782b37da4.fs-0985568f56d10b4a2.fsx.us-east-1.amazonaws.com",
                    "IpAddresses": [
                        "10.0.1.76",
                        "10.0.1.125"
                    ]
                },
                "Management": {
                    "DNSName": "svm-06704545782b37da4.fs-0985568f56d10b4a2.fsx.us-east-1.amazonaws.com",
                    "IpAddresses": [
                        "10.0.1.71"
                    ]
                },
                "Nfs": {
                    "DNSName": "svm-06704545782b37da4.fs-0985568f56d10b4a2.fsx.us-east-1.amazonaws.com",
                    "IpAddresses": [
                        "10.0.1.71"
                    ]
                },
                "Smb": {
                    "DNSName": "NTP-TEST.corp.non-97.net",
                    "IpAddresses": [
                        "10.0.1.71"
                    ]
                }
            },
            "FileSystemId": "fs-0985568f56d10b4a2",
            "Lifecycle": "CREATED",
            "Name": "ntp-test",
            "ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:storage-virtual-machine/fs-0985568f56d10b4a2/svm-06704545782b37da4",
            "StorageVirtualMachineId": "svm-06704545782b37da4",
            "Subtype": "DEFAULT",
            "UUID": "61a1a264-5be0-11ed-b73a-4fa3a538501a"
        }
    ]
}

SVM作成後、ONTAP CLIでSVM内のCIFSサーバーがドメインに参加していることを確認します。

FsxId0985568f56d10b4a2::> cifs show -instance

                                          Vserver: ntp-test
                         CIFS Server NetBIOS Name: NTP-TEST
                    NetBIOS Domain/Workgroup Name: CORP
                      Fully Qualified Domain Name: CORP.NON-97.NET
                              Organizational Unit: OU=FSxForONTAP,DC=corp,DC=non-97,DC=net
Default Site Used by LIFs Without Site Membership:
                                   Workgroup Name: -
                             Authentication Style: domain
                CIFS Server Administrative Status: up
                          CIFS Server Description:
                          List of NetBIOS Aliases: -

ドメインに参加していますね。

CIFSサーバーのコンピュターオブジェクトが作成されていることも確認できました。

> Get-ADComputer -Filter 'Name -eq "NTP-TEST"' -SearchBase "OU=FSxForONTAP,DC=corp,DC=non-97,DC=net"


DistinguishedName : CN=NTP-TEST,OU=FSxForONTAP,DC=corp,DC=non-97,DC=net
DNSHostName       : NTP-TEST.CORP.NON-97.NET
Enabled           : True
Name              : NTP-TEST
ObjectClass       : computer
ObjectGUID        : 5060573e-9983-4e0e-aaba-49e7c0223a76
SamAccountName    : NTP-TEST$
SID               : S-1-5-21-38571244-2121234638-1230449559-1112
UserPrincipalName :

NTPによる時刻同期はタイムゾーンの影響を受けない

AD DCとドメインに参加するコンピューターのタイムゾーンが異なる場合もドメインに参加できるか確認してみました。

結論としては、「NTPによる時刻同期はUTCでタイムゾーンの影響を受けない」 = 「タイムゾーンが異なっていてもドメインには参加できる」でした。

マネージドサービスではタイムゾーンを変更できないものもあるので、確認できて安心しました。

この記事が誰かの助けになれば幸いです。

以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!