跳到主要内容

RBAC

通过组织、团队和细粒度权限(细化到表级别)来管理对 IEDB 部署的访问权限。

概述

基于Token的身份验证基础上构建,增加了组织结构和细粒度权限:

组织(例如:"某某公司")
└── 团队(例如:"数据工程部")
└── 角色(例如:"生产环境读写权限")
└── 数据库:"production" → [读, 写, 删除]
└── 数据库:"analytics" → [读]
└── 测量表:["metrics_", "events_"]

主要能力:

  • **组织机构 **— 公司或部门的最高级别分组
  • 团队— 按职能(工程、分析、运营)对用户进行分组
  • 角色— 为每个数据库定义权限,并可选择设置度量限制
  • 表级权限— 使用通配符模式限制对特定表的访问

前提条件

  • 必须启用身份验证(IEDB_AUTH_ENABLED=true
  • 企业许可证(含基于角色的访问控制功能)

权限模型

权限是在角色级别定义的,并应用于特定的数据库:

权限描述
read从数据库中查询数据
write将数据写入数据库
delete从数据库中删除数据
admin完全管理权限

metrics_*角色可以选择性地使用通配符模式(例如,匹配metrics_cpu``metrics_memory等)来限制对数据库中特定测量值的访问。

  • RBAC allow → 通过(来源 rbac
  • RBAC deny + token allow → 仍通过(来源 token
  • RBAC deny + token deny → 拒绝

API 参考

所有基于角色的访问控制 (RBAC) 接口都需要管理员身份验证。

组织

创建组织

curl -X POST http://localhost:8000/api/v1/rbac/organizations \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "371562656",
"description": "Main organization"
}'

响应:

{
"success": true,
"data": {
"id": 1,
"name": "371562656",
"description": "Main organization",
"created_at": "2026-02-13T10:00:00Z",
"updated_at": "2026-02-13T10:00:00Z"
}
}

组织列表

curl -H "Authorization: Bearer $ADMIN_TOKEN" \
http://localhost:8000/api/v1/rbac/organizations

组织详情

curl -H "Authorization: Bearer $ADMIN_TOKEN" \
http://localhost:8000/api/v1/rbac/organizations/1

更新组织

curl -X PATCH http://localhost:8000/api/v1/rbac/organizations/1 \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"description": "Updated description"}'

删除组织

curl -X DELETE http://localhost:8000/api/v1/rbac/organizations/1 \
-H "Authorization: Bearer $ADMIN_TOKEN"

团队

创建团队

curl -X POST http://localhost:8000/api/v1/rbac/organizations/1/teams \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Data Engineering",
"description": "Data engineering team"
}'

响应:

{
"success": true,
"data": {
"id": 1,
"organization_id": 1,
"name": "Data Engineering",
"description": "Data engineering team",
"created_at": "2026-02-13T10:00:00Z",
"updated_at": "2026-02-13T10:00:00Z"
}
}

团队列表

curl -H "Authorization: Bearer $ADMIN_TOKEN" \
http://localhost:8000/api/v1/rbac/organizations/1/teams

团队详情

curl -H "Authorization: Bearer $ADMIN_TOKEN" \
http://localhost:8000/api/v1/rbac/teams/1

更新团队

curl -X PATCH http://localhost:8000/api/v1/rbac/teams/1 \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"description": "Updated team description"}'

删除团队

curl -X DELETE http://localhost:8000/api/v1/rbac/teams/1 \
-H "Authorization: Bearer $ADMIN_TOKEN"

角色

创建角色

curl -X POST http://localhost:8000/api/v1/rbac/teams/1/roles \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "production-readwrite",
"database_pattern": "production",
"permissions": ["read", "write"]
}'

响应:

{
"success": true,
"data": {
"id": 1,
"team_id": 1,
"name": "production-readwrite",
"database_pattern": "production",
"permissions": ["read", "write"],
"created_at": "2026-02-13T10:00:00Z",
"updated_at": "2026-02-13T10:00:00Z"
}
}

数据库通配符

使用*此数据库模式可以授予所有数据库的权限。例如,"database_pattern": "*"授予"permissions": ["read"]对所有数据库的读取权限。

角色列表

curl -H "Authorization: Bearer $ADMIN_TOKEN" \
http://localhost:8000/api/v1/rbac/teams/1/roles

角色详情

curl -H "Authorization: Bearer $ADMIN_TOKEN" \
http://localhost:8000/api/v1/rbac/roles/1

更新角色

curl -X PATCH http://localhost:8000/api/v1/rbac/roles/1 \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"permissions": ["read", "write", "delete"]}'

删除角色

curl -X DELETE http://localhost:8000/api/v1/rbac/roles/1 \
-H "Authorization: Bearer $ADMIN_TOKEN"

表级权限

将角色限制在其数据库模式中的特定表级范围内。

添加表级权限

curl -X POST http://localhost:8000/api/v1/rbac/roles/1/measurements \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"measurement_pattern": "metrics_*"
}'

表级权限列表

curl -H "Authorization: Bearer $ADMIN_TOKEN" \
http://localhost:8000/api/v1/rbac/roles/1/measurements

移除表级权限

curl -X DELETE http://localhost:8000/api/v1/rbac/roles/1/measurements/1 \
-H "Authorization: Bearer $ADMIN_TOKEN"

操作指南:设置基于角色的访问控制

本示例设置了一个典型的组织,其中包含两个团队和不同的访问权限级别。

步骤 1:创建组织

curl -X POST http://localhost:8000/api/v1/rbac/organizations \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "LM Gateway"}'

步骤 2:创建团队

# 数据工程团队 — 完全访问权限
curl -X POST http://localhost:8000/api/v1/rbac/organizations/1/teams \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "Data Engineering"}'

# 分析团队 — 只读权限
curl -X POST http://localhost:8000/api/v1/rbac/organizations/1/teams \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "Analytics"}'

步骤 3:创建角色

# 数据工程团队:对生产数据库拥有读/写/删除权限
curl -X POST http://localhost:8000/api/v1/rbac/teams/1/roles \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "production-full",
"database_pattern": "production",
"permissions": ["read", "write", "delete"]
}'

# 分析团队:对生产数据库只读权限,且仅限于特定测量表
curl -X POST http://localhost:8000/api/v1/rbac/teams/2/roles \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "production-readonly",
"database_pattern": "production",
"permissions": ["read"]
}'

步骤 4:限制表级范围(可选)

# 分析团队只能访问 metrics_* 和 events_* 测量表
curl -X POST http://localhost:8000/api/v1/rbac/roles/2/measurements \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"measurement_pattern": "metrics_*"}'

curl -X POST http://localhost:8000/api/v1/rbac/roles/2/measurements \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"measurement_pattern": "events_*"}'

最佳实践

  1. 最小权限原则——从最小权限开始,根据需要逐步扩展。普通用户默认使用只读角色。
  2. 使用表级限制——当团队只需要访问特定数据时,应按表级权限进行限制,而不是授予完整的数据库访问权限。
  3. 谨慎使用通配符模式——数据库模式*会授予对所有数据库的访问权限。尽可能使用表级限制。
  4. 配合审计日志记录——启用审计日志以跟踪基于角色的访问控制 (RBAC) 变更和访问管理。
  5. 规划层级结构——在实施之前设计好组织和团队结构。典型的模式是每个公司一个组织,每个部门或职能部门一个团队。

后续步骤