3

我正在尝试将 MS Azure 数据块与数据湖存储 v2 连接,但无法匹配客户端、机密范围和密钥。

我在 Azure 数据湖 v2 中有数据。我正在尝试遵循以下说明:

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

我创建了一个角色为“存储 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 应该是什么:我知道这是来自存储帐户;

在 Azure Keyvault 或 Databricks 中应该在哪里创建 SCOPE-NAME 和 KEY-VALUE?

4

2 回答 2

2

https://login.microsoftonline.com/XXXXXXXXXX/oauth2/token中的 XXXX应该是您的 TenantID(从 Portal > Properties > DirectoryID 中的 Azure Active Directory 选项卡中获取)。

客户端 ID 是应用程序 ID/服务主体 ID(遗憾的是,这些名称在 Azure 世界中可以互换使用 - 但它们都是同一个东西)。

如果您尚未创建服务主体,请按照以下说明操作:https ://docs.microsoft.com/en-us/azure/storage/common/storage-auth-aad-app#register-your-application-with-an -azure-ad-tenant - 确保在创建湖后授予服务主体访问湖的权限。

您应该为主体 ID 密钥创建一个范围和秘密 - 因为这是您想要从自由文本中隐藏的内容。您不能在 Databricks UI 中创建它(目前)。使用其中之一:

目前,我认为不能在 Azure KeyVault 中创建机密 - 尽管我希望将来会看到这一点。从技术上讲,您可以使用他们的 API 手动与 Key Vault 集成,但它会让您在需要秘密凭据来连接到 Key Vault 时又感到头疼。

于 2019-01-30T10:16:02.497 回答
0

I was facing the same issue , the only thing i did extra was to assign the default permission of the application to datalake gen2's blob container in azure storage explorer . It required the object id of the application , which is not the one available on the UI , it can be taken by using the command "az ad sp show --id " on azure-cli . After assign the permission on blob container, create a new file, and then try to access it,

于 2019-03-28T14:34:07.047 回答