Infisical 自托管实例如何通过 API/CLI 完成首次自动化引导(创建管理员与机构管理员身份)?
【免费下载链接】infisicalInfisical is the open-source platform for secrets, certificates, and privileged access management.项目地址: https://gitcode.com/GitHub_Trending/in/infisical
当你以容器、Helm 或 CI/CD 流水线方式部署了 Infisical 自托管实例后,通常不会有人去打开 UI 做手动初始化。Infisical 提供了 Automated Bootstrapping(自动引导)功能:对一个新实例触发一次引导,就会自动完成三件事——创建一个管理员用户账号、为该实例初始化一个 organization(机构),并建立一个拥有实例级管理员权限的 machine identity(机器身份)。引导成功后返回的机器身份 Token 可以直接用于后续所有 API 自动化,实现全程无人工介入。
本文只覆盖API和CLI两条引导路径。适用的前提是:
- 一个已启动、且设置了全部必需配置变量的 Infisical 新实例(最小集为
ENCRYPTION_KEY、AUTH_SECRET、DB_CONNECTION_URI、REDIS_URL,见 环境变量文档); - 能够访问 Infisical CLI,或能够对该实例发起 API 请求;
- 网络可以连通该实例。
需要注意的边界:引导只能在未引导过的新实例上执行一次。如果实例已经引导过,API/CLI 会报错;CLI 提供了--ignore-if-bootstrapped参数让脚本幂等(见下文)。
用 API 触发引导
对实例发起一次 POST 请求即可:
POST: http://your-infisical-instance.com/api/v1/admin/bootstrap { "email": "admin@example.com", "password": "your-secure-password", "organization": "your-org-name" }用 curl 的等价写法(your-infisical-instance.com换成你的实例地址,三个字段换成你要创建的管理员邮箱、密码和机构名):
curl -X POST \ -H "Content-Type: application/json" \ -d '{"email":"admin@example.com","password":"your-secure-password","organization":"your-org-name"}' \ http://your-infisical-instance.com/api/v1/admin/bootstrap请求成功后返回一段 JSON,包含创建出的用户、机构和机器身份,其中identity.credentials.token就是机器身份令牌。下面是文档给出的示例响应(其中的 ID、slug、token 均为示例值,你的实例会返回自己的值):
{ "identity": { "credentials": { "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9....(文档示例 JWT,此处省略)" }, "id": "db224792-ed18-4277-9dae-57e752315854", "name": "Instance Admin Identity" }, "message": "Successfully bootstrapped instance", "organization": { "id": "b56bece0-42f5-4262-b25e-be7bf5f84957", "name": "dog", "slug": "dog-v-e5l" }, "user": { "email": "admin@example.com", "firstName": "Admin", "id": "a418f355-c8da-453c-bbc8-6c07208eeb3c", "lastName": "User", "superAdmin": true, "username": "admin@example.com" } }判断成功的关键点:响应中出现"message": "Successfully bootstrapped instance",且identity.credentials.token非空。
用 CLI 触发引导
CLI 路径适合脚本化。四个核心参数均为必需:
infisical bootstrap --domain=<domain> --email=<email> --password=<password> --organization=<organization>各参数也可以改用环境变量传入:--domain对应INFISICAL_API_URL,--email对应INFISICAL_ADMIN_EMAIL,--password对应INFISICAL_ADMIN_PASSWORD,--organization对应INFISICAL_ADMIN_ORGANIZATION。参数详情可参考 infisical bootstrap 命令文档。
自动化脚本中最常见的写法是用jq从响应里只取出 token,便于直接赋值给变量或在 Terraform 等工具中使用:
infisical bootstrap --domain="http://localhost:8080" --email="admin@example.com" --password="your-secure-password" --organization="your-org-name" | jq ".identity.credentials.token"或者捕获到变量中:
TOKEN=$(infisical bootstrap --domain=https://your-infisical-instance.com --email=admin@example.com --password=your-secure-password --organization=your-org-name | jq -r ".identity.credentials.token")两个可选参数按场景使用:
--ignore-if-bootstrapped:实例已引导过时不报错、直接继续,用于需要幂等的自动化脚本。可选,默认false。--output=k8-secret(配合必需的--k8-secret-template、--k8-secret-name、--k8-secret-namespace):让命令直接在集群里创建或更新一个 Kubernetes secret。此模式必须在具有相应 service account 权限的 Kubernetes pod 内执行,命令会自动读取 pod 内的 service account token 和 CA 证书。如果走 Helm 部署且希望在安装钩子里自动完成引导并落 secret,也可以改用 Helm values 中的autoBootstrap配置,参见 Helm Chart 说明。
验证引导结果
文档提供了三个验证切入点:
- 看响应:JSON 响应中
user.superAdmin为true,说明创建的管理员账号具备超管权限;identity.name为Instance Admin Identity,即新建立的实例管理员机器身份。 - 在 Server Console 里确认身份存在:实例管理员机器身份会出现在 Server Console 的Resource Overview > Machine Identities下,该身份默认使用 Token Auth(见 Token Auth 文档)。
- 用 token 发一次认证请求:这个 token 就是一个普通的 Token Auth 访问令牌,以 Bearer 方式携带即可。文档给出的示例是创建项目:
curl -X POST \ -H "Authorization: Bearer ${INFISICAL_TOKEN}" \ -H "Content-Type: application/json" \ -d '{ "projectName": "New Project", "projectDescription": "A project created via API", "slug": "new-project-slug", "template": "default", "type": "secret-manager" }' \ https://your-infisical-instance.com/api/v1/projects请求能正常返回,即说明 token 已经具备实例级管理权限,可以进入后续的自动化资源配置。
边界与安全限制
- token 等同于 root 凭据:机器身份拥有实例内最高权限,文档明确要求按 root 凭据的等级保护它,不要明文写进代码库。
- 只能引导一次:引导只能在新的 Infisical 实例上执行一次;需要幂等的自动化脚本加
--ignore-if-bootstrapped。 - 防止权限提升的控制:非实例管理员的用户或身份无法管理实例管理员身份;已生成的实例管理员权限之后可以在 server admin panel 中撤销。
- 管理员账号可保留也可移除:引导创建的管理员用户账号后续仍可用来登录 UI,如果你希望一切操作都走机器身份,也可以把它移除。
- 该流程设计为与 Terraform provider 以及未来的 Crossplane provider 配合,用于完整的 IaC 场景。
完成上述步骤后,你的实例就具备了管理员用户、初始机构和实例管理员机器身份三要素,token 已可用于后续 API 自动化。下一步通常是把这个 token 存入你的密钥管理体系(如 Kubernetes secret、Terraform 环境变量INFISICAL_TOKEN),再开始程序化地创建项目等资源。
【免费下载链接】infisicalInfisical is the open-source platform for secrets, certificates, and privileged access management.项目地址: https://gitcode.com/GitHub_Trending/in/infisical
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考