正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

GitLabをKerberosと連携する

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab Self-Managed

GitLabは、Kerberosを認証メカニズムとして統合できます。

  • ユーザーがKerberosの認証情報でサインインできるように、GitLabを設定できます。
  • Kerberosを使用すると、送信されたパスワードをだれかが傍受または盗聴するのを防ぐことができます。

Kerberosは、GitLab EEを使用するインスタンスでのみ使用できます。GitLab CEを実行している場合は、GitLab CEからGitLab EEに変換することができます。

インテグレーションが専用ポートを使用するように設定されていない限り、Kerberos対応のGitLabインスタンスでは、GitLab CI/CDは機能しません。

設定

GitLabがKerberosトークンベースの認証を提供するには、次の前提条件を実行します。レルムを指定するなど、Kerberosを使用するためにシステムを設定する必要があります。GitLabは、システムのKerberos設定を使用します。

GitLabキータブ

  1. GitLabサーバー上のHTTPサービス用のKerberosサービスプリンシパルを作成します。GitLabサーバーがgitlab.example.comで、KerberosレルムがEXAMPLE.COMの場合、KerberosデータベースにHTTP/gitlab.example.com@EXAMPLE.COMサービスプリンシパルを作成します。
  2. サービスプリンシパルのキータブをGitLabサーバー上に作成します。たとえば/etc/http.keytabなどです。

キータブは機密ファイルであり、GitLabユーザーが読み取り可能である必要があります。所有権を設定し、ファイルを適切に保護します:

sudo chown git /etc/http.keytab
sudo chmod 0600 /etc/http.keytab

GitLabを設定する

自己コンパイルによるインストール

セルフコンパイルインストールの場合は、kerberos gemグループがインストールされていることを確認してください。

  1. Kerberosトークンベースの認証を有効にするには、gitlab.ymlkerberosセクションを編集します。ほとんどの場合、Kerberosを有効にし、キータブの場所を指定するだけで済みます:

    omniauth:
      enabled: true
      allow_single_sign_on: ['kerberos']
    
    kerberos:
      # Allow the HTTP Negotiate authentication method for Git clients
      enabled: true
    
      # Kerberos 5 keytab file. The keytab file must be readable by the GitLab user,
      # and should be different from other keytabs in the system.
      # (default: use default keytab from Krb5 config)
      keytab: /etc/http.keytab
  2. 変更を反映させるため、GitLabを再起動します。

Linuxパッケージインストール

  1. /etc/gitlab/gitlab.rbを編集します:

    gitlab_rails['omniauth_allow_single_sign_on'] = ['kerberos']
    
    gitlab_rails['kerberos_enabled'] = true
    gitlab_rails['kerberos_keytab'] = "/etc/http.keytab"

    GitLabがKerberosを介して最初にサインインしたときにユーザーを自動的に作成しないようにするには、gitlab_rails['omniauth_allow_single_sign_on']kerberosを設定しないでください。

  2. 変更を有効にするには、GitLabを再設定します

GitLabは、サインインおよびHTTP Gitアクセス用のnegotiate認証メソッドを提供するようになり、この認証プロトコルをサポートするGitクライアントがKerberosトークンで認証できるようになりました。

シングルサインオンを有効にする

共通設定で、kerberosをシングルサインオンプロバイダーとして追加します。これにより、既存のGitLabアカウントを持たないユーザーに対して、Just-In-Timeアカウントプロビジョニングが有効になります。

Kerberosアカウントを既存のGitLabアカウントにリンクするか、Kerberosユーザーがサインインしようとしたときに新しいアカウントを作成するようにGitLabを設定できます。

管理者の場合は、Kerberosアカウントを既存のGitLabアカウントにリンクできます。これを行うには、次の手順に従います:

  1. 左側のサイドバーの下部で、管理者を選択します。
  2. 概要 > ユーザーを選択します。
  3. ユーザーを選択して、識別子タブを選択します。
  4. プロバイダードロップダウンリストから、Kerberosを選択します。
  5. 識別子がKerberosユーザー名に対応していることを確認してください。
  6. 変更を保存を選択します。

