关于 implementing-azure-ad-privileged-identity-management
该技能介绍 Microsoft Entra Privileged Identity Management(PIM)的规划与配置,用于管理 Entra 角色、Azure 资源角色和特权组的临时访问。内容涵盖角色激活策略、访问审查与安全告警。
主要功能
- 01规划特权角色分配
- 02设置激活、分配与通知策略
- 03通过 Microsoft Graph API 配置
- 04安排定期访问审查
- 05启用 PIM 安全告警
适用场景
- 01将常驻特权改为符合条件的分配
- 02为管理员角色配置 MFA 与审批
- 03定期复核特权访问权限
- 04监控绕过 PIM 的角色分配
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill implementing-azure-ad-privileged-identity-management安装后在 Claude Code 中输入/implementing-azure-ad-privileged-identity-management确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEassets/template.mdreferences/api-reference.mdstandards.mdworkflows.mdscripts/agent.pyprocess.py详细介绍
实施 Azure AD Privileged Identity Management
概述
Microsoft Entra Privileged Identity Management (PIM) 提供基于时间和基于审批的角色激活,以缓解对关键资源的过度、不必要或滥用访问所带来的风险。PIM 将永久(常驻)特权分配替换为符合条件分配,要求用户在使用前显式激活其角色,并支持可配置的持续时间、MFA 强制、审批工作流和理由要求。这是 Microsoft 环境中零信任身份治理的核心组件。
何时使用
- 在环境中部署或配置实施 Azure AD Privileged Identity Management 功能时
- 建立与合规要求一致的安全控制时
- 为该领域构建或改进安全架构时
- 执行需要此实施的安全评估时
先决条件
- Microsoft Entra ID P2 或 Microsoft Entra ID Governance 许可证
- 全局管理员或特权角色管理员角色
- 用于 Azure 资源角色管理的 Azure 订阅
- 为所有特权用户配置 MFA
- 为管理员账户配置 Microsoft Authenticator 或 FIDO2 密钥
核心概念
分配类型
| 类型 | 行为 | 使用场景 |
|---|---|---|
| 符合条件 | 用户必须先激活角色才能使用;在配置的持续时间后过期 | 日常管理工作 |
| 活动 | 角色始终处于活动状态;无需激活 | 服务账户、应急账户 |
| 时间限制 | 任一类型并带有明确的开始/结束日期 | 临时项目访问、承包商访问 |
PIM 激活流程
User with Eligible Assignment
│
├── Opens PIM portal → My Roles
│
├── Clicks "Activate" on the desired role
│
├── Provides justification and optional ticket number
│
├── Completes MFA challenge (if required)
│
├── [If approval required] → Notification sent to approvers
│ │
│ ├── Approver reviews and approves/denies
│ └── User notified of decision
│
├── Role activated for configured duration (e.g., 8 hours)
│
└── Role automatically deactivated when duration expires
支持的资源类型
- Microsoft Entra 角色:全局管理员、Exchange 管理员、安全管理员等。
- Azure 资源角色:订阅/资源组上的所有者、参与者、用户访问管理员
- PIM for Groups:管理特权安全组中的成员身份
工作流
步骤 1:规划角色分配
审核当前的永久角色分配,并确定哪些应转换为符合条件:
| 当前角色 | 永久持有者 | 操作 |
|---|---|---|
| 全局管理员 | 2-3 名管理员 | 转换为符合条件,保留 1 个应急账户处于活动状态 |
| Exchange 管理员 | IT 团队 | 全部转换为符合条件 |
| 安全管理员 | SOC 团队 | 转换为符合条件 |
| 用户管理员 | 帮助台 | 转换为符合条件 |
| 应用程序管理员 | DevOps | 转换为符合条件 |
最佳实践:保持不超过 2 个永久全局管理员(应急账户)。
步骤 2:配置角色设置
为每个 Entra 目录角色配置 PIM 设置:
通过 Microsoft Entra 管理中心:
- 导航到 Identity Governance > Privileged Identity Management > Microsoft Entra roles
- 选择“设置”并选择要配置的角色
- 配置以下内容:
激活设置:
- 最长激活持续时间:8 小时(推荐;最长 72 小时)
- 激活时要求 MFA:已启用
- 要求提供理由:已启用
- 要求提供工单信息:已启用(用于变更管理集成)
- 要求审批:为全局管理员、安全管理员启用
分配设置:
- 允许永久符合条件分配:否(设置过期时间)
- 符合条件分配在以下时间后过期:6 个月(需要重新认证)
- 允许永久活动分配:仅用于应急账户
- 活动分配要求 MFA:已启用
- 活动分配要求提供理由:已启用
通知设置:
- 成员被分配为符合条件时发送电子邮件:角色分配者、管理员
- 成员激活时发送电子邮件:管理员、安全团队
- 符合条件的成员激活角色时发送电子邮件:角色被分配者
步骤 3:通过 Microsoft Graph API 配置
import requests
# Acquire token for Microsoft Graph
def get_graph_token(tenant_id, client_id, client_secret):
url = f"https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token"
data = {
"grant_type": "client_credentials",
"client_id": client_id,
"client_secret": client_secret,
"scope": "https://graph.microsoft.com/.default"
}
response = requests.post(url, data=data)
return response.json()["access_token"]
# Create eligible role assignment
def create_eligible_assignment(token, role_definition_id, principal_id,
directory_scope="/", duration_hours=8):
url = "https://graph.microsoft.com/v1.0/roleManagement/directory/roleEligibilityScheduleRequests"
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
}
body = {
"action": "adminAssign",
"justification": "PIM eligible assignment",
"roleDefinitionId": role_definition_id,
"directoryScopeId": directory_scope,
"principalId": principal_id,
"scheduleInfo": {
"startDateTime": "2025-01-01T00:00:00Z",
"expiration": {
"type": "afterDuration",
"duration": "P180D" # 180-day eligible window
}
}
}
response = requests.post(url, headers=headers, json=body)
return response.json()
# Activate a role (user self-service)
def activate_role(token, role_definition_id, principal_id, justification,
duration_hours=8):
url = "https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignmentScheduleRequests"
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
}
body = {
"action": "selfActivate",
"principalId": principal_id,
"roleDefinitionId": role_definition_id,
"directoryScopeId": "/",
"justification": justification,
"scheduleInfo": {
"startDateTime": None, # Now
"expiration": {
"type": "afterDuration",
"duration": f"PT{duration_hours}H"
}
}
}
response = requests.post(url, headers=headers, json=body)
return response.json()
第 4 步:配置访问评审
设置定期访问评审,以验证符合条件的分配仍然适当:
- 导航到 Identity Governance > Access Reviews > New Access Review
- 配置:
- 评审范围:Privileged Identity Management 角色分配
- 角色:选择所有关键角色(Global Admin、Security Admin 等)
- 评审者:经理或带理由的自评审
- 频率:关键角色每季度一次,其他角色每半年一次
- 自动应用结果:对未响应的评审移除访问权限
- 持续时间:评审者需在 14 天内响应
第 5 步:配置警报
启用 PIM 安全警报:
| 警报 | 触发条件 | 操作 |
|---|---|---|
| 全局管理员过多 | > 5 个 Global Admin | 审查并减少 |
| 在 PIM 之外分配角色 | 直接分配角色 | 调查并转换为 PIM |
| 角色未要求 MFA | 未使用 MFA 进行激活 | 启用 MFA 要求 |
| 陈旧的符合条件分配 | 90 天内未激活 | 审查并考虑移除 |
| 可能陈旧的服务账户 | 活动分配未被使用 | 调查并停用 |
验证清单
- 所有永久特权角色分配已转换为符合条件(紧急访问账户除外)
- 紧急访问账户配置为活动状态并启用监控警报
- 所有角色激活均要求 MFA
- 已为 Global Administrator 和 Security Administrator 配置审批工作流
- 关键角色的最长激活时长设置为 8 小时或更短
- 符合条件的分配在 6 个月后过期(需要重新认证)
- 激活需要提供理由和工单信息
- 已为角色分配和激活配置电子邮件通知
- 所有特权角色的访问评审已安排为每季度一次
- PIM 警报已启用并每周审查
- 审核日志已转发到 SIEM 以进行监控
参考资料
评论
支持 Markdown