2017-05-02 50 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

相關問題