AWS Managed Microsoft AD에 조인된 Linux 시스템에서 EFS DNS 이름을 사용하여 Amazon EFS를 탑재하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2022년 3월 21일

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 요청은 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 주소로 자동 확인됩니다. 이 주소는 동일한 VPC 내에서만 확인할 수 있는 프라이빗 IP 주소입니다. 기본 설정된 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 명령줄 인터페이스(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 주소에 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 확인이 가능하며 이제 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

이제 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