二要素認証の導入
二要素認証(2FA)とは、ユーザーの身元を証明するために2つの異なる要素を提供することを要求する認証方法です:
- ユーザー名とパスワードです。
- アプリケーションによって生成されたコードなどの第2の認証方法。
2FAを使用すると、不正アクセス者は両方の要素が必要になるため、アカウントにアクセスしにくくなります。
全ユーザーに2FAを強制
管理者は、2つの異なる方法ですべてのユーザーに2FAを強制できます:
- 次回のサインイン時に適用します。
-
次回のサインインを推奨しますが、強制する前に猶予期間を設けます。
設定された猶予期間が経過すると、ユーザーはサインインできますが、
/-/profile/two_factor_auth
2FA設定エリアから出ることはできません。
UIまたはAPIを使用して、すべてのユーザーに2FAを強制できます。
UIを使用
- 左のサイドバーで、Search を選択するか、次のページに進んでください。
- Admin Areaを選択します。
- 左サイドバーで、設定 > 一般を選択します。
-
サインイン制限セクションを展開します:
- この機能を有効にするには、[2 要素認証の実施] を選択します。
-
Two-factor grace period(二要素認証の猶予期間)に、時間数を入力します。次回のサインイン時に 2FA を実行する場合は、
0
を入力します。
API を使用します。
アプリケーション設定APIを使用して、以下の設定を変更します:
-
require_two_factor_authentication
. -
two_factor_grace_period
.
詳細については、APIコールでアクセスできる設定のリストを参照してください。
グループ内の全ユーザーに2FAを適用
GitLab 12.0で導入された、グループの2FA設定はサブグループにも適用されます。
前提条件:
- グループのメンテナーまたはオーナーのロールを持っている必要があります。
特定のグループにのみ2FAを適用するには
- 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
- 設定] > [全般]を選択します。
- 権限とグループ機能] を展開します。
- このグループのすべてのユーザーは 2 要素認証を設定する必要があります] を選択します。
- オプションDelay 2FA enforcement (hours)] に、猶予期間を設定する時間数を入力します。トップレベルグループとそのサブグループおよびプロジェクトに複数の異なる猶予期間がある場合は、最も短い猶予期間が使用されます。
- 変更を保存を選択します。
アクセストークンはAPIベースであるため、認証の第2要素を提供する必要はありません。2FAが適用される前に生成されたトークンは、引き続き有効です。
サブグループでの2FA
トップレベルのグループと同じ方法で、個々のサブグループに対して2FAを有効にして実施することができます。
サブグループが独自の2FA要件を設定できないようにすることもできます:
- 最上位グループの「設定」>「一般」に進みます。
- 権限とグループの機能」セクションを展開します。
- 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を有効にする必要があります。
シングルユーザーの場合
管理者
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では、デフォルトではこの機能は利用できません。利用可能にするには、管理者が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
次に、以下のいずれかの方法で認証します:
- 正しいOTPを入力します。
- GitLab 15.3以降では、FortiAuthenticatorが有効になっている場合、デバイスプッシュ通知に応答します。
認証に成功すると、関連付けられたSSHキーで15分間(デフォルト)Git over SSHオペレーションを実行できます。
セキュリティの制限
2FAは、漏洩したSSH秘密鍵を持つユーザーを保護しません。
一旦OTPが認証されると、設定されたセッションの間、誰でもその秘密鍵を使ってSSH経由でGitを実行することができます。