Безопасность Fabric Spark

Создайте контролируемую среду выполнения, управляйте передачей данных и обеспечивайте минимизацию привилегий при обеспечении безопасного доступа к секретам.

Управляемая частная конечная точка (MPE)

Сценарий. Вы являетесь инженером данных, работающим с конфиденциальными данными в Fabric Spark. У вашей команды безопасности есть требование выполнить все коды в изолированной сетевой среде для повышения безопасности.
  • Включите управляемую виртуальную сеть (виртуальные сети). Сведения о включении управляемых виртуальных сетей см. в общедоступной документации. Microsoft Fabric создает управляемые виртуальные сети (виртуальные сети) и управляет ими для каждой рабочей области Fabric. Они обеспечивают сетевую изоляцию для рабочих нагрузок Fabric Spark, что означает, что Microsoft Fabric развертывает вычислительные кластеры в выделенной сети для каждой рабочей области, удалив их из общей виртуальной сети.

  • В рабочей среде используйте управляемые виртуальные сети для безопасного выполнения записных книжек Spark.

  • При создании управляемой частной конечной точки (MPE) она создается на уровне рабочей области по умолчанию.

  • При включении Private Link (PL) на уровне арендатора система активирует управляемые виртуальные сети (VNets) для всех рабочих областей в арендаторе. После включения параметра PL система создает управляемую виртуальную сеть для рабочей области при запуске первого задания Spark (записная книжка или определения заданий Spark). Система также создает виртуальную сеть при выполнении операции типа Lakehouse, например, загрузку в таблицу или операцию по обслуживанию таблицы (оптимизация или вакуум).

Замечание

При активировании управляемых VNet начальные пулы становятся недоступными, так как они работают в общей сети.

Защита исходящего доступа рабочего пространства (WS OAP)

Сценарий. Вы обеспокоены тем, что кто-то случайно записывает рабочие данные в несанкционированные назначения с помощью записных книжек Spark, и вы хотите контролировать это.

Включите защиту исходящего доступа рабочей области (WS OAP). Это гарантирует, что исходящая интернет-связь из Spark идет только к разрешённым адресатам через управляемые частные конечные точки. 

  • Блокировка общедоступных библиотек: это также блокирует установку общедоступных библиотек (из PyPi, Maven и т. д.). Поэтому необходимо упаковать библиотеки как файлы JAR или Wheel и передать пользовательские библиотеки в среду или ресурсы и установить с помощью % pip install внутри ноутбуков. Важно отметить, что если добавить его в ресурсы и установить с помощью встроенной команды %pip install, время на публикацию среды сокращается. Это полезно для быстрого разработки и тестирования. Для повторного использования пакетов в различных записных книжках рекомендуется публиковать в среде. Другой метод — подключение к частному репозиторию. Дополнительные сведения см. в документации по защите доступа вовне рабочего пространства для рабочих нагрузок в области проектирования данных
Сценарий. Следует ли включить WS OAP в средах разработки?

Рекомендуется не включать WS OAP в средах разработки или более низкого уровня, так как это может повлиять на процесс разработки. После тестирования определений заданий Notebook или Spark с помощью общедоступных библиотек, протестируйте те же определения заданий Notebook или Spark с пользовательскими библиотеками. После надлежащего проверки кода развернитесь в более высоких средах, а затем включите WS OAP. Если вы хотите защитить даже среду разработки, вы можете включить WS OAP, но это может препятствовать процессу разработки. Начальные пулы недоступны при включении OAP WS.

Доступ к Azure Key Vault (AKV) из записной книжки

Сценарий. Вы являетесь инженером данных и хотите подключиться к нескольким источникам данных, используя защищенные учетные данные из записных книжек Spark.

Безопасно храните учетные данные в Azure Key Vault (AKV). Не сохраняйте одно хранилище ключей для хранения всех секретов. Вместо этого используйте несколько хранилищ ключей на основе проектов и доменов, если это возможно.

Доступ к Azure Key Vault (AKV) из записной книжки

  • Сеть: Мы рекомендуем защитить AKV с помощью правил брандмауэра, чтобы разрешить доступ только из известных сетей. Однако вы разрешаете IP-адреса Fabric Spark в правилах брандмауэра. Чтобы безопасно подключиться к защищённым хранилищам ключей Azure (AKV) из блокнотов Apache Spark на платформе Fabric, рекомендуется создать управляемую частную конечную точку для AKV. Один AKV может поддерживать только до 64 частных конечных точек (ограничения подписки и службы Azure, квоты и ограничения). 

  • Аутентификация: Система запускает записные книжки Fabric Spark и задачи SJD в контексте пользователя, отправляющего эти задачи/записные книжки. Чтобы получить доступ к AKV, отправляющий пользователь должен иметь достаточный доступ для получения секрета ("Сотрудник по секретам Key Vault"). Ознакомьтесь с рекомендациями по AKV, касающимися предоставления приложению разрешения на доступ к хранилищу ключей Azure с помощью Azure RBAC.

    • Вы можете использовать утилиту notebookutils (ранее называемую mssparkutils), чтобы получить доступ к Azure Key Vault, используя учетные данные пользователя, который запускает записную книжку/SJD.

    notebookutils.credentials.getSecret('<AKV URL>', 'Secret Name')

  • В рабочей среде не рекомендуется предоставлять пользователям доступ к AKV в среде prod. Вместо этого используйте учетные записи служб для доступа к Key Vault (KV). Отправьте записные книжки и задания с помощью учетной записи службы. 

  • В некоторых случаях служебная учетная запись, которая отправляет задание, имеет доступ к считыванию секретов из Azure Key Vault (AKV). 

  • В некоторых случаях учетная запись, используемая для службы, обычно является учетной записью DevOps и может не иметь доступа к чтению секретов из Azure Key Vault (AKV). В таких случаях построитель учетных данных позволяет получить доступ к AKV с помощью другого имени службы (SPN).

Ниже приведен пример фрагмента кода Scala:

val clientSecretCredential: ClientSecretCredential = new ClientSecretCredentialBuilder()
  .clientId("<client id here>")
  .clientSecret("<client secret here>")
  .tenantId("<tenant id here>")
  .build()

val secretClient: SecretClient = new SecretClientBuilder()
  .vaultUrl("<vault url here>")
  .credential(clientSecretCredential)
  .buildClient()

val secretName = "<your value>"
val retrievedSecret = secretClient.getSecret(secretName)
println(s"Retrieved secret: ${retrievedSecret.getValue}")

Замечание

Не кодируйте секреты или пароли в виде обычного текста в коде. Всегда используйте безопасное хранилище (например, Azure Key Vault) для хранения и извлечения секретов.