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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions