二要素認証の導入

二要素認証(2FA)とは、ユーザーの身元を証明するために2つの異なる要素を提供することを要求する認証方法です:

  • ユーザー名とパスワードです。
  • アプリケーションによって生成されたコードなどの第2の認証方法。

2FAを使用すると、不正アクセス者は両方の要素が必要になるため、アカウントにアクセスしにくくなります。

note
SSO を使っていてそれを強制しているのなら、ID プロバイダ(IDP) 側ですでに 2FA を強制しているかもしれません。GitLab でも 2FA を強制する必要はないかもしれません。

全ユーザーに2FAを強制

管理者は、2つの異なる方法ですべてのユーザーに2FAを強制できます:

  • 次回のサインイン時に適用します。
  • 次回のサインインを推奨しますが、強制する前に猶予期間を設けます。

    設定された猶予期間が経過すると、ユーザーはサインインできますが、/-/profile/two_factor_auth2FA設定エリアから出ることはできません。

UIまたはAPIを使用して、すべてのユーザーに2FAを強制できます。

UIを使用

  1. 左のサイドバーで、Search を選択するか、次のページに進んでください。
  2. Admin Areaを選択します。
  3. 左サイドバーで、設定 > 一般を選択します。
  4. サインイン制限セクションを展開します:
    • この機能を有効にするには、[2 要素認証の実施] を選択します。
    • Two-factor grace period(二要素認証の猶予期間)に、時間数を入力します。次回のサインイン時に 2FA を実行する場合は、0を入力します。

API を使用します。

アプリケーション設定APIを使用して、以下の設定を変更します:

  • require_two_factor_authentication.
  • two_factor_grace_period.

詳細については、APIコールでアクセスできる設定のリストを参照してください。

グループ内の全ユーザーに2FAを適用

GitLab 12.0で導入された、グループの2FA設定はサブグループにも適用されます。

前提条件:

  • グループのメンテナーまたはオーナーのロールを持っている必要があります。

特定のグループにのみ2FAを適用するには

  1. 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
  2. 設定] > [全般]を選択します。
  3. 権限とグループ機能] を展開します。
  4. このグループのすべてのユーザーは 2 要素認証を設定する必要があります] を選択します。
  5. オプションDelay 2FA enforcement (hours)] に、猶予期間を設定する時間数を入力します。トップレベルグループとそのサブグループおよびプロジェクトに複数の異なる猶予期間がある場合は、最も短い猶予期間が使用されます。
  6. 変更を保存を選択します。

アクセストークンはAPIベースであるため、認証の第2要素を提供する必要はありません。2FAが適用される前に生成されたトークンは、引き続き有効です。

サブグループでの2FA

トップレベルのグループと同じ方法で、個々のサブグループに対して2FAを有効にして実施することができます。

サブグループが独自の2FA要件を設定できないようにすることもできます:

  1. 最上位グループの「設定」>「一般」に進みます。
  2. 権限とグループの機能」セクションを展開します。
  3. Allow subgroups to set up their own two-factor authentication rules] チェックボックスをオフにします。

このアクションにより、2FA要件があるすべてのサブグループは、そのメンバーから2FAを要求されなくなります。

プロジェクトでの2FA

2FAを有効または強制するグループに属するプロジェクトが、2FAを有効または強制しないグループと共有されている場合、2FAを使用しないグループのメンバーは、2FAを使用せずにそのプロジェクトにアクセスできます。例えば

  • グループAは2FAが有効で、実施されています。グループBは2FAを有効にしていません。
  • グループAに属するプロジェクトPがグループBと共有されている場合、グループBのメンバーは2FAなしでプロジェクトPにアクセスできます。

このようなことが起こらないように、2FAグループのプロジェクトの共有を禁止してください。

2FAが有効になっているグループまたはサブグループのプロジェクトにメンバーを追加する場合、個別に追加されたメンバーには2FAは必要ありません

2FAを無効にする

単一のユーザーまたはすべてのユーザーに対して2FAを無効にすることができます。

これは永久的かつ不可逆的なアクションです。ユーザーが再び2FAを使用するには、再度2FAを有効にする必要があります。

caution
ユーザーの2FAを無効にしても、「すべてのユーザーに2FAを強制する」または「グループ内のすべてのユーザーに2FAを強制する」設定は無効になりません。また、ユーザーが次にGitLabにサインインするときに2FAの設定を再度要求されないように、強制2FA設定も無効にする必要があります。

シングルユーザーの場合

管理者

GitLab 13.5以降では、Railsコンソールを使って単一の管理者の2FAを無効にすることができます:

admin = User.find_by_username('<USERNAME>')
user_to_disable = User.find_by_username('<USERNAME>')

TwoFactor::DestroyService.new(admin, user: user_to_disable).execute

管理者には2FAが無効になったことが通知されます。

管理者以外

GitLab 15.2以降では、RailsコンソールかAPIエンドポイントのいずれかを使って、管理者以外の人の2FAを無効にすることができます。

自分のアカウントの 2FA を無効にすることができます。

APIエンドポイントを使用して、管理者の2FAを無効にすることはできません。

すべてのユーザー

強制2FAが無効になっている場合でも、すべてのユーザーに対して2FAを無効にするには、以下のRakeタスクを使用します。

  • Linuxパッケージを使用するインストールの場合:

     sudo gitlab-rake gitlab:two_factor:disable_for_all_users
    
  • セルフコンパイルによるインストールの場合:

     sudo -u git -H bundle exec rake gitlab:two_factor:disable_for_all_users RAILS_ENV=production
    

SSHオペレーションでのGitのための2FA

  • GitLab 13.7 で導入されました
  • 13.9でGitLab FreeからGitLab Premiumに移行
  • フィーチャーフラグで有効・無効を切り替えることができ、デフォルトでは無効になっています。
  • GitLab 15.3で導入されたプッシュ通知のサポート。

フラグ: セルフマネジメントのGitLabでは、デフォルトではこの機能は利用できません。利用可能にするには、管理者がtwo_factor_for_cliという機能フラグを有効にします。GitLab.comでは、この機能は利用できません。この機能はまだ本番環境では使用できません。この機能フラグは、2FAが有効な場合のGitオペレーションのセッション時間にも影響します。

SSHオペレーション上でGitに2FAを強制することができます。ただし、代わりにED25519_SKか ECDSA_SKのSSHキーを使う必要があります。2FAはGitオペレーションのみに適用され、personal_access_token のような内部コマンドは除外されます。

ワンタイムパスワード(OTP) 認証を行うには、以下を実行します:

ssh git@<hostname> 2fa_verify

次に、以下のいずれかの方法で認証します:

認証に成功すると、関連付けられたSSHキーで15分間(デフォルト)Git over SSHオペレーションを実行できます。

セキュリティの制限

2FAは、漏洩したSSH秘密鍵を持つユーザーを保護しません。

一旦OTPが認証されると、設定されたセッションの間、誰でもその秘密鍵を使ってSSH経由でGitを実行することができます。