本文へスキップ
2FAAuth.Work
言語: 日本語
9分で読める 2faauth.work 著 編集方針

GitHub・GitLab・開発者アカウントで2FAを有効にする方法

GitHub、GitLab などの開発者アカウントで二要素認証を有効にする実践ガイド。認証アプリ、パスキー、SSH キー、トークンの設定方法を解説します。

開発者アカウントが主要な標的となる理由

攻撃者にとって、あなたのGitHubやGitLabアカウントは典型的なメールログインよりもはるかに価値があります。プライベートリポジトリへのプッシュアクセス、デプロイキー、パッケージ公開権限、そして本番インフラへの直接の経路を保持している可能性があります。一度侵害されれば、攻撃者はあなたの権限をそのまま引き継ぎます。

だからこそ、たった1つの漏洩したパスワードがこれほど深刻な被害をもたらしうるのです。プライベートリポジトリには設定ファイル、APIキー、データベース認証情報が含まれていることがあります。CIパイプラインは、リソースを起動したりビルドに悪意あるコードを注入したりできるクラウドトークンをしばしば保持しています。攻撃者は盗んだメンテナアカウントを使い、バックドアを仕込んだアップデートを下流のユーザーへ配信した実績があります。

業界はこのことを認識しています。GitHubはすでに多くのアクティブなコントリビューターに二要素認証を義務付けており、GitLabをはじめ他のプラットフォームも強く推奨しています。自ら有効にすれば、義務化に追われるのではなく、一歩先を行くことになります。

最後に、開発者のセキュリティは個人の問題だけにとどまりません。雇用主のソースコードも、あなたがメンテナンスするオープンソースプロジェクトも、すべてあなたの認証情報に依存しています。2FAを有効にすれば、同僚、ユーザー、そしてあなた自身の評判を一歩で守ることができます。

第二の認証要素の選択

認証アプリ(TOTP)

Google Authenticator、Authy、1Password などのアプリは、スマートフォン上で 6 桁のコードを 30 秒ごとに生成します。オフラインで動作し、費用はゼロ、SMS よりはるかに傍受されにくいものです。ほとんどの開発者にとって、これが合理的な標準です。

パスキーとセキュリティキー

パスキーとハードウェアセキュリティキーは、ウェブサイト自身のドメインに紐づいた暗号技術を使用するため、フィッシングページに騙されてサインインさせられることはありません。GitHub と GitLab はどちらも対応しています。リポジトリに実際の価値があるなら、パスキーまたはハードウェアキーを第一の要素として登録し、TOTP アプリをバックアップとして保持してください。

SMS コード

テキストメッセージは SIM スワップによって乗っ取られる可能性があり、セキュリティは完全にキャリアに依存します。他に手段がない場合にのみ SMS を使用し、可能になり次第切り替えてください。

リカバリーコード

2FA を有効にすると、サイトは一回性のリカバリーコードのセットを提供します。生成したら、紙に印刷するかパスワードマネージャーの安全なメモに保存するなど、オフラインで保管してください。リカバリーコードなしでスマートフォンを紛失すると、アクセスの回復は時間のかかるサポート対応との苦闘になります。

GitHubの2FAを有効化する

サインイン後、Settings > Password and authentication > Two-factor authentication へ移動し、Enable two-factor authentication をクリックします。

TOTPアプリを登録する

GitHubにQRコードが表示されます。認証アプリ(Aegis、1Password、Google Authenticatorなどいずれでも可)でスキャンし、アプリに表示される6桁のコードを入力して確認します。以後、アプリは30秒ごとに新しいコードを生成します。

パスキーまたはセキュリティキーを追加する

TOTPコードはフィッシングされる可能性があります。設定後、同じ設定ページで2つ目の方法としてパスキーまたはハードウェアセキュリティキーを登録してください。TOTPはバックアップとして残し、唯一の認証要素にしないでください。

リカバリーコードをダウンロードする

設定中、GitHubがリカバリーコードを提供します。ダウンロードし、印刷または暗号化ドライブなどオフラインで保管してください。リポジトリやクラウドメモには絶対に保存しないでください。各コードは1回のみ使用でき、第二要素をすべて失った場合の唯一の復旧手段です。

その後のトークンとSSHキー

既存のSSHキーとパーソナルアクセストークンはそのまま引き続き動作します。HTTPSでのプッシュでは、パスワードの代わりにブラウザ認証またはトークンが求められるようになります。

GitLab 2FA の有効化

GitLab でアバターを選択し、Preferences を開き、左サイドバーの Account をクリックして、Enable two-factor authentication をクリックします。

アプリのペアリング

TOTP アプリ(Aegis、1Password、Google Authenticator など)で QR コードをスキャンし、生成される 6 桁のコードを入力してペアリングを確認します。ハードウェアを希望する場合は、同じ Account ページからセキュリティキーやパスキーなどの WebAuthn デバイスを第二要素として登録できます。

