Comment monter Amazon EFS à l'aide du nom DNS EFS sur une machine Linux associée à AWS Managed Microsoft AD ?

Date de la dernière mise à jour : 21/03/2022

J'utilise AWS Directory Service pour AWS Managed Microsoft AD. J'ai associé mes instances Amazon Elastic Compute Cloud (Amazon EC2) Linux au domaine Active Directory. Par conséquent, je ne parviens pas à monter Amazon Elastic File System (Amazon EFS) à l'aide du nom DNS EFS. Comment résoudre ce problème ?

Brève description

Lorsque vous associez votre machine Linux à AWS Managed Microsoft AD, configurez votre instance pour qu'elle utilise les serveurs DNS de votre Active Directory.

Pour AWS Managed Microsoft AD, toutes les requêtes DNS sont transférées à l'adresse IP des serveurs DNS fournis par Amazon pour votre VPC. Ces serveurs DNS résolvent les noms configurés dans vos zones hébergées privées Amazon Route 53. Si vous n'utilisez pas de zones hébergées privées Route 53, vos demandes DNS sont transférées aux serveurs DNS publics. Si aucune zone hébergée privée n'existe pour vos services AWS, les demandes DNS sont transférées aux serveurs DNS publics. Cela signifie qu'ils ne peuvent résoudre que les DNS des services AWS vers des adresses IP publiques. Pour plus d'informations, consultez Configurer DNS.

Avec Amazon EFS, le nom DNS du système de fichiers est automatiquement résolu à l’adresse IP de la cible de montage dans la zone de disponibilité de l'instance Amazon EC2 qui se connecte. Il s'agit d'une adresse IP privée, qui ne peut être résolue que dans le même VPC. En remplaçant les serveurs DNS à partir du DNS défaut fourni par VPC, l'EFS n'est plus en mesure de résoudre l'adresse IP, ce qui fait que le montage par DNS échoue. Pour plus d'informations, consultez Montage sur Amazon EC2 avec un nom DNS.

Exemple de problème

Cet exemple utilise AWS Managed Microsoft AD. Les serveurs DNS fournis sont 172.31.28.100 et 172.31.4.147. Le système de fichiers EFS a été créé dans le même VPC que la cible de montage 172.31.47.69.

1.    À l'aide de netcat, confirmez que l'instance EC2 peut établir une connexion avec la cible de montage 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.    Sur le serveur Linux EC2, vous pouvez monter l'EFS à l'aide du nom DNS. L'EFS est ensuite démonté.

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.    Le fichier /etc/resolv.conf affiche le DNS et le serveur de noms fournis par Amazon :

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.    Sur le serveur Linux EC2, intégrez Microsoft AD, puis configurez les serveurs DNS Active Directory :

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.    Confirmez que les serveurs DNS sont configurés en vérifiant le fichier resolv.conf :

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.    Exécutez dig sur le système de fichiers pour vérifier que l'adresse IP privée de la cible de montage n'est pas renvoyée :

$ 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

Remarque : la requête DNS n'est résolue sur aucun registre A et l'état indique NXDOMAIN.

7.    Le montage de l'EFS à l'aide du nom DNS échoue:

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.

Si vous utilisez le serveur de noms fourni par Amazon pour le VPC, notez qu'il résout correctement :

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

Résolution

Remarque : si vous recevez des erreurs lors de l'exécution de commandes depuis l'interface de ligne de commande AWS (AWS CLI), assurez-vous d'utiliser la version la plus récente d'AWS CLI.

Configurez des redirecteurs conditionnels pour votre Microsoft AD afin de transférer les demandes vers le DNS fourni par Amazon VPC. Cette méthode fonctionne également pour résoudre les DNS d’autres services AWS vers leurs adresses IP privées, si vous utilisez le DNS fourni par Active Directory.

Pour ce faire, utilisez la commande AWS CLI pour créer une règle de redirecteur conditionnel. Cela transmet tous les sous-domaines d'un domaine à une adresse IP de serveur DNS spécifique. Par exemple, vous pouvez transférer toutes les demandes DNS pour les sous-domaines d'amazonaws.com à l'adresse IP privée du DNS fourni par Amazon VPC.

Remarque : l'adresse IP du DNS fourni par Amazon VPC est l'adresse IP réservée à la base de la plage réseau IPv4 du VPC plus deux.

Pour créer la règle de redirecteur conditionnel, exécutez la commande AWS CLI create-conditional-forwarder sur la ligne de commande de l’instance Linux sur laquelle vous souhaitez monter l'EFS :

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

Utilisez les paramètres suivants :

  • directory-id - entrez l'ID du répertoire AD.
  • remote-domain-name : vous pouvez spécifier n'importe quel domaine. Cette règle est appliquée à tous les noms de domaine complets correspondant à ce ou ces sous-domaines.
  • dns-ip-addrs - entrez l'adresse IP DNS fournie par Amazon VPC.

Cela permet la résolution DNS de l’EFS et l'EFS peut désormais être monté avec le nom 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

L'EFS peut désormais être monté à l'aide du nom 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