当前位置: 首页 > news >正文

Azure Automation Runbook 获取托管标识的访问令牌(Access Token)

Azure Automation Runbook 使用 IMDS(实例元数据服务)地址来获取托管标识 Token

  • 一、概述
    • 本文目的
    • 说明
  • 二、步骤
    • 1、创建自动化账户
    • 2、创建Runbook
      • (1) 普通环境-脚本参考
      • (2) 沙盒环境-脚本参考
      • (3) 通用脚本
    • 3、运行
  • 三、拓展内容:使用 Power Automate获取Access Token
    • 1、添加Webhook
    • 2、Runbook脚本参考
    • 3、Flow参考

一、概述

本文目的

使用Azure Automation Runbook 安全、自动地获取 Token,然后调用任何授权范围内的 Azure 资源,形成一个完整的自动化闭环。

说明

任何支持 Microsoft Entra ID(原 Azure AD)认证的 Azure 服务,都可以使用 Access Token 来调用。
在自动化脚本或后台服务这类没有用户交互的场景中,使用托管标识与 Access Token 被认为是 “最佳实践”。

优势
1、无须在代码、配置文件中存储或定期轮换密钥。
2、消除了密钥泄露的风险。Access Token 是短期有效的,权限也是事先通过 RBAC 精确授予的。

二、步骤

1、创建自动化账户

在Azure门户中搜索,自动化账户,然后创建自动化账户。

选择资源组,输入名称,然后审阅并创建就行了

2、创建Runbook


填好后,审阅并创建 ↓

输入代码,保存,然后发布

如果要修改代码,参考下图,选择在门户中编辑 ↓

(1) 普通环境-脚本参考

# 标准 IMDS 地址 $endpoint = "http://169.254.169.254/metadata/identity/oauth2/token" $resource = "https://ai.azure.com" # 构造 URL $Url = $endpoint + "?resource=" + $resource + "&api-version=2018-02-01" # 获取 Token(标准环境用 Metadata=true,不需要额外 header) $response = Invoke-RestMethod -Method Get -Uri $Url -Headers @{Metadata="true"} -TimeoutSec 30 -ErrorAction Stop Write-Output "✅ 成功获取 Token" Write-Output $response.access_token

(2) 沙盒环境-脚本参考

Azure Automation 的 Runbook 运行在受限的沙盒环境中,微软对 IMDS 端点做了封装,需要用 localhost 加自定义 header。

# 定义所有变量 $endpoint = "http://localhost/metadata/identity/oauth2/token" $header = "MSIHeaderValue" $resource = "https://ai.azure.com" # 构造 URL $Url = $endpoint + "?resource=" + $resource + "&api-version=2019-08-01" # 获取 Token $response = Invoke-RestMethod -Method Get -Uri $Url -Headers @{"X-IDENTITY-HEADER" = $header} -TimeoutSec 30 -ErrorAction Stop Write-Output "✅ 成功获取 Token" Write-Output $response.access_token

(3) 通用脚本

两个环境都能跑的代码,沙盒环境已测试无误:

$resource = "https://ai.azure.com" # 检测环境并使用正确的 endpoint 和 header if ($env:IDENTITY_ENDPOINT) { # 沙盒环境(Automation Runbook) $endpoint = $env:IDENTITY_ENDPOINT $headers = @{"X-IDENTITY-HEADER" = $env:IDENTITY_HEADER} Write-Output "检测到沙盒环境" } else { # 普通环境(VM / Function / App Service) $endpoint = "http://169.254.169.254/metadata/identity/oauth2/token" $headers = @{Metadata = "true"} Write-Output "检测到普通环境" } # 构造 URL 并获取 Token $Url = $endpoint + "?resource=" + $resource + "&api-version=2019-08-01" $response = Invoke-RestMethod -Method Get -Uri $Url -Headers $headers -TimeoutSec 30 Write-Output "✅ 成功获取 Token" Write-Output $response.access_token

参考文章:
1、在不使用 Azure cmdlet 的情况下生成访问令牌
(在自动化 Runbook 的沙盒环境中,必须使用环境变量 $env:IDENTITY_ENDPOINT 和 $env:IDENTITY_HEADER)

2、用 HTTP 获取令牌
(标准环境下的做法:使用固定的 IMDS 地址 169.254.169.254 和 Metadata: true 头)

3、运行


可以看到输出,和日志记录,启动运行有点慢,要等一会儿

三、拓展内容:使用 Power Automate获取Access Token

流程说明:

1、先创建一个Http触发的即时流,拿到Flow的调用链接。

2、通过Runbook写脚本,先获取Access Token,然后调用http,将token传给Power Automate的Flow。

3、为Runbook创建一个 Webhook,保存Webhook链接。

4、在Power Automate中创建一个定时Flow,定时运行,调用Azure Automation Webhook链接

整个过程:
定时Flow调用Webhook —— Webhook启动 Runbook生成Token ——调用Http触发的Flow传递Token

1、添加Webhook


选择配置参数并运行,然后点Update按钮,之后下面的创建按钮才能点击,另外记得要保存链接,创建完就消失了。

2、Runbook脚本参考

