Skip to content

GitLab を Entra ID で SSO 出来るように設定する

SaaS 版 GitLab では無く、自身で Linux などへ構築する GitLab Self-Managed 上で Entra ID と SAML 連携し、SSO する為の設定手順をメモしておきます。

検証環境

対象 バージョン
Amazon Linux 2023.7.20250414
GitLab 17.11.1-ee.0

作業の流れ

作業は以下の流れで進めます。

  1. GitLab を構築する (Amazon Linux 2023 へ GitLab をインストールする を参照)
  2. Entra ID にエンタープライズアプリケーションを登録する
  3. GitLab に SSO 設定を実施する

Entra ID にエンタープライズアプリケーションを登録する

Azure Portal へログインしたら Entra 管理センターへアクセスします。

Step.1

アプリケーションエンタープライズアプリケーション をクリックします。

file

Step.2

新しいアプリケーション をクリックします。

file

Step.3

独自のアプリケーションの作成 をクリックします。

file

Step.4

お使いのアプリの名前は何ですか? に対して、任意の名前を入力します。 この名前は設定上、利用するものではありませんが、管理者が見て分かりやすい名前を設定しておきます。 アプリケーションでどのような操作を行いたいですか?ギャラリーに見つからないその他のアプリケーションを統合します (ギャラリー以外) のまま、作成 をクリックします。

file

Step.5

エンタープライズアプリケーションが作成されました。 SSO の設定をする為、シングル サインオン をクリックします。

file

Step.6

SAML をクリックします。

file

Step.7

以下の画面が表示されます。 「1. 基本的な SAML 構成」は情報を入力する必要があります。 「3. SAML 証明書」と「4. 〜 のセットアップ」は表示されている情報を控えておき、後の手順で GitLab へ設定する必要があります。 詳しくは次のステップで内容を説明します。

file

Step.8

「1. 基本的な SAML 構成」へ、以下の情報を入力します。 FQDN 部分は自身の環境に合わせて調整します。

項目 入力例
識別子 (エンティティ ID) https://gitlab.example.com/users/auth/saml/metadata
応答 URL (Assertion Consumer Service URL) https://gitlab.example.com/
サインオン URL https://gitlab.example.com/

file

Step.9

「3. SAML 証明書」から「拇印」の値を控えます。 これは 0123456789ABCDEF0123456789ABCDEF01234567 のようなフォーマットです。 後の手順で GitLab へ設定する際は 2 文字ごとに : (コロン) を入力し、01:23:45:67:89:AB:CD:EF:01:23:45:67:89:AB:CD:EF:01:23:45:67 のようなフォーマットへ変換して利用します。

file

Step.10

「4. 〜 のセットアップ」から「ログイン URL」と「ログアウト URL」を控えます。 今回、両者は同じ値でした。

file

これで Azure 側で確認は終わりです。

GitLab に SSO 設定を実施する

GitLab の設定ファイルは /etc/gitlab/gitlab.rb です。 このファイルに以下の内容を追記します。 尚、omniauth_allow_single_sign_ontrue にしていると SSO でログインを試みたユーザが「管理者の承認待ち」状態になってしまい、承認されるまでログイン出来ません。 この状態を避けたい場合は false を指定します。

項目 説明
assertion_consumer_service_url https://FQDN/users/auth/saml/callback
issuer 「1. 基本的な SAML 構成」に入力した「識別子 (エンティティ ID)」の値
idp_cert_fingerprint 「3. SAML 証明書」の「拇印」の値を 2 文字ごとに : (コロン) で区切った値
idp_sso_target_url 「4. 〜 のセットアップ」の「ログイン URL」の値
idp_slo_target_url 「4. 〜 のセットアップ」の「ログアウト URL」の値
/etc/gitlab/gitlab.rb
gitlab_rails['omniauth_allow_single_sign_on'] = ['saml']
gitlab_rails['omniauth_block_auto_created_users'] = false
gitlab_rails['omniauth_auto_link_saml_user'] = true
gitlab_rails['omniauth_providers'] = [
  {
    name: 'saml',
    args: {
             assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
             issuer: 'https://gitlab.example.com/users/auth/saml/metadata',
             idp_cert_fingerprint: '01:23:45:67:89:AB:CD:EF:01:23:45:67:89:AB:CD:EF:01:23:45:67',
             idp_sso_target_url: 'https://login.microsoftonline.com/01234567-0123-0123-0123-0123456789AB/saml2',
             idp_slo_target_url: 'https://login.microsoftonline.com/01234567-0123-0123-0123-0123456789AB/saml2',
             name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
             attribute_statements: { email: ['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name'] }
          },
    label: 'SAML Login'
  }
]

追加した設定を反映する為、GitLab を再起動します。

gitlab-ctl reconfigure

GitLab へ SSO でログインする

Web ブラウザで GitLab へアクセスします (例. https://gitlab.example.com)。 そうすると https://gitlab.example.com/users/sign_in へリダイレクトされ、以下のようなログインフォームが表示されます。 ここで SAML Login ボタンをクリックすれば設定した Entra ID で SSO が実行されます。 このボタンの表示名を変更したい場合は /etc/gitlab/gitlab.rb に設定した label を修正します。

file

ログイン画面で「パスワード認証フォーム」を表示させない

ログイン画面で「パスワード認証フォーム」を表示させたくない場合は 管理者設定一般サインインの制限 から Web インターフェイスのパスワード認証を許可する のチェックを外し、変更を保存 をクリックします。

file

この変更を実施すると以下のように「外部認証用のフォーム」のみ、表示されるようになります。

file

「パスワード認証フォーム」を再表示させる

もし「root ユーザでログインしたいのでパスワード認証を再有効化したい」場合は Rails コンソールから設定出来ます。 具体的には gitlab-rails console を実行して Rails コンソールを起動した後、Gitlab::CurrentSettings.update!(password_authentication_enabled_for_web: true) を実行します。 私の環境では Rails コンソールの起動だけで 1 分程度、かかりました。 実際の実行例は以下です。

# gitlab-rails console
--------------------------------------------------------------------------------
 Ruby:         ruby 3.2.5 (2024-07-26 revision 31d0f1a2e7) [aarch64-linux]
 GitLab:       17.11.1-ee (cd4c186e8bc) EE
 GitLab Shell: 14.41.0
 PostgreSQL:   16.8
------------------------------------------------------------[ booted in 53.78s ]
WARNING: Active Record does not support composite primary key.

security_findings has composite primary key. Composite primary key is ignored.
Loading production environment (Rails 7.0.8.7)
irb(main):001:0> Gitlab::CurrentSettings.update!(password_authentication_enabled_for_web: true)
=> true
irb(main):002:0> exit