An open API service indexing awesome lists of open source software.

https://github.com/aliksir/secret-store

Local secret management for .env files. Replace values with encrypted vault references.
https://github.com/aliksir/secret-store

claude-code dotenv encryption secrets-management

Last synced: 3 months ago
JSON representation

Local secret management for .env files. Replace values with encrypted vault references.

Awesome Lists containing this project

README

          

# secret-store

> **[English README](README.md)**

> **⚠️ 重要: 使用前に必ずお読みください**
>
> このツールは、**APIキー・トークン・パスワード等の機密情報を含む環境変数**を扱います。暗号化バックアップ機能を内蔵していますが、**ご自身でも必ず事前にバックアップを取得してください。**
>
> **本ツールの使用にあたり、以下をご了承ください:**
> - このツールは **`.env` ファイルを直接書き換えます**。移行後、元の平文の値は `.env` から削除され、暗号化vaultにのみ保存されます。
> - **GPGパスフレーズを紛失した場合、vault内のシークレットを復元する方法はありません。** 作者がパスフレーズやデータの復旧を支援することはできません。
> - 暗号化vaultファイル(`vault.json.gpg`)が**破損・紛失**し、バックアップもない場合、シークレットは**永久に失われます**。
> - 内蔵のバックアップ機能は利便性のために提供されていますが、**唯一のバックアップ手段にしないでください**。重要な認証情報は別途安全な場所にバックアップを保管してください。
> - 本ツールは **「現状のまま」提供され、いかなる保証もありません**。データ損失、サービス停止、セキュリティ侵害、その他いかなる損害についても、**作者は一切の責任を負いません**。
> - **本番環境のシークレットを移行する前に、必ず重要でないプロジェクトでテストしてください。**
>
> **作者からの強い推奨事項:**
> 1. 初回使用前に、全ての `.env` ファイルを手動でバックアップする
> 2. GPGパスフレーズを別の安全な場所(パスワードマネージャー等)に記録する
> 3. `~/.secrets/` ディレクトリを定期的に安全な外部ストレージにバックアップする
> 4. 移行前に、対象の `.env` を使用しているサービスを必ず停止する

`.env` の流出が怖くて作った個人用の便利ツールです。`.env` ファイルのシークレットをローカルで安全に管理します。**エンタープライズ向けのセキュリティソフトウェアではありません** — 個人開発者向けの軽量なユーティリティです。実際の値を参照(`SECRET:project/KEY`)に置き換え、本物の値はGPG暗号化vaultに保存します。

`.env` が流出しても、参照文字列しか漏れません。

## 仕組み

```
.env(参照のみ) ~/.secrets/vault.json.gpg(暗号化)
┌──────────────────────┐ ┌─────────────────────────────┐
│ API_KEY=SECRET:myapp/ │──────▶│ {"myapp/API_KEY": "sk-xxx"} │
│ API_KEY │ └─────────────────────────────┘
│ PORT=3000 │ │
└──────────────────────┘ secret-resolve.sh

環境変数(メモリのみ)

exec アプリ起動
```

## 必要なもの

- **bash**(WindowsではGit Bash、macOS/Linuxはそのまま)
- **gpg**(GnuPG)— 暗号化
- **jq** — JSON処理

## クイックスタート

```bash
# 1. クローン
git clone https://github.com/aliksir/secret-store.git
cd secret-store

# 2. vault初期化(GPGパスフレーズを設定)
./secret-manage.sh init

# 3. .envを移行(1コマンドで全部やる)
./secret-manage.sh migrate /path/to/your/app/.env

# 4. アプリ起動
cd /path/to/your/app
./start-with-secrets.sh python app.py
```

これだけです。`.env` には参照だけが残り、実値は暗号化vaultに入ります。

## コマンド一覧

| コマンド | 説明 |
|---------|------|
| `init` | vault初期化 + パターン設定ファイル作成 |
| `migrate <.env>` | **ワンコマンド移行**: バックアップ → シークレット検出 → vault登録 → .env書き換え → 起動ラッパー生成 |
| `set ` | シークレットを手動登録 |
| `get ` | シークレットの値を取得 |
| `list` | キー名一覧(値は非表示) |
| `delete ` | シークレットを削除 |
| `export-template <.env>` | 移行プレビュー(実際には書き換えない) |
| `backup <.env>` | .envを暗号化バックアップ |
| `restore ` | バックアップから.envを復元 |

## `migrate` が行うこと

```
secret-manage.sh migrate .env
├─ ⚠️ 起動中サービスの停止を確認
├─ Step 1: 現在の.envを暗号化バックアップ
├─ Step 2: シークレットキーを自動検出 → vaultに登録
├─ Step 3: .envをSECRET:参照に書き換え
└─ Step 4: start-with-secrets.sh/.ps1 起動ラッパーを生成
```

**アプリのコード変更は不要です。** ラッパーが参照を解決してからアプリを起動します。

## シークレットの検出パターン

以下のパターンにマッチするキーがシークレットとして扱われます:

```
KEY, SECRET, TOKEN, PASSWORD, CREDENTIAL, API_KEY, BEARER
```

`~/.secrets/.secretsrc` を編集してカスタマイズできます:

```
# 1行1パターン
KEY
SECRET
TOKEN
MY_CUSTOM_PATTERN
```

## Windows(PowerShell)での使用

migrateで生成される `.ps1` ラッパーを使います:

```powershell
cd C:\path\to\your\app
.\start-with-secrets.ps1 python app.py
```

Git Bashの場所は自動検出されます。手動設定は不要です。

## ロールバック(元に戻す)

```bash
# 暗号化バックアップから.envを復元
./secret-manage.sh restore myapp
```

バックアップは `~/.secrets/backups/` に暗号化保存されています。

## 注意事項

- **移行前に起動中のサービスを停止してください。** アプリがサービス(systemd, nssm等)として動いている場合、先に停止が必要です。移行後は `start-with-secrets.sh` 経由で起動するようサービス設定を変更してください。
- GPGパスフレーズはあなたの記憶の中だけに存在します。ファイルには保存されません。
- vault の場所は `SECRET_STORE_DIR` 環境変数で変更できます。
- このツールは `.env` ファイルのみを管理します。`settings.json` 等の他の設定ファイルは対象外です。

## 免責事項

**本ツールの使用は全て自己責任です。**

本ソフトウェアは「現状のまま」提供され、明示・黙示を問わず、いかなる保証もありません。本ソフトウェアの使用に起因するいかなる請求、損害、その他の責任についても、作者は一切の責任を負いません。

- クラウドプロバイダーやセキュリティ企業の**公式ツールではありません**。
- このツールは**システム上のファイルを変更します**。データ損失、認証情報の漏洩、サービス停止について、**作者は責任を負いません**。
- GPG暗号化の強度はパスフレーズの品質に完全に依存します。
- **GPGパスフレーズを紛失し、バックアップもない場合、シークレットは復元できません。** 作者が復元を支援することはできません。
- 本番環境のシークレットを移行する**前に**、バックアップ・復元のサイクルが正しく動作することを必ず確認してください。
- 内蔵のバックアップ機能は利便性のためのものであり、**保証ではありません**。ご自身で独立したバックアップを維持してください。

## ライセンス

MIT