当前位置: 首页 > 知识库问答 >
问题:

无法从Azure Data Lake Analytics访问Azure密钥库

姬博瀚
2023-03-14
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;
}
https://my-key-vault-name.vault.azure.net:443/secrets/MyCredentialsName/123abc

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

当我在本地运行我的脚本时,一切都很好(这意味着从本地机器到AD和密钥库的连接是正常的),但是当我在远程数据湖分析帐户上提交它以执行时,我得到了以下错误:

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

在system.net.httpWebRequest.EndgetResponse(IAsyncResult asyncResult)在system.net.http.clientHandler.getResponseCallback(IAsyncResult ar)

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

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

我有什么想法可以解决这个问题吗?

共有1个答案

鄂慈
2023-03-14

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

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

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

 类似资料:
  • 我已经能够通过外部web应用程序使用oauth rest api访问azure key vault,但出于某种原因,我无法从密钥中检索机密。经过长时间的研究,我发现用powershell和C#可以做到这一点,但还没有找到用Python解决方案。有人知道python是否有可能,或者有一种方法可以模拟powershell正在做什么吗?以下是检索秘密的代码: 此外,我已经在azure portal中注册

  • 是否有一种方法可以使用Delphi访问Azure密钥库?我可以使用柏林的data.cloud.azureapi单元访问数据库和blob存储,但想从密钥库中获取数据库连接字符串,但似乎找不到任何用于此操作的代码。

  • 我正在尝试从运行在我的Azure批处理节点池中的VM访问我的Azure密钥库中的机密。 然而,我总是遇到例外: 异常消息:已尝试%1个证书。无法获取访问令牌。 具有指纹的证书#1的异常my-thumbprint:密钥集不存在 到目前为止,我一直遵循以下说明:https://docs.microsoft.com/en-us/Azure/key-vault/service-to-service-aut

  • 我正试图使用Azure函数从密钥库获取秘密,但当我试图访问它时,密钥库返回Pribund。很明显我错过了什么,但我还没能找到另一个有同样问题的帖子。下面的代码: 我已经在密钥库的访问策略中注册了该函数,并授予它获取机密的权限,并且我已经为该函数启用了托管服务标识。我还缺了什么吗?我很茫然,为什么函数不能访问金库。

  • 我得到的错误是“Access Denied”,这(我认为)意味着id、secret和Vault的url没有问题。但是,我不知道我可以做什么来修复这个错误,也许在Azure门户中有一个设置阻止我读取一个秘密?