二要素認証

二要素認証(2FA)はGitLabアカウントにさらなるセキュリティレベルを提供します。他の人があなたのアカウントにアクセスするには、あなたのユーザー名とパスワード_、そして_二要素認証へのアクセスが必要です。

GitLabは二要素認証に対応しています:

  • 時間ベースのワンタイムパスワード(TOTP)です。有効にすると、GitLabはサインイン時にコードの入力を促します。コードはワンタイムパスワード認証機能(例えば、デバイス上のパスワードマネージャ)によって生成されます。
  • WebAuthnデバイス。サインイン時にユーザー名とパスワードを入力すると、WebAuthn デバイスをアクティブにするよう求められます (通常はデバイスのボタンを押します)。これにより、お客様に代わってセキュリティ認証が行われます。

デバイスをセットアップする場合は、デバイスを紛失してもアカウントにアクセスできるように TOTP もセットアップしてください。

二要素認証による個人アクセストークンの使用

2FAが有効になっている場合、Git over HTTPSやGitLab APIでの認証にパスワードを使うことはできません。代わりに個人アクセストークンを使うことができます。

OAuth 認証ヘルパー

以下のGit認証ヘルパーはOAuthを使ってGitLabを認証します。これは二要素認証と互換性があります。初回の認証では、ヘルパーがウェブブラウザを開き、GitLabがアプリの作成者に認証を求めます。それ以降の認証では、対話は必要ありません。

Git クレデンシャル・マネージャー

Git Credential Manager (GCM) デフォルトでは OAuth を使って認証します。GCMは手動設定なしでGitLab.comをサポートします。セルフマネジメントのGitLabでGCMを使用するには、GitLabのサポートを参照してください。

プッシュするたびに再認証する必要がないように、GCM はセッション間で持続する様々なプラットフォーム固有の認証情報ストアだけでなく、キャッシュもサポートしています。この機能は、個人アクセストークンでも OAuth でも便利です。

Git for Windows には Git Credential Manager が含まれています。

Git Credential Managerは、主にGitHub, Inc.によって開発されています。オープンソースのプロジェクトであり、コミュニティによってサポートされています。

Git-credential-oauth

git-credential-oauthは、GitLab.com やいくつかの人気のある公開ホストを手動設定なしでサポートしています。自分で管理する GitLab で使うには、git-credential-oauth custom hosts のドキュメントを参照ください。

多くの Linux ディストリビューションには、git-credential-oauth がパッケージとして含まれています。

git-credential-oauth はコミュニティによってサポートされているオープンソースのプロジェクトです。

二要素認証の有効化

Version history

を使って2FAを有効にすることができます:

  • ワンタイムパスワード認証2FAを有効にしたら、リカバリコードをバックアップしてください。
  • WebAuthnデバイス。

GitLab 14.3以降では、2FAを有効にするにはアカウントのEメールが確認されている必要があります。

ワンタイムパスワードの有効化

ワンタイムパスワードで2FAを有効にします:

  1. GitLab上の設定。
    1. 自分の ユーザー設定.
    2. アカウント」を選択します。
    3. 二要素認証を有効にする]を選択します。
  2. お使いのデバイス(通常は携帯電話)での設定
    1. 互換性のあるアプリケーションをインストールします。例えば
    2. アプリケーションでは、次の2つの方法のいずれかで新しいエントリを追加します。
      • GitLabが表示するコードをデバイスのカメラでスキャンすると、自動的にエントリーが追加されます。
      • 手動でエントリーを追加する場合は、提供された詳細情報を入力する。
  3. GitLab上の設定。
    1. デバイス上のエントリーにある6桁のPIN番号をPin codeに入力します。
    2. 現在のパスワードを入力してください。
    3. Submit(送信)を選択します。

正しいピンを入力した場合、GitLabはリカバリーコードのリストを表示します。ダウンロードして安全な場所に保管してください。

FortiAuthenticator を使用してワンタイムパスワードを有効にします。

GitLab 13.5 でforti_authenticatorというフラグで導入。デフォルトでは無効になっています。

