agentic_huge_data_base / wiki
页面 Cognee · 7.2 安全配置·DeepWiki 中文全文译文

7.2 · 安全配置(Security Configuration)

记忆管道与知识图谱构建 · 本章是 Cognee DeepWiki 中文译文的独立章节页,保留原始链接、源码锚点、模块标签和章节层级。

项目Cognee 章节7.2 状态全文译文 模块配置治理、认证、权限与安全、检索、召回与索引、接口与服务契约
源码线索
  • .env.template
  • README.md
  • assets/cognee_benefits.png
  • cognee/api/v1/config/config.py
  • cognee/infrastructure/llm/config.py
  • cognee/infrastructure/llm/structured_output_framework/litellm_instructor/llm/bedrock/adapter.py
  • cognee/infrastructure/llm/structured_output_framework/litellm_instructor/llm/get_llm_client.py
  • cognee/modules/settings/__init__.py
  • cognee/modules/settings/get_settings.py
  • cognee/modules/settings/save_llm_config.py
模块标签
  • 配置治理
  • 认证、权限与安全
  • 检索、召回与索引
  • 接口与服务契约
  • 界面与交互

中文译文

安全配置(中文译文)

原始 DeepWiki 页面:https://deepwiki.com/topoteretes/cognee/7.2-security-configuration
翻译时间:2026-05-27T08:45:31.597Z
翻译模型:deepseek-chat
原文字符数:19624
项目:Cognee (cognee)

---

安全配置

相关源文件

以下文件为本维基页面的生成提供了上下文:

  • .env.template
  • README.md
  • assets/cognee_benefits.png
  • cognee/api/v1/config/config.py
  • cognee/infrastructure/llm/config.py
  • cognee/infrastructure/llm/structured_output_framework/litellm_instructor/llm/bedrock/adapter.py
  • cognee/infrastructure/llm/structured_output_framework/litellm_instructor/llm/get_llm_client.py
  • cognee/modules/settings/__init__.py
  • cognee/modules/settings/get_settings.py
  • cognee/modules/settings/save_llm_config.py
  • cognee/modules/settings/save_vector_db_config.py
  • cognee/modules/users/permissions/methods/get_user_role_names_in_tenant.py
  • cognee/modules/users/permissions/methods/has_user_management_permission.py
  • cognee/modules/users/permissions/permission_types.py
  • cognee/tests/unit/infrastructure/llm/test_get_llm_client.py
  • cognee/tests/unit/users/permissions/test_has_user_management_permission.py

本文档介绍了 Cognee 的安全相关配置设置、认证机制和多租户访问控制功能。这些设置控制 Cognee 如何处理用户认证、数据隔离、外部请求和内容过滤。

有关通用配置设置,请参阅 7.1 环境变量参考。有关存储相关的安全注意事项,请参阅 7.3 存储配置

---

安全设置概览

Cognee 通过环境变量提供五个主要的安全控制项:

设置项默认值用途
REQUIRE_AUTHENTICATIONFalse强制 API 请求进行用户认证
ENABLE_BACKEND_ACCESS_CONTROLTrue*启用按用户/数据集进行数据库隔离
ACCEPT_LOCAL_FILE_PATHTrue控制是否允许将本地文件路径添加到 Cognee
ALLOW_HTTP_REQUESTSTrue控制 Cognee 是否可以发起出站 HTTP 请求
ALLOW_CYPHER_QUERYTrue控制是否启用 Cypher 查询搜索类型

*如果配置了受支持的数据库处理器,则默认值为 True,否则为 False

来源:.env.template:212-240

---

核心安全设置

REQUIRE_AUTHENTICATION
REQUIRE_AUTHENTICATION=False  # 设置为 True 以强制认证

当设置为 True 时,所有 API 请求必须包含有效的认证凭证。当设置为 False 时,Cognee 会对未认证的请求回退到默认用户。

实现流程:

