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

如何在Python Runbook中获取Log Analytics工作区的共享密钥?

在Python Runbook中获取Log Analytics工作区密钥的可行方案

前提条件

确保Azure Automation账户的托管身份(系统分配或用户分配)拥有目标Log Analytics工作区的Microsoft.OperationalInsights/workspaces/sharedKeys/read权限,直接分配内置的Log Analytics Contributor角色即可满足需求。

实现代码

使用Azure官方Python SDK azure-mgmt-operationalinsights 和托管身份认证获取密钥,无需手动存储敏感凭据:

from azure.identity import ManagedIdentityCredential
from azure.mgmt.operationalinsights import OperationalInsightsManagementClient

# 替换为实际参数
SUBSCRIPTION_ID = "你的订阅ID"
RESOURCE_GROUP = "资源组名称"
WORKSPACE_NAME = "Log Analytics工作区名称"

# 系统分配托管身份直接初始化凭据
credential = ManagedIdentityCredential()
# 若使用用户分配托管身份,需指定client_id:
# credential = ManagedIdentityCredential(client_id="用户分配托管身份的Client ID")

# 初始化Operational Insights管理客户端
client = OperationalInsightsManagementClient(credential, SUBSCRIPTION_ID)

# 获取工作区共享密钥
shared_keys = client.workspaces.get_shared_keys(
    resource_group_name=RESOURCE_GROUP,
    workspace_name=WORKSPACE_NAME
)

# 提取主/次密钥
primary_key = shared_keys.primary_shared_key
secondary_key = shared_keys.secondary_shared_key

# 可直接将密钥用于Log Collector API认证
# 示例构造API授权头(仅作参考):
# import base64
# import hashlib
# import hmac
# workspace_id = "你的工作区ID"
# date_string = "当前UTC时间字符串"
# payload = "待上报的日志数据"
# signature = hmac.new(primary_key.encode('utf-8'), msg=("POST\n{}\napplication/json\nx-ms-date:{}".format(len(payload), date_string)).encode('utf-8'), digestmod=hashlib.sha256).digest()
# encoded_signature = base64.b64encode(signature).decode()
# authorization = f"SharedKey {workspace_id}:{encoded_signature}"

关键说明

  • 托管身份认证无需在代码中硬编码任何凭据,符合Azure安全最佳实践。
  • 主/次密钥功能等价,均可用于Log Collector API身份验证,可互为备份。
  • 若Runbook环境未预装依赖包,可通过Azure Automation模块库导入 azure-identity 和 azure-mgmt-operationalinsights 模块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:18:37