フラグ: セルフマネジメントのGitLabでは、デフォルトではこの機能は利用できません。ユーザーごとに利用できるようにするには、管理者がforti_authenticatorという機能フラグを有効にします。GitLab.comでは、この機能は利用できません。

GitLab では、FortiAuthenticator をワンタイムパスワード(OTP) プロバイダとして使用できます。ユーザーは以下を行う必要があります:

  • FortiAuthenticator と GitLab の両方に同じユーザー名で存在すること。
  • FortiAuthenticator で FortiToken が設定されていること。

FortiAuthenticator には、ユーザー名とアクセストークンが必要です。以下に示すaccess_token は FortiAuthenticator のアクセス キーです。トークンを取得するには、Fortinet Document LibraryのREST APIソリューションガイドを参照してください。GitLab 13.5はFortAuthenticatorバージョン6.2.0でテストされています。

GitLabでFortiAuthenticatorを設定します。GitLabサーバーで:

  1. 設定ファイルを開きます。

    Linuxパッケージ・インストールの場合:

    sudo editor /etc/gitlab/gitlab.rb
    

    セルフコンパイルによるインストールの場合:

    cd /home/git/gitlab
    sudo -u git -H editor config/gitlab.yml
    
  2. プロバイダー設定を追加します。

    Linuxパッケージ・インストールの場合:

    gitlab_rails['forti_authenticator_enabled'] = true
    gitlab_rails['forti_authenticator_host'] = 'forti_authenticator.example.com'
    gitlab_rails['forti_authenticator_port'] = 443
    gitlab_rails['forti_authenticator_username'] = '<some_username>'
    gitlab_rails['forti_authenticator_access_token'] = 's3cr3t'
    

    セルフコンパイルによるインストールの場合:

    forti_authenticator:
      enabled: true
      host: forti_authenticator.example.com
      port: 443
      username: <some_username>
      access_token: s3cr3t
    
  3. 設定ファイルを保存します。
  4. 再設定(Linuxパッケージ・インストール)または再起動(セルフコンパイル・インストール)します。

Duoを使用したワンタイムパスワードの有効化

GitLab 15.10 で導入されました

フラグ: セルフマネジメントのGitLabでは、デフォルトでこの機能が利用できます。GitLab.comではこの機能は利用できません。

GitLabのOTPプロバイダとしてDuoを使用できます。

前提条件

Duo を OTP プロバイダとして使用するには:

  • アカウントは Duo と GitLab の両方に存在し、両方のアプリケーションで同じユーザー名である必要があります。
  • Duo を設定し、インテグレーションキー、シークレットキー、API ホスト名を持っている必要があります。

詳細については、Duo API ドキュメントを参照してください。

GitLab 15.10 は Duo バージョン D261.14 でテストされています。

GitLab での Duo の設定

GitLab サーバーで

  1. 設定ファイルを開きます。

    Linuxパッケージ・インストールの場合:

    sudo editor /etc/gitlab/gitlab.rb
    

    セルフコンパイルによるインストールの場合:

    cd /home/git/gitlab
    sudo -u git -H editor config/gitlab.yml
    
  2. プロバイダー設定を追加します。

    Linuxパッケージ・インストールの場合:

     gitlab_rails['duo_auth_enabled'] = false
     gitlab_rails['duo_auth_integration_key'] = '<duo_integration_key_value>'
     gitlab_rails['duo_auth_secret_key'] = '<duo_secret_key_value>'
     gitlab_rails['duo_auth_hostname'] = '<duo_api_hostname>'
    

    セルフコンパイルによるインストールの場合:

    duo_auth:
      enabled: true
      hostname: <duo_api_hostname>
      integration_key: <duo_integration_key_value>
      secret_key: <duo_secret_key_value>
    
  3. 設定ファイルを保存します。
  4. Linuxパッケージインストールの場合、GitLabを再設定します。セルフコンパイルインストールの場合、GitLabを再起動します。

