Шифрование при передаче для общих папок NFS Azure

Область применения: ✔️ общие папки NFS

В этой статье объясняется, как зашифровать данные при передаче для NFS-файловых хранилищ Azure. Файлы Azure томы NFSv4.1 повышают безопасность сети, предоставляя возможность защищённых подключений TLS и защищая данные при передаче от перехвата, включая атаки типа "человек посередине".

Overview

Используя Stunnel, оболочку TLS с открытым кодом, Файлы Azure шифрует TCP-поток между клиентом NFS и Файлы Azure с помощью строгого шифрования с помощью AES-GCM без необходимости Kerberos. Это гарантирует конфиденциальность данных при устранении необходимости сложных настроек или внешних систем проверки подлинности, таких как Active Directory.

Пакет служебной программы AZNFS упрощает зашифрованные подключения путем установки и настройки Stunnel на клиенте. Доступно на сайте packages.microsoft.com, AZNFS создает локальную безопасную конечную точку, которая автоматически пересылает запросы клиента NFS через зашифрованное подключение. К ключевым компонентам архитектуры относятся следующие компоненты:

  • АЗНФС Mount Helper: клиентская служебная программа, которая абстрагирует сложность создания безопасных туннелей для трафика NFSv4.1.

  • Stunnel Process: клиентский процесс, связанный с каждой учетной записью хранения, который прослушивает трафик NFS-клиента на локальном порту и безопасно перенаправляет его по протоколу TLS на сервер Файлы Azure NFS.

  • Диспетчер процессов AZNFS: пакет AZNFS выполняет фоновую задачу, которая следит за тем, чтобы процессы stunnel были активны, автоматически перезапускает завершённые туннели и очищает неиспользуемые процессы после отсоединения всех связанных NFS точек монтирования.

Important

AZNFS поддерживает следующие дистрибутивы Linux:

  • Ubuntu (18.04 LTS, 20.04 LTS, 22.04 LTS, 24.04 LTS)
  • Centos7, Centos8
  • RedHat7, RedHat8, RedHat9, RedHat10
  • Роки8, Роки9
  • SUSE (SLES 15, SLES 16)
  • Oracle Linux
  • AlmaLinux
  • Azure Linux

Поддерживаемые регионы

Шифрование при передаче данных для NFS теперь доступно на общем уровне (GA) во всех регионах, которые поддерживают SSD-совместимые файлы Azure.

Принудительное шифрование при передаче

Файлы Azure предоставляет выделенный параметр Require Encryption in Transit for NFS, который позволяет независимо контролировать, требуется ли шифрование для доступа NFS к Azure общим папкам. Этот параметр для каждого протокола обеспечивает более детализированный контроль, чем обязательный параметр безопасной передачи на уровне учетной записи хранения, который теперь применяется только к трафику REST/HTTPS. Вы можете включить шифрование при передаче как для новых, так и существующих учетных записей хранения и общих папок. Нет дополнительных затрат на включение шифрования во время передачи.

Новые учетные записи хранения

Для новых учетных записей хранения, созданных с помощью портала Azure, Require Encryption in Transit for NFS по умолчанию включен. Учетные записи хранения, созданные с помощью Azure PowerShell, Azure CLI или API FileREST, задают это значение как Not selected для обеспечения обратной совместимости.

Существующие учетные записи хранения

Для существующих учетных записей хранения поле Требование шифрования в транзите для NFS изначально отображается как Не выбрано. Если этот параметр не выбран, необходимый параметр безопасной передачи продолжает управлять поведением шифрования для общих папок NFS. После явной настройки обязательного шифрования в транзитном режиме для NFS этот параметр имеет приоритет для доступа NFS независимо от требуемого значения безопасной передачи . Это гарантирует отсутствие немедленного изменения поведения для существующих учетных записей хранения, если вы не решили настроить этот параметр.

Где настроить параметр

Вы можете настроить Require Encryption in Transit for NFS для учетной записи хранения с помощью портала Azure, Azure PowerShell или Azure CLI. Если вы предпочитаете поддерживать гибкость при наличии подключений TLS и не TLS в той же учетной записи хранения, отключите параметр "Требовать шифрование в транзите" для NFS .

Для учетной записи хранения можно настроить требовать шифрование при передаче для NFS в следующих расположениях:

  • На вкладке "Дополнительно " при создании учетной записи хранения.
  • В разделе "Служба файлов" на странице обзора учетной записи хранения.
  • В разделе "Параметры файлового общего доступа" > Безопасность для существующей учетной записи хранения.

Снимок экрана: включение или отключение обязательного шифрования при передаче для параметра NFS.

Шифрование данных при передаче для разделяемых ресурсов NFS

Можно зашифровать данные в процессе передачи для общих папок NFS в Azure через портал Azure или CLI Azure.

Шифрование передаваемых данных для общих папок NFS с помощью портала Azure