flowchart TB
    Request["API 请求"]
    Auth{"REQUIRE_AUTHENTICATION"}
    Check["FastAPI Users 认证检查"]
    Default["get_default_user()"]
    User["用户对象"]
    Error401["HTTP 401 未授权"]

    Request --> Auth
    Auth -->|True| Check
    Auth -->|False| Check
    Check -->|已认证| User
    Check -->|未认证 + 必需| Error401
    Check -->|未认证 + 可选| Default
    Default --> User

认证检查发生在 get_authenticated_user() 函数中,该函数依赖于 REQUIRE_AUTHENTICATIONENABLE_BACKEND_ACCESS_CONTROL 的启用状态。该函数返回已认证的用户,或者回退到默认用户。

关键实现文件:

  • 认证强制:cognee/modules/users/methods/get_authenticated_user.py:13-16
  • 默认用户创建:cognee/modules/users/methods/get_authenticated_user.py:33-42

来源:cognee/modules/users/methods/get_authenticated_user.py:1-45, .env.template:228-230

---

ENABLE_BACKEND_ACCESS_CONTROL
ENABLE_BACKEND_ACCESS_CONTROL=True  # 强制按数据集进行数据库隔离

启用后,Cognee 会为每个用户-数据集组合创建独立的数据库实例,从而在多租户部署中提供数据隔离。此设置仅适用于受支持的数据库提供方。

受支持的数据库处理器:

数据库类型受支持的处理器
向量数据库lancedb, pgvector, qdrant, falkor_vector_local
图数据库kuzu, neo4j_aura_dev, falkor_graph_local
关系型数据库sqlite, postgres(所有部署方式)

访问控制决策流程:

flowchart TB
    EnvCheck{"环境变量中存在 ENABLE_BACKEND_ACCESS_CONTROL?"}
    EnvValue{"值为 'true'?"}
    MultiCheck["multi_user_support_possible()"]
    HandlerCheck{"存在受支持的处理器?"}
    ProviderCheck{"处理器与提供方匹配?"}
    Enabled["访问控制已启用"]
    Disabled["访问控制已禁用"]
    Error["抛出 EnvironmentError"]

    EnvCheck -->|是| EnvValue
    EnvCheck -->|否| MultiCheck
    EnvValue -->|是| MultiCheck
    EnvValue -->|否| Disabled
    MultiCheck --> HandlerCheck
    HandlerCheck -->|是| ProviderCheck
    HandlerCheck -->|否| Error
    ProviderCheck -->|是| Enabled
    ProviderCheck -->|否| Error

backend_access_control_enabled() 函数会验证配置的数据库处理器是否支持多用户模式,并且是否与配置的提供方匹配。如果验证失败,则会抛出 EnvironmentError,并提供修正配置的指导。

实现细节:

  • 访问控制检查:cognee/context_global_variables.py:77-86
  • 处理器验证:cognee/context_global_variables.py:28-74
  • 受支持处理器注册表:cognee/context_global_variables.py:89-90

来源:cognee/context_global_variables.py:77-100, .env.template:232-240

---

ACCEPT_LOCAL_FILE_PATH
ACCEPT_LOCAL_FILE_PATH=True  # 在后端部署中设置为 False

控制 Cognee 在通过 cognee.add() 添加数据时是否接受本地文件系统路径。当设置为 False 时,Cognee 会拒绝添加本地文件的尝试,从而在共享或云部署中防止未经授权的文件系统访问。

安全理由:

  • 防止用户从服务器的文件系统中读取任意文件
  • 建议在 Cognee 作为后端服务运行时设置为 False
  • 在本地/桌面使用场景中应保持为 True

来源:.env.template:215-216

---

ALLOW_HTTP_REQUESTS
ALLOW_HTTP_REQUESTS=True  # 设置为 False 以防止 SSRF 攻击

控制 Cognee 是否可以发起出站 HTTP 请求(例如,在数据入库期间获取 URL)。当设置为 False 时,可以防止服务器端请求伪造(SSRF)攻击,即用户可能试图让服务器访问内部资源。

安全理由:

  • 在未实施适当网络隔离时,防止 SSRF 攻击
  • 阻止通过 cognee.add(url) 进行的基于 URL 的数据入库
  • 在没有网络分段的安全敏感环境中应设置为 False

