Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法从Azure Data Lake Analytics访问Azure密钥保险库_C#_Azure_Azure Data Lake_U Sql_Azure Keyvault - Fatal编程技术网

C# 无法从Azure Data Lake Analytics访问Azure密钥保险库

C# 无法从Azure Data Lake Analytics访问Azure密钥保险库,c#,azure,azure-data-lake,u-sql,azure-keyvault,C#,Azure,Azure Data Lake,U Sql,Azure Keyvault,我有一个带有自定义提取器的U-SQL脚本,它可以访问Azure Key Vault以获取一些凭据 我跟着。我有等效的代码从AD获取令牌,然后调用提供的URI获取实际凭据: public static async Task<string> GetToken(string authority, string resource, string scope) { var authContext = new AuthenticationContext(authority); v

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

我跟着。我有等效的代码从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;
}
我已经在Azure AD中注册了我的应用程序,并获得了它的应用程序id和身份验证密钥,我允许我的应用程序从密钥库读取机密。在我的U-SQL脚本中,我引用了所有需要的程序集

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

无法解析远程名称: '我的密钥保管库名称.vault.azure.net'

在System.Net.HttpWebRequest.EndGetResponse(IAsyncResult)中 异步结果)在 System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar)

我对Azure资源组的管理权限有限,但我可以访问Data Lake Analytics blade上的防火墙选项卡-我已尝试启用和禁用防火墙,打开/关闭
允许访问Azure服务
,但错误仍然存在

作为依赖项,我引用的是
Microsoft.Azure.KeyVault 2.0.6
Microsoft.Azure.KeyVaultWebKey 2.0.4
Microsoft.IdentityModel.Clients.ActiveDirectory 3.13.9


关于如何解决这个问题,您有什么想法吗?

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

U-SQL的自定义代码调用可能会扩展到100到1000多个容器,以百万计的行调用数百万个容器。这很容易导致针对您尝试访问的服务的分布式拒绝服务连接(希望不是有意的),可能导致使用该服务并阻止Azure IP范围

本地运行当前未在容器中运行,因此没有此类限制强制执行


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

我有加密的文件,我想在我计划使用此脚本的data Fabric管道中解密它们。在我的提取器中,我的atomicFileProcessing=true,因此我认为在我的情况下不存在DDOS的可能性。我将考虑自定义U-SQL管道的替代方案。在您的情况下,它可能没有DDOS潜力。不幸的是(在本例中),用户代码可以做很多我们无法控制的事情。感谢回复,我已经使用Azure批处理中的自定义.net活动将解密逻辑移动到管道中
https://my-key-vault-name.vault.azure.net:443/secrets/MyCredentialsName/123abc