如何在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
相关产品推荐
相关产品推荐