FortiToken Cloud を使用してワンタイムパスワードを有効にします。

GitLab 13.7 でforti_token_cloudというフラグで導入。デフォルトでは無効になっています。

フラグ: セルフマネジメントのGitLabでは、デフォルトではこの機能は利用できません。ユーザーごとに利用できるようにするには、管理者がforti_token_cloudという機能フラグを有効にします。GitLab.comでは、この機能は利用できません。この機能はまだ本番環境では使用できません。

GitLab では、FortiToken Cloud をワンタイムパスワード(OTP) プロバイダとして使用できます。ユーザーは以下を行う必要があります:

  • 同じユーザー名で FortiToken Cloud と GitLab の両方に存在すること。
  • FortiToken CloudにFortiTokenが設定されていること。

FortiToken Cloud を設定するには、client_idclient_secret が必要です。これらを取得するには、Fortinet Document LibraryのREST API Guideを参照してください。

GitLab で FortiToken Cloud を設定します。GitLab サーバーで:

  1. 設定ファイルを開きます。

    Linuxパッケージ・インストールの場合:

    sudo editor /etc/gitlab/gitlab.rb
    

    セルフコンパイルによるインストールの場合:

    cd /home/git/gitlab
    sudo -u git -H editor config/gitlab.yml
    
  2. プロバイダー設定を追加します。

    Linuxパッケージ・インストールの場合:

    gitlab_rails['forti_token_cloud_enabled'] = true
    gitlab_rails['forti_token_cloud_client_id'] = '<your_fortinet_cloud_client_id>'
    gitlab_rails['forti_token_cloud_client_secret'] = '<your_fortinet_cloud_client_secret>'
    

    セルフコンパイルによるインストールの場合:

    forti_token_cloud:
      enabled: true
      client_id: YOUR_FORTI_TOKEN_CLOUD_CLIENT_ID
      client_secret: YOUR_FORTI_TOKEN_CLOUD_CLIENT_SECRET
    
  3. 設定ファイルを保存します。
  4. 再設定(Linuxパッケージ・インストール)または再起動(セルフコンパイル・インストール)します。

WebAuthn デバイスのセットアップ

フラグ: セルフマネージド GitLab では、デフォルトで WebAuthn デバイスが利用可能です。この機能を無効にするには、管理者がwebauthnという機能フラグを無効にします。WebAuthnデバイスが登録された後にWebAuthn機能フラグを無効にすると、この機能を再び有効にするまで、これらのデバイスは使用できなくなります。GitLab.com では、WebAuthn デバイスを利用できます。

フラグ: GitLab のセルフマネジメントでは、デフォルトで WebAuthn デバイスのオプションのワンタイムパスワード認証は利用できません。この機能を有効にするには、管理者がwebauthn_without_totpという機能フラグを有効にします。GitLab.comでは、この機能は利用可能です。

WebAuthnは以下によってサポートされています:

  • デスクトップブラウザ
    • Chrome
    • Edge
    • ファイアフォックス
    • Opera
    • サファリ
  • モバイルブラウザ
    • Android版Chrome
    • Android用Firefox
    • iOS Safari(iOS 13.3以降)

WebAuthn対応デバイスで2FAを設定するには:

  1. オプション。ワンタイムパスワードを設定します。
  2. 自分の ユーザー設定.
  3. アカウント」を選択します。
  4. 二要素認証を有効にする]を選択します。
  5. WebAuthn デバイスを接続します。
  6. デバイス名と、GitLab 15.10以降ではGitLabアカウントのパスワードを入力してください。IDプロバイダーを通してサインインしている場合は、このパスワードを入力する必要はないかもしれません。
  7. Set up New WebAuthn Deviceを選択します。
  8. お使いのデバイスによっては、ボタンを押すか、センサーに触れる必要があります。

デバイスのセットアップに成功したことを示すメッセージが表示されるはずです。

WebAuthn 互換デバイスで 2FA を設定すると、そのデバイスは特定のコンピュータの特定のブラウザにリンクされます。ブラウザと WebAuthn デバイスによっては、別のブラウザまたはコンピュータで WebAuthn デバイスを使用するように設定できる場合があります。

