【问题标题】:Cannot access Azure Key Vault from Azure Data Lake Analytics无法从 Azure Data Lake Analytics 访问 Azure Key Vault
【发布时间】:2017-05-02 00:21:22
【问题描述】:

我有一个带有自定义提取器的 U-SQL 脚本,它可以访问 Azure Key Vault 以获取一些凭据。

我关注了this tutorial。而且我有等效的代码来从 AD 获取令牌,然后调用提供的 URI 以获取实际凭据:

public static async Task<string> GetToken(string authority, string resource, string scope)
{
    var authContext = new AuthenticationContext(authority);
    var clientCred = new ClientCredential(applicationId, authenticationKey);
    AuthenticationResult result = await authContext.AcquireTokenAsync(resource, clientCred);
    if (result == null)
    {
        throw new InvalidOperationException("Failed to obtain the AD token");
    }
    return result.AccessToken;
}

public static async Task<string> GetSecret(string secretUri)
{
    var keyVaultClient = new KeyVaultClient(
            new KeyVaultClient.AuthenticationCallback(GetToken)
    );
    var sec = await keyVaultClient.GetSecretAsync(secretUri);
    return sec.Value;
}

我的凭据已成功放入保险库,并且我有一个 URI 可以访问它们 - 类似于:

https://my-key-vault-name.vault.azure.net:443/secrets/MyCredentialsName/123abc

我已经在 Azure AD 中注册了我的应用程序并获得了应用程序 ID 和身份验证密钥,并且我允许我的应用程序从 Key Vault 读取机密。在我的 U-SQL 脚本中,我引用了所有需要的程序集。

当我在本地运行我的脚本时,一切正常(这意味着从本地计算机到 AD 和到 Key Vault 的连接正常),但是当我提交它以在远程 Data Lake Analytics 帐户上执行时,我收到以下错误:

无法解析远程名称: 'my-key-vault-name.vault.azure.net'

在 System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult) 在 System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar)

我对 Azure 资源组的管理权限受到限制,但我可以访问 Data Lake Analytics 刀片上的防火墙选项卡 - 我已尝试启用和禁用防火墙,打开/关闭 Allow access to Azure services,但错误仍然存​​在。

作为依赖,我引用Microsoft.Azure.KeyVault 2.0.6、Microsoft.Azure.KeyVaultWebKey 2.0.4、Microsoft.IdentityModel.Clients.ActiveDirectory 3.13.9。

关于如何尝试解决它的任何想法?

【问题讨论】:

    标签: c# azure azure-data-lake u-sql azure-keyvault


    【解决方案1】:

    在 ADLA 中运行的 U-SQL 代码不允许您连接到容器/VM 之外的资源。原因是:

    U-SQL 的自定义代码调用可能会扩展超过 100 到 1000 个容器,从而为数百万行调用数百万个容器。这很容易导致(希望是无意的)针对您尝试访问的服务的分布式拒绝服务附加,从而可能导致对服务进行 DDOS 攻击并阻止 Azure IP 范围。

    本地运行当前不在容器中运行,因此没有这样的限制强制执行。

    你想通过这个电话达到什么目的?请注意,存储中的数据已经可以使用 Azure Key Vault 进行透明编码。

    【讨论】:

    • 我已加密文件,我想在我计划使用此脚本的 Data Fabric Pipeline 中解密它们。在我的提取器中,我有 atomicFileProcessing = true,所以我认为在我的情况下不存在 DDOS 的可能性。我会考虑自定义 u-sql 管道的替代方案。
    • 在您的情况下,它可能没有 DDOS 潜力。不幸的是(在这种情况下),用户代码可以做很多我们无法控制的事情。
    • 感谢您的回复,我已使用 Azure 批处理中的自定义 .net 活动将解密逻辑移至管道
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 2020-08-08
    • 2020-10-30
    • 1970-01-01
    相关资源
    最近更新 更多