2022年6月21日火曜日

Gitlab + GoogleWorkspace + SAML 連携

Gitlab + GoogleWorkspace + SAML 連携

概要

GoogleWorkspace のカスタムSAMLアプリを使って Gitlab と連携する方法を紹介します
連携することで GoogleWorkspace 上のユーザを使って Gitlab にログインすることができるようになります

環境

  • macOS 11.6.7
  • GoogleWorkspace (2022/06/21時点)
  • Gitlab 14.9.5

準備

GoogleWorkspace に登録して管理者アカウントを作成しましょう
普通の Google アカウントでは SAML 連携は使えないので注意してください

カスタム SAML アプリを作成する

Google Workspace のコンソールにログインしましょう

左メニューから「ウェブアプリとモバイルアプリ」を選択します

アプリの一覧画面になるのでアプリの追加から「カスタムSAMLアプリの追加」を選択します

アプリの名前を決めましょう
アイコンや説明文は任意に設定できます

アプリが作成できたら「SSOのURL」「エンティティID」「証明書」の情報をコピーしておきましょう
最後のフィンガープリントは gitlab では使わない値なので無視で OK です

次に gitlab の情報を登録します
必要なのは gitlab の URL になります
モザイクの部分は gitlab の URL を記載してください
また名前IDは「EMAIL」を選択します

最後に IdP (GoogleWorkspace) 側から送信する情報を設定します
gitlab の SAML 連携は最低限 email 属性が必要なのでこれを送信するように設定します

これで SAML アプリの作成は完了です

ユーザを登録する

アプリのログインを許可させるユーザの登録を行います
今回は全ユーザ許可するのですべてのユーザをオンにします

フィンガープリントを計算する

このあたりのサイトを使って証明書情報から SHA1 のフィンガープリントを計算します

証明書をコピーしてフィンガープリントを計算するボタンを押せば OK です
アルゴリズムは「SHA1」を指定します

gitlab.rb の編集

最後に gitlab.rb を編集します
omniauth_providers の部分を以下のように編集します

「idp_cert_fingerprint」と「idp_sso_target_url」の部分を GoogleWorkspace から取得した値で設定し「assertion_consumer_service_url」と「issuer」に gitlab の情報を記載します

「name_identifier_format」は名前IDに「EMAIL」を設定したので urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress を設定します

gitlab_rails['omniauth_providers'] = [
  {
    name: 'saml',
    label: 'Google',
    args: {
      assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
      idp_cert_fingerprint: '計算したフィンガープリント',
      idp_sso_target_url: 'https://accounts.google.com/o/saml2/idp?idpid=xxxxxx',
      issuer: 'https://gitlab.example.com',
      name_identifier_format: 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress'
    }
  }
]

動作確認

gitlab を reconfigure して動作確認しましょう
以下のようにログイン画面が表示されて GoogleWorkspace アカウントでログインできることを確認しましょう

支払いについて

コンソールを確認すると無償期間は14日しかないようです
その期間に GoogleWorkspace の管理者アカウントに支払い方法とサブスクリプションを登録すれば引き続き使えるはずです

サブスクリプションしなければアプリが削除されて使えなくなるはずです

支払いを登録するのは GoogleWorkspace を登録した Google アカウントではなく GoogleWorkspace 上の管理者アカウントなので注意してください

参考サイト