AWS Managed Microsoft AD に参加している Linux マシンに EFS DNS 名を使用して Amazon EFS をマウントするにはどうすればよいですか?

最終更新日: 2022 年 3 月 21 日

AWS Managed Microsoft AD の AWS ディレクトリサービスを使用しています。Amazon Elastic Compute Cloud (Amazon EC2) の Linux インスタンスを Active Directory ドメインに参加させました。その結果、EFS DNS 名を使用して Amazon Elastic File System (Amazon EFS) をマウントできません。この問題の解決方法を教えてください。

簡単な説明

Linux マシンを AWS Managed Microsoft AD に参加させるとき、Active Directory の DNS サーバーを使用するようにインスタンスを設定します。

AWS Managed Microsoft AD では、すべての DNS リクエストは、VPC に対して Amazon が提供する DNS サーバーの IP アドレスに転送されます。これらの DNS サーバーは、Amazon Route 53 プライベートホストゾーンで構成された名前を解決します。Route 53 のプライベートホストゾーンを使用していない場合、DNS リクエストはパブリック DNS サーバーに転送されます。AWS のサービスのプライベートホストゾーンが存在しない場合、DNS リクエストはパブリック DNS サーバーに転送されます。したがって、AWS のサービスの DNS はパブリック IP アドレスに解決されます。詳細については、「DNS を設定する」を参照してください。

Amazon EFS では、ファイルシステムの DNS 名は、接続している Amazon EC2 インスタンスのアベイラビリティーゾーンにあるマウントターゲットの IP アドレスに自動的に解決されます。これはプライベート IP アドレスで、同じ VPC 内でのみ解決できます。DNS サーバーを VPC が提供するデフォルトの DNS から変更すると、EFS は IP アドレスを解決できなくなり、DNS によるマウントが失敗します。詳細については、「DNS 名を使用して Amazon EC2 にマウントする」を参照してください。

問題の例

この例では、AWS Managed Microsoft AD を使用しています。提供される DNS サーバーは 172.31.28.100 および 172.31.4.147 です。EFS ファイルシステムは、マウントターゲット 172.31.47.69 と同じ VPC 内に作成されています。

1.    1. netcat を使用して、EC2 インスタンスが EFS マウントターゲット 172.31.47.69 との接続を確立できることを確認します。

$ nc -vz 172.31.47.69 2049
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 172.31.47.69:2049.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.

2.    EC2 Linux サーバーでは、DNS 名を使用して EFS をマウントできます。その後、EFS はアンマウントされます。

sudo mount -t efs -o tls fs-123456:/ efs
df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  475M     0  475M   0% /dev
tmpfs          tmpfs     483M     0  483M   0% /dev/shm
tmpfs          tmpfs     483M  516K  483M   1% /run
tmpfs          tmpfs     483M     0  483M   0% /sys/fs/cgroup
/dev/xvda1     xfs       8.0G  1.6G  6.5G  19% /
tmpfs          tmpfs      97M     0   7M   0% /run/user/0
tmpfs          tmpfs      97M     0   97M   0% /run/user/1000
127.0.0.1:/    nfs4      8.0E     0  8.0E   0% /home/ec2-user/efs
sudo umount /efs

3.    /etc/resolv.conf ファイルには、Amazon が提供する DNS とネームサーバーが含まれています。

cat /etc/resolv.conf 
        ; generated by /usr/sbin/dhclient-script
        search eu-west-2.compute.internal
        options timeout:2 attempts:5
        nameserver 172.31.0.2

4.    EC2 Linux サーバーで Microsoft AD を統合し、Active Directory DNS サーバーを構成します。

echo 'supersede domain-name-servers 172.31.28.100, 172.31.4.147;' | sudo tee --append /etc/dhcp/dhclient.conf
echo 'supersede domain-search "rachel.com";' | sudo tee --append /etc/dhcp/dhclient.conf
sudo dhclient -r
sudo dhclient

5.    resolv.conf ファイルをチェックして、DNS サーバーが設定されていることを確認します。

cat /etc/resolv.conf 
options timeout:2 attempts:5
; generated by /usr/sbin/dhclient-script
search rachel.com. eu-west-2.compute.internal
nameserver 172.31.28.100
nameserver 172.31.4.147