管理者でない場合:

  1. 左側のサイドバーで、自分のアバターを選択します。
  2. プロファイルの編集を選択します。
  3. 左側のサイドバーで、アカウントを選択します。
  4. サインインに利用するサービスセクションで、Connect Kerberos(Kerberosに接続)を選択します。サインインに利用するサービスKerberosオプションが表示されない場合は、シングルサインオンを有効にするの要件に従ってください。

どちらの場合も、Kerberos認証情報を使用してGitLabアカウントにサインインできるようになります。

最初のサインイン時にアカウントを作成する

ユーザーが最初にKerberosアカウントでGitLabにサインインすると、GitLabは一致するアカウントを作成します。続行する前に、Linuxパッケージとセルフコンパイルインストールインスタンスの一般的な設定オプションを確認してください。また、kerberosを含める必要があります。

その情報があれば:

  1. allow_single_sign_on設定で'kerberos'を含めます。
  2. 今のところ、block_auto_created_usersオプションデフォルトのtrueを受け入れます。
  3. ユーザーがKerberos認証情報を使用してサインインしようとすると、GitLabは新しいアカウントを作成します。
    1. block_auto_created_usersがtrueの場合、Kerberosユーザーには次のようなメッセージが表示されることがあります:

      Your account has been blocked. Please contact your GitLab
      administrator if you think this is an error.
      1. 管理者として、新しいブロックされたアカウントを確認できます:
        1. 左側のサイドバーの下部で、管理者を選択します。
        2. 左側のサイドバーで、概要 > ユーザーを選択し、ブロック済みタブを確認します。
      2. ユーザーを有効にできます。
    2. block_auto_created_usersがfalseの場合、Kerberosユーザーは認証され、GitLabにサインインします。

block_auto_created_usersのデフォルトを保持することをお勧めします。管理者の知識なしにGitLabでアカウントを作成するKerberosユーザーは、セキュリティリスクになる可能性があります。

ユーザーがKerberosでサインインしているが、LDAPインテグレーションも有効になっている場合、ユーザーは最初のサインイン時に自分のLDAPアカウントにリンクされます。これが機能するためには、いくつかの前提条件を満たす必要があります:

Kerberosユーザー名は、LDAPユーザーのUIDと一致する必要があります。管理者は、どのLDAP属性をGitLabのLDAP設定でUIDとして使用するかを選択できますが、Active Directoryの場合、これはsAMAccountNameにする必要があります。

Kerberosレルムは、LDAPユーザーの識別名のドメイン部分と一致する必要があります。たとえば、KerberosレルムがAD.EXAMPLE.COMの場合、LDAPユーザーの識別名はdc=ad,dc=example,dc=comで終わる必要があります。

これらのルールをまとめると、リンクが機能するのは、ユーザーのKerberosユーザー名がfoo@AD.EXAMPLE.COMの形式で、LDAP識別名がsAMAccountName=foo,dc=ad,dc=example,dc=comのように見える場合のみです。

カスタム許可レルム

ユーザーのKerberosレルムがユーザーのLDAP DNのドメインと一致しない場合は、カスタム許可レルムを設定できます。設定値は、ユーザーが持つことが予想されるすべてのドメインを指定する必要があります。他のドメインはすべて無視され、LDAP識別子はリンクされません。

  1. /etc/gitlab/gitlab.rbを編集します:

    gitlab_rails['kerberos_simple_ldap_linking_allowed_realms'] = ['example.com','kerberos.example.com']
  2. ファイルを保存して、再設定し、変更を有効にします。

  1. config/gitlab.ymlを編集します:

    kerberos:
      simple_ldap_linking_allowed_realms: ['example.com','kerberos.example.com']
  2. ファイルを保存して、再起動し、変更を有効にします。

HTTP Gitアクセス

リンクされたKerberosアカウントを使用すると、標準のGitLab認証情報だけでなく、Kerberosアカウントを使用してgit pullおよびgit pushを行うことができます。

リンクされたKerberosアカウントを持つGitLabユーザーは、Kerberosトークンを使用してgit pullおよびgit pushを行うこともできます。つまり、操作ごとにパスワードを送信する必要はありません。

既知のイシューがバージョン7.64.1より前のlibcurlにあり、ネゴシエート時に接続を再利用しません。これにより、プッシュがhttp.postBuffer設定よりも大きい場合に認可のイシューが発生します。これを回避するには、Gitが少なくともlibcurl 7.64.1を使用していることを確認してください。インストールされているlibcurlバージョンを知るには、curl-config --versionを実行します。

