Geo with Single Sign On(SSO)

この文書では、Geo 固有の SSO の考慮事項と設定についてのみ説明します。一般的な認証の詳細については、GitLab 認証と作成者をご覧ください。

インスタンス全体の SAML 設定

前提条件

インスタンス全体の SAMLがプライマリ Geo サイトで動作している必要があります。

SAML を設定するのはプライマリサイトのみです。セカンダリサイトのgitlab.rbgitlab_rails['omniauth_providers'] を設定しても効果はありません。

セカンダリ・サイトが使用する URL のタイプを決定します。

インスタンス全体の SAML の設定方法は、セカンダリ・サイトの設定によって異なります。セカンダリ・サイトが

  • 統一 URL。つまり、プライマリ・サイトの URLexternal_url と完全に一致 external_urlします。
  • プロキシが有効な個別のURL。GitLab 15.1以降ではプロキシがデフォルトで有効になっています。
  • プロキシを無効にした別のURL。

統一 URL の SAML

プライマリ・サイトで SAML を正しく設定していれば、セカンダリ・サイトでは追加設定なしで動作するはずです。

プロキシが有効な別の URL を使用した SAML

note
プロキシが有効になっている場合、SAML を使用してセカンダリ・サイトに署名できるのは、SAML アイデン ティ・プロバイダ(IdP)でアプリケーションに複数のコールバック URL を設定できる場合のみです。これが該当するかどうかについては、IdP プロバイダのサポート・チームに確認してください。

セカンダリ・サイトがプライマリ・サイトとは異なるexternal_url を使用する場合は、セカンダリ・サイトの SAML コールバック URL を許可するように SAML ID プロバイダ(IdP)を設定します。例えば、Okta を設定します:

  1. Okta にサインインします。
  2. Okta Admin Dashboard>Applications>Your App Name>Generalに進みます。
  3. SAML Settings(SAML設定)で、Edit(編集)を選択します。
  4. General Settings(一般設定)]で、[Next(次へ)]を選択して、[SAML Settings(SAML設定)]に進みます。
  5. SAML Settings > General で、[Single sign-on URL] がプライマリ・サイトの SAML コールバック URL であることを確 認します。例えば、https://gitlab-primary.example.com/users/auth/saml/callback 。そうでない場合は、プライマリ・サイトの SAML コールバック URL をこのフィールドに入力します。
  6. Show Advanced Settings(詳細設定の表示)]を選択します。
  7. Other Requestable SSO URLs] に、セカンダリ・サイトの SAML コールバック URL を入力します。例えば、https://gitlab-secondary.example.com/users/auth/saml/callbackIndexは任意に設定できます。
  8. Next]を選択し、[Finish] を選択します。

SAML プロバイダ設定で、プライマリ・サイトのgitlab.rbgitlab_rails['omniauth_providers']assertion_consumer_service_url を指定しないでください。例えば、以下のようになります:

gitlab_rails['omniauth_providers'] = [
  {
    name: "saml",
    label: "Okta", # optional label for login button, defaults to "Saml"
    args: {
      idp_cert_fingerprint: "B5:AD:AA:9E:3C:05:68:AD:3B:78:ED:31:99:96:96:43:9E:6D:79:96",
      idp_sso_target_url: "https://<dev-account>.okta.com/app/dev-account_gitlabprimary_1/exk7k2gft2VFpVFXa5d1/sso/saml",
      issuer: "https://<gitlab-primary>",
      name_identifier_format: "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"
    }
  }
]

この設定は、以下を引き起こします:

  • 両方のサイトで、アサーション・コンシューマ・サービス(ACS) URL として/users/auth/saml/callback が使用されます。
  • URL のホストを対応するサイトのホストに設定します。

各サイトの/users/auth/saml/metadata パスにアクセスすることで確認できます。例えば、https://gitlab-primary.example.com/users/auth/saml/metadata

