Azure Data Factory V2执行U-SQL脚本时凭据密钥未找到报错
我之前也碰到过类似的情况,脚本在Data Lake Analytics(DLA)里直接跑完全正常,但通过Azure Data Factory(ADF)调用就抛出E_CSC_USER_CREDENTIALSECRETNOTFOUND错误,核心原因其实是ADF执行时使用的身份和你在DLA直接运行时的身份权限不一致,导致无法访问凭证对应的密钥资源。下面给你一步步的排查和解决方法:
1. 先明确错误根源
你看到的报错Cannot find secret information for credential 'Amplitude...',说明ADF执行U-SQL时,用来访问外部数据源(Azure SQL DB)的凭证,其依赖的密钥无法被ADF的运行身份获取到。而你在DLA直接运行时,用的是你自己的Azure AD账户权限,这个账户已经能访问密钥所在的资源(比如Azure Key Vault),所以没问题。
2. 具体解决方案
检查ADF运行身份的Key Vault访问权限
如果你的DLA凭证是把密钥存在Azure Key Vault里的,那ADF使用的身份(托管身份或服务主体)必须拥有Key Vault的密钥读取权限:
- 打开Azure门户,找到你的Key Vault,进入访问策略页面
- 点击添加访问策略,选择密钥权限里的获取权限
- 在主体里搜索并选择ADF的托管身份(或你配置的服务主体)
- 保存配置
确认DLA凭证的配置正确性
确保你的DLA凭证是通过Key Vault引用密钥,而不是硬编码或者用临时的用户令牌:
比如正确的凭证创建脚本应该是这样的(替换成你的实际信息):
CREATE CREDENTIAL [AmplitudeCredential] WITH IDENTITY = '你的Azure SQL DB用户名', SECRET = (SELECT Secret FROM AzureKeyVault WHERE VaultName = '你的Key Vault名称' AND SecretName = '存储SQL密码的密钥名称');
如果之前的凭证是用你个人的AD令牌创建的,那ADF的身份肯定访问不到,建议重新创建成Key Vault关联的凭证。
验证ADF U-SQL活动的身份配置
在ADF的U-SQL活动配置里:
- 确认选择的DLA账户是正确的
- 如果使用托管身份,要确保DLA账户已经允许这个托管身份访问(在DLA的访问控制(IAM)里添加托管身份的Data Lake Analytics Contributor角色)
- 如果使用服务主体,要确保ADF里配置的服务主体凭据有效,并且这个服务主体同时拥有DLA的访问权限和Key Vault的密钥读取权限
测试权限是否生效
配置完成后,可以先在ADF里触发一次测试运行,或者用ADF的身份手动去访问Key Vault的密钥,确认权限已经生效。
总结
这个问题的核心就是身份权限不匹配——DLA直接运行用的是你个人权限,ADF用的是服务/托管身份权限,只要把ADF身份的权限补全,让它能访问到凭证依赖的密钥资源,问题就能解决。
内容的提问来源于stack exchange,提问作者Ivan Shlemov

