# セキュリティとGitHubの権限

> Latchkey GitHub Appが読み取り、変更できるものの正確な内容、ランナーインフラがどのように隔離されるか、削除がどのように機能するか。

Source: https://latchkey.dev/ja/documentation/security-and-permissions

## Summary

- Latchkeyはワークフローの実行/ジョブとワークフローのYAML、および失敗の診断時に特定のビルドマニフェスト（package.json、go.mod、Dockerfile）を読み取ります。シークレットや環境の値は**決して**読み取りません。
- リポジトリへの書き込みは、あなたがレビューするプルリクエストとしてのみ発生します: 最適化PRと修復PRです。
- ランナーは各ジョブ後に破棄される、単一ジョブでプライベートネットワークのマシンです。workspaceを削除するとそのデータは永久に削除されます。

このページは、Latchkeyがアクセスできるものとできないものを、セキュリティレビューが率直な回答を得られるよう、平易な言葉で説明します。次の4つを扱います: GitHub Appが読み取るもの、Latchkeyがリポジトリに書き込むタイミング、ランナーインフラがどのように隔離されるか、そしてデータ削除がどのように機能するかです。

## Latchkeyが読み取るもの、そして決して触れないもの

この境界は意図的なものです: 左側のすべては特定の機能を支えるために存在し、それ以外は一切要求されません。実行とジョブのメタデータは分析ダッシュボードの原材料であり、ワークフローYAMLは最適化を提案するためにAIが読み取るものであり、最適化PRが編集する唯一の種類のファイルです。リポジトリメタデータはモニタリングモーダルのリポジトリリストを駆動し、GitHubプランは[コスト分析](/documentation/cost-analysis)ページのGitHub側コストモデルに供給されます。

## Latchkeyがリポジトリに書き込むとき

プルリクエストを通じてのみ、そして2つの状況でのみです:

- 最適化の推奨事項で適用をクリックしたとき: Latchkeyがワークフローファイルを変更するPR(ブランチ `latchkey/insight-...`)を開きます。
- セルフヒーリングが永続的な修正を提案するとき: 根本原因と変更を説明する修復PRです。

| 書き込みの契機 | 何がそれをトリガーするか | GitHubで表示されるもの |
| --- | --- | --- |
| 最適化PR | Optimization Insightsページで推奨事項の適用をクリックしたとき | `latchkey/insight-...` という名前のブランチ上の、「Latchkey insight: <what it does>」というタイトルのプルリクエスト |
| 修復PR | セルフヒーリングが、リポジトリ内で永続的な修正を必要とする根本原因を診断したとき | `latchkey/heal-...` ブランチ上の、「Latchkey heal: <error summary>」というタイトルのプルリクエストで、何が失敗し、なぜ、そして変更が何をするかを説明します |
| ランナーグループの管理 | アプリのインストール。`latchkey-*` ジョブをマネージドランナーにルーティングできるようにするため | アプリは組織内で自身のランナーグループを管理します。リポジトリの内容は変更されません |

どちらの種類のPRも、チームがレビュー、編集、またはクローズするための通常のプルリクエストです。Latchkeyはあなたのブランチに直接プッシュすることも、何かをマージすることも決してありません。したがってLatchkeyのPRを一度もマージしなければ、リポジトリ内は何も変わりません。フォークからのプルリクエストは決して触れられません。アプリが管理するランナーグループは、リポジトリの内容ではなく組織のCI配管です。

## ランナーの隔離

マネージドランナーはあなたのコードを実行するため、その隔離モデルはこのページの他の何よりも重要です。4つの特性が連携して機能します:

- **ランナーごとに1ジョブ。** すべてのマネージドランナーは単一のジョブを実行し、その後破棄されます。ジョブ間や顧客間で何も持続しません。ジョブが書き込み、インストール、または破壊したものは、マシンとともに消えます。
- **プライベートネットワーク。** ランナーはパブリックIPのないプライベートサブネットに存在し、インバウンドアクセスはありません: ランナーは作業のために外部へ接続しますが、インターネット上の何もそれへの接続を開始できません。
- **強化されたインスタンスのデフォルト設定**。強制されたインスタンスメタデータ保護と暗号化されたディスクを含みます。
- **登録はジャストインタイム。** 新しいランナーは使い捨ての認証情報で正確に1つのジョブに登録するため、盗まれる長期の実行認証情報はありません。認証情報はジョブが完了すると使い切られます。

### セルフヒーリングとあなたのシークレット

セルフヒーリングの診断は、ジョブがすでに出力しているステップ出力に対して、ランナー上でローカルに実行されるため、新たに何かが露出することはありません: GitHub Actionsによってマスクされたシークレットはマスクされたままで、診断が見たすべてを含むランナーはジョブ後に破棄されます。実行中の修正はエフェメラルなランナーにのみ触れ、永続的な修正はレビュー用のプルリクエストとしてのみ届き、フォークからのプルリクエストは決して触れられません。完全なモデルは[セルフヒーリング](/documentation/self-healing)にあります。

