@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.
- package/cli.js +764 -292
- package/package.json +6 -5
- package/skills/secrets.md +37 -12
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yhonda/gcloud-secrets",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "
|
|
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
|
-
"
|
|
27
|
-
"
|
|
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
|
-
"
|
|
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
|
-
|
|
3
|
+
Google Drive + age 暗号化でシークレットを管理するスキル
|
|
4
4
|
|
|
5
5
|
## コマンド一覧
|
|
6
6
|
|
|
7
7
|
### 初期化
|
|
8
8
|
```bash
|
|
9
|
-
gcloud-secrets init
|
|
9
|
+
gcloud-secrets init [drive-folder-id] --client-id <id> --client-secret <secret> [--env <default>]
|
|
10
10
|
```
|
|
11
|
-
|
|
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
|
-
|
|
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 ファイルと
|
|
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
|
|
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
|
-
===
|
|
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 を
|
|
122
|
+
# カレントディレクトリの .env を Drive に自動同期
|
|
98
123
|
gcloud-secrets pre-commit
|
|
99
124
|
```
|
|
100
125
|
git hook 用の高速コマンド。キャッシュで .env の変更を検知し、変更がなければ API コール 0 で即座に終了。
|
|
101
|
-
変更があれば
|
|
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. 初期化 (
|
|
128
|
-
gcloud-secrets init
|
|
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
|