セキュリティ
あなたのコードとビルドは、あなたのもののまま
各ジョブは、インバウンド接続を受け付けないマシンで単独で実行されます。Latchkey がコードに加える変更はすべて、あなたがレビューするプルリクエストとして届きます。
最終更新日
セキュリティアーキテクチャの全体を読む- 1マシンあたりのジョブ数 (マシンはジョブの終了後に破棄されます)
- 0ランナーが受け付けるインバウンド接続
- 0Latchkey がマージするプルリクエスト
- AES-256Latchkey に保存するシークレットの暗号化
01 · 分離
すべてのジョブに、専用のマシンを
各ジョブは、独自のカーネルと暗号化されたディスクを持つ専用の仮想マシンで実行されます。ジョブが終わるとマシンは終了され、ディスクは削除されます。どのマシンも、2 つ目のジョブを実行することはありません。
- 01起動どのジョブも使っていない仮想マシン
- 02実行マシン上には、あなたのジョブだけ
- 03終了完全に停止し、再利用されません
- 04削除暗号化されたディスクも一緒に消えます
コードは、あなたのジョブだけを実行するマシンにチェックアウトされ、そのマシンはジョブの終了時に破棄されます。ジョブの後に Latchkey が保持するものは、プライバシーポリシーとドキュメントに記載しています。
02 · ネットワーク
ランナーからは外へ。外からは何も届きません。
各ランナーは自身のパブリック IPv4 アドレスからインターネットに接続します。このアドレスはランナー自身が開始する接続にだけ使われ、ファイアウォールにはインバウンドルールがありません。それでもビルドはパッケージを取得し、あなたのサービスを呼び出せます。Latchkey CI では、フォークからのプルリクエストがアクセスできるのは GitHub と、固定された一連の公開パッケージレジストリだけです。
03 · 認証情報
ジョブごとに発行される認証情報
Latchkey がジョブのために発行する認証情報は、すべてそのジョブのためだけに発行され、ほかのワークスペースのデータには届きません。いずれもジョブの終了時か約 1 時間で失効します。ただし、Docker が Latchkey のコンテナレジストリに使うトークンは 12 時間有効です。長期間有効な GitHub トークンがランナーに置かれることはありません。
- クローントークン約 1 時間
- ジョブトークンジョブの終了まで
- キャッシュアクセス最長 12 時間
04 · シークレット
Latchkey に保存したシークレットは封印されたまま
Latchkey に保存したシークレットは AES-256-GCM で暗号化され、Latchkey がそれを復号するのは、そのシークレットを指定するステップを持つ実行中のジョブのためだけです。ジョブのログで値の全体が現れる箇所はすべてマスクされ、ダッシュボードからのリクエストでも、CLI や API キーを使ったリクエストでも、値が返されることはありません。
Latchkey が Actions のシークレットを求めて GitHub の API を呼び出すことはありません。
05 · 変更
コードへの変更はすべて、あなたのレビューを待ちます
Latchkey がコミットするのは、自分で作成した新しい latchkey/ ブランチだけで、その後プルリクエストを開きます。あなたのブランチに push することも、マージすることもないため、マージするかどうかは常にあなたが決めます。
06 · 自己修復
自己修復はガードレールの内側で動きます
ステップが失敗したとき、自己修復が実行できるのは、固定された検証済みのリストにあるアクションだけで、AI にシェルは与えられません。自己修復がエラーになったりタイムアウトしたりした場合、失敗したステップは失敗のままです。
- 許可
apt-get install -y libssl-dev固定リストにあるパッケージ - 許可
失敗したステップを再試行同じステップ、同じマシン - 拒否
sudo rm -rf /var/lib/docker許可される sudo コマンドは 1 つだけ - 拒否
LD_PRELOAD=/tmp/hook.so安全でない環境変数 - 拒否
read ~/.ssh/id_rsa機密性の高いパス
07 · 基本
そのほかも、しっかりカバー
保存時の暗号化
ランナーのディスク、ビルドキャッシュ、アーティファクトは保存時に暗号化されます。
転送中の暗号化
すべての公開エンドポイントは HTTPS を使い、API は TLS 1.2 以上を必須としています。
分離されたキャッシュ
ワークスペースのビルドキャッシュには、そのワークスペースに限定された認証情報でしかアクセスできません。
保持期間
依存関係のキャッシュは 14 日後、アーティファクトとジョブのログは 7 日後、修復の記録は 90 日後、提案された修正は 365 日後に期限切れになります。
スコープ付きの API キー
API キーは、ほかの権限を選ばない限り読み取り専用で、SHA-256 ハッシュとして保存され、一度だけ表示されます。
ワークスペースのロール
Owner、Admin、Member の各ロールが、請求、メンバー、連携を管理できる人を決めます。
サンドボックス化されたフォーク
Latchkey CI では、フォークからのプルリクエストがアクセスできるのは GitHub と、固定された一連の公開パッケージレジストリだけです。
ランナーの時間制限
起動から 8 時間たっても動いているランナーは、安全装置によって終了されます。
08 · GitHub App
GitHub App の権限を、ひとつずつ
アプリが参照できるリポジトリはあなたが選び、アプリは Actions のシークレットを読む権限を持ちません。アプリが求めるすべての権限と、その理由を示します。
| 理由 | 権限 | アクセス |
|---|---|---|
| ジョブを Latchkey のランナーで実行する | Organization self-hosted runners | 読み取りと書き込み |
| 実行とログを読み取る、あなたが依頼した実行を開始する、実行をキャンセルする | Actions | 読み取りと書き込み |
| ファイル、ブランチ、プルリクエスト (プルリクエストが変更するファイルの一覧を含む) を読み取り、変更をプルリクエストとして提案する | Contents, Workflows, Pull requests | 読み取りと書き込み |
| Latchkey CI の結果をコミットに報告し、GitHub Actions から移行する間は、コミットのチェックを読み取る | Checks | 読み取りと書き込み |
| マージキューが作る各グループを確認し、ワークフローファイルが実行されるグループを Latchkey CI でビルドできるようにする | Merge queues | 読み取り |
| 組織のプラン、Actions の使用量、GitHub ホスト型ランナー、メンバーを読み取る | Organization plan, Organization administration, Members | 読み取り |
| リポジトリの基本情報を読み取る | Metadata | 読み取り |
| Latchkey がリポジトリに作成した webhook を削除する | Repository hooks | 読み取りと書き込み |
| 現在、Latchkey のどの機能でも使われていません | Administration, Organization hooks | 読み取りと書き込み、未使用 |
| 現在、Latchkey のどの機能でも使われていません | Artifact metadata | 読み取り、未使用 |
Actions のシークレットの権限はありません。