## APIキーとMCPサーバー

MCP経由で[AIエージェントを接続する](/documentation/connect-your-ai-agent)場合、考慮すべき認証情報はAPIキーです:

- **デフォルトで読み取り専用。** キーは CI の失敗と実行のデータを読み取れます。Latchkey や GitHub 側の変更はデフォルトでは一切できず、すべての書き込みはそれぞれキー作成時の個別のオプトインです。
- **ディスパッチはキーごとのオプトイン。** **Allow workflow dispatch** を有効にして作成したキーは `mcp:dispatch` スコープも持ち、エージェントが監視対象リポジトリで `workflow_dispatch` 実行をトリガーできます。それなしで作成したキー (このオプションが存在する前に作成されたすべてのキーを含む) はディスパッチできません。
- **ジョブの実行はキーごとのオプトイン。** **Allow running CLI jobs (includes reading)** を有効にして作成したキーは `jobs:run` スコープを持ち、その保持者はあなたの workspace 内の課金対象の Latchkey ランナーで単発のコマンドを実行できます。**Allow reading CLI job status and logs** は `jobs:read` のみを付与します。
- **workspaceスコープ。** workspaceはキー自体から導出されるため、キーは自身のworkspaceのデータしか見ることができません。
- **一度だけ表示。** 完全なキー(`lk_live_` で始まります)は作成時にのみ表示されます。その後、UIはプレースホルダーを表示します。
- **取り消し可能。** Settings、API Keysから任意のキーを取り消せます: 書き込み可能なキー (dispatch または jobs) は即座にアクセスを失い、読み取り専用のキーは約1分以内にアクセスを失います。取り消されたキーは監査のためリストに残ります。

キーを持つ者は誰でも、完了したジョブのログの抜粋を含む CI の失敗と実行のデータを読み取れます。さらにディスパッチ有効のキーは監視対象リポジトリで手動ディスパッチ可能な任意のワークフローを再実行でき、ジョブ有効のキーは課金対象のランナーでコマンドを実行し、ランナー分数を消費できます。キーはパスワードのように扱ってください: リポジトリではなくエージェントの設定に保存し、書き込みは必要なところだけで有効にし、漏洩した可能性のあるキーはローテーションしてください。

## データの取り扱い

- データは転送中(TLS)および保存時に暗号化されます。
- 分析データはあなたのworkspaceにスコープされ、組織ごとに隔離されます: 各workspaceは独自のプラン、チーム、リポジトリ、データを持ち、あるworkspaceのメンバーであることが別のworkspaceへの可視性を与えることは決してありません。
- セルフヒーリングの診断はランナー内のステップログに対して機能します。ダッシュボードに表示される修復レポートには、診断と取られたアクションが含まれます。

## データの削除

- **リポジトリを無効化する**: 取り込みが即座に停止し、そのデータはダッシュボードからアーカイブされます。後で再有効化すると新しいバックフィルが開始します。[リポジトリの管理](/documentation/managing-repositories)を参照してください。
- **サブスクリプションをキャンセルする**: アクセスはブロックされますが、データは保持されるため再サブスクライブで復元されます。
- **workspaceを削除する**(Settings、Account、オーナーのみ): リポジトリ、ワークフローデータ、マネージドランナーのリソースを永久に削除し、請求をキャンセルします。
- **アカウントを削除する**: あなたのLatchkeyアカウントと所有するworkspaceを削除します。これらのいずれによっても、あなたのGitHubリポジトリとワークフローが影響を受けることは決してありません。

> ****
> このページを超えて、セキュリティレビューが回答を必要とする質問がありますか? [サポートにお問い合わせ](/support)いただければ、必要なものをお届けします。

### Latchkey は Secret を読み取れますか?

いいえ。Latchkey が読み取るのは、ワークフローの実行とジョブ、ワークフローの YAML、そして失敗を診断する際の package.json、go.mod、Dockerfile などの特定のビルドマニフェストだけです。Secret や環境変数の値を読むことはなく、分析処理からそもそも参照できません。

### Latchkey はリポジトリに書き込みますか?

あなたがレビューするプルリクエストとしてのみです。最適化 PR と修復 PR は通常のプルリクエストとして提案され、マージするかどうかはあなたが決めます。ブランチへ直接プッシュすることはありません。

### ワークスペースを削除するとデータはどうなりますか?

完全に削除されます。ランナーはプライベートネットワーク上の 1 ジョブ専用マシンで、ジョブごとに破棄されるためジョブ間で何も残りません。ワークスペースの削除により、保存されていた分析データもあわせて削除されます。

---

Latchkey runs CI/CD that repairs its own failures. Agent entry points: https://latchkey.dev/agent.txt, https://latchkey.dev/openapi.json, https://latchkey.dev/llms.txt
