# Performing Entitlement Review With Sailpoint Iiq

> 使用 SailPoint IdentityIQ 执行权限审查和访问认证活动， 包括经理认证、定向权限审查、基于角色的访问验证、 SoD 违规整改和自动化撤销工作流。 适用于访问审查、权限认证、SailPoint IIQ 治理或定期用户访问重认证相关请求。

- Skill: `killvxk/performing-entitlement-review-with-sailpoint-iiq` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add killvxk/performing-entitlement-review-with-sailpoint-iiq`
- Raw SKILL.md: https://api.skillmd.com/api/skills/killvxk/performing-entitlement-review-with-sailpoint-iiq/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: Apache-2.0
- Author: killvxk (https://skillmd.com/u/killvxk)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/killvxk/performing-entitlement-review-with-sailpoint-iiq

---


# 使用 SailPoint IdentityIQ 执行权限审查

## 使用场景

- 合规性要求季度或年度访问认证活动（SOX、HIPAA、PCI-DSS）
- 组织需要为所有直属下属进行基于经理的自动化访问审查
- 需要对敏感应用程序或高权限角色进行定向权限审查
- 必须识别并整改职责分离（SoD）违规
- 需要发现并清理孤立账户和多余权限
- 审计发现要求提供定期访问审查和整改跟踪的证据

**不适用于**实时访问控制决策；IdentityIQ 认证是周期性审查流程，旨在治理和合规验证。

## 前提条件

- 已部署 SailPoint IdentityIQ 8.2+ 并配置数据库后端（Oracle、MySQL 或 SQL Server）
- 已为所有在范围内的系统配置应用连接器（Active Directory、LDAP、数据库、SaaS 应用）
- 已聚合所有已连接来源的当前权限数据的 Identity Cube
- 已配置电子邮件服务器用于认证通知
- 已在身份模型中定义经理层级关系
- 已填充业务角色和权限术语表以提供审查员背景信息

## 工作流

### 第 1 步：定义认证活动策略

规划认证范围和审查员分配：

```java
// SailPoint IdentityIQ BeanShell - 活动配置
import sailpoint.object.*;
import sailpoint.api.*;
import java.util.*;

// 定义季度经理认证的活动计划
CertificationSchedule schedule = new CertificationSchedule();
schedule.setName("Q1-2026-Manager-Access-Review");
schedule.setDescription("所有在职员工的季度经理认证");
schedule.setType(Certification.Type.Manager);

// 配置活动范围
CertificationDefinition certDef = new CertificationDefinition();
certDef.setName("Q1 经理认证");
certDef.setOwner(context.getObjectByName(Identity.class, "cert-admin"));

// 设置认证选项
certDef.setCertifierSelectionType(CertificationDefinition.CertifierSelectionType.Manager);
certDef.setIncludeEntitlements(true);
certDef.setIncludeRoles(true);
certDef.setIncludeAccounts(true);
certDef.setIncludeAdditionalEntitlements(true);

// 从经理审查中排除服务账户
Filter exclusionFilter = Filter.ne("type", "service");
certDef.setExclusionFilter(exclusionFilter);

// 配置通知设置
certDef.setNotificationEnabled(true);
certDef.setReminderFrequency(7); // 天
certDef.setEscalationEnabled(true);
certDef.setEscalationDays(14);
certDef.setEscalationRecipient("security-governance-team");

// 设置活跃期
certDef.setActivePeriodDays(30);
certDef.setAutoCloseEnabled(true);
certDef.setDefaultRevoke(true); // 未审查则撤销

context.saveObject(certDef);
context.commitTransaction();
```

### 第 2 步：配置定向权限认证

为高风险应用程序和特权权限设置重点审查：

```java
// 针对特权访问审查的定向认证
import sailpoint.object.*;
import sailpoint.api.*;

CertificationDefinition targetedCert = new CertificationDefinition();
targetedCert.setName("特权访问定向审查");
targetedCert.setType(Certification.Type.ApplicationOwner);

// 限定为特定高风险应用程序
List applicationNames = new ArrayList();
applicationNames.add("Active Directory");
applicationNames.add("AWS IAM");
applicationNames.add("Oracle EBS");
applicationNames.add("SAP GRC");
applicationNames.add("CyberArk Vault");
targetedCert.setApplicationNames(applicationNames);

// 仅过滤特权权限
String entitlementFilter = "entitlement.classification == \"Privileged\" " +
    "|| entitlement.riskScore > 800 " +
    "|| entitlement.name.contains(\"Admin\") " +
    "|| entitlement.name.contains(\"Root\") " +
    "|| entitlement.name.contains(\"DBA\")";
targetedCert.setEntitlementFilter(entitlementFilter);

// 指定应用所有者为认证员
targetedCert.setCertifierSelectionType(
    CertificationDefinition.CertifierSelectionType.ApplicationOwner
);

// 配置审批工作流
targetedCert.setApprovalRequired(true);
targetedCert.setSignOffRequired(true);
targetedCert.setReasonRequired(true);

