返回顶部
e

env-secrets-manager环境密钥管理

Env & Secrets Manager

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.0
安全检测
已通过
291
下载量
免费
免费
0
收藏
概述
安装方式
版本历史

env-secrets-manager

环境与密钥管理器

层级: 强大
类别: 工程
领域: 安全 / DevOps / 配置管理



概述

完整的环境与密钥管理工作流程:涵盖开发/预发布/生产环境的 .env 文件生命周期管理、.env.example 自动生成、必需变量校验、Git 历史中的密钥泄露检测以及凭据轮换方案。支持与 HashiCorp Vault、AWS SSM、1Password CLI 和 Doppler 集成。



核心能力

  • - .env 生命周期管理 — 创建、验证、跨环境同步
  • .env.example 生成 — 剥离值,保留键名和注释
  • 校验脚本 — 启动时对缺失必需变量快速失败
  • 密钥泄露检测 — 对 Git 历史和工作树进行正则扫描
  • 轮换工作流 — 检测 → 界定范围 → 轮换 → 部署 → 验证
  • 密钥管理器集成 — Vault KV v2、AWS SSM、1Password、Doppler

使用场景

  • - 搭建新项目 — 搭建 .env.example 和校验框架
  • 每次提交前 — 扫描意外暂存的密钥
  • 事件响应后 — 泄露凭据的轮换流程
  • 新开发人员入职 — 他们需要所有变量,而不仅仅是部分
  • 环境漂移调查 — 生产环境与预发布环境行为不一致

.env 文件结构

标准布局

bash

.env.example — 提交到 Git(不含值)

.env.local — 开发者机器(已加入 gitignore)

.env.staging — CI/CD 或密钥管理器引用

.env.prod — 绝不在磁盘上;运行时从密钥管理器拉取

应用

APP_NAME= APP_ENV= # dev | staging | prod APP_PORT=3000 # 未设置时的默认端口 APP_SECRET= # 必需:JWT 签名密钥(至少 32 字符) APP_URL= # 必需:公共基础 URL

数据库

DATABASE_URL= # 必需:完整连接字符串 DATABASEPOOLMIN=2 DATABASEPOOLMAX=10

认证

AUTHJWTSECRET= # 必需 AUTHJWTEXPIRY=3600 # 秒 AUTHREFRESHSECRET= # 必需

第三方 API

STRIPESECRETKEY= # 生产环境必需 STRIPEWEBHOOKSECRET= # 生产环境必需 SENDGRIDAPIKEY=

存储

AWSACCESSKEY_ID= AWSSECRETACCESS_KEY= AWS_REGION=eu-central-1 AWSS3BUCKET=

监控

SENTRY_DSN= DDAPIKEY=

.gitignore 模式

添加到项目的 .gitignore 文件中:

gitignore

环境文件 — 绝不要提交这些文件


.env
.env.local
.env.development
.env.development.local
.env.test.local
.env.staging
.env.staging.local
.env.production
.env.production.local
.env.prod
.env.*.local

密钥文件

*.pem *.key *.p12 *.pfx secrets.json secrets.yaml secrets.yml credentials.json service-account.json

AWS

.aws/credentials

Terraform 状态(可能包含密钥)

*.tfstate *.tfstate.backup .terraform/

Kubernetes 密钥

*-secret.yaml *-secrets.yaml

.env.example 自动生成

bash
#!/bin/bash

scripts/gen-env-example.sh


从 .env 剥离值,保留键名、默认值和注释

INPUT=${1:-.env}
OUTPUT=${2:-.env.example}

if [ ! -f $INPUT ]; then
echo 错误:未找到 $INPUT
exit 1
fi

python3 - $INPUT $OUTPUT << PYEOF
import sys, re

input_file = sys.argv[1]
output_file = sys.argv[2]
lines = []