记得替换代码里的Power Automate的Link

# 获取 Token $endpoint = "http://localhost/metadata/identity/oauth2/token" $header = "MSIHeaderValue" $resource = "https://ai.azure.com" $url = $endpoint + "?resource=" + $resource + "&api-version=2019-08-01" $response = Invoke-RestMethod -Method Get -Uri $url -Headers @{"X-IDENTITY-HEADER" = $header} -TimeoutSec 30 $accessToken = $response.access_token # 计算剩余秒数 $expiresInSeconds = 86400 # 默认24小时 if ($response.expires_on) { $expiresInSeconds = $response.expires_on - [int64]((Get-Date).ToUniversalTime() - (Get-Date "1970-01-01")).TotalSeconds } if ($response.expires_in) { $expiresInSeconds = $response.expires_in } # 过期时间(北京时间) $expiresAt = (Get-Date).AddSeconds($expiresInSeconds).AddHours(8).ToString("yyyy-MM-dd HH:mm:ss") Write-Output "resource: $resource" Write-Output "token 前缀: $($accessToken.Substring(0, 50))..." Write-Output "expiresAt: $expiresAt" Write-Output "expiresInSeconds: $expiresInSeconds" # 发送到 Power Automate $powerAutomateUrl = "https://default3670e84658dd465886fb00e4029045.d6.environment.api.powerplatform.com:443/powerautomate/automations/direct/workflows/1d56556b0eb54970b5e4aa51eca915ea/triggers/manual/paths/invoke?api-version=1&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=dDb-byafrIPQE9mafGkAYohXjmLrbJewIHqY_v8n5vY" $body = @{ resource = $resource token = $accessToken expiresAt = $expiresAt expiresInSeconds = $expiresInSeconds } | ConvertTo-Json Write-Output "发送的 JSON: $bodyJson" Invoke-RestMethod -Method Post -Uri $powerAutomateUrl -Body $body -ContentType "application/json" Write-Output "✅ 发送成功"

3、Flow参考

(1) Http触发的Flow:

请求正文JSON架构

{ "type": "object", "properties": { "resource": { "type": "string" }, "token": { "type": "string" }, "expiresAt": { "type": "string" }, "expiresInSeconds": { "type": [ "number", "integer" ] } } }

(2)定时流:调用Webhook的节点

欢迎关注我的博客,与我一起学习,我将持续分享我的学习过程,我是 热爱学习的小翁同学~

http://www.cnnetsun.cn/news/2854084.html

相关文章:

  • 东航逆向实录:refer__1036、req/res、ssxmod_itna/itna2 一锅端
  • AI 死活记不住你的接口?我花 5 分钟配了个东西,从此一劳永逸
  • 2026验证码破解指南:5种方案实测,从Tesseract到YOLOv8,哪种才是你的最优解?
  • 113.体育分析实战:从YOLO检测到多目标跟踪的坑与经验
  • Highcharts v13 DataTable + TypedArray 性能压测白皮书
  • GEE教程:Google Earth Engine中导出影像过程中的Pyramiding Policy:MEAN、MODE、MIN、MAX与SAMPLE全解析
  • 实习日记--核心板第一周
  • 深入理解Kotlin中的noinline与crossinline修饰符:Android开发的必备进阶技巧
  • JVM——线程池实现原理
  • 洛谷题解P4314 [CPU监控]
  • Dubbo的实现原理
  • 公司要求全员学 AI:别只追工具,核心要掌握方法与工作流
  • 蓝桥杯嵌入式备赛避坑指南:从第八届电梯题看状态机设计与调试技巧
  • Windows 10上5分钟搞定EMQX MQTT服务器,叉车本地测试不求人
  • 告别手动复制粘贴!用Wireshark命令行+Python脚本,一键批量提取pcap原始16进制数据
  • 从设计稿到上线:手把手教你用el-table实现高还原度的复杂数据表格(含暗黑模式适配)
  • 保姆级教程:在Win11上搞定MySQL 8.0.28安装与配置(附常见错误排查清单)
  • FusionCompute 8.0 VRM主备部署:从规划IP到登录管理后台的完整配置清单与注意事项
  • 告别Softmax,拥抱Logistic:YOLOv3的多标签分类实战与损失函数调优指南
  • 终于有人整理出了,AI漫剧角色创作全流程:从设定、三视图、表情、动作到提示词
  • 2026成都苹果手机维修性价比推荐:不花冤枉钱的理性选择
  • DocuSign电子签API集成实战:批量发送信封与Webhook回调处理
  • 2026年鹤壁烟酒选购指南:口碑好店真实对比
  • 易连EDI—EasyLink:企业级全场景文件传输管理(MFT)解决方案
  • 通讯管理机之数源系统(一)框架
  • 一个人就是一家公司:200+ AI 专家自动协作,帮你搞定研发、运营和营销
  • 简单易用的进销存该怎么选?分清真易用与功能极简陷阱(2026行业权威标准)
  • js中不会冒泡的事件有哪些?
  • Hybrid AI应用架构设计——WebView+LLM混合开发实践
  • 茶馆主题H5前端静态包|uni-app编译生成,2020风格UI,开箱即用