// 在认证期间启用 SoD 策略检查
targetedCert.setCheckSodPolicies(true);
targetedCert.setSodPolicyAction(CertificationDefinition.SodPolicyAction.Flag);

context.saveObject(targetedCert);
context.commitTransaction();
```

### 第 3 步：在认证中实施 SoD 策略检查

定义在审查期间标记违规的职责分离策略：

```java
// 创建财务系统访问冲突的 SoD 策略
import sailpoint.object.*;
import sailpoint.object.Policy;

Policy sodPolicy = new Policy();
sodPolicy.setName("财务 SoD - 应付/应收冲突");
sodPolicy.setType(Policy.TYPE_SOD);
sodPolicy.setDescription("防止用户同时拥有应付账款和应收账款访问权限");
sodPolicy.setViolationOwner(
    context.getObjectByName(Identity.class, "compliance-team")
);

// 定义冲突权限
SODConstraint constraint = new SODConstraint();
constraint.setName("AP-AR 分离");

// 左侧：应付账款权限
PolicyConstraint leftSide = new PolicyConstraint();
leftSide.setApplication("SAP ERP");
leftSide.addEntitlement("SAP_AP_PROCESSOR");
leftSide.addEntitlement("SAP_AP_APPROVER");
leftSide.addEntitlement("SAP_AP_ADMIN");
constraint.setLeftConstraint(leftSide);

// 右侧：应收账款权限
PolicyConstraint rightSide = new PolicyConstraint();
rightSide.setApplication("SAP ERP");
rightSide.addEntitlement("SAP_AR_PROCESSOR");
rightSide.addEntitlement("SAP_AR_APPROVER");
rightSide.addEntitlement("SAP_AR_ADMIN");
constraint.setRightConstraint(rightSide);

// 设置违规严重性和整改措施
constraint.setViolationSeverity("High");
constraint.setCompensatingControl("超过 $10,000 的交易需要双重审批");

sodPolicy.addConstraint(constraint);
context.saveObject(sodPolicy);
context.commitTransaction();
```

### 第 4 步：配置撤销和整改工作流

当认证员撤销权限时自动化访问移除：

```java
// 配置已撤销权限的自动配置
import sailpoint.object.*;
import sailpoint.api.*;

// 创建整改工作流
Workflow remediationWorkflow = new Workflow();
remediationWorkflow.setName("认证撤销工作流");
remediationWorkflow.setType(Workflow.Type.CertificationRemediation);

// 第 1 步：创建撤销配置计划
Step createPlan = new Step();
createPlan.setName("创建撤销计划");
createPlan.setScript(
    "import sailpoint.object.ProvisioningPlan;\n" +
    "// 创建配置计划以移除权限\n" +
    "ProvisioningPlan plan = new ProvisioningPlan();\n" +
    "plan.setIdentity(identity);\n" +
    "// 使用 Remove 操作添加账户请求\n" +
    "return plan;"
);

// 第 2 步：执行带重试逻辑的配置
Step executeProvisioning = new Step();
executeProvisioning.setName("执行撤销");
executeProvisioning.setScript(
    "import sailpoint.api.Provisioner;\n" +
    "Provisioner provisioner = new Provisioner(context);\n" +
    "ProvisioningResult result = provisioner.execute(plan);\n" +
    "if (result.isCommitted()) {\n" +
    "    auditEvent(\"权限已成功撤销\", identity, plan);\n" +
    "} else {\n" +
    "    openWorkItem(\"需要手动撤销\", identity, plan);\n" +
    "}"
);

context.saveObject(remediationWorkflow);
context.commitTransaction();
```

### 第 5 步：监控活动进度和合规指标

跟踪认证完成情况并生成合规证据：

```java
// 活动监控和报告脚本
import sailpoint.object.*;
import sailpoint.api.*;

QueryOptions qo = new QueryOptions();
qo.addFilter(Filter.eq("phase", Certification.Phase.Active));
Iterator certIterator = context.search(Certification.class, qo);

while (certIterator.hasNext()) {
    Certification cert = certIterator.next();

    System.out.println("活动: " + cert.getName());
    System.out.println("  类型: " + cert.getType());
    System.out.println("  阶段: " + cert.getPhase());
    System.out.println("  截止日期: " + cert.getExpiration());

    CertificationStats stats = cert.getStatistics();
    int totalItems = stats.getTotalEntities();
    int completedItems = stats.getCompletedEntities();
    int pendingItems = totalItems - completedItems;
    double completionPct = (completedItems * 100.0) / totalItems;

    System.out.println("  总项目数: " + totalItems);
    System.out.println("  已完成: " + completedItems + " (" +
        String.format("%.1f", completionPct) + "%)");
    System.out.println("  待处理: " + pendingItems);

    // 识别逾期认证员
    List certifiers = cert.getCertifiers();
    for (Object certObj : certifiers) {
        CertificationEntity entity = (CertificationEntity) certObj;
        if (!entity.isCompleted() && cert.isOverdue()) {
            System.out.println("  [逾期] 认证员: " +
                entity.getCertifier().getDisplayName());
        }
    }
}
```

### 第 6 步：生成审计证据和报告

导出认证结果供审计人员审查：

```java
// 生成已完成认证的审计报告
import sailpoint.object.*;
import sailpoint.api.*;
import sailpoint.tools.Util;

