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

如何通过Logic Apps与Microsoft Graph API通知Entra ID闲置旧访问包所有者

实现方案:Logic Apps + Microsoft Graph API 清理闲置访问包

前置准备

  • 配置权限:为Logic Apps的托管身份(或应用注册)添加以下Microsoft Graph应用权限:
    • EntitlementManagement.Read.All(读取访问包信息)
    • GroupMember.Read.All(读取组成员)
    • Mail.Send(发送邮件)
      完成权限授予后确保权限已生效。

Logic Apps 具体流程

1. 定时触发工作流

使用Recurrence触发器,设置执行频率(例如每周1次),根据实际需求调整周期。

2. 获取所有访问包(处理分页)

由于访问包数量超过1000,必须处理Graph API的分页:

  • 初始化一个数组变量allAccessPackages,用于存储所有访问包数据。
  • 初始化字符串变量nextLink,默认值为空。
  • 添加Do Until循环,终止条件设为empty(variables('nextLink')):
    • 调用Microsoft Graph API动作,请求地址:
      • 若nextLink为空,使用 GET https://graph.microsoft.com/v1.0/identityGovernance/entitlementManagement/accessPackages?$top=999
      • 若nextLink不为空,直接使用nextLink的值作为请求地址
    • 将返回的value数组合并到allAccessPackages变量中:union(variables('allAccessPackages'), body('Get_access_packages')?['value'])
    • 更新nextLink变量为返回结果中的@odata.nextLink:body('Get_access_packages')?['@odata.nextLink']

3. 筛选创建时间超过180天的访问包

添加Filter Array动作,输入集合为variables('allAccessPackages'),筛选条件设为:

@less(item()?['createdDateTime'], addDays(utcNow(), -180, 'yyyy-MM-ddTHH:mm:ssZ'))

该表达式会保留所有创建时间早于180天前的访问包。

4. 逐个验证访问包的闲置条件

对筛选后的每个访问包,添加Apply to each循环:

4.1 检查是否有活动分配

调用Microsoft Graph API动作,请求地址:

GET https://graph.microsoft.com/v1.0/identityGovernance/entitlementManagement/accessPackages/{accessPackageId}/assignments?$filter=state eq 'Delivered'

其中{accessPackageId}替换为当前循环的访问包ID:items('Apply_to_each')?['id']

  • 判断返回的value数组长度是否为0:empty(body('Get_active_assignments')?['value']),如果不为0则跳过当前访问包。

4.2 检查范围组是否无成员

首先获取访问包的资源范围:从当前访问包的resourceScopes数组中,提取类型为Group的资源ID(即组ID)。

  • 对每个组ID,调用Microsoft Graph API获取成员数量:
    GET https://graph.microsoft.com/v1.0/groups/{groupId}/members/$count
    
  • 若所有关联组的成员数量都为0,则满足条件;只要有一个组有成员,就跳过当前访问包。

5. 收集访问包所有者信息

对符合闲置条件的访问包,调用Microsoft Graph API获取所有者:

GET https://graph.microsoft.com/v1.0/identityGovernance/entitlementManagement/accessPackages/{accessPackageId}/owners

提取所有者的mail字段,用于后续发送邮件。

6. 发送通知邮件

使用Office 365 Outlook连接器的**Send an email (V2)**动作,或直接调用Graph的Mail.Send API:

  • 收件人:所有者邮箱
  • 邮件主题:闲置访问包清理通知
  • 邮件内容:包含访问包名称、ID、创建时间等信息,示例内容:

    您好,您作为所有者的访问包「{accessPackageName}」(ID: {accessPackageId})已创建超过180天,且无活动分配、关联范围组无成员,请及时处理。

关键注意事项

  • 分页处理:必须通过@odata.nextLink循环获取所有访问包,避免遗漏超过1000条的数据。
  • 错误处理:为Graph API调用添加Configure run after设置,处理API调用失败的情况(例如重试3次)。
  • 性能优化:可在筛选访问包时,先通过Graph API的$filter提前过滤创建时间,减少后续处理的数据量:$filter=createdDateTime le {180天前的日期},但要注意日期格式需符合ISO 8601标准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 18:10:19