@yhonda/gcloud-secrets 2.0.6 → 2.0.7
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 +54 -0
- package/package.json +1 -1
- package/skills/secrets.md +26 -0
package/cli.js
CHANGED
|
@@ -408,6 +408,59 @@ async function runCli(args) {
|
|
|
408
408
|
break;
|
|
409
409
|
}
|
|
410
410
|
|
|
411
|
+
case "search": {
|
|
412
|
+
const keyword = parsed.positional[1];
|
|
413
|
+
if (!keyword) {
|
|
414
|
+
console.log("使い方: gcloud-secrets search <keyword> [--env <env>]");
|
|
415
|
+
process.exit(1);
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
const filterEnv = parsed.env;
|
|
419
|
+
const parent = `projects/${config.centralProject}`;
|
|
420
|
+
const [secrets] = await client.listSecrets({ parent });
|
|
421
|
+
|
|
422
|
+
console.log(`Searching for: "${keyword}"`);
|
|
423
|
+
if (filterEnv) console.log(` 環境: ${filterEnv}`);
|
|
424
|
+
console.log(`\nScanning ${secrets.length} secrets...\n`);
|
|
425
|
+
|
|
426
|
+
const matches = [];
|
|
427
|
+
const folders = new Set();
|
|
428
|
+
|
|
429
|
+
for (const secret of secrets) {
|
|
430
|
+
const [secretData] = await client.getSecret({ name: secret.name });
|
|
431
|
+
const folder = secretData.labels?.folder;
|
|
432
|
+
const env = secretData.labels?.environment || "(default)";
|
|
433
|
+
|
|
434
|
+
// 環境フィルタ
|
|
435
|
+
if (filterEnv && secretData.labels?.environment !== filterEnv) continue;
|
|
436
|
+
|
|
437
|
+
// 値を取得してキーワード検索
|
|
438
|
+
try {
|
|
439
|
+
const [version] = await client.accessSecretVersion({
|
|
440
|
+
name: `${secret.name}/versions/latest`,
|
|
441
|
+
});
|
|
442
|
+
const value = version.payload.data.toString("utf-8");
|
|
443
|
+
if (value.includes(keyword)) {
|
|
444
|
+
const { key } = getKeyFromSecret(secret.name.split("/").pop(), folder);
|
|
445
|
+
matches.push({ folder, env, key });
|
|
446
|
+
folders.add(folder);
|
|
447
|
+
}
|
|
448
|
+
} catch {
|
|
449
|
+
// バージョンがない場合はスキップ
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
if (matches.length === 0) {
|
|
454
|
+
console.log("No matches found");
|
|
455
|
+
} else {
|
|
456
|
+
for (const m of matches) {
|
|
457
|
+
console.log(`[FOUND] ${m.folder} / ${m.env} - ${m.key}`);
|
|
458
|
+
}
|
|
459
|
+
console.log(`\nFound ${matches.length} matches in ${folders.size} folders`);
|
|
460
|
+
}
|
|
461
|
+
break;
|
|
462
|
+
}
|
|
463
|
+
|
|
411
464
|
default:
|
|
412
465
|
console.log(`gcloud-secrets - GCP Secret Manager CLI
|
|
413
466
|
|
|
@@ -417,6 +470,7 @@ async function runCli(args) {
|
|
|
417
470
|
gcloud-secrets pull [folder] [--env <env>] シークレットを取得
|
|
418
471
|
gcloud-secrets push [folder] [file] [--env <env>] シークレットをアップロード
|
|
419
472
|
gcloud-secrets scan [basePath] [--env <env>] Git リポジトリの .env 同期状況をスキャン
|
|
473
|
+
gcloud-secrets search <keyword> [--env <env>] 値から逆引き検索
|
|
420
474
|
|
|
421
475
|
オプション:
|
|
422
476
|
--env, -e <env> 環境を指定 (dev, staging, prod など)
|
package/package.json
CHANGED
package/skills/secrets.md
CHANGED
|
@@ -54,8 +54,31 @@ gcloud-secrets scan <path> --env prod
|
|
|
54
54
|
```
|
|
55
55
|
Git リポジトリ内の .env / .dev.vars ファイルと Secret Manager の同期状況を確認します。
|
|
56
56
|
|
|
57
|
+
### 値から逆引き検索 (search)
|
|
58
|
+
```bash
|
|
59
|
+
# 特定の値がどのフォルダ・環境で使われているか検索
|
|
60
|
+
gcloud-secrets search "api-key-12345"
|
|
61
|
+
|
|
62
|
+
# 特定環境のみ検索
|
|
63
|
+
gcloud-secrets search "client-id" --env prod
|
|
64
|
+
```
|
|
65
|
+
シークレットの値から、使用しているフォルダ・環境・キーを逆引き検索します。
|
|
66
|
+
|
|
57
67
|
出力例:
|
|
58
68
|
```
|
|
69
|
+
Searching for: "api-key-12345"
|
|
70
|
+
|
|
71
|
+
Scanning 45 secrets...
|
|
72
|
+
|
|
73
|
+
[FOUND] my-app / dev - EXTERNAL_API_KEY
|
|
74
|
+
[FOUND] my-app / prod - EXTERNAL_API_KEY
|
|
75
|
+
[FOUND] other-service / dev - LINE_CLIENT_ID
|
|
76
|
+
|
|
77
|
+
Found 3 matches in 2 folders
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
#### scan 出力例:
|
|
81
|
+
```
|
|
59
82
|
=== Secret Manager 同期状況 ===
|
|
60
83
|
|
|
61
84
|
[OK] project-a/ .env [dev] (3 keys)
|
|
@@ -96,4 +119,7 @@ gcloud-secrets scan ~/
|
|
|
96
119
|
|
|
97
120
|
# 5. dev 環境のみスキャン
|
|
98
121
|
gcloud-secrets scan ~/ --env dev
|
|
122
|
+
|
|
123
|
+
# 6. 特定の値がどこで使われているか検索
|
|
124
|
+
gcloud-secrets search "line-client-id-xxx"
|
|
99
125
|
```
|