Log Ingestion API导入S3至Sentinel:Entra应用必要性及权限咨询
为什么需要Microsoft Entra应用?
Log Ingestion API属于Azure REST API体系,所有调用必须通过Microsoft Entra ID完成身份验证,确保只有授权实体能向指定数据收集规则(DCR)写入数据。你用az login获取的是个人用户令牌,但你的用户账号大概率未被授予DCR所需的Monitoring Data Ingestion Contributor角色,因此触发权限错误。
是否必须创建新的Entra应用?
不是必须,但创建Entra应用(服务主体)是生产环境的最优方案——它属于独立的服务身份,不会和个人用户的权限、生命周期绑定。若你无权限创建或配置Entra应用,可尝试以下替代方案:
替代方案1:提升个人用户权限
请求Azure管理员为你的个人用户账号,在目标DCR的「访问控制(IAM)」中分配Monitoring Data Ingestion Contributor角色。完成后重新执行az login,新获取的令牌将拥有足够权限发送数据。
替代方案2:使用Azure托管身份(适用于Azure内运行的脚本)
如果你的Python脚本部署在Azure资源上(如Azure Function、VM、AKS等),可为该资源启用系统分配/用户分配托管身份,再给这个托管身份分配Monitoring Data Ingestion Contributor角色到目标DCR。脚本可直接通过托管身份自动获取令牌,无需手动管理Entra应用或凭据。
替代方案3:使用管理员创建的服务主体
请求管理员创建一个服务主体(Entra应用)并为其分配DCR的Monitoring Data Ingestion Contributor角色,你只需使用该服务主体的凭据登录Azure CLI:
az login --service-principal -u <客户端ID> -p <客户端密钥> --tenant <租户ID>
之后运行Python脚本即可正常发送数据。
核心注意点
无论采用哪种方案,必须确保身份主体(个人用户、托管身份、服务主体)被授予针对目标DCR的Monitoring Data Ingestion Contributor角色——其他通用角色(如Log Analytics Contributor)无法满足Log Ingestion API的权限要求。
内容的提问来源于stack exchange,提问作者Ashwin

