Geo with Single Sign On(SSO)
この文書では、Geo 固有の SSO の考慮事項と設定についてのみ説明します。一般的な認証の詳細については、GitLab 認証と作成者をご覧ください。
インスタンス全体の SAML 設定
前提条件
インスタンス全体の SAMLがプライマリ Geo サイトで動作している必要があります。
SAML を設定するのはプライマリサイトのみです。セカンダリサイトのgitlab.rb
でgitlab_rails['omniauth_providers']
を設定しても効果はありません。
セカンダリ・サイトが使用する URL のタイプを決定します。
インスタンス全体の SAML の設定方法は、セカンダリ・サイトの設定によって異なります。セカンダリ・サイトが
-
統一 URL。つまり、プライマリ・サイトの URL
external_url
と完全に一致external_url
します。 - プロキシが有効な個別のURL。GitLab 15.1以降ではプロキシがデフォルトで有効になっています。
- プロキシを無効にした別のURL。
統一 URL の SAML
プライマリ・サイトで SAML を正しく設定していれば、セカンダリ・サイトでは追加設定なしで動作するはずです。
プロキシが有効な別の URL を使用した SAML
セカンダリ・サイトがプライマリ・サイトとは異なるexternal_url
を使用する場合は、セカンダリ・サイトの SAML コールバック URL を許可するように SAML ID プロバイダ(IdP)を設定します。例えば、Okta を設定します:
- Okta にサインインします。
- Okta Admin Dashboard>Applications>Your App Name>Generalに進みます。
- SAML Settings(SAML設定)で、Edit(編集)を選択します。
- General Settings(一般設定)]で、[Next(次へ)]を選択して、[SAML Settings(SAML設定)]に進みます。
-
SAML Settings > General で、[Single sign-on URL] がプライマリ・サイトの SAML コールバック URL であることを確 認します。例えば、
https://gitlab-primary.example.com/users/auth/saml/callback
。そうでない場合は、プライマリ・サイトの SAML コールバック URL をこのフィールドに入力します。 - Show Advanced Settings(詳細設定の表示)]を選択します。
-
Other Requestable SSO URLs] に、セカンダリ・サイトの SAML コールバック URL を入力します。例えば、
https://gitlab-secondary.example.com/users/auth/saml/callback
。Indexは任意に設定できます。 - Next]を選択し、[Finish] を選択します。
SAML プロバイダ設定で、プライマリ・サイトのgitlab.rb
のgitlab_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を使うことができます。
LDAPサービスにレプリケーションを設定する方法については、LDAPサービスのマニュアルを確認してください。このプロセスは、使用するソフトウェアやサービスによって異なります。例えば、OpenLDAPではこのようなレプリケーションのドキュメントを提供しています。