Amazon Linux chrony 同期先をAmazon Time Sync Serviceに限定する

AmazonLinux_CentOS,AWS

概要

  • 今回は、Amazon Linux chrony サービスの同期先をAmazon Time Sync Serviceに限定する方法を紹介します。

背景

  • Amazon Linux OS が動作するシステムでは、chrony サービスがデフォルトのNTPクライアントとして使用され、Amazon Time Sync Service (169.254.169.123) が優先的に同期先として設定されています。しかし、chrony サービスは、Amazon Time Sync Service (169.254.169.123)以外に、インターネット上の他のNTPサーバーへも同期を行います。インターネットへのアクセスが制限された環境では、外部のNTPサーバーとの同期を避ける (Amazon Time Sync Serviceのみに限定する) ことがセキュリティ上の要件となる場合があります。
  • 本記事では、chrony サービスの設定ファイルを編集することで、同期先をAmazon Time Sync Service (169.254.169.123)のみに限定する方法を解説します。これにより、インターネットに接続できない環境でもシステム時刻を維持することができ、セキュリティの要件も満たすことができます。

Amazon Time Sync Serviceとは

  • Amazon Time Sync Service は、AWSが提供する時刻同期のサービスであり、各リージョンで冗長化している衛星接続の原子時計を使って高精度な時刻参照を提供します。追加料金は必要ありません。
  • このサービスには、"169.254.169.123″ のリンクローカル IP アドレスを使用してアクセスを行います。VPC内のインスタンスは、インターネットにアクセスすることなく、このアドレスを通じてAmazon Time Sync Serviceに安全に接続が可能です。

 

chrony の同期先をAmazon Time Sync Serviceに限定する方法

デフォルトの動作

  • Amazon Linux OS が動作するシステムでは、デフォルトでchrony サービスが有効であり、かつ同期先に 169.254.169.123 が設定されています。
  • systemctl status コマンドの次に、chronyc sources コマンドを実行しています。chronyc sources コマンドは、chrony サービスが現在同期しているソースを確認できます。以下の出力が示す通り、169.254.169.123 以外のソースと時刻同期していることが分かります。

 

sh-4.2$ systemctl status chronyd
● chronyd.service - NTP client/server
   Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2025-01-24 05:53:06 UTC; 1h 34min ago
     Docs: man:chronyd(8)
           man:chrony.conf(5)
  Process: 2639 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 2660 (chronyd)
   CGroup: /system.slice/chronyd.service
           └─2660 /usr/sbin/chronyd -F 2

sh-4.2$ chronyc sources
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^- time.cloudflare.com           3  10   377   409  +2284us[+2288us] +/-   57ms
^- v4.cloud.ntp.admtan.jp        2  10   377   406   +746us[ +750us] +/-   11ms
^* 169.254.169.123               3   4   377     6    +79us[  +77us] +/-  439us
^- 202.182.111.234.vultruse>     2  10   377   402   +306us[ +310us] +/- 3462us
^- y.ns.gin.ntt.net              2  10   377   719  -2180us[-2191us] +/-   70ms

 

  • chrony の設定ファイルである /etc/chrony.conf に以下の記述があります。/etc/chrony.d に時刻同期のソースに関する設定がある様です。

# Use NTP sources found in /etc/chrony.d/*.sources
sourcedir /etc/chrony.d

 

  • /etc/chrony.d/ntp-pool.sources が今回編集する目的のファイルです。今回、public のNTPサーバーである pool.ntp.org は使用しません。NTPプールのドメインを対象外にします。

 

sh-4.2$ sudo vi /etc/chrony.d/ntp-pool.sources

↓ 最後の3行をコメントアウトしました

sh-4.2$ cat /etc/chrony.d/ntp-pool.sources
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (https://www.pool.ntp.org/join.html).

# This will use (up to):
# - 1 source from [0-1].amazon.pool.ntp.org each (IPv4 only atm)
# - 2 sources from 2.amazon.pool.ntp.org which is IPv6 enabled as well
# This means by default, up to 2 dual-stack and up to 2 additional IPv4-only
# sources will be used.
# pool 0.amazon.pool.ntp.org iburst maxsources 1
# pool 1.amazon.pool.ntp.org iburst maxsources 1
# pool 2.amazon.pool.ntp.org iburst maxsources 2

 

  • chrony サービスを再起動すると設定が反映されます。
  • chronyc sources コマンドを実行します。以下の出力が示す通り、169.254.169.123 のソースのみ表示されました。

 

sh-4.2$ sudo systemctl restart chronyd
sh-4.2$
sh-4.2$ chronyc sources
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^? 169.254.169.123               3   6     3     0   +278us[ +278us] +/-  570us

 

  • 補足ですが、Amazon Time Sync Service (169.254.169.123) は、/etc/chrony.d/link-local.sources に記述があります。

 

sh-4.2$ cat /etc/chrony.d/link-local.sources
# Note: we do not recommend using both the IPv4 and the IPv6 link-local address
# entries at the same time here. The IPv4 and IPv6 NTP packets come from the same
# local server for your instance. You will likely get mixed results with some
# packets coming from the IPv4 endpoint and some from the IPv6 endpoint if you are
# using both at the same time.

# use the Amazon Time Sync Service (IPv4)
server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4

# use the Amazon Time Sync Service (IPv6)
# server fd00:ec2::123 prefer iburst minpoll 4 maxpoll 4

 

  • これで、Amazon Linux chrony サービスの同期先をAmazon Time Sync Serviceに限定できました。