使用 AWS re:Post 即表示您同意 AWS re:Post 使用條款

如何在透過 AWS Managed Microsoft AD 加入的 Linux 電腦上使用 EFS DNS 名稱掛載 Amazon EFS?

5 分的閱讀內容
0

我正在使用 AWS Managed Microsoft AD 的 AWS Directory Service。我已將 Amazon Elastic Compute Cloud (Amazon EC2) Linux 執行個體加入 Active Directory 網域。因此,我無法使用 EFS DNS 名稱掛載 Amazon Elastic File System (Amazon EFS)。我該如何解決此問題?

簡短說明

當您使用 AWS Managed Microsoft AD 加入 Linux 電腦時,可設定執行個體以使用 Active Directory 的 DNS 伺服器。

如為 AWS Managed Microsoft AD,所有 DNS 請求皆會轉送至 Amazon 為 VPC 提供之 DNS 伺服器的 IP 地址。這些 DNS 伺服器會解析在 Amazon Route 53 私有託管區域中設定的名稱。如果您不使用 Route 53 私有託管區域,則 DNS 請求會轉送至公有 DNS 伺服器。如果您的 AWS 服務不存在私有託管區域,則 DNS 請求會轉送至公有 DNS 伺服器。如此表示該伺服器僅會解析公有 IP 地址的 AWS 服務 DNS。如需詳細資訊,請參閱設定 DNS

透過 Amazon EFS,檔案系統 DNS 名稱會自動解析為連線之 Amazon EC2 執行個體之可用區域中的掛載目標 IP 地址。此為私有 IP 地址,僅可在相同 VPC 內解析。透過從預設 VPC 提供的 DNS 變更 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.    使用 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.

如果您為 VPC 使用 Amazon 提供的名稱伺服器,請注意其已成功解析以下內容:

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 Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請確認您使用的是最新的 AWS CLI 版本

為您的 Microsoft AD 設定條件式轉寄站,以將請求轉送至 Amazon VPC 提供的 DNS。如果您使用 Active Directory 提供的 DNS,則此方法亦適用於將其他 AWS 服務 DNS 解析為其私有 IP 地址。

若要執行此操作,請使用 AWS CLI 命令以建立條件式轉寄站規則。如此會將網域的所有子網域轉送至特定 DNS 伺服器 IP。例如,您可將 amazonaws.com 子網域的所有 DNS 請求轉送至 Amazon VPC 提供之 DNS 的私有 IP。

**注意:**Amazon VPC 提供的 DNS IP 是以 VPC IPv4 網路範圍為基礎的預留 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 解析,且 EFS 目前可使用 DNS 名稱掛載。

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

EFS 目前可使用 DNS 名稱掛載。

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

相關資訊

如何查看連線至 Amazon EFS 之 Amazon EC2 執行個體的清單?

如何在受管的運算環境中將 Amazon EFS 磁碟區掛載至 AWS Batch?

AWS 官方
AWS 官方已更新 3 年前