Azure портал предлагает пошаговый готовый скрипт установки, адаптированный к выбранному дистрибутиву Linux, для установки пакета монтирования AZNFS. После установки можно использовать предоставленный скрипт подключения AZNFS, чтобы безопасно подключить разделяемый ресурс NFS, установив зашифрованный канал передачи между клиентом и сервером.

Скриншот с инструкциями по подключению AZNFS в портале Azure.

Шифрование передаваемых данных для общих папок NFS с помощью Azure CLI

Выполните следующие действия, чтобы зашифровать данные во время передачи:

  1. Убедитесь, что на клиенте установлен необходимый вспомогательный пакет подключения AZNFS.
  2. Подключите файловую систему NFS с использованием шифрования TLS.
  3. Убедитесь, что шифрование данных выполнено успешно.

Шаг 1. Проверка установки пакета вспомогательной программы монтирования AZNFS

Чтобы проверить, установлен ли вспомогательный пакет монтирования AZNFS на клиенте, выполните следующую команду:

systemctl is-active --quiet aznfswatchdog && echo -e "\nAZNFS mounthelper is installed! \n"

Если пакет установлен, появится сообщение AZNFS mounthelper is installed!. Если он не установлен, необходимо использовать соответствующую команду для установки вспомогательного пакета монтирования AZNFS на клиенте.

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

Если для установки требуется неинтерактивная установка, задайте следующие переменные среды перед установкой JSONFS:

Для всех дистрибутивов можно использовать следующее:

export AZNFS_NONINTERACTIVE_INSTALL=1

Для дистрибутивов на основе DEBIAN можно дополнительно использовать:

export DEBIAN_FRONTEND=noninteractive

Note

Установка в неинтерактивном режиме по умолчанию устанавливает AUTO_UPDATE_AZNFS=true.

Шаг 2. Монтирование общей папки NFS

Чтобы подключить общую папку NFS с шифрованием TLS:

  1. Создайте каталог на клиенте.
sudo mkdir -p /mount/<storage-account-name>/<share-name>
  1. Подключите общий ресурс NFS с помощью следующей команды cmdlet. Замените <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

Чтобы подключить общую папку NFS без шифрования 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

Чтобы диск подключался автоматически при перезагрузке, создайте запись в файле /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

Перед выполнением команды подключения убедитесь, что переменная среды AZURE_ENDPOINT_OVERRIDE задана. Это требуется при подключении файловых томов в непубличных регионах облака Azure или при использовании пользовательских конфигураций DNS. Например, для Azure China Cloud: export AZURE_ENDPOINT_OVERRIDE="chinacloudapi.cn"

Шаг 3. Убедитесь, что шифрование передаваемых данных выполнено успешно.

Запустите команду df -Th.

Схема, на которой показан экран PowerShell для проверки применения EiT.

Он указывает, что клиент подключен через локальный порт 127.0.0.1, а не внешнюю сеть. Процесс stunnel прослушивает 127.0.0.1 (localhost) для входящего трафика NFS из клиента NFS. Затем Stunnel перехватывает этот трафик и безопасно перенаправит его через TLS на сервер Файлы Azure NFS на Azure.

Чтобы проверить, зашифрован ли трафик к серверу NFS, используйте tcpdump команду для записи пакетов через порт 2049.

sudo tcpdump -i any port 2049 -w nfs_traffic.pcap

При открытии захвата в Wireshark содержимое будет отображаться как "Данные приложения" вместо читаемого текста.

Схема, показывающая экран Wireshark для проверки применения EiT.

Note

Весь трафик из виртуальной машины в одну конечную точку сервера использует одно подключение. Вспомогательная программа монтирования AZNFS гарантирует, что при подключении общих ресурсов к этому серверу нельзя смешивать конфигурации TLS и не-TLS. Это правило применяется к общим ресурсам из одной учетной записи хранения и разным учетным записям хранения, которые разрешаются на один и тот же IP-адрес.

Troubleshooting

Операция подключения, не являющаяся протоколом TLS (notls), может завершиться ошибкой, если предыдущее подключение с шифрованием TLS к тому же серверу было завершено до успешного завершения. Хотя служба 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

Если виртуальная машина присоединена к пользовательскому домену, используйте пользовательское полное доменное имя DNS или короткие имена для общей папки, как определено в /etc/fstab DNS. Чтобы проверить разрешение имени узла, проверьте использование nslookup <hostname> и getent host <hostname> команды. Перед выполнением команды подключения убедитесь, что задана переменная AZURE_ENDPOINT_OVERRIDE среды.

Если проблемы с подключением продолжаются, проверьте файлы журнала для получения дополнительных сведений об устранении неполадок:

  • Подключение вспомогательных и контрольных журналов: /opt/microsoft/aznfs/data/aznfs.log
  • Журналы Stunnel: /etc/stunnel/microsoft/aznfs/nfsv4_fileShare/logs

См. также