mcpField
S
secrets-env-manager

secrets-env-manager

github.com/patricio0312revセキュリティ63263 回インストール41 週間前に更新
リポジトリ

secrets-env-manager について

secrets-env-manager は、CI/CD ワークフローでシークレットと環境変数を管理するスキルです。設定の検証と漏えいリスクの低減に向け、マスキング、漏えいスキャン、環境分離、文書テンプレートを扱います。

主な機能

  1. 01必須の環境変数とシークレットの検証
  2. 02GitHub Actions での機密値のマスキング
  3. 03リポジトリ内のシークレット漏えいスキャン
  4. 04環境ごとのシークレット分離
  5. 05.env.example と変数ドキュメントのテンプレート

活用シーン

  1. 01デプロイ前の必須シークレット確認
  2. 02ワークフローログへの機密値出力の防止
  3. 03コミット内のハードコードされたシークレットの検出
  4. 04開発・ステージング・本番環境の変数整理

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/patricio0312rev/skills --skill secrets-env-manager

インストール後、Claude Code で/secrets-env-managerを入力して読み込まれたか確認します。

詳細

シークレットと環境変数の管理

CI/CD でのシークレットの安全な取り扱いと、環境変数の検証を行います。

環境変数の検証

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 }}

シークレットのマスキング

- 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

漏えいの防止

- 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

環境ごとのシークレット

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 }}

シークレット検証スクリプト

// 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 テンプレート

# .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

ドキュメントのテンプレート

# Environment Variables

## Required Variables

### DATABASE_URL

**Description:** PostgreSQL connection string
**Format:** `postgresql://user:password@host:5432/database`
**Example:** `postgresql://app:secret@localhost:5432/myapp`
**Where to get:** Create database on Heroku/RDS

### STRIPE_SECRET_KEY

**Description:** Stripe API secret key
**Format:** `sk_test_...` or `sk_live_...`
**Example:** `sk_test_51abc123...`
**Where to get:** Stripe Dashboard → Developers → API Keys
**⚠️ Never commit to git**

## Optional Variables

### LOG_LEVEL

**Description:** Logging verbosity
**Format:** `error | warn | info | debug`
**Default:** `info`

フェイルファスト検証

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..."

ベストプラクティス

  1. シークレットをログに記録しない:機密情報は常にマスキングします
  2. 早期に検証する:デプロイ前にシークレットを確認します
  3. GitHub Secrets を使用する:ワークフローにハードコードしないでください
  4. 環境を分離する:開発/ステージング/本番環境のシークレットを分けます
  5. 定期的にローテーションする:シークレットを定期的に更新します
  6. 最小権限の原則:権限を必要最小限にします
  7. 明確にドキュメント化する:各シークレットの取得先を記載します
  8. 漏えいをスキャンする:自動検出を行います

出力チェックリスト

  • 必須の環境変数を検証済み
  • シークレットのマスキングを設定済み
  • 漏えい検出を有効化済み
  • .env.example テンプレートを用意済み
  • 環境変数をドキュメント化済み
  • フェイルファスト検証を実施済み
  • 環境ごとのシークレットを設定済み
  • ローテーションポリシーをドキュメント化済み

コメント