Skip to content
Back to skills

Secret Boundary

ASecurity

AI実行環境のシークレット境界設定。settings.json permissions.denyルールを生成し、シークレットへの事故的アクセスを防止する。

  • 4 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added September 12, 2026
securitypythonbashnodegitapisecurity

Works with

  • claude code
  • cli
  • api
  • mcp

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned September 12, 2026

npx -y skills add aibot88/sec_skill_store --skill secret-boundary --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Secret Boundary?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Secret Boundary
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/aibot88-secret-boundary/badge)](https://www.skillsdirectory.com/skills/aibot88-secret-boundary)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: secret-boundary
description: AI実行環境のシークレット境界設定。settings.json permissions.denyルールを生成し、シークレットへの事故的アクセスを防止する。
allowed-tools: Bash, Read, Write, Edit
argument-hint: "[baseline|audit] [options]"
---

# secret-boundary

AI実行環境のシークレット境界を設定する。

> **重要: このスキルが提供するのは「事故防止のガードレール」です。**
>
> `permissions.deny`はAIエージェントの事故的なシークレット読み取りを防ぎますが、
> 強制的なセキュリティ境界ではありません(ユーザー自身が変更可能なため)。
> 強制力が必要な場合はmanaged settingsとsandboxを併用してください。
>
> **このスキルでは守れないもの:**
> - 悪意ある攻撃者による意図的な回避(`cat .env`、`python -c "open('.env').read()"`等)
> - 環境変数に展開済みのシークレット(`op run`等で注入されたもの)
> - sandbox外のファイルシステムアクセス

## モード

### baseline(メインモード)

プロジェクト構造を分析し、適切なセキュリティ設定を生成する。

#### Step 1: プロジェクト走査

プロジェクト構造を確認し、シークレットが存在しうる場所を特定する:

```bash
# リポジトリ内のシークレット候補ファイルを検出
# 値は一切読まず、パスのみ列挙する
find . -maxdepth 3 \( \
  -name ".env" -o -name ".env.*" -o -name "*.env" \
  -o -name "*.pem" -o -name "*.p12" -o -name "*.pfx" -o -name "*.key" \
  -o -name "credentials.json" -o -name "service-account*.json" \
  -o -name ".npmrc" -o -name ".netrc" -o -name ".pypirc" \
  -o -name "secrets.yml" -o -name "secrets.yaml" \
\) -not -path "./.git/*" -not -path "./node_modules/*" 2>/dev/null | sort
```

#### Step 2: 既存設定の確認

```bash
# 現在のpermissions.deny設定のみを抽出(全文表示はしない)
for f in .claude/settings.json .claude/settings.local.json; do
  if [ -f "$f" ]; then
    echo "=== $f: permissions.deny ==="
    python3 - "$f" <<'PYEOF'
import json, sys
try:
    d = json.load(open(sys.argv[1]))
    deny = d.get('permissions', {}).get('deny', [])
    if deny:
        for r in deny: print(f'  - {r}')
    else:
        print('  (deny rules not set)')
except Exception as e:
    print(f'  (parse error: {e})')
PYEOF
  fi
done
```

#### Step 3: denyルール生成

Step 1の結果をもとに、`permissions.deny`ルールを生成する。

**基本ルール(ほぼ全プロジェクトに適用可能):**

```json
{
  "permissions": {
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(**/.env)",
      "Read(**/.env.*)",
      "Read(**/secrets/**)",
      "Read(**/*.pem)",
      "Read(**/*.p12)",
      "Read(**/*.pfx)",
      "Read(**/*.key)",
      "Read(**/credentials.json)",
      "Read(**/service-account*.json)",
      "Edit(./.env)",
      "Edit(./.env.*)",
      "Edit(**/.env)",
      "Edit(**/.env.*)",
      "Edit(**/secrets/**)",
      "Edit(**/*.pem)",
      "Edit(**/*.p12)",
      "Edit(**/*.pfx)",
      "Edit(**/*.key)",
      "Edit(**/credentials.json)",
      "Edit(**/service-account*.json)",
      "Write(./.env)",
      "Write(./.env.*)",
      "Write(**/.env)",
      "Write(**/.env.*)",
      "Write(**/secrets/**)",
      "Write(**/*.pem)",
      "Write(**/*.p12)",
      "Write(**/*.pfx)",
      "Write(**/*.key)",
      "Write(**/credentials.json)",
      "Write(**/service-account*.json)",
      "Bash(env:*)",
      "Bash(printenv:*)",
      "Bash(sudo:*)"
    ]
  }
}
```

**プロジェクト固有ルール(検出結果に応じて追加):**

検出されたファイルパターンに合わせてRead/Edit/Writeのdenyルールを追加する。例:
- `.npmrc`が存在 → `"Read(.npmrc)"`, `"Edit(.npmrc)"`, `"Write(.npmrc)"`
- `config/secrets.yml`が存在 → `"Read(config/secrets.yml)"`, `"Edit(config/secrets.yml)"`, `"Write(config/secrets.yml)"`

#### Step 4: 設定の適用

**既存のsettings.jsonがある場合は上書きしない。** 差分を提示し、ユーザーにマージ方針を確認する。

```
=== 推奨追加ルール ===
現在のdeny: [既存ルール一覧]
追加推奨:   [新規ルール一覧]

マージ方法:
1. 追加ルールのみ追記(既存ルールは維持)
2. 推奨ルール全体で置換
3. 個別に選択

どの方法で適用しますか?
```

ユーザーの確認後、`.claude/settings.json`または`.claude/settings.local.json`を更新する。

#### Step 5: 検証

生成した設定の検証手順を提示する:

```
=== 検証手順 ===

1. 防御されるケース(以下はdenyされるはず):
   - Read(.env) → ブロック
   - Bash(printenv) → ブロック

2. 防御されないケース(以下は通過する。これは仕様):
   - Bash(cat .env) → 通過(Bashの引数マッチの限界)
   - Bash(python3 -c "print(open('.env').read())") → 通過
   - op runで展開された環境変数の読み取り → 通過

3. より強い保護が必要な場合:
   - managed settingsを使用(ユーザーが変更不可)
   - sandbox modeを有効化
   - PreToolUse hooksで追加パターンを検出(hooks設定は手動で行う必要あり)
```

#### Step 6: 改善推奨(レポート後半)

検出結果をもとに改善推奨を提示する:

- **平文.envが存在**: `/op-env migrate`でop://参照に移行を推奨
- **広権限の資格情報**: Service Account化、最小権限化を推奨
- **長命トークン**: 短命トークン(STS/OIDC/OAuth)への移行を推奨
- **本番キーの存在**: AI実行環境からの即時除去を強く推奨

#### Step 7: 高保証が必要な場合(レポート末尾)

ガードレール以上の保護が必要な場合の案内:

- **Capability Broker**: MCPサーバーとして限定操作のみ公開し、AIにシークレットを渡さない設計。設計原則: 最小権限、監査ログ、human-in-the-loop承認
- **短命トークン発行**: STS AssumeRole、OIDC federation、OAuth client credentials flowで1〜15分のトークンを発行
- **環境隔離**: 別ユーザー/コンテナ/VMでAIを実行し、シークレットストアへのアクセスを物理的に分離

### audit(補助モード)

リポジトリ内(およびオプションでホーム配下)のシークレット候補を走査し、現在の保護状況を報告する。

**AIに秘密値を見せない。** スキャンはローカルscriptで実行し、パスと種別のみ返す。

#### 使い方

```bash
# リポジトリのみ走査(デフォルト)
bash meta-plugin/skills/secret-boundary/scripts/secret-scan.sh

# ホーム配下も走査(opt-in)
bash meta-plugin/skills/secret-boundary/scripts/secret-scan.sh --include-home
```

#### 出力形式

```
path,type,modified,permissions,deny_rule_exists
./.env,env-file,2025-12-01,644,no
./config/secrets.yml,config-secret,2025-11-15,644,no
```

能力分類(prod到達性、課金影響、書込可否等)はscriptでは判定しない。
必要に応じてユーザーに対話で確認し、`secret-boundary.local.yaml`に記録する。

#### secret-boundary.local.yaml

能力分類の補助台帳。**必ず.gitignoreに追加すること**(メタデータ自体が機微情報のため)。

```yaml
# secret-boundary.local.yaml
# このファイルは.gitignoreに追加すること
secrets:
  - path: .env
    type: env-file
    prod_reachable: false
    billing_impact: true
    writable: true
    ttl: permanent
    revocable: true
    notes: "OpenAI API key (dev), Supabase anon key"
```

## 関連スキル

- `/op-env`: 平文.envの保管衛生改善。secret-boundaryのremediate推奨からリンク
- `/security-observation`: コード内のセキュリティ脆弱性検出。対象が異なり補完関係
- `/claude-md-optimizer`: .claude/settings.json の最適化。secret-boundaryが生成した設定との整合性確認

## 参考資料

- Claude Code Settings: https://docs.anthropic.com/en/docs/claude-code/settings
- Claude Code Hooks: https://docs.anthropic.com/en/docs/claude-code/hooks
- Claude Code Security: https://docs.anthropic.com/en/docs/claude-code/security

Files in this skill

  • SKILL.md8.2 KB
  • source.json679 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.