鍵を持たない
BeesBuild は、API キーやトークンの値を持ちません。持つのは、鍵の置き場の住所(参照)だけです。置き場の選び方と渡し方の手順は鍵と接続にあります。このページでは、その考え方と、権限の守りを説明します。
なぜ持たないか
- 持たない物は漏れません。BeesBuild が壊れても、乗っ取られても、鍵の値はそこにありません。
- BeesBuild の PC では、AI が命令を動かします。AI が読める所に鍵を置くと、AI の誤りや外から来た指示で、鍵が会話や記録に出るおそれがあります。
- Windows の資格情報マネージャーと、コアと話す口(名前付きパイプ)は、同じ Windows の利用者のプロセスなら読める作りです。これは確かめてあります。OS の鍵の置き場に入れるだけでは、同じ利用者で動く AI から鍵を守れません。だから AI はサンドボックスで動かします(隔離と検査と署名)。
4 つの決まり
| 決まり | 中身 |
|---|---|
| 置き場に置く | 鍵の正本は 1Password などの置き場。BeesBuild には入れない |
| 参照だけを持つ | BeesBuild が持つのは op://… のような置き場の住所だけ |
| 使う時だけ渡す | 道具を起こす直前に取り出し、その道具のプロセスにだけ渡す。終われば残らない |
| 出さない | 鍵の値を、会話・ファイル・記録・画面に出さない |
鍵の置き場の分け方
| 物 | 置き場 | 決まり |
|---|---|---|
| API キーとトークン | 1Password(正本) | 実行の時だけ取り出す。取り出す時は生体の認証 |
| Workers と AI Gateway に渡す鍵 | Cloudflare の Secrets Store・Workers の secrets | 写し先だけ。正本は 1Password |
| 外のサービスとの連携のトークン(OAuth) | Nango(暗号化して持つ) | BeesBuild とハーネスはトークンを持たない。Nango を動かす鍵は 1Password |
| GitHub の CI・クラウドの蜂の鍵 | GitHub の secrets・クラウドの蜂の金庫 | 写し先だけ。出してよいと決めたリポジトリだけに効く鍵にする |
| Claude Code などのサインインの資格 | 各ハーネスの公式の置き場 | BeesBuild は読まない・持たない。状態だけを claude auth status などで見る |
写し先と期限の全部は、鍵の一覧で見られます(鍵と接続)。
AI から鍵を遠ざける
鍵を読むのは、BeesBuild のコアだけです。AI には、鍵の中身を渡しません。
| 守り | 中身 |
|---|---|
| サンドボックス | AI のエージェントは、WSL2(Windows との相互の呼び出しを切る)・Docker・別の Windows の利用者のどれかで動かす |
| 口を分ける | コアの口は、画面用と AI 用で権限を分ける。AI 用の口からは、鍵を取り出せず、承認もできない |
| 承認は画面から | 承認は BeesBuild の画面からだけ。お金・鍵・権限は Windows Hello で本人を確かめる |
| 子のプロセスへの漏れ止め | Claude Code の CLAUDE_CODE_SUBPROCESS_ENV_SCRUB=1 で、子のプロセスに渡す環境の値から資格を外す(鍵と接続) |
| クラウドの資格を見せない | ~/.aws・gcloud の設定・.wrangler を、サンドボックスの中から読めなくする(データの扱い) |
| 秘密を隠して渡す | AI に渡す文の中の鍵らしい文字は、印に置き換えてから渡す(データの扱い) |
権限は最小
| 相手 | 決まり |
|---|---|
| GitHub(手元) | 利用者の gh のログインで、PR・CI・レビューを読む |
| GitHub App | 読む物(PR・レビュー・担当・CI・配布)と、決めた書く物(issue のコメント、モードで許した自動マージ)だけ。組織の管理の権限は持たせない |
| GitHub(クラウドの蜂) | 細かい権限の鍵で、出してよいと決めたリポジトリだけ。内容の読み書きと PR だけで、main への push は許さない(クラウドの蜂) |
| GitHub の組織 | 招待や役の変更は、持ち主の GitHub のログインで行う(みんなで作る) |
| クラウド(Cloudflare・AWS・GCP) | 読むだけの役で始める。AWS の ReadOnlyAccess と GCP の roles/viewer はデータの中身まで読めるので使わない(クラウドとドメイン) |
| 長く生きる鍵 | 作らない。AWS は IAM Identity Center か aws login の短い資格、GCP は利用者のログインと、読むだけのサービスアカウントの借用(鍵のファイルを作らない) |
| MCP | 書く道具は毎回聞く(always_ask)。1 つの役に「読む」と「外へ送る」がそろう組み合わせは止める |
| 連携 | 範囲は仕事に要る分だけ(決めたフォルダー・決めたチャンネル・読むだけ など) |
| 費用を読む鍵 | AI を呼ぶ鍵と分け、読むだけの権限を優先する(鍵と接続) |
| BeesBuild 自身 | 管理の権限を常には持たない。直す時は、持ち主のログインで当てる |
権限の地図
誰が、どこで、何をできるかを 1 枚の地図にします。人が抜けた後に残った権限や、広すぎる権限に気づくためです。画面と細かい既定は、決めているところです。設計中
| 欄 | 中身 |
|---|---|
| 行 | 人・サービスアカウント・トークン・AI のスレッド |
| 列 | Cloudflare・AWS・GCP・GitHub |
| マス | 役・どこから付いたか(直・グループ・権限の組)・最後に使った日 |
マスには、気をつける所に印を付けます。
| 印 | 意味 |
|---|---|
| 使っていない | 長く使っていない権限(例:90 日) |
| 広すぎる | 仕事に要る分より広い役 |
| 外の人 | 組織の外のアカウントや、外から届く公開の範囲 |
| 長く生きる鍵 | 期限の無い鍵・長く取り替えていない鍵 |
| データを読める役 | 資源の情報だけでなく、データの中身まで読める役 |
場所ごとに、公式の読む口から集めます。
| 場所 | 読む物 |
|---|---|
| Cloudflare | メンバーの役・API トークン |
| AWS | IAM Identity Center の割り当て・IAM の利用者と鍵・最後に使った日・資格の報告・IAM Access Analyzer の外のアクセス |
| GCP | IAM の方針の検索(gcloud asset search-all-iam-policies)・Policy Analyzer・IAM Recommender・Activity Analyzer |
| GitHub | チームと役・担当の範囲(みんなで作る) |
- AI に地図を読ませる時は、人の名前を仮の名に置き換えて渡します。
- 有料の読み方(AWS の Access Analyzer の使っていないアクセスなど)は、入れる時に確認のカードを通します。
まとめて直す
- 案を作る:BeesBuild が、直す案をまとめて作ります(例:90 日使っていない権限を外す)。1 行ごとに、前と後・理由・戻し方を付けます。
- 読み合わせる:組織の決まり(AWS の SCP・RCP、GCP の Org Policy など)は、コードにしてハブのリポジトリに置き、PR で読み合わせます。
- 1 枚のカードで承認する:全部の変更を 1 枚の確認のカードに並べます。持ち主が読み、Windows Hello で本人を確かめて押します。
- 持ち主のログインで当てる:変更は、持ち主のログインで当てます。BeesBuild に管理の権限を常に持たせないためです。
- 記録する:前と後・理由・戻し方・当てた人を、権限の変更の記録に残します。
抜ける時
人が抜ける時は、その人の全部の権限と鍵(Cloudflare・AWS・GCP・GitHub)を並べ、外す案を 1 枚にします。GitHub のチームと担当の範囲の手順はみんなで作るにあります。抜けた人の権限が残っていると、人の番に知らせが出ます。
一時の権限
強い権限は、要る時だけ時間を決めて付けます。GCP は Privileged Access Manager(PAM)を使います。AWS には同じ公式の仕組みが無いので、割り当てを時間で外します。
持ち出しの守り(3 段)
クラウドのデータを外へ持ち出させない守りです。安い守りから順に重ねます。画面と細かい既定は、決めているところです。設計中
| 段 | いつ使うか | 中身 |
|---|---|---|
| ① 全員・無料 | 既定 | 最小の権限・短い資格・公開を止める設定(S3 の Block Public Access・GCS の公開アクセスの防止・r2.dev の住所を切る)・トークンの期限と IP の制限・監査ログの見張り・抜ける時の一括 |
| ② 組織の決まり | AWS や GCP で組織を作った時 | AWS の SCP(人ができる事の上限)・RCP(資源に届く事の上限。組織の外から呼ぶ人にも効く)・組織の単位の公開の禁止。GCP の Org Policy(共有できるドメインを限る・鍵を作らせない)・拒否の方針・Principal Access Boundary・VPC Service Controls(境界の外への写しを止める) |
| ③ 強い守り | 試してから、大事なデータの所だけ | Cloudflare の Cloud Workload Security(beta。AWS と Cloudflare の API の呼び出しを、届く前に決まりで止める代理)と、Gateway の DLP |
- 監査ログの見張りでは、Cloudflare の監査ログ(見ただけの操作も残る)、AWS の CloudTrail のイベント履歴(管理の出来事の 90 日)、GCP の Admin Activity の記録を読みます。
- ② の決まりは、案をコードにしてハブのリポジトリに置き、PR で読み合わせ、人が当てます。
- ③ の代理の置き方は、確かめているところです。確認中
- 決まりごとに、段・提供元・中身・状態(案・試し・入れた)を持ちます。
漏れた時
| 動き | 中身 |
|---|---|
| すぐ止める | 鍵と接続の「全部の通り道を止める」で、鍵の通り道を全部止める。動いている仕事も止まる(鍵と接続) |
| 入れ替える | 1Password で新しい値にし、コアが写し先へ書き直す。記録には版と時刻だけを残す |
| 気づく | 1 つの鍵の使った量が急に増えたら、漏れの疑いとして赤の知らせが出る(枠の財布とランニングコスト) |
| 探す | 毎週の点検で、コードと記録に鍵が出ていないかを見る(監視と監査) |
漏れた鍵の値を、issue・手紙・会話に貼りません。どの鍵かは、置き場の住所で伝えます。
Mac 版では
Mac 版の案では、Windows Hello の代わりに Touch ID で本人を確かめ、鍵の置き場に macOS の Keychain を使います。同じ利用者で動く AI がコアの口につなげる点は Windows と同じなので、AI はサンドボックスで動かし、承認は画面からだけにします(提供の予定と範囲)。ベータ版の後
データの型
| 型 | 中身 |
|---|---|
HbSecretRef | 鍵の参照(置き場の住所・種類・写し先・期限)。中身は持たない |
HbCloudGrant | 権限の地図の 1 行(誰・場所・役・どこから・最後に使った日・印) |
HbGrantChange | 権限の変更の案と記録(外す・弱める・一時の権限・抜ける時。前と後・理由・戻し方・当てた人) |
HbGuardPolicy | 持ち出しの守りの決まり(段・提供元・中身・状態) |