初めて 2FA を設定する場合は、アクセスできなくなった場合にアカウントへのアクセスを回復できるように、回復コードをダウンロードする必要があります。

caution
ブラウザのデータを消去すると、アカウントにアクセスできなくなる可能性があります。

リカバリーコード

GitLab 13.7で導入されたコピーコード印刷コードボタン。

ワンタイムパスワードで2FAを有効にした直後、生成されたリカバリーコードをダウンロードするよう促されます。ワンタイムパスワード認証にアクセスできなくなった場合は、これらのリカバリーコードを使ってアカウントにサインインすることができます。

caution
各コードは、アカウントへのサインインに1回のみ使用できます。

コードをコピーして印刷するか、「コードをダウンロード」を使用してダウンロードし、安全な場所に保管してください。ダウンロードする場合は、gitlab-recovery-codes.txt

note
リカバリーコードは、WebAuthn デバイスには生成されません。

リカバリーコードを紛失した場合、または新しいリカバリーコードを生成したい場合は、どちらかを使用してください:

二要素認証回復コードの再生成

2要素認証リカバリーコードを再生成するには、デスクトップのブラウザにアクセスする必要があります。

  1. 自分の ユーザー設定.
  2. アカウント > 二要素認証(2FA)を選択します。
  3. すでに2FAを設定している場合は、「2ファクタ認証を管理」を選択します。
  4. 要素認証の登録]ペインで、現在のパスワードを入力し、[回復コードを再生成]を選択します。
note
2FA回復コードを再生成する場合は、保存します。以前に作成した2FAコードは使用できません。

2ファクタ認証を有効にしてサインイン

2FAを有効にしてサインインする方法は、通常のサインインプロセスと少ししか変わりません。ユーザー名とパスワードを入力すると、有効にした2FAの種類に応じて2つ目のプロンプトが表示されます。

ワンタイムパスワードを使用してサインイン

ワンタイムパスワード認証アプリケーションのPINまたはリカバリーコードを入力してサインインしてください。

WebAuthnデバイスを使用してサインイン

サポートされているブラウザでは、認証情報を入力した後、自動的に WebAuthn デバイスをアクティベートするよう促されるはずです (たとえば、デバイスのボタンをタッチするか押すなど)。

デバイスが認証要求に応答したことを示すメッセージが表示され、自動的にサインインされます。

二要素認証の無効化

2FAを無効にするには

  1. 自分の ユーザー設定.
  2. アカウント」を選択します。
  3. 2要素認証の管理]を選択します。
  4. 二要素認証の登録]で現在のパスワードを入力し、[二要素認証を無効にする]を選択します。

これにより、モバイル アプリケーションおよび WebAuthn デバイスを含むすべての 2FA 登録が消去されます。

リカバリーオプション

コード生成デバイスにアクセスできない場合、アカウントへのアクセスを回復することができます:

保存したリカバリーコードの使用

リカバリーコードを使用するには

  1. GitLabのサインインページで、ユーザー名またはメールアドレスとパスワードを入力してください。
  2. 二要素コードの入力を求められたら、リカバリーコードを入力してください。

リカバリコードを使用した後は、再使用できません。保存した他のリカバリコードは引き続き使用できます。

SSHを使った新しいリカバリーコードの生成

2FAを有効にする際にリカバリーコードを保存し忘れた場合、GitLabアカウントにSSHキーを追加していれば、SSHを使って新しいリカバリーコードを生成することができます:

  1. ターミナルで

    ssh git@gitlab.com 2fa_recovery_codes
    

    セルフマネージド・インスタンスでは、上のコマンドのgitlab.com を GitLab サーバーのホスト名 (gitlab.example.com) に置き換えてください。

  2. 新しいコードを生成するかどうかを確認するプロンプトが表示されます。このプロセスは、以前に保存したコードを無効にします。例えば

    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:
       
    119135e5a3ebce8e
    11f6v2a498810dcd
    3924c7ab2089c902
    e79a3398bfe4f224
    34bd7b74adbc8861
    f061691d5107df1a
    169bf32a18e63e7f
    b510e7422e81c947
    20dbed24c5e74663
    df9d3b9403b9c9f0
       
    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.
    
  3. GitLabのサインインページに行き、ユーザー名またはメールアドレスとパスワードを入力します。二要素コードの入力を求められたら、コマンドライン出力から得た回復コードの一つを入力します。