Kerberosトークンを使用したHTTP Gitアクセス(パスワードレス認証)

現在のGitバージョンに存在するバグが原因で、gitコマンドラインインターフェースコマンドは、HTTPサーバーがnegotiate認証方法を提供している場合、この方法のみを使用します。たとえ認証が失敗した場合(たとえばクライアントがKerberosトークンを持っていない場合など)でも同様です。したがって、Kerberos認証が失敗した場合、埋め込みのユーザー名とパスワード(basicとも呼ばれます)の認証にフォールバックすることはできません。

GitLabユーザーが現在のGitバージョンでbasicまたはnegotiate認証を使用できるようにするには、標準ポートではbasic認証のみを提供し、別のポート(たとえば、8443)でKerberosチケットベースの認証を提供することができます。

Git 2.4以降では、ユーザー名とパスワードがインタラクティブに渡されるか、認証情報マネージャーを介して渡される場合、basic認証へのフォールバックがサポートされています。ユーザー名とパスワードがURLの一部として渡される場合は、フォールバックに失敗します。たとえば、CI/CDジョブトークンで認証するGitLab CI/CDジョブでこの問題が発生することがあります。

  1. /etc/gitlab/gitlab.rbを編集します:

    gitlab_rails['kerberos_use_dedicated_port'] = true
    gitlab_rails['kerberos_port'] = 8443
    gitlab_rails['kerberos_https'] = true
  2. 変更を有効にするには、GitLabを再設定します

  1. GitLabのNGINX設定ファイル(たとえば、/etc/nginx/sites-available/gitlab-ssl)を編集し、標準のHTTPSポートに加えて、ポート8443をリッスンするようにNGINXを設定します:

    server {
      listen 0.0.0.0:443 ssl;
      listen [::]:443 ipv6only=on ssl default_server;
      listen 0.0.0.0:8443 ssl;
      listen [::]:8443 ipv6only=on ssl;
  2. gitlab.ymlkerberosセクションを更新します:

    kerberos:
      # Dedicated port: Git before 2.4 does not fall back to Basic authentication if Negotiate fails.
      # To support both Basic and Negotiate methods with older versions of Git, configure
      # nginx to proxy GitLab on an extra port (for example: 8443) and uncomment the following lines
      # to dedicate this port to Kerberos authentication. (default: false)
      use_dedicated_port: true
      port: 8443
      https: true
  3. 変更を有効にするには、GitLabを再起動し、NGINXを再起動します。

この変更後、Kerberosトークンベースの認証を使用するには、GitリモートURLをhttps://gitlab.example.com:8443/mygroup/myproject.gitに更新する必要があります。

パスワードベースからトークンベースのKerberosサインインへのアップグレード

以前のバージョンのGitLabでは、ユーザーはサインイン時に自分のKerberosユーザー名とパスワードをGitLabに送信する必要がありました。

GitLab 15.0でパスワードベースのKerberosサインインを削除しました。

Active Directory Kerberos環境のサポート

Active DirectoryドメインでKerberosチケットベースの認証を使用する場合、Kerberosプロトコルの拡張によりHTTP認証ヘッダーがデフォルトサイズの8 kBを超える可能性があるため、NGINXで許可される最大ヘッダーサイズを増やす必要がある場合があります。NGINX設定large_client_header_buffersをより大きな値に設定します。

Windows ADでAESのみの暗号化を使用して作成されたキータブを使用する

高度暗号化標準(AES)のみの暗号化でキータブを作成する場合は、ADサーバーでそのアカウントのThis account supports Kerberos AES <128/256> bit encryptionチェックボックスをオンにする必要があります。チェックボックスが128ビットか256ビットかは、キータブを作成したときに使用した暗号化強度によって異なります。これを確認するには、Active Directoryサーバーで:

  1. Users and Groups(ユーザーとグループ)ツールを開きます。
  2. キータブの作成に使用したアカウントを見つけます。
  3. アカウントを右クリックして、Properties(プロパティ)を選択します。
  4. アカウントタブのAccount Options(アカウントオプション)で、適切なAES暗号化サポートチェックボックスを選択します。
  5. 保存して閉じます。