이 문서에서는 NFS Azure 파일 공유에 대한 전송 중인 데이터를 암호화하는 방법을 설명합니다. Azure Files NFS v4.1 볼륨은 보안 TLS 연결을 사용하도록 설정하고 MITM 공격을 비롯한 가로채기로부터 전송 중인 데이터를 보호하여 네트워크 보안을 강화합니다.
Overview
오픈 소스 TLS 래퍼인 Stunnel을 사용하여 Azure Files는 Kerberos 없이 AES-GCM을 사용하여 강력한 암호화를 사용하여 NFS 클라이언트와 Azure Files 간의 TCP 스트림을 암호화합니다. 이렇게 하면 복잡한 설정 또는 Active Directory와 같은 외부 인증 시스템이 필요하지 않고 데이터 기밀성이 보장됩니다.
AZNFS 유틸리티 패키지는 클라이언트에 Stunnel을 설치하고 설정하여 암호화된 탑재를 간소화합니다. packages.microsoft.com 사용할 수 있는 AZNFS는 암호화된 연결을 통해 NFS 클라이언트 요청을 투명하게 전달하는 로컬 보안 엔드포인트를 만듭니다. 주요 아키텍처 구성 요소는 다음과 같습니다.
AZNFS 탑재 도우미: NFSv4.1 트래픽에 대한 보안 터널 설정의 복잡성을 추상화하는 클라이언트 유틸리티 패키지입니다.
Stunnel 프로세스: 로컬 포트에서 NFS 클라이언트 트래픽을 수신 대기하고 TLS를 통해 안전하게 Azure Files NFS 서버로 전달하는 스토리지 계정별 클라이언트 프로세스입니다.
AZNFS watchdog: AZNFS 패키지는 stunnel 프로세스가 실행 중임을 확인하고, 종료된 터널을 자동으로 재시작하며, 연결된 모든 NFS 탑재가 분리된 후 사용되지 않는 프로세스를 정리하는 백그라운드 작업을 수행합니다.
Important
AZNFS 지원 Linux 배포판은 다음과 같습니다.
- Ubuntu(18.04 LTS, 20.04 LTS, 22.04 LTS, 24.04 LTS)
- Centos7, Centos8
- RedHat7, RedHat8, RedHat9
- Rocky8, Rocky9
- SUSE(SLES 15)
- Oracle Linux
- Alma Linux
지원되는 지역
이제 NFS용 EiT는 SSD Azure 파일 공유를 지원하는 모든 지역에서 GA(일반 공급)입니다.
전송 중 암호화 적용
스토리지 계정에서 보안 전송 필수 설정을 사용하도록 설정하면 스토리지 계정의 NFS 볼륨에 대한 모든 탑재가 암호화되도록 할 수 있습니다. 새 스토리지 계정과 기존 스토리지 계정 및 NFS Azure 파일 공유 모두에서 EiT를 사용하도록 설정할 수 있습니다. EiT를 사용하도록 설정하기 위한 추가 비용은 없습니다.
그러나 동일한 스토리지 계정에서 TLS와 비 TLS 연결 간의 유연성을 유지하려는 사용자의 경우 보안 전송 설정은 OFF로 유지되어야 합니다.
NFS 공유에 대한 전송 중인 데이터 암호화
Azure Portal 또는 Azure CLI를 사용하여 NFS Azure 파일 공유에 대한 전송 중인 데이터를 암호화할 수 있습니다.
Azure Portal을 사용하여 NFS 공유에 대한 전송 중인 데이터 암호화
Azure Portal은 AZNFS 탑재 도우미 패키지를 설치하기 위해 선택한 Linux 배포에 맞게 조정된 단계별 즉시 사용 가능한 설치 스크립트를 제공합니다. 설치되면 제공된 AZNFS 탑재 스크립트를 사용하여 NFS 공유를 안전하게 탑재하여 클라이언트와 서버 간에 암호화된 전송 채널을 설정할 수 있습니다.
동일한 스토리지 계정에서 TLS 및 TLS 이외의 연결을 유연하게 유지하려는 사용자는 보안 전송 필수 설정을 사용하지 않도록 설정해야 합니다.
Azure CLI를 사용하여 NFS 공유에 대한 전송 중인 데이터 암호화
전송 중인 데이터를 암호화하려면 다음 단계를 수행합니다.
- 필요한 AZNFS 탑재 도우미 패키지가 클라이언트에 설치되어 있는지 확인합니다.
- TLS 암호화를 사용하여 NFS 파일 공유를 탑재합니다.
- 데이터 암호화가 성공했는지 확인합니다.
1단계: AZNFS 탑재 도우미 패키지 설치 확인
AZNFS 탑재 도우미 패키지가 클라이언트에 설치되어 있는지 확인하려면 다음 명령을 실행합니다.
systemctl is-active --quiet aznfswatchdog && echo -e "\nAZNFS mounthelper is installed! \n"
패키지가 설치되어 있으면 메시지가 AZNFS mounthelper is installed!
표시됩니다. 설치되지 않은 경우 적절한 명령을 사용하여 클라이언트에 AZNFS 탑재 도우미 패키지를 설치해야 합니다.
- Ubuntu/Debian
- RHEL/CentOS
- SUSE
- Alma Linux
- 오라클 리눅스
curl -sSL -O https://packages.microsoft.com/config/$(source /etc/os-release && echo "$ID/$VERSION_ID")/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
sudo apt-get update
sudo apt-get install aznfs
2단계: NFS 파일 공유 탑재
TLS 암호화를 사용하여 NFS 파일 공유를 탑재하려면 다음을 수행합니다.
- 클라이언트에서 디렉터리를 만듭니다.
sudo mkdir -p /mount/<storage-account-name>/<share-name>
- 다음 cmdlet을 사용하여 NFS 공유를 탑재합니다.
<storage-account-name>
를 스토리지 계정의 이름으로,<share-name>
를 파일 공유의 이름으로 바꾸십시오.
sudo mount -t aznfs <storage-account-name>.file.core.windows.net:/<storage-account-name>/<share-name> /mount/<storage-account-name>/<share-name> -o vers=4,minorversion=1,sec=sys,nconnect=4
TLS 암호화 없이 NFS 공유를 탑재하려면 다음을 수행합니다.
sudo mount -t aznfs <storage-account-name>.file.core.windows.net:/<storage-account-name>/<share-name> /mount/<storage-account-name>/<share-name> -o vers=4,minorversion=1,sec=sys,nconnect=4,notls
다시 부팅할 때 공유를 자동으로 마운트하려면 /etc/fstab
파일에 다음 줄을 추가하여 항목을 만드십시오.
<storage-account-name>.file.core.windows.net:/<storage-account-name>/<container-name> /nfsdata aznfs defaults,sec=sys,vers=4.1,nolock,proto=tcp,nofail,_netdev 0 2
Note
mount 명령을 실행하기 전에 환경 변수 AZURE_ENDPOINT_OVERRIDE 설정되어 있는지 확인합니다. 이는 비공용 Azure 클라우드 지역에서 파일 공유를 탑재하거나 사용자 지정 DNS 구성을 사용하는 경우에 필요합니다.
예를 들어 Azure 중국 클라우드의 경우: export AZURE_ENDPOINT_OVERRIDE="chinacloudapi.cn"
3단계: 전송 중인 데이터 암호화가 성공했는지 확인
df -Th
명령을 실행합니다.
클라이언트가 외부 네트워크가 아닌 로컬 포트 127.0.0.1을 통해 연결되었음을 나타냅니다. stunnel 프로세스는 NFS 클라이언트에서 들어오는 NFS 트래픽에 대해 127.0.0.1(localhost)에서 수신 대기합니다. 그런 다음 Stunnel은 이 트래픽 을 가로채TLS 를 통해 Azure의 Azure Files NFS 서버로 안전하게 전달합니다.
NFS 서버에 대한 트래픽이 암호화되었는지 확인하려면 명령을 사용하여 tcpdump
포트 2049에서 패킷을 캡처합니다.
sudo tcpdump -i any port 2049 -w nfs_traffic.pcap
Wireshark에서 캡처를 열면 페이로드가 읽을 수 있는 텍스트 대신 "애플리케이션 데이터"로 표시됩니다.
Note
가상 머신에서 동일한 서버 엔드포인트로의 모든 트래픽은 단일 연결을 사용합니다. AZNFS 탑재 도우미는 해당 서버에 공유를 탑재할 때 TLS 및 비 TLS 구성을 혼합할 수 없도록 합니다. 이 규칙은 동일한 스토리지 계정 및 동일한 IP 주소로 확인되는 다른 스토리지 계정의 공유에 적용됩니다.
Troubleshooting
동일한 서버에 대한 이전 TLS 암호화 탑재가 성공적으로 완료되기 전에 종료된 경우 TLS(notls) 이외의 탑재 작업이 실패할 수 있습니다. aznfswatchdog 서비스는 시간 초과 후 부실 항목을 자동으로 정리하지만 정리가 완료되기 전에 새 비 TLS 탑재를 시도하면 실패할 수 있습니다.
이 문제를 해결하려면 새로 만들기 옵션을 사용하여 공유를 다시 탑재합니다. 그러면 부실 항목이 즉시 지워집니다.
sudo mount -t aznfs <storage-account-name>.file.core.windows.net:/<storage-account-name>/<share-name> /mount/<storage-account-name>/<share-name> -o vers=4,minorversion=1,sec=sys,nconnect=4,notls,clean
VM이 사용자 지정 도메인에 조인된 경우 DNS에 정의된 대로 파일 공유에 /etc/fstab
사용자 지정 DNS FQDN 또는 짧은 이름을 사용합니다. 호스트 이름 해상도를 확인하려면 nslookup <hostname>
및 getent host <hostname>
명령을 사용하여 확인하십시오. mount 명령을 실행하기 전에 환경 변수 AZURE_ENDPOINT_OVERRIDE
가 설정되어 있는지 확인합니다.
탑재 문제가 계속되면 로그 파일에서 자세한 문제 해결 세부 정보를 확인합니다.
-
탑재 도우미 및 Watchdog 로그:
/opt/microsoft/aznfs/data/aznfs.log
-
Stunnel 로그:
/etc/stunnel/microsoft/aznfs/nfsv4_fileShare/logs