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

最終更新日: 2021 年 3 月 12 日

AWS Directory Service for Microsoft Active Directory を使用しています。Amazon Elastic Compute Cloud (Amazon EC2)Linux インスタンスを Active Directory ドメインに参加させました。EC2 Linux インスタンスから完全修飾ドメイン名 (FQDN) を使用して、Amazon Elastic File System (Amazon EFS) をマウントすることができません。この問題の解決方法を教えてください。

簡単な説明

Linux マシンを AWS Managed Microsoft AD に参加させるには、Active Directory の DNS サーバーを使用するようにインスタンスを設定します。この設定は、EC2 Linux インスタンスからのすべての DNS リクエストが Active Directory DNS サーバーにルーティングされることを意味します。

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

つまり、Amazon EFS FQDN はプライベート IP アドレスに解決されます。Microsoft AD を使用している場合は、FQDN を使用して EFS をマウントすることはできません。

問題の例

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

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

nc -vz 10.20.0.178 2049
Connection to 10.20.0.178 2049 port [tcp/nfs] succeeded!

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

echo 'supersede domain-name-servers 10.20.32.80, 10.20.34.122;' | sudo tee --append /etc/dhcp/dhclient.conf
echo 'supersede domain-search "nikkisDNS.com";' | sudo tee --append /etc/dhcp/dhclient.conf
sudo dhclient -r
sudo dhclient

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

cat /etc/resolv.conf
options timeout:2 attempts:5
; generated by /sbin/dhclient-script
search nikkisDNS.com.
nameserver 10.20.32.80
nameserver 10.20.34.122

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

dig fs-ca591a02.efs.eu-west-1.amazonaws.com 

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.64.amzn1 <<>> fs-ca591a02.efs.eu-west-1.amazonaws.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 33320
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;fs-ca591a02.efs.eu-west-1.amazonaws.com. IN A

;; AUTHORITY SECTION:
eu-west-1.amazonaws.com. 299	IN	SOA	dns-external-master.amazon.com. hostmaster.amazon.com. 1312 180 60 2592000 7229

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

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

dig @10.20.0.2 fs-ca591a02.efs.eu-west-2.amazonaws.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.64.amzn1 <<>> fs-ca591a02.efs.eu-west-1.amazonaws.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29705
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;fs-ca591a02.efs.eu-west-1.amazonaws.com. IN A

;; ANSWER SECTION:
fs-ca591a02.efs.eu-west-1.amazonaws.com. 60 IN A 10.20.0.178

解決方法

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

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

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

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

条件付きフォワーダルールを作成するには、AWS CLI コマンド create-conditional-forwarder を実行します。

aws ds create-conditional-forwarder --directory-id d-93673d4d5a --remote-domain-name amazonaws.com --dns-ip-addrs 10.20.0.2 --region eu-west-1

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

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

これにより EFS FQDN の DNS 解決が可能になり、FQDN を使用して EFS FS をマウントできるようになります。

dig fs-ca591a02.efs.eu-west-2.amazonaws.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.64.amzn1 <<>> fs-ca591a02.efs.eu-west-1.amazonaws.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29705
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;fs-ca591a02.efs.eu-west-1.amazonaws.com. IN A

;; ANSWER SECTION:
fs-ca591a02.efs.eu-west-1.amazonaws.com. 60 IN A 10.20.0.178