来源:.env.template:218-220

---

ALLOW_CYPHER_QUERY
ALLOW_CYPHER_QUERY=True  # 设置为 False 以禁用 Cypher 搜索

控制 SearchType.CYPHER 搜索类型是否可用,该类型允许用户对图数据库执行任意的 Cypher 查询。

安全理由:

  • 防止通过 Cypher 进行潜在的查询注入或未经授权的数据访问
  • 禁用后,用户只能使用经过验证的预定义搜索类型
  • 在用户不应直接访问数据库的环境中应设置为 False

来源:.env.template:222-223

---

多租户数据库隔离

ENABLE_BACKEND_ACCESS_CONTROL 启用时,Cognee 使用 DatasetDatabase 模型实现按用户、按数据集的数据库隔离。

架构
flowchart TB
    subgraph "数据库配置上下文"
        ContextVars["ContextVars: graph_db_config, vector_db_config, session_user"]
    end

    subgraph "请求处理"
        Request["API 请求 + 用户"]
        SetContext["set_database_global_context_variables()"]
        GetOrCreate["get_or_create_dataset_database()"]
        ResolveConn["resolve_dataset_database_connection_info()"]
    end

    subgraph "关系型数据库"
        DatasetDB[("DatasetDatabase 表")]
    end

    subgraph "数据库处理器"
        VectorHandler["向量数据集数据库处理器"]
        GraphHandler["图数据集数据库处理器"]
    end

    subgraph "隔离的数据库"
        UserVectorDB[("用户向量数据库: user_id + dataset_id")]
        UserGraphDB[("用户图数据库: user_id + dataset_id")]
    end

    Request --> SetContext
    SetContext --> GetOrCreate
    GetOrCreate --> DatasetDB
    GetOrCreate --> VectorHandler
    GetOrCreate --> GraphHandler
    VectorHandler --> UserVectorDB
    GraphHandler --> UserGraphDB
    DatasetDB --> ResolveConn
    ResolveConn --> ContextVars
    ContextVars -.-> UserVectorDB
    ContextVars -.-> UserGraphDB

处理流程:

  1. 上下文设置:使用数据集和用户调用 set_database_global_context_variables(dataset, user_id)
  2. 数据库查找get_or_create_dataset_database() 获取或创建一个 DatasetDatabase 记录。
  3. 处理器调用:向量和图处理器创建隔离的数据库实例。
  4. 连接解析resolve_dataset_database_connection_info() 填充连接详情。
  5. 上下文变量赋值:数据库配置被设置到当前异步上下文的 ContextVars 中。
  6. 请求隔离:所有后续的数据库操作都使用特定于用户的数据库实例。

来源:cognee/context_global_variables.py:102-179, cognee/infrastructure/databases/utils/get_or_create_dataset_database.py:65-120

---

DatasetDatabase 模型

DatasetDatabase 模型存储隔离数据库实例的连接信息:

classDiagram
    class DatasetDatabase {
        +UUID owner_id
        +UUID dataset_id
        +String vector_database_name
        +String graph_database_name
        +String vector_database_provider
        +String graph_database_provider
        +String graph_dataset_database_handler
        +String vector_dataset_database_handler
        +String vector_database_url
        +String graph_database_url
        +String vector_database_key
        +String graph_database_key
        +JSON graph_database_connection_info
        +JSON vector_database_connection_info
        +DateTime created_at
        +DateTime updated_at
    }

关键字段:

  • owner_id:指向拥有此数据集的用户/主体的外键。
  • dataset_id:指向数据集的外键。
  • 提供方字段:指定向量/图数据库类型(例如 lancedbkuzu)。
  • 处理器字段:指定管理数据库创建的处理器。
  • 连接信息:存储提供方特定连接详情(主机、端口、凭证)的 JSON 字段。

来源:cognee/modules/users/models/DatasetDatabase.py:1-41

---

