みなさん、GitLabに二要素認証を設定していますか?二要素認証は安全にGitLabを利用するためにとても大事なことです。
二要素認証はGitLab.comではもちろん、オンプレミスのGitLabでもデフォルトで使えます。また、面倒なワンタイムパスワードの入力だけでなく、指紋認証やパソコンに設定したPINなど、より安全で手軽な二要素認証もサポートしています。
このブログを読んで、ぜひ二要素認証を有効にしてください。
二要素認証の必要性
GitLabのようなサービスは、アクセスしてきたユーザーが誰なのかを特定する必要があります。そこで、そのユーザーしか知らない文字列(パスワード)を送信してもらい、そのパスワードを確認することでまちがいなく該当のユーザーだと判断しています。これがパスワード認証です。
パスワード認証には「そのユーザーしか知り得ない」という前提があります。もし、パスワードが漏洩するとこの前提が崩れ、なりすましを許してしまいます。長くランダムなパスワードは漏洩の可能性を減らすことに役立ちますが、一度漏洩してしまえば無力です。
パスワード認証という一つの認証要素だけでなく、指紋認証やあなたが所有しているスマートフォンを持っているかなどの中から、二つの認証要素を利用して片方が破られても大丈夫にしたものが二要素認証です。
今ではパスワードを長くランダムにするだけでは安全とは言えず、二要素認証も常識になりつつあります。総務省のインターネットの安全・安心ハンドブックにも「ウェブサービスのログインは多要素認証を選択する(81ページ)」と記載されています。
二要素認証?二段階認証?多要素認証?
二要素認証だったり二段階認証だったり、人によって呼び名は様々です。(二要素認証と二段階認証はちょっと違うのですが、ブログの本筋とは違うので説明は省略します)
二要素認証は英語ではTwo-factor authenticationで、2FAと省略します。また、二つ以上の要素を使うということで多要素認証(英語ではMulti-factor authentication、略してMFA)と呼ばれることも多いです。
GitLabのオフィシャルなドキュメントでは2FAとMFAが混在していますが、同じものです。
二要素認証のふたつ目に使えるもの
あなたが所有しているスマートフォンを確認するために、ユーザーの電話番号にSMSでワンタイムパスワードを送信し、それをユーザー入力してもらうSMS認証があります。 GitLabはこのSMS認証には対応していませんが、SMS認証自体推奨されていませんので問題になることはないでしょう。
では、GitLabで利用できるものを紹介します。
TOTP (Time-based One-Time Password)
Google認証システム (Android)・Google Authenticator (iOS)やMicrosoft Authenticatorなどの認証アプリに表示される、時間に基づいて生成されるワンタイムパスワードを入力する方式です。
Google認証アプリを利用
認証アプリはスマートフォン用のものが有名ですが、AuthyやTwilio Authyなどパソコン用もあります。
TOTPによる二要素認証の設定手順は次のとおりです。
- GitLabにサインイン
- 右上のあなたのアイコンをクリックして表示されるメニューの
設定
をクリック - 左のサイドメニューからアカウントをクリック
2要素認証を有効にする
ボタンをクリック- 表示されるQRコードをTOTPアプリで読み取るか、
Key
に表示されているキーを入力します - TOTPアプリに表示されているコードを
PINコード
に入力します 現在のパスワード
を入力します2要素認証アプリで登録
をクリックし、登録を完了します
登録完了後にリカバリーコードが表示されます。印刷し、安全な場所に保管してください。
WebAuthn (Web Authentication)
WebAuthnはセキュリティキーや指紋認証デバイスやPINなどを利用した認証をブラウザーから利用するための仕組みです。GitLabの二要素認証はこのWebAuthnに対応していますので、WebAuthn対応の認証デバイスであれば、今後出てくる新しいデバイスも含めて利用できます。
WebAuthnデバイスの登録の手順は次のとおりです。
- GitLabにサインイン
- 右上のあなたのアイコンをクリックして表示されるメニューの
設定
をクリック - 左のサイドメニューからアカウントをクリック
2要素認証の管理
ボタンをクリックRegister WebAuthn Device
のSet up new device
ボタンをクリックします- ブラウザーの説明にそって操作してください
- WebAuthnデバイスをGitLabが認識すると
あなたのデバイスは正常に設定されました。名前を付けてGitLabサーバーに登録します。
と表示されます 名前を選択
にデバイスの名前を入力し、Register device
でデバイスを登録します
(6)の操作手順は、ブラウザー・OS・認証デバイスごとに異なりますので割愛します。
TOTPよりもWebAuthnを利用する
二要素認証と言えばTOTPといういうくらいTOTP方式は普及しています。しかし、TOTP方式には欠点があります。
- ワンタイムパスワードの入力が煩わしい - TOTPアプリに表示されているたくさんのサービスの中から、GitLabを探して、ワンタイムパスワードを入力するのに時間がかかる。
- 中間者攻撃に弱い - パスワードとTOTPはともに中間者攻撃に弱い。Cloudflare、Twilioと同じフィッシング攻撃を受けるも完全回避 ハードキーが鍵 - ITmedia NEWSで解説されているように、Cloudflareはハードキーによる二要素認証のおかげでサイバー攻撃を回避できました。
WebAuthnは指紋認証やPINの入力ですみますので、TOTPのような煩わしさはありません。また、ウェブサイトのドメインに紐付いており、中間者攻撃への耐性も強くなります。つまり、WebAuthnの方が利便性と安全性の両方に優れています。今後は二要素認証にはTOTPよりもWebAuthnが推奨となっていくでしょう。
ただし、GitLabは二要素認証を有効にするためにTOTPは必須です。TOTPとWebAuthnの両方を有効にしておき、いつもはWebAuthnを利用するようにしてください。
WebAuthnに使えるデバイス
パソコン・スマートフォン自身を登録(顔認証・指紋認証・PIN・etc…)
GitLabにアクセスするパソコンやスマートフォン自身の指紋認証などを利用できます。何が使えるかはOSによって異なります。
- Windows - Windows Hello (PIN / 顔認証 / 指紋認証)
- macOS - Touch ID
- Android - ロック画面 (PIN / 顔認証 / 指紋認証 / etc…)
- iOS - Touch ID / Face ID
Windows Helloでの認証例
例えば、WindowsをGitLabのWebAuthnデバイスに登録した場合、Windows Helloで設定したPIN / 顔認証 / 指紋認証のいずれも利用できます。
また、Windows / macOS / AndroidからGitLabにアクセスする場合、それぞれをWebAuthnデバイスとして登録する必要があります。
各デバイスを登録
セキュリティキー
YubikeyやTitanセキュリティキーなどのセキュリティキーをWebAuthnデバイスに登録できます。USBポートに挿してタッチしたり、NFCカードリーダーやNFC対応スマートフォンにタッチしたりして利用します。
USBやNFC経由で利用する
セキュリティキーをWebAuthnデバイスに登録すれば、どのパソコンやスマートフォンでもそのまま使い回せます。
セキュリティーキーのみ登録する
スマートフォンをWebAuthnローミング認証器として使う
セキュリティキーのように、パソコンやスマートフォンに接続して使い回せる認証機をローミング認証機と呼びます。そして、スマートフォンをローミング認証機として使うことができます。
スマートフォンをローミング認証機として利用
Google Chromeでは二要素認証の際に表示されるリンク済みのスマートフォンの一覧から選びます。もし、リンクされていない場合は新しい Android スマートフォンを追加
ボタンをクリックしてQRコードををスマートフォンで読み取り、リンクしてください。
- パソコンとスマートフォンの双方がインターネットにつながっていなければなりません。
- パソコンとスマートフォンは近くになければなりません。双方でBLEが使えるか、もしくはUSBで接続します。
- iPhoneはiOS 16で対応するようです。
(このブログでは、WindowsととAndroidの組み合わせでGoogle Chromeを利用し、BLEで接続して検証しています。それ以外の環境は未検証です)
パソコンとスマートフォンをリンクしなければなりませんが、セキュリティキーと同様にパソコンをWebAuthnデバイスとして登録する必要はありません。
登録済みのスマートフォンを利用
デバイスの紛失とリカバリコード
二要素認証は安全になる反面、スマートフォンやセキュリティキーなどの紛失や故障でログインができなくなる問題があります。もし紛失したら、二要素認証のワンタイムパスワードの代わりにあらかじめ生成しておいたリカバリコードを入力します。
TOTPではなくリカバリコードを入力
ここで入力したリカバリコードは無効化され、以後は使うことはできません。もう一度リカバリコードが必要な場合は、10個生成されたリカバリコードのうち、まだ使っていないものを利用してください。
リカバリコードも紛失するとログインができなくなります。GitLabの管理者に問い合わせることになりますが、GitLab.comでは無料版のユーザーは二要素認証のリセットを受け付けていませんので回復できなくなります。リカバリコードは必ず印刷し安全な場所に保管してください。
リカバリコードの再発行手順は次のとおりです。
- GitLabにサインイン
- 右上のあなたのアイコンをクリックして表示されるメニューの
設定
をクリック - 左のサイドメニューからアカウントをクリック
2要素認証の管理
ボタンをクリック現在のパスワード
を入力し、リカバリコードの再発行
ボタンをクリックします- 新しいリカバリコードが表示されます
なお、それまでに生成された古いリカバリコードは無効化され、使うことはできません。
SSHによるリカバリコードの再発行
リカバリコードも紛失しGitLabにログインできなくなっても、SSH公開鍵がアカウントに登録されていればリカバリコードの再発行ができます。
SSHによる再発行は、ターミナルにssh git@gitlab.com 2fa_recovery_codes
と(GitLabのホスト名は適時書き換えてください)入力し、質問にはyes
と答えます。次のようにリカバリコードが再発行されます。(以前のリカバリコードは無効化されます)
$ ssh git@gitlab.com 2fa_recovery_codes
Are you sure you want to generate new two-factor recovery codes?
Any existing recovery codes you saved will be invalidated. (yes/no)
yes
Your two-factor authentication recovery codes are:
d9599b4454b4161e
a0ecbc7c56939549
...
During sign in, use one of the codes above when prompted for
your two-factor code. Then, visit your Profile Settings and add
a new device so you do not lose access to your account again.
GitLabで2FAを強制する
オンプレミスGitLab
オンプレミスのGitLabでは、ユーザー全員に二要素認証を強制することができます。
二要素認証の強制の設定
- 管理者でサインイン
- 上部のメニューから
管理者
をクリックして管理者エリアを開きます - 左側のサイドメニューから
設定
->一般
->サインインの制限
を開きます 2要素認証
->Enforce two-factor authentication
のチェックを入れます変更を保存
ボタンをクリックします
GitLab.com
GitLab.comでは二要素認証は今の時点ではオプションで、強制はされていません。
グループの設定で二要素認証を強制することができます。 ただし、プロジェクトのみに追加されたユーザーはこの制限は適用されず、二要素認証なしでもプロジェクトに参加できてしまいます。
二要素認証を強制するには、グループメンバーに二要素認証を強制した上で、プロジェクトへ直接のメンバー追加を禁止する必要があります。
- トップグループでグループメンバーの二要素認証を強制します
- トップグループでサブグループの二要素認証強制の設定を変更させないようにします
- トップグループでプロジェクトごとにメンバーの登録をできないようにします
グループのサイドメニューから設定
->一般
->権限とグループ機能
を開き、スクリーンショットのように設定し、変更を保存
ボタンをクリックしてください。
二要素認証の強制の設定
最後に
長くランダムなパスワードだけではGitLabのアカウントを安全に守ることは難しくなってきました。二要素認証を有効にし、より安全にGitLabを使えるようにしましょう。
可能ならば、二要素認証はTOTPだけでなく、Windows HelloなどのWebAuthnも有効にし、そちらを使うようにしてください。WebAuthnはTOTPより安全で手軽です。
最後に。リカバリコードは印刷して安全な場所に保管してください。