概要
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 属性が必要なのでこれを送信するように設定します
ユーザを登録する
アプリのログインを許可させるユーザの登録を行います
今回は全ユーザ許可するのですべてのユーザをオンにします
フィンガープリントを計算する
このあたりのサイトを使って証明書情報から 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 上の管理者アカウントなので注意してください
14日経過しましたが普通にSAML連携は使えました。GoogleWorkspaceのコンスソールにもログインはできます。
返信削除とても参考になります。
返信削除keycloakと SAMLで認証できるようになりました。ありがとうございます。
最近ですが、 gitlab-ce 15.2.4_1 になってしまったら、OmniAuth::AuthenticityError, Forbidden"
でSAMLSAML認証が使えなくなってしまいました。