まずラベルではなくアクセスモデルから考える
シークレットGistは「非公開」と読まれがちです。そうではありません。この区別が重要なのは、Gistのリンクが移動するからです。チャットに貼られ、ノートに埋め込まれ、メールで転送され、ブラウザ履歴に残る。内容が機密性を帯びるなら、問うべきは「Gistが検索結果に表示されるか」ではなく「誰がリンクを持っているか」です。
シークレットGitHub Gistは公開検索から除外されますが、リンクを知っている人は誰でも閲覧できます。出典
この一つの事実が監査の形を変えます。探すべきは公開一覧に漏れた秘密だけではなく、リンクを共有した、あるいはリンクを把握していないGistすべてです。公開GistとシークレットGistの違いは発見可能性であり、リンク経由のアクセスではありません。
ステップ1:所有するGistを棚卸しする
GitHubアカウントを開き、自分のGistを一覧にします。検索エンジンからではなく、所有するアカウントから作業してください。検索エンジンはインデックス済みのものしか表示しないため、自分が管理する完全な集合が必要です。
次の4列で作業用の棚卸し表を作ります。
| 列 | 記録する内容 |
|---|---|
| Gist識別子 | GistのURLまたは短いID |
| 公開範囲 | アカウントに表示される公開またはシークレット |
| 内容の分類 | コードサンプル、設定、メモ、認証情報に近いテキスト |
| リンクの露出 | リンクを貼った、埋め込んだ、送った場所 |
この棚卸し表に実際の秘密情報を貼らないでください。値ではなく分類を記録します。Gistにトークンやパスワードが含まれる場合は、認証情報に近いものとして印を付け、ローテーション(rotate)するまでその値は漏えいしたものとして扱います。
ステップ2:誰がアクセスする必要があるかで各Gistを分類する
以下の判断表は、監査をアクセスモデルに変換します。プラットフォームが対応する区別、つまり公開Gist、シークレットGist、プライベートリポジトリだけを使います。
| ニーズ | 適したモデル | 理由 |
|---|---|---|
| 内容を発見・再利用してほしい | 公開Gist | 設計上公開で、発見可能 |
| 共有したいが検索には載せたくない | シークレットGist | 公開検索から除外されるがリンク閲覧可能 |
| 非公開のアクセス制御が必要 | プライベートリポジトリ | 非公開素材に対するGitHubの推奨 |
| 認証情報や個人データを含む | プライベートリポジトリに移し、その後ローテーション | Gistのリンクはアクセス制御ではない |
二つの限界ははっきり述べておく価値があります。公開GistはシークレットGistに変換できないため、公開すべきでなかった公開Gistは、切り替えではなく削除して作り直す判断として扱う必要があります。
公開GistはシークレットGistに変換できません。出典
そして、素材が本当に非公開アクセスを必要とする場合、シークレットGistはプライベートリポジトリの代わりにはなりません。
GitHubは非公開アクセスが必要な素材にはプライベートリポジトリを推奨しています。出典
ステップ3:各Gistリンクがどこまで渡ったか追跡する
シークレットGistごとに、より狭い問いを立てます。そのURLを誰が持っているか。自分の送信メッセージ、issueコメント、プルリクエストの説明、ドキュメントの下書き、共有ノートをGistのURLで検索してください。自分が管理する公開ページにリンクが載っていないかも確認します。
ここでユーザー名検索(username lookups)の考え方が役立ちます。Gistリンクはハンドルと一緒に共有されることが多いため、自分が使っている公開ハンドルを見直すことで、リンクをどこに公開したかが見えてきます。過去に複数のハンドルを使ってきた場合は、既知の公開ハンドルの見直しから始め、各プロフィールでGistのURLを確認します。TraceSeekはユーザー名を3,000+のプラットフォームで20–30秒で調べられ、最初のスキャンは無料です。表示されるのはハンドルが公開されている場所であり、Gistの内容やリンクが非公開で共有されたかどうかではありません。リンクを載せている可能性のある公開プロフィールを見つけるために使い、非公開の共有記録として扱わないでください。
古いアカウントの一覧を再構築する体系的な方法は /guides/find-forgotten-online-accounts/ を参照してください。プラットフォーム別の検索ページは /find/github/ です。
ステップ4:判断してから行動する
分類を使って、Gistごとに一つの行動を選びます。
- 内容が公開での再利用を意図している場合に限り、公開Gistとして維持する。
- リンクを受け取る可能性のある全員にとってリンク経由のアクセスが許容できる場合に限り、シークレットGistとして維持する。
- 認証情報に近い素材や個人素材はプライベートリポジトリに移し、露出した値はローテーションする。
- 公開すべきでなかった公開Gistは、削除して正しいモデルで内容を作り直す。公開範囲の切り替えが存在すると仮定しない。
Gistを削除すると自分のコピーは消えますが、他者が作ったコピー、検索エンジンのキャッシュ、すでにどこかへ貼られたリンクは消えません。それを見越して計画してください。まず秘密情報をローテーションし、その後でGistを整理します。
よくある間違い
- 「シークレット」を「非公開」と扱う。 シークレットGistは公開検索から除外されますが、リンクを知っている人は誰でも閲覧できます。違いはそれだけです。
- 公開Gistを後からシークレットにできると仮定する。 公開GistはシークレットGistに変換できないため、公開前に判断する必要があります。
- 利便性のためにトークンをGistに保存する。 Gistは共有の場です。認証情報はリンク閲覧可能なページではなく、プライベートリポジトリやシークレットマネージャーに置くべきです。
- 検索エンジンが表示するものだけを監査する。 検索インデックスは不完全で遅れます。検索ボックスではなく自分のアカウントから監査してください。
- ローテーションより先に削除する。 認証情報がGistにあった場合、Gistを削除しても認証情報は無効になりません。先にローテーションします。
- ユーザー名の一致と所有権を混同する。 GistのURLに言及した公開プロフィールは手がかりであり、その人物がGistやアカウントを管理している証拠ではありません。
自分の足跡を守る
持続的な解決策は一度きりの整理ではなく、既定のルールです。どの内容分類をどのモデルに置くかを事前に決めます。見つけてほしいサンプルは公開Gist、共有したいが一覧に載せたくない素材はシークレットGist、非公開アクセスが必要なものはプライベートリポジトリです。迷ったときは、GitHub自身のガイダンスがプライベートリポジトリを指しています。
GitHubは非公開アクセスが必要な素材にはプライベートリポジトリを推奨しています。出典
そして棚卸し表を最新に保ちます。Gist、その公開範囲、リンクを共有した場所を四半期ごとに短く見直すことで、ずれが露出になる前に捉えられます。公開ハンドルを見直すときは、ユーザー名検索が手がかりを生むものであって完全なアカウント棚卸しではなく、非公開の共有やGistの内容は見えないことを忘れないでください。
重要な事実
シークレットGitHub Gistは公開検索から除外されますが、リンクを知っている人は誰でも閲覧できます。
公開GistはシークレットGistに変換できません。
GitHubは非公開アクセスが必要な素材にはプライベートリポジトリを推奨しています。
TraceSeekはユーザー名を3,000+のプラットフォームで20–30秒で調べられ、最初のスキャンは無料です。