サインイン後、すぐに新しいデバイスで2FAを設定してください。

アカウントで2ファクタ認証が無効になっている場合

他の方法が利用できない場合、GitLabサポートコンタクトにサポートチケットを提出し、GitLabグローバル管理者にアカウントの2FAを無効にするよう依頼してください:

  • このサービスはGitLab.comのサブスクリプションを持っているアカウントでのみ利用可能です。詳しくはブログポストをご覧ください。
  • この設定を無効にすると、アカウントのセキュリティが一時的に低くなります。できるだけ早くサインインして二要素認証を再度有効にしてください。

GitLab管理者向け情報

  • GitLabのバックアップを復元した後、2FAが機能し続けるように注意してください。
  • 時間ベースのワンタイムパスワード(TOTP) ・サーバーで2FAが正しく作成されるようにするには、NTPのようなサービスを使ってGitLabサーバーの時間を同期させてください。そうしないと、時差のために作成者が常に失敗する可能性があります。
  • GitLab WebAuthnの実装は、GitLabインスタンスが複数のホスト名やFQDNからアクセスされている場合には動作_しません_。各WebAuthnの登録は、登録時に_現在のホスト_名にリンクされ、他のホスト名やFQDNには使用できません。

    例えば、あるユーザーがfirst.host.xyzsecond.host.xyzからGitLabインスタンスにアクセスを試みた場合、以下のようになります:

    • ユーザーはfirst.host.xyz を使ってサインインし、WebAuthn キーを登録します。
    • ユーザーがサインアウトし、first.host.xyz を使用してサインインを試みます - WebAuthn 認証は成功します。
    • ユーザーがサインアウトし、second.host.xyz - WebAuthn 認証を使用してサインインしようとしましたが、WebAuthn キーがfirst.host.xyzにしか登録されていないため、WebAuthn 認証は失敗しました。
  • システムまたはグループレベルで 2FA を適用するには、2 要素認証の適用を参照してください。

トラブルシューティング

エラー「HTTP Basic: アクセスは拒否されました。提供されたパスワードまたはトークンは…”

リクエストを行うと、以下のようなエラーが発生することがあります:

HTTP Basic: Access denied. The provided password or token is incorrect or your account has 2FA enabled and you must use a personal
access token instead of a password.

このエラーは以下の場合に発生します:

  • 2FAを有効にし、ユーザー名とパスワードで認証を試みました。
  • 2FAを有効にしておらず、間違ったユーザー名またはパスワードをリクエストと共に送信しました。
  • 2FAを有効にしていないが、管理者が全ユーザーに2FAを適用する設定を有効にしています。
  • 2FA を有効にしていないが、管理者がGit over HTTP(S)設定でパスワード認証を有効にしていない場合。

その代わりに、認証を行うことができます:

エラー:”無効なピンコード”

invalid pin code エラーが表示された場合、認証アプリケーションと GitLab インスタンス自体の間で時刻同期の問題が発生している可能性があります。時間同期の問題を回避するには、コードを生成するデバイスで時間同期を有効にしてください。例えば

  • Android (Google Authenticator)の場合:
    1. Google Authenticatorのメインメニューに移動します。
    2. 設定] を選択します。
    3. コードの時間補正を選択します。
    4. 今すぐ同期を選択します。
  • iOSの場合
    1. 設定に移動します。
    2. 一般」を選択します。
    3. 日付と時刻を選択します。
    4. 自動的に設定]を有効にします。すでに有効になっている場合は、無効にして数秒待ってから再度有効にします。