如何在Azure Data Factory中获取托管标识的文本格式access_token
无需Azure Function,直接在ADF中获取MSI Access Token对接AWS S3
核心方案:利用ADF托管标识直接请求Azure AD元数据端点获取token
ADF作为PaaS服务无法访问Azure VM专属的IMDS私有接口,需改用Azure AD公开的元数据端点,结合ADF自身的托管标识身份验证,直接获取可用于AWS STS的access_token,无需中转组件。
方法一:Web活动直接获取并使用Token
1. 准备必要参数
- 从ADF资源的「标识」→「系统分配」页复制客户端ID
- 从Azure AD概述页复制租户ID
- 确认之前配置的Application ID URI(即AWS侧身份提供商设置的受众)
- 复制AWS侧创建的带S3权限的角色ARN
2. 配置Token获取Web活动
创建Web活动,参数如下:
- 请求方法:
GET - URL:
https://management.azure.com/metadata/identity/oauth2/token?api-version=2018-02-01&resource=<Application ID URI>&client_id=<ADF MSI客户端ID> - 身份验证:选择「托管标识」,身份类型选「系统分配」
- 请求头部:添加键值对
Metadata: true(必填,否则会返回权限错误)
调用后,响应JSON中的access_token字段即为所需的令牌,可通过@activity('<Web活动名称>').output.access_token在后续活动中引用。
3. 配置AWS STS临时凭证获取活动
再创建一个Web活动调用AWS STS接口:
- 请求方法:
POST - URL:
https://sts.amazonaws.com/ - 请求正文(form-data格式):
Action=AssumeRoleWithWebIdentity Version=2011-06-15 RoleArn=<AWS角色ARN> RoleSessionName=adf-s3-session WebIdentityToken=@activity('<Token获取活动名称>').output.access_token
提取响应中的AccessKeyId、SecretAccessKey、SessionToken,即可用于配置ADF的S3链接服务。
方法二:Lookup活动简化Token提取
若需更简洁的JSON解析,可使用Lookup活动替代Web活动获取token:
- 配置参数与上述Web活动完全一致
- Lookup活动会自动解析JSON响应,后续可直接用
@activity('<Lookup活动名称>').output.firstRow.access_token引用令牌
关键验证点
确保以下配置无遗漏:
- Azure侧:ADF MSI已被分配包含
Microsoft.Authorization/*/read权限的自定义角色 - AWS侧:身份提供商的受众与Azure Application ID URI完全匹配,角色信任策略正确指向Azure AD身份提供商
内容的提问来源于stack exchange,提问作者JarroVGIT
相关产品推荐
相关产品推荐