数据库创建过程
sequenceDiagram
    participant Client
    participant SetContext as set_database_global_context_variables()
    participant GetOrCreate as get_or_create_dataset_database()
    participant Handler as 数据集数据库处理器
    participant DB as 隔离的数据库
    participant ContextVar as ContextVars

    Client->>SetContext: dataset, user_id
    SetContext->>GetOrCreate: dataset, user

    alt DatasetDatabase 已存在
        GetOrCreate->>GetOrCreate: 获取现有记录
    else DatasetDatabase 不存在
        GetOrCreate->>Handler: create_dataset(dataset_id, user)
        Handler->>DB: 创建/预配数据库
        DB-->>Handler: 连接信息
        Handler-->>GetOrCreate: 数据库配置字典
        GetOrCreate->>GetOrCreate: 创建 DatasetDatabase 记录
    end

    GetOrCreate-->>SetContext: DatasetDatabase
    SetContext->>SetContext: 构建配置字典
    SetContext->>ContextVar: 设置 graph_db_config
    SetContext->>ContextVar: 设置 vector_db_config
    SetContext->>ContextVar: 设置 file_storage_config
    ContextVar-->>Client: 数据库上下文已配置

处理器职责:

  • 向量处理器:为每个数据集创建向量数据库实例(例如 LanceDB 目录、PGVector 数据库)。
  • 图处理器:为每个数据集创建图数据库实例(例如 Kuzu 数据库文件、Neo4j Aura 数据库)。
  • 返回连接信息:URL、凭证、数据库名称和提供方特定设置。

来源:cognee/infrastructure/databases/utils/get_or_create_dataset_database.py:18-38, cognee/context_global_variables.py:126-179

---

受支持的数据库处理器

每个处理器实现一个 create_dataset(dataset_id, user) 方法,用于预配隔离的数据库实例:

处理器名称提供方实现方式
lancedblancedb为数据集的 LanceDB 实例创建一个目录
pgvectorpgvector为每个数据集创建一个独立的 PostgreSQL 数据库
kuzukuzu为数据集的 Kuzu 数据库文件创建一个目录
neo4jneo4j预配一个 Neo4j 数据库实例
qdrantqdrant在 Qdrant 中创建一个集合命名空间

处理器配置:

  • VECTOR_DATASET_DATABASE_HANDLER:选择向量处理器的环境变量。
  • GRAPH_DATASET_DATABASE_HANDLER:选择图处理器的环境变量。

来源:.env.template:135-136, .env.template:160-161, cognee/context_global_variables.py:28-74

---

数据库连接安全

当多租户模式启用时,数据库连接按用户进行隔离。对于 PGVector,Cognee 可以创建独立的 PostgreSQL 数据库。

连接池配置: Cognee 通过 POOL_ARGS 环境变量支持自定义连接池设置:

# 高负载场景下的连接池配置示例
POOL_ARGS='{"pool_size": 5, "max_overflow": 10, "pool_recycle": -1, "pool_timeout": 30}'

来源:.env.template:127-128

---

认证与 API 密钥

Cognee 集成了 FastAPI Users 进行认证,并支持用于内部用户管理和外部大语言模型(LLM)服务的 API 密钥。

用户管理权限

Cognee 使用基于角色的访问控制(RBAC)系统来管理租户用户。权限逻辑集中在 has_user_management_permission 中。

flowchart TD
    Req["管理用户的请求"]
    GetTenant["get_tenant(tenant_id)"]
    IsOwner{"用户是所有者?"}
    GetRoles["get_user_role_names_in_tenant()"]
    CheckRoles{"拥有 'admin' 角色?"}
    Allowed["权限已授予"]
    Denied["PermissionDeniedError"]

    Req --> GetTenant
    GetTenant --> IsOwner
    IsOwner -->|是| Allowed
    IsOwner -->|否| GetRoles
    GetRoles --> CheckRoles
    CheckRoles -->|是| Allowed
    CheckRoles -->|否| Denied

实现方式:

  • USER_MANAGEMENT_ALLOWED_ROLE_NAMES 集合定义了哪些角色(例如 "admin")可以管理用户 cognee/modules/users/permissions/permission_types.py:8-10
  • has_user_management_permission 函数检查请求者是否是租户所有者,或者是否拥有允许的角色之一 cognee/modules/users/permissions/methods/has_user_management_permission.py:13-45