<md:EntityDescriptor ID="_b9e00d84-d34e-4e3d-95de-122e3c361617" entityID="https://gitlab-primary.example.com"
  xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"
  xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
  <md:SPSSODescriptor AuthnRequestsSigned="false" WantAssertionsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
    <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</md:NameIDFormat>
    <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://gitlab-primary.example.com/users/auth/saml/callback"    index="0" isDefault="true"/>
    <md:AttributeConsumingService index="1" isDefault="true">
      <md:ServiceName xml:lang="en">Required attributes</md:ServiceName>
      <md:RequestedAttribute FriendlyName="Email address" Name="email" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic" isRequired="false"/>
      <md:RequestedAttribute FriendlyName="Full name" Name="name" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic" isRequired="false"/>
      <md:RequestedAttribute FriendlyName="Given name" Name="first_name" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic" isRequired="false"/>
      <md:RequestedAttribute FriendlyName="Family name" Name="last_name" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic" isRequired="false"/>
    </md:AttributeConsumingService>
  </md:SPSSODescriptor>
</md:EntityDescriptor>

https://gitlab-secondary.example.com/users/auth/saml/metadata

<md:EntityDescriptor ID="_bf71eb57-7490-4024-bfe2-54cec716d4bf" entityID="https://gitlab-primary.example.com"
  xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"
  xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
  <md:SPSSODescriptor AuthnRequestsSigned="false" WantAssertionsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
    <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</md:NameIDFormat>
    <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://gitlab-secondary.example.com/users/auth/saml/callback"    index="0" isDefault="true"/>
    <md:AttributeConsumingService index="1" isDefault="true">
      <md:ServiceName xml:lang="en">Required attributes</md:ServiceName>
      <md:RequestedAttribute FriendlyName="Email address" Name="email" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic" isRequired="false"/>
      <md:RequestedAttribute FriendlyName="Full name" Name="name" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic" isRequired="false"/>
      <md:RequestedAttribute FriendlyName="Given name" Name="first_name" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic" isRequired="false"/>
      <md:RequestedAttribute FriendlyName="Family name" Name="last_name" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic" isRequired="false"/>
    </md:AttributeConsumingService>
  </md:SPSSODescriptor>
</md:EntityDescriptor>

md:AssertionConsumerService フィールドのLocation 属性はgitlab-secondary.example.com を指しています。

セカンダリ・サイトの SAML コールバック URL を許可するように SAML IdP を設定すると、プライマリ・サイトでもセカンダリ・サイトでも SAML でサインインできるようになります。

プロキシが無効な別の URL を使用した SAML

プライマリ・サイトで SAML を正しく設定していれば、セカンダリ・サイトでは追加設定なしで動作するはずです。

OpenID Connect

OpenID Connect(OIDC)OmniAuth プロバイダを使用している場合、ほとんどの場合、問題なく動作するはずです:

  • OIDC with Unified URL:プライマリサイトでOIDCを正しく設定していれば、セカンダリサイトでも追加設定なしで動作するはずです。
  • プロキシを無効にした個別の URL による OIDC:プライマリサイトでOIDCが正しく設定されていれば、追加設定なしでセカンダリサイトで動作するはずです。
  • プロキシが有効な別 URL の OIDC:プロキシが有効な別の URL を持つ Geo はOpenID Connect をサポートしていません。詳細については、イシュー396745 を参照してください。

LDAP

プライマリサイトでLDAP を使う場合は、セカンダリサイトにもLDAP サーバーを設定する必要があります。そうしないと、ユーザーはセカンダリサイトでHTTPベーシック認証を使ってGitオペレーションを行うことができなくなります。しかし、ユーザーはSSHや個人アクセストークンを使ってGitを使うことができます。

note
すべてのセカンダリ・サイトでLDAP サーバーを共有することは可能ですが、追加の待ち時間がイシューになる可能性があります。また、セカンダリ・サイトが プライマリ・サイトに昇格させられた場合、ディザスタリカバリ・シナリオで利用可能なLDAPサーバーは何かを検討してください。

LDAPサービスにレプリケーションを設定する方法については、LDAPサービスのマニュアルを確認してください。このプロセスは、使用するソフトウェアやサービスによって異なります。例えば、OpenLDAPではこのようなレプリケーションのドキュメントを提供しています。