リカバリーコードの保存

その後、GitLab は 1 回限りのリカバリーコードのリストを表示します。各コードは、認証アプリへのアクセスを失った場合に 1 回だけ使用できます。ダウンロード、コピー、または印刷して、パスワードマネージャーなどの安全な場所に保管してください。後で同じページから新しいリストを生成できますが、最初のセットも安全に保管してください。

Git 操作の変更点

2FA を有効にすると、アカウントのパスワードは HTTPS 経由の Git では使用できなくなります。代わりに個人アクセストークンを使用して push / pull するか、SSH キーに切り替えてください。作業中に締め出されないよう、2FA を有効にする前にトークンを作成してください。

2FA有効化後のSSH鍵とトークン

2FAを有効にすると、パスワードによるgit pushは使えなくなります。リモートをSSHに切り替えれば、日々の作業でパスワード入力は一切不要になります:

git remote set-url origin [email protected]:owner/repo.git

SSH鍵の生成

パスフレーズで保護された最新方式の鍵を作成します:

ssh-keygen -t ed25519 -C "[email protected]"

.pub ファイルの内容をアカウントのSSH鍵設定にコピーします(GitHub: Settings → SSH and GPG keys、GitLab: Preferences → SSH Keys)。パスフレーズはSSHエージェントにキャッシュされるため、入力頻度は低くて済みます。

スクリプト・CI用のトークン

API呼び出しやパイプラインでは、パスワードの代わりにパーソナルアクセストークンを使用します。各トークンには動作に必要な最小限のスコープのみを付与してください — 公開リポジトリの読み取りしかできないトークンは、悪意あるコミットをpushできません。

影響範囲の限定

特定のリポジトリと権限に絞ったファイングレードトークン(GitHub)を優先し、サーバー上の単一リポジトリにはデプロイキーを使用してください。スコープを狭めた認証情報が漏洩しても、攻撃者が得られるものはアカウント全体よりはるかに少なくて済みます。

その他のロックダウンすべき開発者アカウント

パッケージレジストリもGitホストと同等の保護に値します。npm、PyPI、Docker Hubはいずれも2FAに対応しており、npmでは場合によって必須です。レジストリアカウントが侵害されると、攻撃者が改ざん版のパッケージを公開でき、それがパッケージをインストールする全マシンに届いてしまいます。

クラウドコンソールとCIプロバイダー

AWS、Google Cloud、Azure、そしてGitHub ActionsのシークレットやGitLab CIの変数といったCIサービスには、デプロイ資格情報、データベースアクセス、クレジットカード情報が保持されていることがよくあります。コンソールアカウントで2FAを有効にした上で、どのCIジョブがシークレットを読み取れるか監査してください。

信頼の根

残りよりも重要な2つのアカウント:

  • メール — ほぼすべてのパスワードリセットがここに届く
  • パスワードマネージャー — 他の全アカウントの鍵を握る

どちらかが落ちれば、2FAの有無にかかわらず、攻撃者はパスワードリセット経由で他のすべてのアカウントに侵入できることがよくあります。両方を、手持ちで最も強力な第二要素 — SMSではなくハードウェアキーまたは認証アプリが理想的 — で保護し、これらのパスワードを他で決して再利用しないでください。

2FAとの日々の付き合い方

2FAを有効にしたら、いくつかの習慣で手間なく運用できます。

リカバリーコードを厳重に管理する。 パスワードマネージャーに保存するか、印刷して安全な場所に保管してください。リポジトリにコミットしてはいけません — プライベートでも、トークンやフォーク、設定ミスを通じて漏洩する可能性があります。

バックアップの第二要素を登録する。 問題が起きる前に、2つ目のTOTPアプリや予備のセキュリティキーを追加しておきましょう。スマートフォンを紛失した後に設定するバックアップは、存在しないのと同じです。

定期的に監査する。 数ヶ月ごとにアクティブなセッションを確認し、使わなくなったデバイスを削除してください。古くなったSSHキー、パーソナルアクセストークン、デプロイキーを失効させてください — 古い認証情報は、作成されたプロジェクトより長く残ります。カレンダーのリマインダーが役立ちます。

すべてを失ったら、 プラットフォームのサポートに連絡してください。復旧には数日かかり、アカウントの所有証明も必要になるため、この手段は最終手段として考えてください。計画ではありません。

今の2分の設定が、後の1週間のロックアウトに勝ります。2FAを有効にし、コードを保存し、先に進みましょう。

このガイドを共有

9分で読める

2FAの歴史:ハードウェアトークンからパスキーまで

クリップ式ハードウェアトークンやSMSコードから、今日のフィッシング耐性のあるパスキーへ。二要素認証がどのように進化し、なぜ各段階が起きたのかを解説します。

続きを読む