来源:cognee/modules/users/permissions/methods/has_user_management_permission.py:13-45, cognee/modules/users/permissions/permission_types.py:1-11

---

用户的 API 密钥认证

Cognee 允许用户生成并使用 API 密钥进行认证。这些密钥通过 UserManager 进行管理。

关键特性:

  • 掩码处理get_settings 函数确保通过配置端点返回 API 密钥时进行掩码处理,仅显示前 10 个字符,后跟星号 cognee/modules/settings/get_settings.py:94-96

来源:cognee/modules/settings/get_settings.py:94-96, cognee/modules/users/authentication/get_api_auth_backend.py:13-29

---

大语言模型(LLM)与提供方安全

大模型提供方配置与验证

LLMConfig 类管理 LLM 提供方的安全设置,包括 API 密钥和速率限制。

安全特性:

  • 字符串消毒:Cognee 会自动去除 API 密钥和端点两端的引号,以防止 Docker 或 Shell 环境经常导致的配置错误 cognee/infrastructure/llm/config.py:91-125
  • Ollama 验证:特定验证确保如果设置了任何与 Ollama 相关的环境变量,则所有必需的变量(LLM_MODELLLM_ENDPOINTLLM_API_KEY)都必须存在 cognee/infrastructure/llm/config.py:155-198
  • 密钥保护:LLM 客户端缓存键使用 _SecretCacheKey 类,确保原始密钥(API 密钥)不会在日志或 repr() 输出中暴露 cognee/infrastructure/llm/structured_output_framework/litellm_instructor/llm/get_llm_client.py:27-44

来源:cognee/infrastructure/llm/config.py:91-125, cognee/infrastructure/llm/config.py:155-198, cognee/infrastructure/llm/structured_output_framework/litellm_instructor/llm/get_llm_client.py:27-44

AWS Bedrock 安全

BedrockAdapter 支持多种 AWS 认证方式:

  1. API 密钥:直接使用 Bearer 令牌。
  2. AWS 凭证:显式提供 aws_access_key_idaws_secret_access_key
  3. AWS 配置文件:通过 aws_profile_name 使用 boto3 凭证链。

来源:cognee/infrastructure/llm/structured_output_framework/litellm_instructor/llm/bedrock/adapter.py:32-106

---

其他安全配置

数据库连接参数

Cognee 支持用于安全数据库连接的自定义连接和池参数:

  • DATABASE_CONNECT_ARGS:用于 SSL 和超时设置 /.env.template:124
  • POOL_ARGS:连接池调优 /.env.template:127

来源:.env.template:124-127

---

安全配置总结

flowchart TB
    subgraph "请求安全"
        Auth["REQUIRE_AUTHENTICATION"]
        LocalFile["ACCEPT_LOCAL_FILE_PATH"]
        HTTP["ALLOW_HTTP_REQUESTS"]
        Cypher["ALLOW_CYPHER_QUERY"]
    end

    subgraph "用户认证与权限"
        UserAPIKey["用户 API 密钥"]
        RBAC["has_user_management_permission"]
        JWT["JWT 策略"]
    end

    subgraph "数据隔离"
        AccessCtrl["ENABLE_BACKEND_ACCESS_CONTROL"]
        DatasetDB["DatasetDatabase"]
        IsolatedDBs["按用户/数据集的数据库"]
    end

    subgraph "LLM 安全"
        LLMKeys["LLM API 密钥(已消毒)"]
        BedrockAuth["Bedrock IAM/密钥认证"]
        Masking["设置中的密钥掩码"]
    end

    Auth -.-> UserAPIKey
    AccessCtrl --> DatasetDB
    DatasetDB --> IsolatedDBs
    LLMKeys --> Masking
    RBAC --> Auth

来源:.env.template:212-240, cognee/context_global_variables.py:77-179, cognee/modules/settings/get_settings.py:87-191, cognee/infrastructure/llm/config.py:91-125