
ahoowang/cosec-gateway本镜像提供一套基于RBAC(基于角色的访问控制)和策略的多租户安全框架,旨在解决多租户环境下的安全隔离、权限管控与策略执行问题。框架通过整合RBAC模型与策略管理机制,实现对用户、角色、权限及资源访问的精细化控制,适用于SaaS平台、企业多部门系统、云服务等多租户场景的安全管理需求。
通过Docker直接运行镜像:
bashdocker run -d \ --name rbac-security-framework \ -p 8080:8080 \ -e TENANT_ID=default-tenant \ -e RBAC_CONFIG=/config/rbac.yaml \ -e POLICY_DIR=/policies \ -v $(pwd)/config:/config \ -v $(pwd)/policies:/policies \ myregistry/rbac-policy-security-framework:latest
| 环境变量名 | 描述 | 默认值 | 必需性 |
|---|---|---|---|
TENANT_ID | 租户标识,多租户环境下用于实例隔离 | default | 否 |
RBAC_CONFIG | RBAC配置文件路径 | /etc/rbac/rbac.yaml | 否 |
POLICY_DIR | 策略文件存放目录 | /etc/policies | 否 |
LOG_LEVEL | 日志级别(DEBUG/INFO/WARN/ERROR) | INFO | 否 |
DB_CONNECTION | 后端数据库连接字符串 | sqlite:///security.db | 否 |
API_PORT | 服务监听端口 | 8080 | 否 |
CORS_ALLOW_ORIGIN | CORS允许的源地址 | * | 否 |
yamlversion: '3.8' services: rbac-security: image: myregistry/rbac-policy-security-framework:latest container_name: rbac-security-service ports: - "8080:8080" environment: - TENANT_ID=company-x - RBAC_CONFIG=/config/rbac.yaml - POLICY_DIR=/policies - LOG_LEVEL=INFO - DB_CONNECTION=postgresql://rbac_user:rbac_pass@db:5432/rbac_db volumes: - ./config:/config # 挂载RBAC配置文件 - ./policies:/policies # 挂载策略文件 - ./logs:/app/logs # 挂载日志目录 depends_on: - db db: image: postgres:14-alpine container_name: rbac-security-db environment: - POSTGRES_USER=rbac_user - POSTGRES_PASSWORD=rbac_pass - POSTGRES_DB=rbac_db volumes: - postgres-data:/var/lib/postgresql/data ports: - "5432:5432" volumes: postgres-data:
用于定义租户内的角色、权限及用户-角色映射,示例:
yaml# 角色定义 roles: - name: admin # 管理员角色 description: "Full system access" permissions: - resource: "*" # 所有资源 actions: "*" # 所有操作 - name: developer # 开发者角色 description: "Application development access" permissions: - resource: "app:*" # 应用资源 actions: "read,write,deploy" - resource: "api:*" # API资源 actions: "invoke" - name: viewer # 查看者角色 description: "Read-only access" permissions: - resource: "app:*" actions: "read" - resource: "dashboard:*" actions: "view" # 用户-角色映射 users: - username: *** roles: [admin] - username: *** roles: [developer] - username: *** roles: [viewer]
在POLICY_DIR目录下创建策略文件(如access-policy.rego):
regopackage security.policy # 默认拒绝访问 default allow = false # 允许admin角色访问所有资源 allow { input.user.roles[_] == "admin" } # 允许developer角色在工作时间访问app资源 allow { input.user.roles[_] == "developer" input.resource startsWith "app:" input.action in ["read", "write", "deploy"] # 工作时间校验(示例:周一至周五 9:00-18:00) time.weekday(time.now()) >= 1 # 周一(1)至周五(5) time.weekday(time.now()) <= 5 hour := time.clock(time.now()).hour hour >= 9 hour <= 18 } # 拒绝viewer角色删除操作 deny { input.user.roles[_] == "viewer" input.action == "delete" }
通过HTTP POST请求验证用户对资源的访问权限:
bashcurl -X POST http://localhost:8080/api/v1/auth/check \ -H "Content-Type: application/json" \ -d '{ "user": "***", "resource": "app:service-a", "action": "deploy" }'
成功响应示例:
json{ "allowed": true, "tenant_id": "company-x", "user": "***", "resource": "app:service-a", "action": "deploy", "reason": "Matched developer role policy", "timestamp": "2024-05-20T14:30:00Z" }
创建新角色:
bashcurl -X POST http://localhost:8080/api/v1/roles \ -H "Content-Type: application/json" \ -d '{ "name": "tester", "description": "QA testing access", "permissions": [ { "resource": "app:*", "actions": "read,test" } ] }'
TENANT_ID与配置目录隔离。manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务