使用说明
PIM我
Azure PIM角色激活库和MCP服务器。通过编程或自然语言与您的AI助手激活角色。将常用角色另存为收藏夹,并使用一个命令全部激活。
快速开始
先决条件
- Node.js 18+
- Azure CLI已安装并登录(
az login) - 具有PIM资格角色的Azure帐户
作为MCP服务器
添加到您的MCP客户端:
VS Code (.vscode/mcp.json):
{
"servers": {
"pim-me": {
"command": "npx",
"args": ["-y", "pim-me-mcp"]
}
}
}
克劳德桌面版 (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"pim-me": {
"command": "npx",
"args": ["-y", "pim-me-mcp"]
}
}
}
作为图书馆
npm install pim-me-mcp
import {
listEligibleRoles,
listActiveRoles,
activateRoles,
activateQuickRoles
} from 'pim-me-mcp';
// List all roles you can activate
const eligible = await listEligibleRoles();
console.log(eligible.roles);
// Check what's currently elevated
const active = await listActiveRoles();
active.roles.forEach(role => {
console.log(`${role.roleName} expires at ${role.endDateTime}`);
});
// Activate specific roles
const result = await activateRoles(
[{ name: 'Contributor', scope: 'my-subscription' }],
'Development work',
8 // hours
);
// Or activate your saved favorites
const quickResult = await activateQuickRoles('Development work');
MCP服务器使用情况
设置快速角色
使用此工具的最简单方法是设置一次常用角色:
- 问:“显示我的PIM角色”或“帮助我设置快速角色”
- 选择角色 从编号列表中:“将角色20、21、22另存为我的快速角色”
- 设置默认对齐方式 (可选):包括
defaultJustification: "Development work"保存时
您的配置已保存到 ~/.pim-me-mcp.json:
{
"quickRoles": {
"roles": [
{ "name": "Owner", "scope": "my-resource-group" },
{ "name": "Contributor", "scope": "my-subscription" }
],
"description": "My daily development roles",
"defaultJustification": "Development work"
}
}
日常使用
配置后,只需说:
- “激活我的快速角色” --使用默认理由
- “激活我的快速角色以调试生产问题” --自定义理由
- “列出我符合条件的角色” --查看您可以激活的所有角色
- “列出我的活动角色” --查看当前提升的角色及其过期时间
- “激活我的订阅的参与者角色” --激活特定角色
可用工具(MCP)
| 工具 | 说明 |
|---|---|
list_eligible_roles |
列出您可以激活的所有PIM角色 |
list_active_roles |
列出当前提升的角色及其过期时间 |
list_quick_roles |
使用索引显示符合条件的角色+您保存的快速角色 |
save_quick_roles |
将所选角色(按索引)保存为快速角色 |
activate_quick_roles |
激活您保存的快速角色 |
activate_pim_roles |
按名称激活特定角色 |
库API
核心功能
| 功能 | 说明 |
|---|---|
listEligibleRoles() |
返回您可以激活的所有PIM角色 |
listActiveRoles() |
返回当前提升的角色及其过期时间 |
activateRoles(roles, justification, hours) |
激活特定角色 |
activateQuickRoles(justification?, hours?) |
激活您保存的收藏夹 |
配置功能
| 功能 | 说明 |
|---|---|
loadQuickRolesConfig() |
从配置文件或环境中加载快速角色 |
saveQuickRolesConfig(roles, desc?, justification?) |
将快速角色保存到配置 |
getConfigPath() |
返回路径 ~/.pim-me-mcp.json |
类型
interface RoleConfig {
name: string; // e.g., "Contributor"
scope: string; // e.g., "my-subscription"
}
interface QuickRolesConfig {
roles: RoleConfig[];
description?: string;
defaultJustification?: string;
}
运作原理
此MCP服务器使用Azure CLI与Azure PIM REST API进行交互:
- 列出符合条件的角色 通过
roleEligibilityScheduleInstancesAPI - 列出活动角色 通过
roleAssignmentScheduleInstancesAPI(过滤至assignmentType=Activated) - 激活角色 通过
roleAssignmentScheduleRequestsAPISelfActivate请求类型
API版本: 2020-10-01
棘手的实施细节
🔑 基于组的角色分配
Azure PIM自动化最棘手的部分是处理 基于组的角色分配当一个角色被分配给一个组(而不是直接分配给用户)时,激活需要特殊的处理。
问题1:主体ID错误
症状: "InsufficientPermissions" 或 "The assignee cannot be found"
原因:The roleEligibilityScheduleInstances API返回 群的 主体ID,但激活API需要 用户的 主体ID。
解决方案:从Azure访问令牌JWT中提取用户的OID:
async function getCurrentUserPrincipalId(): Promise<string> {
const tokenResult = await azCommand(
"account get-access-token --resource https://management.azure.com"
);
const tokenData = JSON.parse(tokenResult);
// Decode JWT payload (base64)
const payload = JSON.parse(
Buffer.from(tokenData.accessToken.split('.')[1], 'base64').toString()
);
return payload.oid; // The user's Azure AD Object ID
}
问题2:缺少链接计划ID
症状:即使主体ID正确,基于组的角色的激活也会失败
解决方案:对于基于小组的作业,包括 linkedRoleEligibilityScheduleId 在请求正文中。这将激活链接回组的资格计划。
📦 激活请求正文
{
"properties": {
"principalId": "<user-oid>",
"roleDefinitionId": "<role-definition-id>",
"requestType": "SelfActivate",
"justification": "<business-justification>",
"scheduleInfo": {
"expiration": {
"type": "AfterDuration",
"duration": "PT8H"
}
},
"linkedRoleEligibilityScheduleId": "<eligibility-schedule-id>"
}
}
备注:
linkedRoleEligibilityScheduleId对于基于组的作业是必需的,对于直接作业是可选的。
⚠️ 错误处理
| 错误代码 | 含义 | 解决方案 |
|---|---|---|
RoleAssignmentExists |
角色已激活 | 视为成功✅ |
InsufficientPermissions |
主体ID错误 | 使用用户的OID,而不是组的OID |
The assignee cannot be found |
主体ID不匹配 | 从访问令牌中提取OID |
📋 api参考
| 端点 | 方法 | 目的 |
|---|---|---|
/providers/Microsoft.Authorization/roleEligibilityScheduleInstances?$filter=asTarget() |
GET | 列出符合条件的角色 |
/providers/Microsoft.Authorization/roleAssignmentScheduleInstances?$filter=asTarget() |
GET | 列出活动角色 |
/{scope}/providers/Microsoft.Authorization/roleAssignmentScheduleRequests/{guid} |
PUT | 激活角色 |
故障排除
| 问题 | 解决方案 |
|---|---|
| “找不到命令‘az’” | 安装Azure命令行界面 |
| “请运行‘az登录’” | 运行 az login 进行身份验证 |
| 找不到角色 | 使用 list_eligible_roles 查看确切的角色名称和作用域 |
许可证
麻省理工学院
