Соединение хранилища озера данных 2-го поколения с блоками данных

Я пытаюсь соединить блоки данных MS Azure с хранилищем озера данных v2 и не могу сопоставить клиента, секретную область и ключ.

У меня есть данные в озере данных Azure v2. Я пытаюсь следовать этим инструкциям:

https://docs.azuredatabricks.net/spark/latest/data-sources/azure/azure-datalake-gen2.html

Я создал "принцип обслуживания" с ролью "Участник хранилища BLOB-данных", получил

Я создал секретные области в Azure Keyvault и Databricks с ключами и значениями

Когда я пробую код, указанный ниже, аутентификация не может распознать секретную область и ключ. Из документации мне не ясно, нужно ли использовать секретную область Azure Keyvault или Databricks.

val configs = Map(
  "fs.azure.account.auth.type" -> "OAuth",
  "fs.azure.account.oauth.provider.type" -> "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
  "fs.azure.account.oauth2.client.id" -> "<CLIENT-ID>",
  "fs.azure.account.oauth2.client.secret" -> dbutils.secrets.get(scope = "<SCOPE-NAME>", key = "<KEY-VALUE>"),
  "fs.azure.account.oauth2.client.endpoint" -> "https://login.microsoftonline.com/XXXXXXXXXX/oauth2/token")

Если кто-то может помочь в этом, пожалуйста, сообщите / подтвердите:

какой должен быть CLIENT-ID: я понимаю, что это из учетной записи хранилища;

где следует создавать SCOPE-NAME и KEY-VALUE в Azure Keyvault или Databricks?

1 ответ

Решение

XXXX в https://login.microsoftonline.com/XXXXXXXXXX/oauth2/token должен быть вашим TenantID (получите его на вкладке Azure Active Directory в Портал> Свойства> DirectoryID).

Идентификатор клиента - это ApplicationID/ идентификатор участника службы (к сожалению, эти имена взаимозаменяемы в мире Azure, но это одно и то же).

Если вы еще не создали участника службы, следуйте этим инструкциям: https://docs.microsoft.com/en-us/azure/storage/common/storage-auth-aad-app - убедитесь, что вы предоставляете основному сервису доступ к вашему озеру после его создания.

Вы должны создать область действия и секрет для основного идентификационного ключа - это то, что вы хотите скрыть от свободного текста. Вы не можете создать это в пользовательском интерфейсе Databricks (пока). Используйте один из них:

Сейчас я не думаю, что смогу создать секреты в Azure KeyVault - хотя я ожидаю увидеть это в будущем. Технически вы можете вручную интегрироваться с Key Vault, используя их API, но это даст вам еще одну головную боль в необходимости секретных учетных данных для подключения к хранилищу ключей.

Я столкнулся с той же проблемой, единственное, что я сделал дополнительно, - это назначил разрешение приложения по умолчанию для контейнера BLOB-объектов datalake gen2 в обозревателе хранилища Azure. Требуется идентификатор объекта приложения, который не доступен в пользовательском интерфейсе, его можно получить с помощью команды "az ad sp show --id " в azure-cli . После назначения разрешения для контейнера BLOB-объектов создайте новый файл и попробуйте получить к нему доступ,

Другие вопросы по тегам