@yhonda/gcloud-secrets 2.0.12 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/cli.js +764 -292
  2. package/package.json +6 -5
  3. package/skills/secrets.md +37 -12
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@yhonda/gcloud-secrets",
3
- "version": "2.0.12",
4
- "description": "GCP Secret Manager GitHub clone 風に管理する CLI ツール",
3
+ "version": "3.1.0",
4
+ "description": "Google Drive + age 暗号化でシークレットを管理する CLI ツール",
5
5
  "type": "module",
6
6
  "main": "cli.js",
7
7
  "bin": {
@@ -23,8 +23,9 @@
23
23
  "url": "git+https://github.com/yhonda-ohishi/gcloudSec.git"
24
24
  },
25
25
  "keywords": [
26
- "gcp",
27
- "secret-manager",
26
+ "google-drive",
27
+ "age-encryption",
28
+ "secrets",
28
29
  "env",
29
30
  "claude-code",
30
31
  "cli"
@@ -42,7 +43,7 @@
42
43
  },
43
44
  "homepage": "https://github.com/yhonda-ohishi/gcloudSec#readme",
44
45
  "dependencies": {
45
- "@google-cloud/secret-manager": "^6.1.1"
46
+ "googleapis": "^144.0.0"
46
47
  },
47
48
  "devDependencies": {
48
49
  "husky": "^9.1.7"
package/skills/secrets.md CHANGED
@@ -1,14 +1,39 @@
1
1
  # Skill: secrets
2
2
 
3
- GCP Secret Manager を使って .env ファイルを管理するスキル
3
+ Google Drive + age 暗号化でシークレットを管理するスキル
4
4
 
5
5
  ## コマンド一覧
6
6
 
7
7
  ### 初期化
8
8
  ```bash
9
- gcloud-secrets init <project-id> [--env <default>]
9
+ gcloud-secrets init [drive-folder-id] --client-id <id> --client-secret <secret> [--env <default>]
10
10
  ```
11
- GCP プロジェクト ID を設定します。`--env` でデフォルト環境を指定できます(省略時は `dev`)。
11
+ Google Drive + OAuth + age 鍵の初期設定を行います。
12
+ - `drive-folder-id` 省略時は Drive に "gcloud-secrets" フォルダを自動作成
13
+ - `--client-id` / `--client-secret`: Google Cloud Console で作成した OAuth クライアント情報
14
+ - `--env` でデフォルト環境を指定(省略時は `dev`)
15
+ - `--age-key <path>` で age 秘密鍵パスを指定(省略時は `~/.age/key.txt`、未作成なら自動生成)
16
+ - `--age-pub <key>` で age 公開鍵を指定(省略時は秘密鍵ファイルから自動取得)
17
+
18
+ ### 再認証 (reauth)
19
+ ```bash
20
+ gcloud-secrets reauth
21
+ ```
22
+ OAuth token が失効した (refresh token invalid_grant) 時に、**token だけ** を更新します。
23
+ - 既存 config (DRIVE_FOLDER_ID / OAuth client / age 鍵) には一切触れない
24
+ - 失効 token は `~/.secrets-manager-oauth.json.stale-<timestamp>` に退避
25
+ - **OAuth 2.0 Device Flow** (Tailscale 風) で認証: URL + ユーザーコード表示 → 別デバイスで承認 → CLI は token エンドポイントを poll
26
+ - リモート SSH / ヘッドレス環境でも動作 (ローカルブラウザ不要)
27
+ - OAuth フロー後に Drive フォルダの read 疎通も確認
28
+ - pre-commit hook が `invalid_grant` を検知すると `reauth` の実行を促すメッセージを表示 (commit は blocking しない)
29
+
30
+ **前提**: `~/.secrets-manager.conf` に以下を追加しておくこと (Google Cloud Console で "TVs and Limited Input devices" タイプの OAuth client を作成):
31
+ ```
32
+ GOOGLE_DEVICE_CLIENT_ID=xxxxx.apps.googleusercontent.com
33
+ GOOGLE_DEVICE_CLIENT_SECRET=GOCSPX-xxxxx
34
+ ```
35
+
36
+ Init の desktop flow で取った token と device flow で取った token は `_client_type` マーカーで区別され、自動で適切な client 情報で refresh されます。
12
37
 
13
38
  ### 一覧表示
14
39
  ```bash
@@ -27,7 +52,7 @@ gcloud-secrets pull --env dev
27
52
  # 指定フォルダから取得
28
53
  gcloud-secrets pull <folder> --env prod
29
54
  ```
30
- Secret Manager から .env 形式でシークレットを取得します。
55
+ Drive から暗号化ファイルをダウンロードし、age で復号して .env 形式で出力します。
31
56
 
32
57
  ### シークレット登録 (push)
33
58
  ```bash
@@ -40,6 +65,7 @@ gcloud-secrets push <folder> --env prod
40
65
  # 指定ファイルをアップロード
41
66
  gcloud-secrets push <folder> <file> --env staging
42
67
  ```
68
+ .env ファイルを age で暗号化し、Drive にアップロードします。
43
69
 
44
70
  ### 同期状況スキャン (scan)
45
71
  ```bash
@@ -52,7 +78,7 @@ gcloud-secrets scan --env dev
52
78
  # 指定ディレクトリ以下をスキャン
53
79
  gcloud-secrets scan <path> --env prod
54
80
  ```
55
- Git リポジトリ内の .env / .dev.vars ファイルと Secret Manager の同期状況を確認します。
81
+ Git リポジトリ内の .env / .dev.vars ファイルと Drive 上の暗号化ファイルの同期状況を確認します。
56
82
 
57
83
  ### 値から逆引き検索 (search)
58
84
  ```bash
@@ -62,13 +88,12 @@ gcloud-secrets search "api-key-12345"
62
88
  # 特定環境のみ検索
63
89
  gcloud-secrets search "client-id" --env prod
64
90
  ```
65
- シークレットの値から、使用しているフォルダ・環境・キーを逆引き検索します。
66
91
 
67
92
  出力例:
68
93
  ```
69
94
  Searching for: "api-key-12345"
70
95
 
71
- Scanning 45 secrets...
96
+ Scanning 8 files...
72
97
 
73
98
  [FOUND] my-app / dev - EXTERNAL_API_KEY
74
99
  [FOUND] my-app / prod - EXTERNAL_API_KEY
@@ -79,7 +104,7 @@ Found 3 matches in 2 folders
79
104
 
80
105
  #### scan 出力例:
81
106
  ```
82
- === Secret Manager 同期状況 ===
107
+ === シークレット同期状況 ===
83
108
 
84
109
  [OK] project-a/ .env [dev] (3 keys)
85
110
  [DIFF] project-b/ .env [prod] (2 keys) - 差分あり
@@ -94,11 +119,11 @@ Found 3 matches in 2 folders
94
119
 
95
120
  ### .env 自動同期 (pre-commit)
96
121
  ```bash
97
- # カレントディレクトリの .env を Secret Manager に自動同期
122
+ # カレントディレクトリの .env を Drive に自動同期
98
123
  gcloud-secrets pre-commit
99
124
  ```
100
125
  git hook 用の高速コマンド。キャッシュで .env の変更を検知し、変更がなければ API コール 0 で即座に終了。
101
- 変更があれば `listSecrets` のフィルタ + 並列取得で高速にチェックし、新規/差分のある secret を自動 push。
126
+ 変更があれば Drive からダウンロード+復号で比較し、差分があれば暗号化+アップロード。
102
127
 
103
128
  ### グローバル git hook (hook)
104
129
  ```bash
@@ -124,8 +149,8 @@ gcloud-secrets hook uninstall
124
149
  ## 使用例
125
150
 
126
151
  ```bash
127
- # 1. 初期化 (デフォルト環境を dev に設定)
128
- gcloud-secrets init my-gcp-project --env dev
152
+ # 1. 初期化 (OAuth クライアント情報を設定)
153
+ gcloud-secrets init --client-id "xxx.apps.googleusercontent.com" --client-secret "GOCSPX-xxx" --env dev
129
154
 
130
155
  # 2. dev 環境に .env を登録
131
156
  gcloud-secrets push --env dev