2017-05-02 49 views
3

我有一个带有自定义提取程序的U-SQL脚本,该脚本访问Azure密钥保险库以获取某些凭据。无法从Azure Data Lake Analytics访问Azure密钥保险库

我跟着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和身份验证密钥,并允许我的应用程序从密钥库读取密钥。在我的U-SQL脚本中,我引用了所有需要的程序集。

当我在本地运行我的脚本时,一切都很好(这意味着从本地计算机连接到AD和密钥保险库都可以),但是当我在远程Data Lake Analytics帐户上提交它时,出现以下错误:

The remote name could not be resolved: 'my-key-vault-name.vault.azure.net'

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

我Azure上的资源组的管理权限是有限的,但我可以在数据分析湖刀片出入防火墙选项卡 - 我已经尝试了启用和禁用防火墙,开启/关闭Allow access to Azure services,仍继续发生错误。

作为依赖关系,我参考Microsoft.Azure.KeyVault 2.0.6,Microsoft.Azure.KeyVaultWebKey 2.0.4,Microsoft.IdentityModel.Clients.ActiveDirectory 3.13.9

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

回答

3

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

U-SQL的自定义代码调用可能会缩放超过100到1000个容器,为数百万行调用数百万个容器。这很容易导致您试图访问的服务发生(有希望意外的)分布式拒绝服务连接,从而导致DDOSing服务和阻止Azure IP范围。

本地运行目前没有在容器中运行,因此没有这种限制执行。

你打算如何实现这个调用?请注意,存储中的数据可能已经使用Azure密钥保管库进行透明编码。

+0

我有加密的文件,我想在Data Fabric Pipeline中解密它们,我计划使用这个脚本。在我的提取器中,我有atomicFileProcessing = true,所以我认为在我的情况下不存在DDOS的可能性。我会考虑替代定制u-sql管道。 – arghtype

+0

就你而言,它可能没有DDOS潜力。不幸的是(在这种情况下),用户代码可以做很多我们无法控制的事情。 –

+1

感谢您的回复,我已将解密逻辑移至使用Azure批处理中的自定义.net活动的管道 – arghtype

相关问题