with open(input_file) as f:
for line in f:
stripped = line.rstrip(\n)
# 保留空行和注释原样
if stripped == or stripped.startswith(#):
lines.append(stripped)
continue
# 匹配 KEY=VALUE 或 KEY=VALUE
m = re.match(r^([A-Z][A-Z0-9])=(.)$, stripped)
if m:
key = m.group(1)
value = m.group(2).strip(\)
# 保留非敏感默认值(端口、区域、功能标志)
safe_defaults = re.compile(
r^(APPPORT|APPENV|APPNAME|AWSREGION|DATABASEPOOL|LOG_LEVEL|
rFEATURE|CACHETTL|RATELIMIT|PAGINATION|TIMEOUT),
re.I
)
sensitive = re.compile(
r(SECRET|KEY|TOKEN|PASSWORD|PASS|CREDENTIAL|DSN|AUTH|PRIVATE|CERT),
re.I
)
if safe_defaults.match(key) and value:
lines.append(f{key}={value} # 默认值)
else:
lines.append(f{key}=)
else:
lines.append(stripped)

with open(output_file, w) as f:
f.write(\n.join(lines) + \n)

print(f已从 {inputfile} 生成 {outputfile})
PYEOF

使用方法:
bash
bash scripts/gen-env-example.sh .env .env.example

提交 .env.example,绝不提交 .env


git add .env.example


必需变量校验脚本


→ 详见 references/validation-detection-rotation.md

密钥管理器集成

HashiCorp Vault KV v2

bash

设置

export VAULT_ADDR=https://vault.internal.company.com export VAULTTOKEN=$(vault login -method=oidc -format=json | jq -r .auth.clienttoken)

写入密钥

vault kv put secret/myapp/prod \ DATABASE_URL=postgres://user:pass@host/db \ APP_SECRET=$(openssl rand -base64 32)

将密钥读取到环境变量

eval $(vault kv get -format=json secret/myapp/prod | \ jq -r .data.data | to_entries[] | export \(.key)=\(.value))

在 CI/CD 中(GitHub Actions)

使用 vault-action:hashicorp/vault-action@v2

AWS SSM 参数存储

bash

写入(SecureString = 使用 KMS 加密)

aws ssm put-parameter \ --name /myapp/prod/DATABASE_URL \ --value postgres://... \ --type SecureString \ --key-id alias/myapp-secrets

将应用/环境的所有参数读取到 shell

eval $(aws ssm get-parameters-by-path \ --path /myapp/prod/ \ --with-decryption \ --query Parameters[*].[Name,Value] \ --output text | \ awk {split($1,a,/); print export a[length(a)] =\ $2 \})

在 Node.js 启动时

使用 @aws-sdk/client-ssm 在服务器启动前拉取参数

1Password CLI

bash

认证

eval $(op signin)

获取特定字段

op read op://MyVault/MyApp Prod/STRIPESECRETKEY

将项目中的所有字段导出为环境变量

op item get MyApp Prod --format json | \ jq -r .fields[] | select(.value != null) | export \(.label)=\\(.value)\ | \ grep -E ^export [A-Z_]+ | source /dev/stdin

.env 注入

op inject -i .env.tpl -o .env

.env.tpl 使用 {{ op://Vault/Item/field }} 语法

Doppler

bash

设置

doppler setup # 交互式:选择项目 + 配置

注入密钥运行任何命令

doppler run -- node server.js doppler run -- npm run dev

导出到 .env(仅限本地开发 — 绝不要提交输出)

doppler secrets download --no-file --format env > .env.local

拉取特定密钥

doppler secrets get DATABASE_URL --plain

同步到另一个环境

doppler secrets upload --project myapp --config staging < .env.staging.example

环境漂移检测

检查

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 env-secrets-manager-1776172392 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 env-secrets-manager-1776172392 技能

通过命令行安装

skillhub install env-secrets-manager-1776172392

下载

⬇ 下载 env-secrets-manager v1.0.0(免费)

文件大小: 8.86 KB | 发布时间: 2026-4-15 12:38

v1.0.0 最新 2026-4-15 12:38
Initial publish

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部