安全配置
安全配置
相关源文件
以下文件为本维基页面的生成提供了上下文:
.env.templateREADME.mdassets/cognee_benefits.pngcognee/api/v1/config/config.pycognee/infrastructure/llm/config.pycognee/infrastructure/llm/structured_output_framework/litellm_instructor/llm/bedrock/adapter.pycognee/infrastructure/llm/structured_output_framework/litellm_instructor/llm/get_llm_client.pycognee/modules/settings/__init__.pycognee/modules/settings/get_settings.pycognee/modules/settings/save_llm_config.pycognee/modules/settings/save_vector_db_config.pycognee/modules/users/permissions/methods/get_user_role_names_in_tenant.pycognee/modules/users/permissions/methods/has_user_management_permission.pycognee/modules/users/permissions/permission_types.pycognee/tests/unit/infrastructure/llm/test_get_llm_client.pycognee/tests/unit/users/permissions/test_has_user_management_permission.py
本文档介绍了 Cognee 的安全相关配置设置、认证机制和多租户访问控制功能。这些设置控制 Cognee 如何处理用户认证、数据隔离、外部请求和内容过滤。
有关通用配置设置,请参阅 7.1 环境变量参考。有关存储相关的安全注意事项,请参阅 7.3 存储配置。
安全设置概览
Cognee 通过环境变量提供五个主要的安全控制项:
| 设置项 | 默认值 | 用途 |
|---|---|---|
REQUIRE_AUTHENTICATION | False | 强制 API 请求进行用户认证 |
ENABLE_BACKEND_ACCESS_CONTROL | True* | 启用按用户/数据集进行数据库隔离 |
ACCEPT_LOCAL_FILE_PATH | True | 控制是否允许将本地文件路径添加到 Cognee |
ALLOW_HTTP_REQUESTS | True | 控制 Cognee 是否可以发起出站 HTTP 请求 |
ALLOW_CYPHER_QUERY | True | 控制是否启用 Cypher 查询搜索类型 |
*如果配置了受支持的数据库处理器,则默认值为 True,否则为 False。
来源:.env.template:212-240
核心安全设置
REQUIRE_AUTHENTICATION
REQUIRE_AUTHENTICATION=False # 设置为 True 以强制认证
当设置为 True 时,所有 API 请求必须包含有效的认证凭证。当设置为 False 时,Cognee 会对未认证的请求回退到默认用户。
实现流程:
认证检查发生在 get_authenticated_user() 函数中,该函数依赖于 REQUIRE_AUTHENTICATION 或 ENABLE_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(所有部署方式) |
访问控制决策流程:
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 模型实现按用户、按数据集的数据库隔离。
架构
处理流程:
- 上下文设置:使用数据集和用户调用
set_database_global_context_variables(dataset, user_id)。 - 数据库查找:
get_or_create_dataset_database()获取或创建一个DatasetDatabase记录。 - 处理器调用:向量和图处理器创建隔离的数据库实例。
- 连接解析:
resolve_dataset_database_connection_info()填充连接详情。 - 上下文变量赋值:数据库配置被设置到当前异步上下文的
ContextVars中。 - 请求隔离:所有后续的数据库操作都使用特定于用户的数据库实例。
来源:cognee/context_global_variables.py:102-179, cognee/infrastructure/databases/utils/get_or_create_dataset_database.py:65-120
DatasetDatabase 模型
DatasetDatabase 模型存储隔离数据库实例的连接信息:
关键字段:
owner_id:指向拥有此数据集的用户/主体的外键。dataset_id:指向数据集的外键。- 提供方字段:指定向量/图数据库类型(例如
lancedb、kuzu)。 - 处理器字段:指定管理数据库创建的处理器。
- 连接信息:存储提供方特定连接详情(主机、端口、凭证)的 JSON 字段。
来源:cognee/modules/users/models/DatasetDatabase.py:1-41
数据库创建过程
处理器职责:
- 向量处理器:为每个数据集创建向量数据库实例(例如 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) 方法,用于预配隔离的数据库实例:
| 处理器名称 | 提供方 | 实现方式 |
|---|---|---|
lancedb | lancedb | 为数据集的 LanceDB 实例创建一个目录 |
pgvector | pgvector | 为每个数据集创建一个独立的 PostgreSQL 数据库 |
kuzu | kuzu | 为数据集的 Kuzu 数据库文件创建一个目录 |
neo4j | neo4j | 预配一个 Neo4j 数据库实例 |
qdrant | qdrant | 在 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 中。
实现方式:
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_MODEL、LLM_ENDPOINT、LLM_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 认证方式:
- API 密钥:直接使用 Bearer 令牌。
- AWS 凭证:显式提供
aws_access_key_id和aws_secret_access_key。 - 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
安全配置总结
来源:.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