SuperAPI AI 工具集

secrets-env-manager

安全与审计

查看项目

更新于 10-15 18:37

技能介绍

用途

Secrets & Env Manager 用于在 CI/CD 流程中安全管理密钥与环境变量。它解决的核心问题包括:部署前校验必需的环境变量是否齐全、防止密钥在日志或代码中泄露、对敏感值进行掩码处理,以及在配置缺失时快速失败并给出清晰提示。该技能适用于需要在持续集成与部署环节统一管理数据库连接串、API Key、云服务凭据等敏感配置的项目。

主要能力

环境变量校验

技能提供在 CI 中校验必需环境变量的做法。以下为 GitHub Actions 示例,用于检查 DATABASE_URL、API_KEY、AWS_REGION、STRIPE_SECRET_KEY 是否存在:

validate-env:
  runs-on: ubuntu-latest
  steps:
    - uses: actions/checkout@v4

    - name: Validate required environment variables
      run: |
        REQUIRED_VARS=(
          "DATABASE_URL"
          "API_KEY"
          "AWS_REGION"
          "STRIPE_SECRET_KEY"
        )

        MISSING=()
        for var in "${REQUIRED_VARS[@]}"; do
          if [ -z "${!var}" ]; then
            MISSING+=("$var")
          fi
        done

        if [ ${#MISSING[@]} -ne 0 ]; then
          echo "❌ Missing required environment variables:"
          printf '%s\n' "${MISSING[@]}"
          exit 1
        fi

        echo "✅ All required environment variables are set"
      env:
        DATABASE_URL: ${{ secrets.DATABASE_URL }}
        API_KEY: ${{ secrets.API_KEY }}
        AWS_REGION: ${{ secrets.AWS_REGION }}
        STRIPE_SECRET_KEY: ${{ secrets.STRIPE_SECRET_KEY }}

密钥掩码

在 GitHub Actions 中,可通过 ::add-mask:: 对敏感值进行掩码处理,避免其出现在日志中:

- name: Mask sensitive values
  run: |
    # Automatically masked in GitHub Actions
    echo "::add-mask::${{ secrets.API_KEY }}"
    echo "::add-mask::${{ secrets.DATABASE_PASSWORD }}"

    # Safe to use in commands
    curl -H "Authorization: Bearer ${{ secrets.API_KEY }}" https://api.example.com

泄露检测

技能给出两类自动检测方式:使用 trufflehog 进行密钥泄露检查,以及使用 reviewdog 的 detect-secrets 动作检测硬编码密钥。

- name: Check for leaked secrets
  uses: trufflesecurity/trufflehog@main
  with:
    path: ./
    base: ${{ github.event.repository.default_branch }}
    head: HEAD

- name: Detect hardcoded secrets
  uses: reviewdog/action-detect-secrets@master
  with:
    github_token: ${{ secrets.GITHUB_TOKEN }}
    reporter: github-pr-review

环境专属密钥

通过 GitHub Actions 的 environment 机制,可按环境(如开发、预发、生产)限定密钥作用范围:

deploy:
  runs-on: ubuntu-latest
  environment:
    name: ${{ github.event.inputs.environment }}
  steps:
    - name: Deploy
      run: |
        # Environment-specific secrets are automatically scoped
        echo "Deploying to ${{ github.event.inputs.environment }}"
      env:
        DATABASE_URL: ${{ secrets.DATABASE_URL }}
        API_KEY: ${{ secrets.API_KEY }}

快速失败验证

在部署前单独设置校验任务,缺失密钥时立即报错并阻止后续部署:

jobs:
  validate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Validate secrets exist
        run: |
          if [ -z "${{ secrets.DATABASE_URL }}" ]; then
            echo "::error::DATABASE_URL secret not set"
            exit 1
          fi

          if [ -z "${{ secrets.API_KEY }}" ]; then
            echo "::error::API_KEY secret not set"
            exit 1
          fi

  deploy:
    needs: validate
    runs-on: ubuntu-latest
    steps:
      - name: Deploy
        run: echo "Deploying..."

校验脚本

技能提供 TypeScript 校验脚本,用于在应用启动前检查必需环境变量:

// scripts/validate-env.ts
import * as fs from "fs";

interface EnvConfig {
  required: string[];
  optional: string[];
}

const config: EnvConfig = {
  required: ["DATABASE_URL", "JWT_SECRET", "STRIPE_SECRET_KEY"],
  optional: ["SENTRY_DSN", "LOG_LEVEL"],
};

function validateEnv(): boolean {
  const missing: string[] = [];

  config.required.forEach((key) => {
    if (!process.env[key]) {
      missing.push(key);
    }
  });

  if (missing.length > 0) {
    console.error("❌ Missing required environment variables:");
    missing.forEach((key) => console.error(`  - ${key}`));
    return false;
  }

  console.log("✅ All required environment variables are set");
  return true;
}

if (!validateEnv()) {
  process.exit(1);
}

示例与文档

技能包含 .env.example 模板,可提交到 git 供成员复制填写,同时提供环境变量文档模板,要求说明每个变量的描述、格式、示例、获取途径以及安全注意事项。

# .env.example - Check into git
# Copy to .env and fill in values

# Database
DATABASE_URL=postgresql://user:password@localhost:5432/mydb

# Authentication
JWT_SECRET=your-secret-here
JWT_EXPIRY=24h

# External APIs
STRIPE_SECRET_KEY=sk_test_...
SENDGRID_API_KEY=SG....

# AWS
AWS_ACCESS_KEY_ID=AKIA...
AWS_SECRET_ACCESS_KEY=...
AWS_REGION=us-east-1

# Optional
SENTRY_DSN=https://...
LOG_LEVEL=info

使用方式

该技能以技能文档形式提供,内容包括 CI 配置片段、校验脚本、模板与最佳实践。使用时可按项目需要在 GitHub Actions 工作流中引入对应的校验、掩码与检测步骤,并将 .env.example 与文档模板纳入仓库。输出检查清单涵盖:必需环境变量已验证、密钥掩码已配置、泄露检测已启用、.env.example 模板、环境变量文档、快速失败验证、环境专属密钥以及轮换策略文档。

适用场景

  • 需要在 CI/CD 中统一校验数据库、认证、外部 API、云服务等敏感配置的项目。
  • 希望在部署前快速发现缺失密钥、避免运行期失败的团队。
  • 需要降低密钥泄露风险、对硬编码密钥进行自动扫描的仓库。
  • 需要区分开发、预发、生产环境密钥并规范文档的工程团队。

限制

资料主要基于 GitHub Actions 的语法与机制(如 secrets、environment、::add-mask::),未提供其他 CI 平台的适配说明。是否支持特定语言、框架或运行时,以及具体的安装命令、收费方式与平台依赖,资料中暂未提供。