Skip to content

Deny local file secrets store when booting from mainnet project #386

@eanzhao

Description

@eanzhao

问题

当前 IAevatarSecretStoreAevatarSecretsStore)将 secrets 写入本地文件 ~/.aevatar/secrets.json,且通过 AddAevatarConfig() 在所有宿主中统一注册。Mainnet 项目(Aevatar.Mainnet.Host.Api)也继承了这一行为,导致生产环境存在将 secrets 落地到本地文件的风险。

方案

不依赖运行时配置:只要入口是 mainnet 项目,就彻底切断本地文件 secrets store 的注册路径。

具体做法

  1. 新建 EnvironmentSecretsStoresrc/Aevatar.Configuration/):实现 IAevatarSecretsStore,只从 IConfiguration(含 AEVATAR_ 环境变量)读取,Set/Remove 直接抛 InvalidOperationException
  2. AddAevatarConfig() 拆分:提供一个 AddAevatarConfig(bool allowLocalFileStore = true) 重载,false 时注册 EnvironmentSecretsStore 替代 AevatarSecretsStore
  3. AevatarConfigLoader 同步保护allowLocalFileStore=false 时跳过 secrets.json 的加载
  4. Mainnet 项目显式调用Aevatar.Mainnet.Host.Api 的 bootstrap 链路中传入 allowLocalFileStore: false,其他项目(localnet、tools、demos)保持默认行为

关键约束

  • mainnet 仍可通过 AEVATAR_ 环境变量注入 secrets(部署平台管理,不落地)
  • Set/Remove 在 mainnet 必须炸在调用点,不允许静默忽略
  • 不修改 IAevatarSecretsStore 接口本身

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions