You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用SharedKey授权调用Azure Batch REST API创建任务

ADF中通过SharedKey授权调用Azure Batch REST API创建任务实操

前置准备确认

先确认你手里已经有以下信息,不需要额外做其他前置配置:

  • Batch账户名称、所在区域代码(比如eastasia、chinanorth3)
  • Batch账户的访问密钥(Azure门户进入Batch账户,在「密钥」菜单可复制主密钥或辅助密钥,任意一个可用,建议存在ADF关联的Key Vault中引用,不要硬编码)
  • 已存在的目标作业ID:TestBatchJob

SharedKey授权核心规则

Azure Batch的SharedKey授权不是直接传密钥,必须按官方规则生成签名放到Authorization头里,规则如下:

授权头固定格式为SharedKey <Batch账户名>:<签名值>,其中签名值是用账户访问密钥,对规范化请求字符串做HMAC-SHA256哈希后转Base64字符串得到的。
待签名的规范化字符串必须严格按以下顺序拼接,每部分结尾加换行符\n,无值的位置直接留空行,少一个空行都会直接返回403:

  1. HTTP请求方法,创建任务用POST
  2. Content-Encoding头值,无则留空
  3. Content-Language头值,无则留空
  4. Content-Length头值,无则留空
  5. Content-MD5头值,无则留空
  6. Content-Type头值,固定用application/json; odata=minimalmetadata
  7. Date头值,无则留空(Batch统一用ocp-date传时间,这里直接留空)
  8. If-Modified-Since头值,无则留空
  9. If-Match头值,无则留空
  10. If-None-Match头值,无则留空
  11. If-Unmodified-Since头值,无则留空
  12. Range头值,无则留空
  13. 所有以ocp-开头的自定义头按字典序排列,这里只需要传ocp-date,值为GMT格式的当前时间,和请求头里传的ocp-date必须完全一致,时间偏差不能超过15分钟
  14. 规范化资源路径,格式为/<Batch账户名>/jobs/TestBatchJob/tasks?api-version=<API版本号>,查询参数按字典序排列,这里固定用稳定版API2023-05-01.17.0即可

ADF管道配置步骤

全程用ADF内置活动实现,不需要自定义代码:

步骤1:初始化基础变量

拖入「设置变量」活动,创建以下字符串类型变量:

  • batchAccountName:值填你的Batch账户名
  • batchRegion:值填Batch账户所在区域代码
  • batchAccountKey:值引用Key Vault中存储的Batch账户访问密钥
  • jobId:值填TestBatchJob
  • apiVersion:值固定填2023-05-01.17.0
  • gmtTime:值填表达式@utcNow('r'),直接生成符合要求的RFC1123格式GMT时间

步骤2:生成授权头

再拖入一个「设置变量」活动,创建变量authHeader,值填以下表达式,自动生成符合规则的签名和授权头:

@concat(
    'SharedKey ',
    variables('batchAccountName'),
    ':',
    base64(
        hmac(
            base64ToString(variables('batchAccountKey')),
            concat(
                'POST\n','\n','\n','\n','\n',
                'application/json; odata=minimalmetadata\n',
                '\n','\n','\n','\n','\n','\n',
                concat('ocp-date:', variables('gmtTime'), '\n'),
                concat('/', variables('batchAccountName'), '/jobs/', variables('jobId'), '/tasks?api-version=', variables('apiVersion'))
            ),
            'SHA256'
        )
    )
)

步骤3:配置Web活动调用API

拖入「Web」活动,按以下参数配置:

  • URL:https://@{variables('batchAccountName')}.@{variables('batchRegion')}.batch.azure.com/jobs/@{variables('jobId')}/tasks?api-version=@{variables('apiVersion')}
  • 请求方法:POST
  • 请求头添加3个键值对:
    • Content-Type:application/json; odata=minimalmetadata
    • ocp-date:@variables('gmtTime')
    • Authorization:@variables('authHeader')
  • 请求正文填任务的配置JSON,基础示例如下:
{
  "id": "test-task-001",
  "commandLine": "/bin/bash -c 'echo Hello Azure Batch'",
  "userIdentity": {
    "autoUser": {
      "scope": "pool",
      "elevationLevel": "nonadmin"
    }
  }
}

如果要调用你已经绑定的应用程序包,在正文里添加applicationPackageReferences字段,指定包ID和版本号即可。注意同一个作业下任务ID不能重复,重复会返回409冲突。

常见问题排查

  • 返回403:优先检查签名拼接时有没有少空行、资源路径是否和请求URL完全匹配、ocp-date时间是否和签名中用的时间一致、账户密钥是否正确
  • 返回404:检查Batch账户名、区域代码、作业ID是否拼写错误
  • 返回409:更换唯一的任务ID重试即可

内容的提问来源于stack exchange,提问作者cgsabari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 08:57:21