QueryOptions qo = new QueryOptions();
qo.addFilter(Filter.eq("phase", Certification.Phase.End));
qo.addFilter(Filter.ge("signed", Util.stringToDate("2026-01-01")));
qo.addFilter(Filter.le("signed", Util.stringToDate("2026-03-31")));

List results = context.getObjects(Certification.class, qo);

StringBuilder auditReport = new StringBuilder();
auditReport.append("访问认证审计报告\n");
auditReport.append("时间段: Q1 2026\n");
auditReport.append("生成时间: " + new Date() + "\n");
auditReport.append("=".repeat(50) + "\n\n");

for (Certification cert : results) {
    CertificationStats stats = cert.getStatistics();
    auditReport.append("活动: " + cert.getName() + "\n");
    auditReport.append("  已审核项目: " + stats.getTotalEntities() + "\n");
    auditReport.append("  已批准: " + stats.getApprovedCount() + "\n");
    auditReport.append("  已撤销: " + stats.getRevokedCount() + "\n");
    auditReport.append("  已签署: " + (cert.isSignedOff() ? "是" : "否") + "\n\n");
}

System.out.println(auditReport.toString());
```

## 关键概念

| 术语 | 定义 |
|------|------------|
| **认证活动** | 一个有组织的审查流程，指定认证员验证用户是否应在一个或多个应用程序中保留当前的访问权限 |
| **访问审查** | 活动中的单个审查单元，认证员检查特定用户权限并做出批准/撤销决策 |
| **权限** | 在目标应用程序上授予身份的特定权限、组成员资格、角色或访问权利 |
| **认证员** | 负责做出访问决策的审查员，通常为经理、应用所有者或数据所有者 |
| **撤销** | 从用户移除权限的决策，触发对目标应用程序的配置请求以移除访问权限 |
| **SoD 违规** | 职责分离冲突，用户持有来自两个或多个相互冲突的访问组的权限，产生分离风险 |
| **整改** | 根据认证决策从目标系统移除已撤销访问的自动或手动流程 |

## 工具与系统

- **SailPoint IdentityIQ**：企业身份治理平台，提供访问认证、生命周期管理和合规报告
- **IdentityIQ Compliance Manager**：运行认证活动、跟踪审查员进度和生成合规证据的模块
- **SailPoint REST API**：用于自动化认证活动、查询状态和提取审计数据的编程接口
- **IdentityIQ 报告生成器**：内置报告引擎，用于生成访问审查统计、SoD 违规摘要和趋势分析

## 常见场景

### 场景：SOX 合规季度访问审查

**背景**：一家上市公司必须根据 SOX 第 404 条展示对所有财务应用程序的季度访问审查。此前的手动审查流程需要 6 周并产生不一致的结果。

**方法**：
1. 定义应用范围：SAP ERP、Oracle Financials、银行平台和资金系统
2. 配置经理认证，设置 30 天活跃期用于常规访问审查
3. 以应用所有者为认证员，为特权财务角色创建定向权限认证
4. 启用 SoD 策略检查，标记 AP/AR、总账过账/审批和用户管理/交易冲突
5. 在第 7、14、21 天配置自动提醒，在第 25 天升级至合规团队
6. 设置活动结束时未审查项目的默认撤销，以强制完成问责制
7. 为外部审计人员生成带决策审计跟踪的签署认证报告
8. 跟踪撤销完成情况，确保所有被拒绝的访问实际上从目标系统中移除

**常见误区**：
- 未预先填充权限描述导致认证员批准所有不理解的内容
- 将活动设置得过短（不足 21 天）导致草率审查和低质量审查
- 未验证撤销是否实际配置到目标系统（纸面批准但系统中仍然活跃）
- 服务账户拥有财务系统访问权限时从审查范围中遗漏

## 输出格式

```
访问认证活动报告
=======================================
活动:          Q1-2026 经理访问审查
类型:          经理认证
时间段:        2026-01-15 至 2026-02-14
状态:          已完成

覆盖范围
已审查身份:      2,847
在范围内的应用:  34
权限总数:        18,392

决策摘要
已批准:          16,841 (91.6%)
已撤销:           1,203 (6.5%)
已缓解:             198 (1.1%)
已委派:             150 (0.8%)

撤销状态
已配置:          1,089 / 1,203 (90.5%)
待处理:             87
失败:               27（已创建手动工作项）

SoD 违规
已标记:             43
已整改:             31
补偿控制:           12

认证员合规性
准时完成率:      89.3%
需要升级:       14 位认证员
平均审查时间:   每项 3.2 分钟

签署
活动签署:    2026-02-14，由 compliance-admin 签署
审计证据:    已导出至 /reports/Q1-2026-cert-evidence.pdf
```