6.    ファイルシステム上で dig を実行し、マウントターゲットのプライベート IP が返されないことを確認します。

$ dig fs-123456.efs.eu-west-2.amazonaws.com 
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> fs-123456.efs.eu-west-2.amazonaws.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 57378
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;fs-123456.efs.eu-west-2.amazonaws.com. IN A

注意: DNS リクエストは A レコードに解決されず、ステータスは NXDOMAIN と表示されます。

7.    DNS 名を使用した EFS のマウントが失敗します。

sudo mount -t efs -o tls fs-123456:/ efs
Failed to resolve "fs-123456.efs.eu-west-2.amazonaws.com" - check that your file system ID is correct, and ensure that the VPC has an EFS mount target for this file system ID.
See https://docs.aws.amazon.com/console/efs/mount-dns-name for more detail.
Attempting to lookup mount target ip address using botocore. Failed to import necessary dependency botocore, please install botocore first.

Amazon が提供するネームサーバーを VPC で使用する場合、正常に解決されることに注意してください。

dig @172.31.0.2 fs-123456.efs.eu-west-2.amazonaws.com
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> fs-123456.efs.eu-west-2.amazonaws.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24926
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;fs-123456.efs.eu-west-2.amazonaws.com. IN A

;; ANSWER SECTION:
fs-123456.efs.eu-west-2.amazonaws.com. 60 IN A 172.31.25.79

解決方法

注意: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

Amazon VPC が提供する DNS にリクエストを転送するように、Microsoft AD の条件付きフォワーダーを設定します。Active Directory が提供する DNS を使用する場合、この方法は、他の AWS のサービスの DNS をプライベート IP アドレスに解決する場合でも機能します。

そのためには、AWS CLI コマンドを使用して条件付きフォワーダルールを作成します。これにより、ドメインのすべてのサブドメインが特定の DNS サーバー IP に転送されます。例えば、amazonaws.com のサブドメインに対するすべての DNS リクエストを Amazon VPC が提供する DNS のプライベート IP に転送できます。

注意: Amazon VPC が提供する DNS IP は、VPC IPv4 ネットワーク範囲のベースに 2 を加えた予約済み IP アドレスです。

条件付きフォワーダルールを作成するには、EFS をマウントする Linux インスタンスのコマンドラインで、AWS CLI コマンド create-conditional-forwarder を実行します。

aws ds create-conditional-forwarder --directory-id d-9c671fb35f --remote-domain-name amazonaws.com --dns-ip-addrs 172.31.0.2 --region eu-west-2

以下のパラメータを使用します。

  • directory-id - AD のディレクトリ ID を入力します。
  • remote-domain-name - 任意のドメインを指定できます。このルールは、このドメインまたはサブドメインに一致するすべての FQDN に適用されます。
  • dns-ip-addrs - Amazon VPC が提供する DNS IP を入力します。

これで、EFS DNS の DNS 解決が可能になり、DNS 名で EFS をマウントできるようになりました。

dig fs-123456.efs.eu-west-2.amazonaws.com 

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> fs-123456.efs.eu-west-2.amazonaws.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24926
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;fs-123456.efs.eu-west-2.amazonaws.com. IN A
;; ANSWER SECTION:
fs-123456.efs.eu-west-2.amazonaws.com. 60 IN A 172.31.25.79

DNS 名を使用して EFS をマウントできるようになりました。

sudo mount -t efs -o tls fs-123456:/ efs
[ec2-user@ip-172-31-35-167 ~]$ df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  475M     0  475M   0% /dev
tmpfs          tmpfs     483M     0  483M   0% /dev/shm
tmpfs          tmpfs     483M  520K  483M   1% /run
tmpfs          tmpfs     483M     0  483M   0% /sys/fs/cgroup
/dev/xvda1     xfs       8.0G  1.6G  6.5G  19% /
tmpfs          tmpfs      97M     0   97M   0% /run/user/0
tmpfs          tmpfs      97M     0   97M   0% /run/user/1000
127.0.0.1:/    nfs4      8.0E     0  8.0E   0% /home/ec2-user/efs