- GitLab の SAML サポートの設定
- ID プロバイダのセットアップ
- SAML グループメンバーシップに基づくユーザーの設定
- SAMLグループ同期の自動管理
- 二要素認証のバイパス
- レスポンスシグネチャの検証
- SAML 設定のカスタマイズ
- アサーションの暗号化(オプション)
- SAML 認証リクエストに署名する (オプション)
- SAML で作成されたユーザーのパスワード生成
- 既存のユーザーの SAML ID をリンクします。
- セルフマネージドインスタンスでのグループ SAML SSO の設定
- IdP 上の SAML アプリの追加設定
- 用語解説
- トラブルシューティング
自己管理GitLabインスタンス用のSAML SSO
このページでは、インスタンス全体のSAMLシングルサインオン(SSO) を自己管理GitLabインスタンス用に設定する方法を説明します。
GitLabをSAMLサービスプロバイダーとして動作するように設定することができます(SP) 。これにより、GitLabはOktaのようなSAMLアイデンティティプロバイダ(IdP)からのアサーションを消費してユーザーを認証することができます。
GitLab.comでSAMLを設定するには、SAML SSO for GitLab.comグループを参照してください。
詳細については
- OmniAuth プロバイダの設定については、OmniAuth のドキュメントを参照してください。
- よく使われる用語は用語集 を参照してください。
GitLab の SAML サポートの設定
- GitLab がHTTPS で設定されていることを確認します。
-
共通設定を構成して、シングルサインオンプロバイダとして
saml
。これにより、既存のGitLabアカウントを持っていないユーザーのためのJust-In-Timeアカウントプロビジョニングが可能になります。 -
ユーザーが最初に手動でアカウントを作成しなくても SAML を使ってサインアップできるようにするには、
/etc/gitlab/gitlab.rb
を編集します:gitlab_rails['omniauth_allow_single_sign_on'] = ['saml'] gitlab_rails['omniauth_block_auto_created_users'] = false
-
オプション。
/etc/gitlab/gitlab.rb
に以下の設定を追加することで、メールアドレスが一致する SAML ユーザーを GitLab の内部ユーザーと自動的にリンクさせることができます:gitlab_rails['omniauth_auto_link_saml_user'] = true
あるいは、既存のユーザーに対して OmniAuth を有効にすることで、SAML ID を既存の GitLab アカウントに手動でリンクすることもできます。
-
SAML ユーザーが変更できないように、以下の属性を設定します:
-
NameID
. -
Email
omniauth_auto_link_saml_user
と併用した場合。
ユーザがこれらの属性を変更できる場合、他の作成者としてサインインできます。これらの属性を変更できないようにする方法については、SAML IdP のドキュメントを参照。
-
-
/etc/gitlab/gitlab.rb
を編集し、プロバイダ設定を追加します:gitlab_rails['omniauth_providers'] = [ { name: "saml", label: "Provider name", # optional label for login button, defaults to "Saml" args: { assertion_consumer_service_url: "https://gitlab.example.com/users/auth/saml/callback", idp_cert_fingerprint: "43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8", idp_sso_target_url: "https://login.example.com/idp", issuer: "https://gitlab.example.com", name_identifier_format: "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" } } ]
どこに:
-
assertion_consumer_service_url
:GitLab HTTPS エンドポイント(GitLab インストールの HTTPS URL に/users/auth/saml/callback
を追加)。 -
idp_cert_fingerprint
:あなたのIdP値。SHA1 フィンガープリントでなければなりません。これらの値の詳細については、OmniAuth SAML ドキュメントを参照してください。その他の設定の詳細については、IdP の SAML 設定を参照してください。 -
idp_sso_target_url
:IdP の値。 -
issuer
:IdPに対してアプリケーションを識別する一意の名前に変更します。 -
name_identifier_format
:IdP の値。
-
-
ファイルを保存して GitLab を再設定してください:
sudo gitlab-ctl reconfigure
- GitLab がHTTPS で設定されていることを確認します。
-
共通設定を構成して、シングルサインオンプロバイダとして
saml
。これにより、既存のGitLabアカウントを持っていないユーザーのためのJust-In-Timeアカウントプロビジョニングが可能になります。 -
Helm の値をエクスポートします:
helm get values gitlab > gitlab_values.yaml
-
ユーザーが最初に手動でアカウントを作成しなくても SAML を使ってサインアップできるようにするには、
gitlab_values.yaml
を編集します:global: appConfig: omniauth: enabled: true allowSingleSignOn: ['saml'] blockAutoCreatedUsers: true
-
オプション。
gitlab_values.yaml
に以下の設定を追加することで、メールアドレスが一致する SAML ユーザーを GitLab の内部ユーザーと自動的にリンクさせることができます:global: appConfig: omniauth: autoLinkSamlUser: true
あるいは、既存のユーザーに対して OmniAuth を有効にすることで、SAML ID を既存の GitLab アカウントに手動でリンクすることもできます。
-
SAML ユーザーが変更できないように、以下の属性を設定します:
-
NameID
. -
Email
omniauth_auto_link_saml_user
と併用した場合。
ユーザがこれらの属性を変更できる場合、他の作成者としてサインインできます。これらの属性を変更できないようにする方法については、SAML IdP のドキュメントを参照。
-
-
Kubernetes Secretとして使用するため、
saml.yaml
という名前のファイルに以下の内容を記述します:name: 'saml' label: 'Provider name' # optional label for login button, defaults to "Saml" args: assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback' idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8' idp_sso_target_url: 'https://login.example.com/idp' issuer: 'https://gitlab.example.com' name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
どこに:
-
assertion_consumer_service_url
:GitLab HTTPS エンドポイント(GitLab インストールの HTTPS URL に/users/auth/saml/callback
を追加)。 -
idp_cert_fingerprint
:あなたのIdP値。SHA1 フィンガープリントでなければなりません。これらの値の詳細については、OmniAuth SAML ドキュメントを参照してください。その他の設定の詳細については、IdP の SAML 設定を参照してください。 -
idp_sso_target_url
:IdP の値。 -
issuer
:IdPに対してアプリケーションを識別する一意の名前に変更します。 -
name_identifier_format
:IdP の値。
-
-
Kubernetesシークレットを作成します:
kubectl create secret generic -n <namespace> gitlab-saml --from-file=provider=saml.yaml
-
gitlab_values.yaml
を編集し、プロバイダ設定を追加します:global: appConfig: omniauth: providers: - secret: gitlab-saml
-
ファイルを保存して、新しい値を適用します:
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
- GitLab がHTTPS で設定されていることを確認します。
-
共通設定を構成して、シングルサインオンプロバイダとして
saml
。これにより、既存のGitLabアカウントを持っていないユーザーのためのJust-In-Timeアカウントプロビジョニングが可能になります。 -
ユーザーが最初に手動でアカウントを作成しなくても SAML を使ってサインアップできるようにするには、
docker-compose.yml
を編集します:version: "3.6" services: gitlab: environment: GITLAB_OMNIBUS_CONFIG: | gitlab_rails['omniauth_allow_single_sign_on'] = ['saml'] gitlab_rails['omniauth_block_auto_created_users'] = false
-
オプション。
docker-compose.yml
に以下の設定を追加することで、メールアドレスが一致する SAML ユーザーを GitLab の内部ユーザーと自動的にリンクさせることができます:version: "3.6" services: gitlab: environment: GITLAB_OMNIBUS_CONFIG: | gitlab_rails['omniauth_auto_link_saml_user'] = true
あるいは、既存のユーザーに対して OmniAuth を有効にすることで、SAML ID を既存の GitLab アカウントに手動でリンクすることもできます。
-
SAML ユーザーが変更できないように、以下の属性を設定します:
-
NameID
. -
Email
omniauth_auto_link_saml_user
と併用した場合。
ユーザがこれらの属性を変更できる場合、他の作成者としてサインインできます。これらの属性を変更できないようにする方法については、SAML IdP のドキュメントを参照。
-
-
docker-compose.yml
を編集し、プロバイダ設定を追加します:version: "3.6" services: gitlab: environment: GITLAB_OMNIBUS_CONFIG: | gitlab_rails['omniauth_providers'] = [ { name: "saml", label: "Provider name", # optional label for login button, defaults to "Saml" args: { assertion_consumer_service_url: "https://gitlab.example.com/users/auth/saml/callback", idp_cert_fingerprint: "43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8", idp_sso_target_url: "https://login.example.com/idp", issuer: "https://gitlab.example.com", name_identifier_format: "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" } } ]
どこに:
-
assertion_consumer_service_url
:GitLab HTTPS エンドポイント(GitLab インストールの HTTPS URL に/users/auth/saml/callback
を追加)。 -
idp_cert_fingerprint
:あなたのIdP値。SHA1 フィンガープリントでなければなりません。これらの値の詳細については、OmniAuth SAML ドキュメントを参照してください。その他の設定の詳細については、IdP の SAML 設定を参照してください。 -
idp_sso_target_url
:IdP の値。 -
issuer
:IdPに対してアプリケーションを識別する一意の名前に変更します。 -
name_identifier_format
:IdP の値。
-
-
ファイルを保存して GitLab を再起動します:
docker compose up -d
- GitLab がHTTPS で設定されていることを確認します。
-
共通設定を構成して、シングルサインオンプロバイダとして
saml
。これにより、既存のGitLabアカウントを持っていないユーザーのためのJust-In-Timeアカウントプロビジョニングが可能になります。 -
ユーザーが最初に手動でアカウントを作成しなくても SAML を使ってサインアップできるようにするには、
/home/git/gitlab/config/gitlab.yml
を編集します:production: &base omniauth: enabled: true allow_single_sign_on: ["saml"] block_auto_created_users: false
-
オプション。
/home/git/gitlab/config/gitlab.yml
に以下の設定を追加することで、メールアドレスが一致する SAML ユーザーを GitLab の内部ユーザーと自動的にリンクさせることができます:production: &base omniauth: auto_link_saml_user: true
あるいは、既存のユーザーに対して OmniAuth を有効にすることで、SAML ID を既存の GitLab アカウントに手動でリンクすることもできます。
-
SAML ユーザーが変更できないように、以下の属性を設定します:
-
NameID
. -
Email
omniauth_auto_link_saml_user
と併用した場合。
ユーザがこれらの属性を変更できる場合、他の作成者としてサインインできます。これらの属性を変更できないようにする方法については、SAML IdP のドキュメントを参照。
-
-
/home/git/gitlab/config/gitlab.yml
を編集し、プロバイダ設定を追加します:omniauth: providers: - { name: 'saml', label: 'Provider name', # optional label for login button, defaults to "Saml" args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent' } }
どこに:
-
assertion_consumer_service_url
:GitLab HTTPS エンドポイント(GitLab インストールの HTTPS URL に/users/auth/saml/callback
を追加)。 -
idp_cert_fingerprint
:あなたのIdP値。SHA1 フィンガープリントでなければなりません。これらの値の詳細については、OmniAuth SAML ドキュメントを参照してください。その他の設定の詳細については、IdP の SAML 設定を参照してください。 -
idp_sso_target_url
:IdP の値。 -
issuer
:IdPに対してアプリケーションを識別する一意の名前に変更します。 -
name_identifier_format
:IdP の値。
-
-
ファイルを保存して GitLab を再起動します:
# For systems running systemd sudo systemctl restart gitlab.target # For systems running SysV init sudo service gitlab restart
GitLab を SAML IdP に登録します。
-
issuer
で指定したアプリケーション名を使用して、SAML IdP に GitLab SP を登録します。 -
設定情報を IdP に提供するには、アプリケーションのメタデータ URL を構築します。GitLab のメタデータ URL を構築するには、GitLab インストールの HTTPS URL に
users/auth/saml/metadata
を追加します。例えばhttps://gitlab.example.com/users/auth/saml/metadata
最低限、IdP は
email
またはmail
を使ってユーザーのメールアドレスを含むクレームを提供する必要があります。その他の利用可能なクレームの詳細については、アサーションの設定を参照してください。 -
サインイン・ページでは、通常のサインイン・フォームの下に SAML アイコンが表示されます。アイコンを選択して、認証プロセスを開始します。認証に成功すると、GitLab に戻ってサインインします。
IdP の SAML 設定
IdP で SAML アプリケーションを設定するには、少なくとも以下の情報が必要です:
- アサーション・コンシューマ・サービスの URL。
- 発行者。
-
NameID
. - メールアドレスの請求。
設定例については、ID プロバイダの設定を参照してください。
IdP には追加の設定が必要な場合があります。詳細は、「IdP の SAML アプリの追加設定」を参照してください。
複数のSAML IdPを使用するためのGitLabの設定
GitLab 14.6で導入されました。
GitLab が複数の SAML IdP を使うように設定できるのは、以下の場合です:
- 各プロバイダーは、
args
の名前セットと一致する一意の名前セットを持っています。GitLab 14.6以降の既知のイシューを緩和するために、少なくとも1つのプロバイダがsaml
。 - プロバイダーの名前が使われます:
- プロバイダ名に基づくプロパティの OmniAuth 設定。例えば、
allowBypassTwoFactor
、allowSingleSignOn
、syncProfileFromProvider
のようになります。 - 既存の各ユーザーを追加の ID として関連付ける場合。
- プロバイダ名に基づくプロパティの OmniAuth 設定。例えば、
-
assertion_consumer_service_url
はプロバイダ名と一致します。 -
strategy_class
はプロバイダ名から推測できないため、明示的に設定されます。
required_groups
も含まれます。複数の SAML IdP を設定するには、以下の手順に従います:
-
/etc/gitlab/gitlab.rb
を編集します:gitlab_rails['omniauth_providers'] = [ { name: 'saml', # This must match the following name configuration parameter label: 'Provider 1' # Differentiate the two buttons and providers in the UI args: { name: 'saml', # This is mandatory and must match the provider name assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', # URL must match the name of the provider strategy_class: 'OmniAuth::Strategies::SAML', ... # Put here all the required arguments similar to a single provider }, }, { name: 'saml_2', # This must match the following name configuration parameter label: 'Provider 2' # Differentiate the two buttons and providers in the UI args: { name: 'saml_2', # This is mandatory and must match the provider name assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml_2/callback', # URL must match the name of the provider strategy_class: 'OmniAuth::Strategies::SAML', ... # Put here all the required arguments similar to a single provider }, } ]
どちらのプロバイダからも手動でアカウントを作成しなくても、ユーザが SAML を使用してサインアップできるようにするには、設定に以下の値を追加します:
gitlab_rails['omniauth_allow_single_sign_on'] = ['saml', 'saml_2']
-
ファイルを保存して GitLab を再設定してください:
sudo gitlab-ctl reconfigure
-
最初のSAMLプロバイダのKubernetesシークレットとして使用するため、
saml.yaml
という名前のファイルに以下の内容を記述します:name: 'saml' # At least one provider must be named 'saml' label: 'Provider 1' # Differentiate the two buttons and providers in the UI args: name: 'saml' # This is mandatory and must match the provider name assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback' # URL must match the name of the provider strategy_class: 'OmniAuth::Strategies::SAML' # Mandatory ... # Put here all the required arguments similar to a single provider
-
2番目のSAMLプロバイダのKubernetesシークレットとして使用するために、
saml_2.yaml
という名前のファイルに以下の内容を記述します:name: 'saml_2' label: 'Provider 2' # Differentiate the two buttons and providers in the UI args: name: 'saml_2' # This is mandatory and must match the provider name assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml_2/callback' # URL must match the name of the provider strategy_class: 'OmniAuth::Strategies::SAML' # Mandatory ... # Put here all the required arguments similar to a single provider
- オプション。同じ手順に従って、追加の SAML プロバイダを設定します。
-
Kubernetesシークレットを作成します:
kubectl create secret generic -n <namespace> gitlab-saml \ --from-file=saml=saml.yaml \ --from-file=saml_2=saml_2.yaml
-
Helm の値をエクスポートします:
helm get values gitlab > gitlab_values.yaml
-
gitlab_values.yaml
を編集します:global: appConfig: omniauth: providers: - secret: gitlab-saml key: saml - secret: gitlab-saml key: saml_2
どちらのプロバイダからも手動でアカウントを作成しなくても、ユーザが SAML を使用してサインアップできるようにするには、設定に以下の値を追加します:
global: appConfig: omniauth: allowSingleSignOn: ['saml', 'saml_2']
-
ファイルを保存して、新しい値を適用します:
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
-
docker-compose.yml
を編集します:version: "3.6" services: gitlab: environment: GITLAB_OMNIBUS_CONFIG: | gitlab_rails['omniauth_allow_single_sign_on'] = ['saml', 'saml1'] gitlab_rails['omniauth_providers'] = [ { name: 'saml', # This must match the following name configuration parameter label: 'Provider 1' # Differentiate the two buttons and providers in the UI args: { name: 'saml', # This is mandatory and must match the provider name assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', # URL must match the name of the provider strategy_class: 'OmniAuth::Strategies::SAML', ... # Put here all the required arguments similar to a single provider }, }, { name: 'saml_2', # This must match the following name configuration parameter label: 'Provider 2' # Differentiate the two buttons and providers in the UI args: { name: 'saml_2', # This is mandatory and must match the provider name assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml_2/callback', # URL must match the name of the provider strategy_class: 'OmniAuth::Strategies::SAML', ... # Put here all the required arguments similar to a single provider }, } ]
どちらのプロバイダからも手動でアカウントを作成しなくても、ユーザが SAML を使用してサインアップできるようにするには、設定に以下の値を追加します:
version: "3.6" services: gitlab: environment: GITLAB_OMNIBUS_CONFIG: | gitlab_rails['omniauth_allow_single_sign_on'] = ['saml', 'saml_2']
-
ファイルを保存して GitLab を再起動します:
docker compose up -d
-
/home/git/gitlab/config/gitlab.yml
を編集します:production: &base omniauth: providers: - { name: 'saml', # This must match the following name configuration parameter label: 'Provider 1' # Differentiate the two buttons and providers in the UI args: { name: 'saml', # This is mandatory and must match the provider name assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', # URL must match the name of the provider strategy_class: 'OmniAuth::Strategies::SAML', ... # Put here all the required arguments similar to a single provider }, } - { name: 'saml_2', # This must match the following name configuration parameter label: 'Provider 2' # Differentiate the two buttons and providers in the UI args: { name: 'saml_2', # This is mandatory and must match the provider name strategy_class: 'OmniAuth::Strategies::SAML', assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml_2/callback', # URL must match the name of the provider ... # Put here all the required arguments similar to a single provider }, }
どちらのプロバイダからも手動でアカウントを作成しなくても、ユーザが SAML を使用してサインアップできるようにするには、設定に以下の値を追加します:
production: &base omniauth: allow_single_sign_on: ["saml", "saml_2"]
-
ファイルを保存して GitLab を再起動します:
# For systems running systemd sudo systemctl restart gitlab.target # For systems running SysV init sudo service gitlab restart
ID プロバイダのセットアップ
GitLabがSAMLをサポートしているということは、様々なIdPを通してGitLabにサインインできるということです。
GitLabは、OktaとGoogleワークスペースIdPの設定に関する以下のコンテンツをガイダンスのためだけに提供しています。これらのIdPの設定についてご質問がある場合は、プロバイダのサポートにお問い合わせください。
Oktaの設定
- Okta管理者セクションで「アプリケーション」を選択します。
- アプリ画面で、「アプリインテグレーションを作成」を選択し、次の画面で「SAML 2.0」を選択します。
- オプション。GitLab Pressからロゴを選択して追加します。ロゴはトリミングしてサイズを変更する必要があります。
- SAMLの一般設定を完了します。入力します:
- フィードバック・セクションで、あなたが顧客であり、内部使用のアプリを作成していることを入力します。
- 新しいアプリのプロファイルの上部で、「SAML 2.0 設定手順」を選択します。
-
Identity Provider Single Sign-On URL に注目してください。この URL を GitLab 設定ファイルの
idp_sso_target_url
に使用してください。 - Oktaからサインアウトする前に、ユーザーとグループがあれば追加してください。
Googleワークスペースを設定します。
前提条件:
- Google Workspace Super Admin アカウントにアクセスできることを確認してください。
-
以下の情報を使用し、Google Workspace で独自のカスタム SAML アプリケーションをセットアップする の手順に従ってください。
標準的な値 説明 SAML アプリ名 GitLab 他の名前もOK ACS URL https://<GITLAB_DOMAIN>/users/auth/saml/callback
Assertion Consumer ServiceのURL。 GITLAB_DOMAIN
gitlab.example.com
GitLabインスタンスのドメイン。 エンティティID https://gitlab.example.com
SAML アプリケーション固有の値。GitLab設定の issuer
。名前 ID 形式 EMAIL
必須。 name_identifier_format
としても知られています。名前ID 主メールアドレス あなたのメールアドレスです。そのアドレスに送られたコンテンツが誰かに届くようにします。 名 first_name
名前。GitLabと通信するために必要な値です。 姓 last_name
姓。GitLabと通信するために必要な値です。 -
以下の SAML 属性マッピングを設定します:
Google Directory 属性 アプリ属性 基本情報 > Eメール email
基本情報 > 姓 first_name
基本情報 > 姓 last_name
この情報の一部は、GitLabでSAMLサポートを設定するときに使うかもしれません。
Google Workspace SAML アプリケーションを設定する際には、以下の情報を記録しておきましょう:
値 | 説明 | |
---|---|---|
SSO URL | 依存 | Google Identity Providerの詳細。GitLabidp_sso_target_url 設定に設定します。 |
証明書 | ダウンロード可能 |
openssl x509 -in <your_certificate.crt> -noout -fingerprint -sha1 を実行して、idp_cert_fingerprint 設定で使用できる SHA1 フィンガープリントを生成します。 |
Google Workspace Administrator は、IdP メタデータ、エンティティ ID、SHA-256 フィンガープリントも提供します。しかし、GitLabはGoogleワークスペースSAMLアプリケーションに接続するためにこれらの情報を必要としません。
他のIdPの設定
一部の IdP には、SAML 構成で IdP として使用する方法に関する文書があります。例えば
SAML 構成での IdP の設定について不明な点がある場合は、プロバイダのサポートに問い合わせてください。
アサーションの設定
項目 | サポートされているデフォルトキー |
---|---|
Eメール(必須) |
email ,mail
|
氏名 | name |
名 |
first_name ,firstname 、firstName
|
苗字 |
last_name ,lastname 、lastName
|
についてはattribute_statements
を参照:
- カスタムアサーション設定例。
- カスタムユーザ名属性の設定方法
サポートしているアサーションの一覧はOmniAuth SAML gemを参照ください。
SAML グループメンバーシップに基づくユーザーの設定
以下のようなことができます:
GitLabはSAMLサインインごとにこれらのグループをチェックし、必要に応じてユーザー属性を更新します。この機能では、ユーザーをGitLabグループに自動的に追加することはできません。
これらのグループのサポートは以下に依存します:
- サブスクリプション
- GitLab Enterprise Edition(EE) をインストールしているかどうか。
-
SAML プロバイダの名前。グループ・メンバーシップは、
saml
という名前の単一の SAML プロバイダによってのみサポートされます。
グループ | ティア | GitLab Enterprise Edition(EE) のみ? |
---|---|---|
必須 | はい | |
外部 | なし | |
管理者 | はい | |
監査役 | はい |
前提条件:
-
GitLabにグループ情報を探す場所を教える必要があります。これを行うには、IdPサーバーが通常のSAMLレスポンスと一緒に特定の
AttributeStatement
。例えば<saml:AttributeStatement> <saml:Attribute Name="Groups"> <saml:AttributeValue xsi:type="xs:string">Developers</saml:AttributeValue> <saml:AttributeValue xsi:type="xs:string">Freelancers</saml:AttributeValue> <saml:AttributeValue xsi:type="xs:string">Admins</saml:AttributeValue> <saml:AttributeValue xsi:type="xs:string">Auditors</saml:AttributeValue> </saml:Attribute> </saml:AttributeStatement>
属性の名前には、ユーザーが属しているグループが含まれていなければなりません。GitLabにこれらのグループを見つける場所を伝えるために、SAML設定に
groups_attribute:
要素を追加してください。
必須グループ
あなたのIdPは、SAMLレスポンスでグループ情報をGitLabに渡します。このレスポンスを使用するには、GitLab を識別するように設定します:
-
groups_attribute
設定を使って、SAML レスポンスでグループを探す場所。 - グループ設定を使用した、グループまたはユーザに関する情報。
required_groups
設定を使用して、サインインするためにどのグループメンバーシップが必要かを識別するために GitLab を設定します。
required_groups
を設定しないか、設定を空のままにすると、適切な認証があれば誰でもサービスを利用することができます。
-
/etc/gitlab/gitlab.rb
を編集します:gitlab_rails['omniauth_providers'] = [ { name: 'saml', label: 'Our SAML Provider', groups_attribute: 'Groups', required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors'], args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent' } } ]
-
ファイルを保存して GitLab を再設定してください:
sudo gitlab-ctl reconfigure
-
Kubernetes Secretとして使用するため、
saml.yaml
という名前のファイルに以下の内容を記述します:name: 'saml' label: 'Our SAML Provider' groups_attribute: 'Groups' required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors'] args: assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback' idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8' idp_sso_target_url: 'https://login.example.com/idp' issuer: 'https://gitlab.example.com' name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
-
Kubernetesシークレットを作成します:
kubectl create secret generic -n <namespace> gitlab-saml --from-file=provider=saml.yaml
-
Helm の値をエクスポートします:
helm get values gitlab > gitlab_values.yaml
-
gitlab_values.yaml
を編集します:global: appConfig: omniauth: providers: - secret: gitlab-saml
-
ファイルを保存して、新しい値を適用します:
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
-
docker-compose.yml
を編集します:version: "3.6" services: gitlab: environment: GITLAB_OMNIBUS_CONFIG: | gitlab_rails['omniauth_providers'] = [ { name: 'saml', label: 'Our SAML Provider', groups_attribute: 'Groups', required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors'], args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent' } } ]
-
ファイルを保存して GitLab を再起動します:
docker compose up -d
-
/home/git/gitlab/config/gitlab.yml
を編集します:production: &base omniauth: providers: - { name: 'saml', label: 'Our SAML Provider', groups_attribute: 'Groups', required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors'], args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent' } }
-
ファイルを保存して GitLab を再起動します:
# For systems running systemd sudo systemctl restart gitlab.target # For systems running SysV init sudo service gitlab restart
外部グループ
あなたのIdPは、SAMLレスポンスでグループ情報をGitLabに渡します。このレスポンスを使用するには、GitLab を識別するように設定します:
-
groups_attribute
設定を使って、SAML レスポンスでグループを探す場所。 - グループ設定を使用した、グループまたはユーザに関する情報。
SAML は、external_groups
設定に基づいて、ユーザを自動的に内部ユーザとして識別できます。
設定例
-
/etc/gitlab/gitlab.rb
を編集します:gitlab_rails['omniauth_providers'] = [ { name: 'saml', label: 'Our SAML Provider', groups_attribute: 'Groups', external_groups: ['Freelancers'], args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent' } } ]
-
ファイルを保存して GitLab を再設定してください:
sudo gitlab-ctl reconfigure
-
Kubernetes Secretとして使用するため、
saml.yaml
という名前のファイルに以下の内容を記述します:name: 'saml' label: 'Our SAML Provider' groups_attribute: 'Groups' external_groups: ['Freelancers'] args: assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback' idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8' idp_sso_target_url: 'https://login.example.com/idp' issuer: 'https://gitlab.example.com' name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
-
Kubernetesシークレットを作成します:
kubectl create secret generic -n <namespace> gitlab-saml --from-file=provider=saml.yaml
-
Helm の値をエクスポートします:
helm get values gitlab > gitlab_values.yaml
-
gitlab_values.yaml
を編集します:global: appConfig: omniauth: providers: - secret: gitlab-saml
-
ファイルを保存して、新しい値を適用します:
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
-
docker-compose.yml
を編集します:version: "3.6" services: gitlab: environment: GITLAB_OMNIBUS_CONFIG: | gitlab_rails['omniauth_providers'] = [ { name: 'saml', label: 'Our SAML Provider', groups_attribute: 'Groups', external_groups: ['Freelancers'], args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent' } } ]
-
ファイルを保存して GitLab を再起動します:
docker compose up -d
-
/home/git/gitlab/config/gitlab.yml
を編集します:production: &base omniauth: providers: - { name: 'saml', label: 'Our SAML Provider', groups_attribute: 'Groups', external_groups: ['Freelancers'], args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent' } }
-
ファイルを保存して GitLab を再起動します:
# For systems running systemd sudo systemctl restart gitlab.target # For systems running SysV init sudo service gitlab restart
管理者グループ
あなたのIdPは、SAMLレスポンスでグループ情報をGitLabに渡します。このレスポンスを使用するには、GitLab を識別するように設定します:
-
groups_attribute
設定を使って、SAML レスポンスでグループを探す場所。 - グループ設定を使用した、グループまたはユーザに関する情報。
admin_groups
設定を使用して、GitLab がどのグループがユーザーに管理者アクセスを許可するかを識別するように設定します。
設定例
-
/etc/gitlab/gitlab.rb
を編集します:gitlab_rails['omniauth_providers'] = [ { name: 'saml', label: 'Our SAML Provider', groups_attribute: 'Groups', admin_groups: ['Admins'], args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent' } } ]
-
ファイルを保存して GitLab を再設定してください:
sudo gitlab-ctl reconfigure
-
Kubernetes Secretとして使用するため、
saml.yaml
という名前のファイルに以下の内容を記述します:name: 'saml' label: 'Our SAML Provider' groups_attribute: 'Groups' admin_groups: ['Admins'] args: assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback' idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8' idp_sso_target_url: 'https://login.example.com/idp' issuer: 'https://gitlab.example.com' name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
-
Kubernetesシークレットを作成します:
kubectl create secret generic -n <namespace> gitlab-saml --from-file=provider=saml.yaml
-
Helm の値をエクスポートします:
helm get values gitlab > gitlab_values.yaml
-
gitlab_values.yaml
を編集します:global: appConfig: omniauth: providers: - secret: gitlab-saml
-
ファイルを保存して、新しい値を適用します:
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
-
docker-compose.yml
を編集します:version: "3.6" services: gitlab: environment: GITLAB_OMNIBUS_CONFIG: | gitlab_rails['omniauth_providers'] = [ { name: 'saml', label: 'Our SAML Provider', groups_attribute: 'Groups', admin_groups: ['Admins'], args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent' } } ]
-
ファイルを保存して GitLab を再起動します:
docker compose up -d
-
/home/git/gitlab/config/gitlab.yml
を編集します:production: &base omniauth: providers: - { name: 'saml', label: 'Our SAML Provider', groups_attribute: 'Groups', admin_groups: ['Admins'], args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent' } }
-
ファイルを保存して GitLab を再起動します:
# For systems running systemd sudo systemctl restart gitlab.target # For systems running SysV init sudo service gitlab restart
監査役グループ
GitLab 11.4で導入されました。
あなたのIdPは、SAMLレスポンスでグループ情報をGitLabに渡します。このレスポンスを使用するには、GitLab を識別するように設定します:
-
groups_attribute
設定を使って、SAML レスポンスでグループを探す場所。 - グループ設定を使用した、グループまたはユーザに関する情報。
auditor_groups
設定を使用して、監査アクセス権を持つユーザーを含むグループを識別するように GitLab を設定します。
設定例
-
/etc/gitlab/gitlab.rb
を編集します:gitlab_rails['omniauth_providers'] = [ { name: 'saml', label: 'Our SAML Provider', groups_attribute: 'Groups', auditor_groups: ['Auditors'], args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent' } } ]
-
ファイルを保存して GitLab を再設定してください:
sudo gitlab-ctl reconfigure
-
Kubernetes Secretとして使用するため、
saml.yaml
という名前のファイルに以下の内容を記述します:name: 'saml' label: 'Our SAML Provider' groups_attribute: 'Groups' auditor_groups: ['Auditors'] args: assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback' idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8' idp_sso_target_url: 'https://login.example.com/idp' issuer: 'https://gitlab.example.com' name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
-
Kubernetesシークレットを作成します:
kubectl create secret generic -n <namespace> gitlab-saml --from-file=provider=saml.yaml
-
Helm の値をエクスポートします:
helm get values gitlab > gitlab_values.yaml
-
gitlab_values.yaml
を編集します:global: appConfig: omniauth: providers: - secret: gitlab-saml
-
ファイルを保存して、新しい値を適用します:
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
-
docker-compose.yml
を編集します:version: "3.6" services: gitlab: environment: GITLAB_OMNIBUS_CONFIG: | gitlab_rails['omniauth_providers'] = [ { name: 'saml', label: 'Our SAML Provider', groups_attribute: 'Groups', auditor_groups: ['Auditors'], args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent' } } ]
-
ファイルを保存して GitLab を再起動します:
docker compose up -d
-
/home/git/gitlab/config/gitlab.yml
を編集します:production: &base omniauth: providers: - { name: 'saml', label: 'Our SAML Provider', groups_attribute: 'Groups', auditor_groups: ['Auditors'], args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent' } }
-
ファイルを保存して GitLab を再起動します:
# For systems running systemd sudo systemctl restart gitlab.target # For systems running SysV init sudo service gitlab restart
SAMLグループ同期の自動管理
GitLab グループメンバーシップの自動管理については、SAML Group Syncをご覧ください。
二要素認証のバイパス
セッションごとに 2 要素認証 (2FA) としてカウントする SAML 認証方法を設定するには、その方法をupstream_two_factor_authn_contexts
リストに登録します。
-
IdP が
AuthnContext
を返していることを確認します:<saml:AuthnStatement> <saml:AuthnContext> <saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:MediumStrongCertificateProtectedTransport</saml:AuthnContextClassRef> </saml:AuthnContext> </saml:AuthnStatement>
-
インストール設定を編集して、SAML 認証方法を
upstream_two_factor_authn_contexts
リストに登録します。Linux package (Omnibus)-
/etc/gitlab/gitlab.rb
を編集します:gitlab_rails['omniauth_providers'] = [ { name: 'saml', label: 'Our SAML Provider', args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent' upstream_two_factor_authn_contexts: %w( urn:oasis:names:tc:SAML:2.0:ac:classes:CertificateProtectedTransport urn:oasis:names:tc:SAML:2.0:ac:classes:SecondFactorOTPSMS urn:oasis:names:tc:SAML:2.0:ac:classes:SecondFactorIGTOKEN ), } } ]
-
ファイルを保存して GitLab を再設定してください:
sudo gitlab-ctl reconfigure
Helm chart (Kubernetes)-
Kubernetes Secretとして使用するため、
saml.yaml
という名前のファイルに以下の内容を記述します:name: 'saml' label: 'Our SAML Provider' args: assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback' idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8' idp_sso_target_url: 'https://login.example.com/idp' issuer: 'https://gitlab.example.com' name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent' upstream_two_factor_authn_contexts: - 'urn:oasis:names:tc:SAML:2.0:ac:classes:CertificateProtectedTransport' - 'urn:oasis:names:tc:SAML:2.0:ac:classes:SecondFactorOTPSMS' - 'urn:oasis:names:tc:SAML:2.0:ac:classes:SecondFactorIGTOKEN'
-
Kubernetesシークレットを作成します:
kubectl create secret generic -n <namespace> gitlab-saml --from-file=provider=saml.yaml
-
Helm の値をエクスポートします:
helm get values gitlab > gitlab_values.yaml
-
gitlab_values.yaml
を編集します:global: appConfig: omniauth: providers: - secret: gitlab-saml
-
ファイルを保存して、新しい値を適用します:
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
Docker-
docker-compose.yml
を編集します:version: "3.6" services: gitlab: environment: GITLAB_OMNIBUS_CONFIG: | gitlab_rails['omniauth_providers'] = [ { name: 'saml', label: 'Our SAML Provider', args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent' upstream_two_factor_authn_contexts: %w( urn:oasis:names:tc:SAML:2.0:ac:classes:CertificateProtectedTransport urn:oasis:names:tc:SAML:2.0:ac:classes:SecondFactorOTPSMS urn:oasis:names:tc:SAML:2.0:ac:classes:SecondFactorIGTOKEN ) } } ]
-
ファイルを保存して GitLab を再起動します:
docker compose up -d
Self-compiled (source)-
/home/git/gitlab/config/gitlab.yml
を編集します:production: &base omniauth: providers: - { name: 'saml', label: 'Our SAML Provider', args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent' upstream_two_factor_authn_contexts: [ 'urn:oasis:names:tc:SAML:2.0:ac:classes:CertificateProtectedTransport', 'urn:oasis:names:tc:SAML:2.0:ac:classes:SecondFactorOTPSMS', 'urn:oasis:names:tc:SAML:2.0:ac:classes:SecondFactorIGTOKEN' ] } }
-
ファイルを保存して GitLab を再起動します:
# For systems running systemd sudo systemctl restart gitlab.target # For systems running SysV init sudo service gitlab restart
-
レスポンスシグネチャの検証
IdP は、アサーションが改ざんされていないことを確認するために、SAML 応答に署名する必要があります。
これにより、特定のグループ・メ ンバーシップが必要な場合に、ユーザのなりすましや特権の昇格が防止されます。
テストの拡張idp_cert_fingerprint
idp_cert_fingerprint
を使用して応答署名検証を設定します。設定例です:
-
/etc/gitlab/gitlab.rb
を編集します:gitlab_rails['omniauth_providers'] = [ { name: 'saml', label: 'Our SAML Provider', args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent' } } ]
-
ファイルを保存して GitLab を再設定してください:
sudo gitlab-ctl reconfigure
-
Kubernetes Secretとして使用するため、
saml.yaml
という名前のファイルに以下の内容を記述します:name: 'saml' label: 'Our SAML Provider' args: assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback' idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8' idp_sso_target_url: 'https://login.example.com/idp' issuer: 'https://gitlab.example.com' name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
-
Kubernetesシークレットを作成します:
kubectl create secret generic -n <namespace> gitlab-saml --from-file=provider=saml.yaml
-
Helm の値をエクスポートします:
helm get values gitlab > gitlab_values.yaml
-
gitlab_values.yaml
を編集します:global: appConfig: omniauth: providers: - secret: gitlab-saml
-
ファイルを保存して、新しい値を適用します:
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
-
docker-compose.yml
を編集します:version: "3.6" services: gitlab: environment: GITLAB_OMNIBUS_CONFIG: | gitlab_rails['omniauth_providers'] = [ { name: 'saml', label: 'Our SAML Provider', args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent' } } ]
-
ファイルを保存して GitLab を再起動します:
docker compose up -d
-
/home/git/gitlab/config/gitlab.yml
を編集します:production: &base omniauth: providers: - { name: 'saml', label: 'Our SAML Provider', args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent' } }
-
ファイルを保存して GitLab を再起動します:
# For systems running systemd sudo systemctl restart gitlab.target # For systems running SysV init sudo service gitlab restart
テストの拡張idp_cert
あなたの IdP がidp_cert_fingerprint
を使った設定をサポートしていない場合は、代わりにidp_cert
を使って GitLab を直接設定することができます。設定例:
-
/etc/gitlab/gitlab.rb
を編集します:gitlab_rails['omniauth_providers'] = [ { name: 'saml', label: 'Our SAML Provider', args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert: '-----BEGIN CERTIFICATE----- <redacted> -----END CERTIFICATE-----', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent' } } ]
-
ファイルを保存して GitLab を再設定してください:
sudo gitlab-ctl reconfigure
-
Kubernetes Secretとして使用するため、
saml.yaml
という名前のファイルに以下の内容を記述します:name: 'saml' label: 'Our SAML Provider' args: assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback' idp_cert: | -----BEGIN CERTIFICATE----- <redacted> -----END CERTIFICATE----- idp_sso_target_url: 'https://login.example.com/idp' issuer: 'https://gitlab.example.com' name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
-
Kubernetesシークレットを作成します:
kubectl create secret generic -n <namespace> gitlab-saml --from-file=provider=saml.yaml
-
Helm の値をエクスポートします:
helm get values gitlab > gitlab_values.yaml
-
gitlab_values.yaml
を編集します:global: appConfig: omniauth: providers: - secret: gitlab-saml
-
ファイルを保存して、新しい値を適用します:
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
-
docker-compose.yml
を編集します:version: "3.6" services: gitlab: environment: GITLAB_OMNIBUS_CONFIG: | gitlab_rails['omniauth_providers'] = [ { name: 'saml', label: 'Our SAML Provider', args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert: '-----BEGIN CERTIFICATE----- <redacted> -----END CERTIFICATE-----', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent' } } ]
-
ファイルを保存して GitLab を再起動します:
docker compose up -d
-
/home/git/gitlab/config/gitlab.yml
を編集します:production: &base omniauth: providers: - { name: 'saml', label: 'Our SAML Provider', args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert: '-----BEGIN CERTIFICATE----- <redacted> -----END CERTIFICATE-----', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent' } }
-
ファイルを保存して GitLab を再起動します:
# For systems running systemd sudo systemctl restart gitlab.target # For systems running SysV init sudo service gitlab restart
レスポンスシグネチャの検証の設定が間違っていると、以下のようなエラーメッセージが表示されるかもしれません:
- キー検証エラー。
- ダイジェストの不一致。
- 指紋の不一致
これらのエラーの解決に関する詳細は、SAML トラブルシューティング・ガイドを参照してください。
SAML 設定のカスタマイズ
ユーザをSAMLサーバにリダイレクトして認証
GitLabの設定にauto_sign_in_with_provider
の設定を追加することで、認証のために自動的にSAMLサーバーにリダイレクトさせることができます。これにより、実際にサインインする前に要素を選択する必要がなくなります。
-
/etc/gitlab/gitlab.rb
を編集します:gitlab_rails['omniauth_auto_sign_in_with_provider'] = 'saml'
-
ファイルを保存して GitLab を再設定してください:
sudo gitlab-ctl reconfigure
-
Helm の値をエクスポートします:
helm get values gitlab > gitlab_values.yaml
-
gitlab_values.yaml
を編集します:global: appConfig: omniauth: autoSignInWithProvider: 'saml'
-
ファイルを保存して、新しい値を適用します:
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
-
docker-compose.yml
を編集します:version: "3.6" services: gitlab: environment: GITLAB_OMNIBUS_CONFIG: | gitlab_rails['omniauth_auto_sign_in_with_provider'] = 'saml'
-
ファイルを保存して GitLab を再起動します:
docker compose up -d
-
/home/git/gitlab/config/gitlab.yml
を編集します:production: &base omniauth: auto_sign_in_with_provider: 'saml'
-
ファイルを保存して GitLab を再起動します:
# For systems running systemd sudo systemctl restart gitlab.target # For systems running SysV init sudo service gitlab restart
サインインを試みるたびに SAML サーバーにリダイレクトされるので、ローカルの認証情報を使ってサインインすることはできません。SAMLユーザーの少なくとも一人が管理者権限を持っていることを確認してください。
?auto_sign_in=false
を追加します(例:https://gitlab.example.com/users/sign_in?auto_sign_in=false
.SAML 応答属性名のマップ
attribute_statements
を使用して、SAML レスポンスの属性名を OmniAuthinfo
ハッシュのエントリにマップできます。
info
この設定は、OmniAuthinfo
ハッシュ・スキーマの一部である属性をマップする場合にのみ使用します。
例えば、SAMLResponse
にEmailAddress
という Attribute が含まれている場合、{ email: ['EmailAddress'] }
を指定すると、その Attribute がinfo
ハッシュの対応するキーにマップされます。URI 名を持つ Attribute もサポートされています。例えば、{ email: ['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress'] }
。
この設定は、アカウント作成に必要な特定の属性を探す場所を GitLab に伝えるために使います。例えば、IdP がユーザーのメールアドレスをemail
ではなくEmailAddress
として送信する場合、GitLab に設定で知らせてください:
-
/etc/gitlab/gitlab.rb
を編集します:gitlab_rails['omniauth_providers'] = [ { name: 'saml', label: 'Our SAML Provider', args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent', attribute_statements: { email: ['EmailAddress'] } } } ]
-
ファイルを保存して GitLab を再設定してください:
sudo gitlab-ctl reconfigure
-
Kubernetes Secretとして使用するため、
saml.yaml
という名前のファイルに以下の内容を記述します:name: 'saml' label: 'Our SAML Provider' args: assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback' idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8' idp_sso_target_url: 'https://login.example.com/idp' issuer: 'https://gitlab.example.com' name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent' attribute_statements: email: ['EmailAddress']
-
Kubernetesシークレットを作成します:
kubectl create secret generic -n <namespace> gitlab-saml --from-file=provider=saml.yaml
-
Helm の値をエクスポートします:
helm get values gitlab > gitlab_values.yaml
-
gitlab_values.yaml
を編集します:global: appConfig: omniauth: providers: - secret: gitlab-saml
-
ファイルを保存して、新しい値を適用します:
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
-
docker-compose.yml
を編集します:version: "3.6" services: gitlab: environment: GITLAB_OMNIBUS_CONFIG: | gitlab_rails['omniauth_providers'] = [ { name: 'saml', label: 'Our SAML Provider', args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent', attribute_statements: { email: ['EmailAddress'] } } } ]
-
ファイルを保存して GitLab を再起動します:
docker compose up -d
-
/home/git/gitlab/config/gitlab.yml
を編集します:production: &base omniauth: providers: - { name: 'saml', label: 'Our SAML Provider', args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent', attribute_statements: { email: ['EmailAddress'] } } }
-
ファイルを保存して GitLab を再起動します:
# For systems running systemd sudo systemctl restart gitlab.target # For systems running SysV init sudo service gitlab restart
ユーザー名の設定
デフォルトでは、SAML レスポンスのメールアドレスのローカル部分が、ユーザーの GitLab ユーザー名を生成するために使われます。
attribute_statements
、username
またはnickname
を設定し、ユーザーの希望するユーザー名を含む1つ以上のアトリビュートを指定します:
-
/etc/gitlab/gitlab.rb
を編集します:gitlab_rails['omniauth_providers'] = [ { name: 'saml', label: 'Our SAML Provider', args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent', attribute_statements: { nickname: ['username'] } } } ]
-
ファイルを保存して GitLab を再設定してください:
sudo gitlab-ctl reconfigure
-
Kubernetes Secretとして使用するため、
saml.yaml
という名前のファイルに以下の内容を記述します:name: 'saml' label: 'Our SAML Provider' args: assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback' idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8' idp_sso_target_url: 'https://login.example.com/idp' issuer: 'https://gitlab.example.com' name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent' attribute_statements: nickname: ['username']
-
Kubernetesシークレットを作成します:
kubectl create secret generic -n <namespace> gitlab-saml --from-file=provider=saml.yaml
-
Helm の値をエクスポートします:
helm get values gitlab > gitlab_values.yaml
-
gitlab_values.yaml
を編集します:global: appConfig: omniauth: providers: - secret: gitlab-saml
-
ファイルを保存して、新しい値を適用します:
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
-
docker-compose.yml
を編集します:version: "3.6" services: gitlab: environment: GITLAB_OMNIBUS_CONFIG: | gitlab_rails['omniauth_providers'] = [ { name: 'saml', label: 'Our SAML Provider', groups_attribute: 'Groups', required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors'], args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent', attribute_statements: { nickname: ['username'] } } } ]
-
ファイルを保存して GitLab を再起動します:
docker compose up -d
-
/home/git/gitlab/config/gitlab.yml
を編集します:production: &base omniauth: providers: - { name: 'saml', label: 'Our SAML Provider', groups_attribute: 'Groups', required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors'], args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent', attribute_statements: { nickname: ['username'] } } }
-
ファイルを保存して GitLab を再起動します:
# For systems running systemd sudo systemctl restart gitlab.target # For systems running SysV init sudo service gitlab restart
これで、SAML レスポンスのusername
属性も GitLab のユーザー名に設定されます。
クロックドリフトを許可
IdPのクロックは、システムのクロックよりもわずかに先にドリフトする可能性があります。わずかなクロック・ドリフトを許容するには、設定でallowed_clock_drift
を使用します。パラメータの値は、数値と秒の端数で入力する必要があります。指定された値は、応答が検証される現在時刻に加算されます。
-
/etc/gitlab/gitlab.rb
を編集します:gitlab_rails['omniauth_providers'] = [ { name: 'saml', label: 'Our SAML Provider', groups_attribute: 'Groups', required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors'], args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent', allowed_clock_drift: 1 # for one second clock drift } } ]
-
ファイルを保存して GitLab を再設定してください:
sudo gitlab-ctl reconfigure
-
Kubernetes Secretとして使用するため、
saml.yaml
という名前のファイルに以下の内容を記述します:name: 'saml' label: 'Our SAML Provider' groups_attribute: 'Groups' required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors'] args: assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback' idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8' idp_sso_target_url: 'https://login.example.com/idp' issuer: 'https://gitlab.example.com' name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent' allowed_clock_drift: 1 # for one second clock drift
-
Kubernetesシークレットを作成します:
kubectl create secret generic -n <namespace> gitlab-saml --from-file=provider=saml.yaml
-
Helm の値をエクスポートします:
helm get values gitlab > gitlab_values.yaml
-
gitlab_values.yaml
を編集します:global: appConfig: omniauth: providers: - secret: gitlab-saml
-
ファイルを保存して、新しい値を適用します:
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
-
docker-compose.yml
を編集します:version: "3.6" services: gitlab: environment: GITLAB_OMNIBUS_CONFIG: | gitlab_rails['omniauth_providers'] = [ { name: 'saml', label: 'Our SAML Provider', groups_attribute: 'Groups', required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors'], args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent', allowed_clock_drift: 1 # for one second clock drift } } ]
-
ファイルを保存して GitLab を再起動します:
docker compose up -d
-
/home/git/gitlab/config/gitlab.yml
を編集します:production: &base omniauth: providers: - { name: 'saml', label: 'Our SAML Provider', groups_attribute: 'Groups', required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors'], args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent', allowed_clock_drift: 1 # for one second clock drift } }
-
ファイルを保存して GitLab を再起動します:
# For systems running systemd sudo systemctl restart gitlab.target # For systems running SysV init sudo service gitlab restart
GitLabのuid
uid
を一意の属性に設定する前に、以下の属性を設定して、SAML ユーザが変更できないようにしてください:
-
NameID
. -
Email
omniauth_auto_link_saml_user
と併用した場合。
ユーザがこれらの属性を変更できる場合、他の作成者としてサインインできます。これらの属性を変更できないようにする方法については、SAML IdP のドキュメントを参照。
既定では、uid
は、SAML 応答のname_id
として設定されます。uid
に対して一意の属性を指定するには、uid_attribute
を設定します。以下の例では、SAML 応答のuid
属性の値がuid_attribute
として設定されています。
-
/etc/gitlab/gitlab.rb
を編集します:gitlab_rails['omniauth_providers'] = [ { name: 'saml', label: 'Our SAML Provider', args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent', uid_attribute: 'uid' } } ]
-
ファイルを保存して GitLab を再設定してください:
sudo gitlab-ctl reconfigure
-
Kubernetes Secretとして使用するため、
saml.yaml
という名前のファイルに以下の内容を記述します:name: 'saml' label: 'Our SAML Provider' groups_attribute: 'Groups' required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors'] args: assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback' idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8' idp_sso_target_url: 'https://login.example.com/idp' issuer: 'https://gitlab.example.com' name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent' uid_attribute: 'uid'
-
Kubernetesシークレットを作成します:
kubectl create secret generic -n <namespace> gitlab-saml --from-file=provider=saml.yaml
-
Helm の値をエクスポートします:
helm get values gitlab > gitlab_values.yaml
-
gitlab_values.yaml
を編集します:global: appConfig: omniauth: providers: - secret: gitlab-saml
-
ファイルを保存して、新しい値を適用します:
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
-
docker-compose.yml
を編集します:version: "3.6" services: gitlab: environment: GITLAB_OMNIBUS_CONFIG: | gitlab_rails['omniauth_providers'] = [ { name: 'saml', label: 'Our SAML Provider', groups_attribute: 'Groups', required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors'], args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent', uid_attribute: 'uid' } } ]
-
ファイルを保存して GitLab を再起動します:
docker compose up -d
-
/home/git/gitlab/config/gitlab.yml
を編集します:production: &base omniauth: providers: - { name: 'saml', label: 'Our SAML Provider', groups_attribute: 'Groups', required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors'], args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent', uid_attribute: 'uid' } }
-
ファイルを保存して GitLab を再起動します:
# For systems running systemd sudo systemctl restart gitlab.target # For systems running SysV init sudo service gitlab restart
アサーションの暗号化(オプション)
GitLab では、SAML 2.0 で TLS 暗号化を使用する必要があります。時には、GitLabは追加のアサーション暗号化を必要とします。例えば
- ロードバランサーで TLS 暗号化を早期に終了する場合。
- ログに出したくない機密情報をアサーションに含めること。
ほとんどの組織では、このレイヤでの追加の暗号化は必要ありません。
IdP は、GitLab の公開証明書でアサーションを暗号化します。GitLab はその秘密鍵でEncryptedAssertion
を復号化します。
certificate
とprivate_key
の設定を使用します。SAML インテグレーションはEncryptedAssertion
をサポートしています。アサーションを暗号化するには、SAML 設定で GitLab インスタンスの秘密鍵と公開証明書を定義します。
鍵と証明書を定義したら、鍵ファイルの改行コードをすべて\n
に置き換えます。こうすることで、鍵ファイルは改行のない一つの長い文字列になります。
-
/etc/gitlab/gitlab.rb
を編集します:gitlab_rails['omniauth_providers'] = [ { name: 'saml', label: 'Our SAML Provider', groups_attribute: 'Groups', required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors'], args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent', certificate: '-----BEGIN CERTIFICATE-----\n<redacted>\n-----END CERTIFICATE-----', private_key: '-----BEGIN PRIVATE KEY-----\n<redacted>\n-----END PRIVATE KEY-----' } } ]
-
ファイルを保存して GitLab を再設定してください:
sudo gitlab-ctl reconfigure
-
Kubernetes Secretとして使用するため、
saml.yaml
という名前のファイルに以下の内容を記述します:name: 'saml' label: 'Our SAML Provider' groups_attribute: 'Groups' required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors'] args: assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback' idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8' idp_sso_target_url: 'https://login.example.com/idp' issuer: 'https://gitlab.example.com' name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent' certificate: '-----BEGIN CERTIFICATE-----\n<redacted>\n-----END CERTIFICATE-----' private_key: '-----BEGIN PRIVATE KEY-----\n<redacted>\n-----END PRIVATE KEY-----'
-
Kubernetesシークレットを作成します:
kubectl create secret generic -n <namespace> gitlab-saml --from-file=provider=saml.yaml
-
Helm の値をエクスポートします:
helm get values gitlab > gitlab_values.yaml
-
gitlab_values.yaml
を編集します:global: appConfig: omniauth: providers: - secret: gitlab-saml
-
ファイルを保存して、新しい値を適用します:
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
-
docker-compose.yml
を編集します:version: "3.6" services: gitlab: environment: GITLAB_OMNIBUS_CONFIG: | gitlab_rails['omniauth_providers'] = [ { name: 'saml', label: 'Our SAML Provider', groups_attribute: 'Groups', required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors'], args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent', certificate: '-----BEGIN CERTIFICATE-----\n<redacted>\n-----END CERTIFICATE-----', private_key: '-----BEGIN PRIVATE KEY-----\n<redacted>\n-----END PRIVATE KEY-----' } } ]
-
ファイルを保存して GitLab を再起動します:
docker compose up -d
-
/home/git/gitlab/config/gitlab.yml
を編集します:production: &base omniauth: providers: - { name: 'saml', label: 'Our SAML Provider', groups_attribute: 'Groups', required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors'], args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent', certificate: '-----BEGIN CERTIFICATE-----\n<redacted>\n-----END CERTIFICATE-----', private_key: '-----BEGIN PRIVATE KEY-----\n<redacted>\n-----END PRIVATE KEY-----' } }
-
ファイルを保存して GitLab を再起動します:
# For systems running systemd sudo systemctl restart gitlab.target # For systems running SysV init sudo service gitlab restart
SAML 認証リクエストに署名する (オプション)
GitLab が SAML 認証リクエストに署名するように設定することができます。GitLab SAML リクエストは SAML リダイレクトバインディングを使うので、この設定はオプションです。
署名を実装するには
- GitLab インスタンスで SAML 用の秘密鍵と公開証明書のペアを作成します。
-
設定の
security
セクションで署名設定を行います。例えばLinux package (Omnibus)-
/etc/gitlab/gitlab.rb
を編集します:gitlab_rails['omniauth_providers'] = [ { name: 'saml', label: 'Our SAML Provider', args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent', certificate: '-----BEGIN CERTIFICATE-----\n<redacted>\n-----END CERTIFICATE-----', private_key: '-----BEGIN PRIVATE KEY-----\n<redacted>\n-----END PRIVATE KEY-----', security: { authn_requests_signed: true, # enable signature on AuthNRequest want_assertions_signed: true, # enable the requirement of signed assertion metadata_signed: false, # enable signature on Metadata signature_method: 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256', digest_method: 'http://www.w3.org/2001/04/xmlenc#sha256', } } } ]
-
ファイルを保存して GitLab を再設定してください:
sudo gitlab-ctl reconfigure
Helm chart (Kubernetes)-
Kubernetes Secretとして使用するため、
saml.yaml
という名前のファイルに以下の内容を記述します:name: 'saml' label: 'Our SAML Provider' args: assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback' idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8' idp_sso_target_url: 'https://login.example.com/idp' issuer: 'https://gitlab.example.com' name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent' certificate: '-----BEGIN CERTIFICATE-----\n<redacted>\n-----END CERTIFICATE-----' private_key: '-----BEGIN PRIVATE KEY-----\n<redacted>\n-----END PRIVATE KEY-----' security: authn_requests_signed: true # enable signature on AuthNRequest want_assertions_signed: true # enable the requirement of signed assertion metadata_signed: false # enable signature on Metadata signature_method: 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256' digest_method: 'http://www.w3.org/2001/04/xmlenc#sha256'
-
Kubernetesシークレットを作成します:
kubectl create secret generic -n <namespace> gitlab-saml --from-file=provider=saml.yaml
-
Helm の値をエクスポートします:
helm get values gitlab > gitlab_values.yaml
-
gitlab_values.yaml
を編集します:global: appConfig: omniauth: providers: - secret: gitlab-saml
-
ファイルを保存して、新しい値を適用します:
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
Docker-
docker-compose.yml
を編集します:version: "3.6" services: gitlab: environment: GITLAB_OMNIBUS_CONFIG: | gitlab_rails['omniauth_providers'] = [ { name: 'saml', label: 'Our SAML Provider', args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent', certificate: '-----BEGIN CERTIFICATE-----\n<redacted>\n-----END CERTIFICATE-----', private_key: '-----BEGIN PRIVATE KEY-----\n<redacted>\n-----END PRIVATE KEY-----', security: { authn_requests_signed: true, # enable signature on AuthNRequest want_assertions_signed: true, # enable the requirement of signed assertion metadata_signed: false, # enable signature on Metadata signature_method: 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256', digest_method: 'http://www.w3.org/2001/04/xmlenc#sha256', } } } ]
-
ファイルを保存して GitLab を再起動します:
docker compose up -d
Self-compiled (source)-
/home/git/gitlab/config/gitlab.yml
を編集します:production: &base omniauth: providers: - { name: 'saml', label: 'Our SAML Provider', args: { assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', idp_sso_target_url: 'https://login.example.com/idp', issuer: 'https://gitlab.example.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent', certificate: '-----BEGIN CERTIFICATE-----\n<redacted>\n-----END CERTIFICATE-----', private_key: '-----BEGIN PRIVATE KEY-----\n<redacted>\n-----END PRIVATE KEY-----', security: { authn_requests_signed: true, # enable signature on AuthNRequest want_assertions_signed: true, # enable the requirement of signed assertion metadata_signed: false, # enable signature on Metadata signature_method: 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256', digest_method: 'http://www.w3.org/2001/04/xmlenc#sha256', } } }
-
ファイルを保存して GitLab を再起動します:
# For systems running systemd sudo systemctl restart gitlab.target # For systems running SysV init sudo service gitlab restart
-
GitLab を再起動します:
- 提供された秘密鍵でリクエストに署名します。
- 受信したリクエストの署名を検証するために、IdP のメタデータに設定された公開 x500 証明書を含めます。
このオプションの詳細については、Ruby SAML gem のドキュメントを参照してください。
Ruby SAML gem は、OmniAuth SAML gemが SAML 認証のクライアント側を実装する際に使用します。
SAML で作成されたユーザーのパスワード生成
GitLab はSAML を通じて作成されたユーザーのパスワードを生成し、設定します。
SSOやSAMLで認証されたユーザーは、HTTPS上でのGitオペレーションにパスワードを使用してはいけません。これらのユーザーは代わりに
- 個人アクセストークンを設定します。
- OAuthクレデンシャルヘルパーを使用します。
既存のユーザーの SAML ID をリンクします。
管理者は、SAMLユーザーを既存のGitLabユーザーと自動的にリンクするようにGitLabを設定することができます。詳しくは、GitLabでSAMLサポートを設定するをご覧ください。
ユーザーは手動でSAMLアイデンティティを既存のGitLabアカウントにリンクさせることができます。詳しくは、既存のユーザーのOmniAuthを有効にするをご覧ください。
セルフマネージドインスタンスでのグループ SAML SSO の設定
自己管理インスタンスで複数の SAML IdP を介したアクセスを許可する必要がある場合は、グループ SAML SSO を使用します。
グループ SAML SSO を設定するには、以下の手順に従います:
- GitLab がHTTPS で設定されていることを確認します。
-
/etc/gitlab/gitlab.rb
を編集し、OmniAuth とgroup_saml
プロバイダを有効にします:gitlab_rails['omniauth_enabled'] = true gitlab_rails['omniauth_providers'] = [{ name: 'group_saml' }]
-
ファイルを保存して GitLab を再設定してください:
sudo gitlab-ctl reconfigure
- GitLab がHTTPS で設定されていることを確認します。
-
Kubernetes Secretとして使用するため、
group_saml.yaml
という名前のファイルに以下の内容を記述します:name: 'group_saml'
-
Kubernetesシークレットを作成します:
kubectl create secret generic -n <namespace> gitlab-group-saml --from-file=provider=group_saml.yaml
-
Helm の値をエクスポートします:
helm get values gitlab > gitlab_values.yaml
-
gitlab_values.yaml
を編集し、OmniAuth とgroup_saml
プロバイダを有効にします:global: appConfig: omniauth: enabled: true providers: - secret: gitlab-group-saml
-
ファイルを保存して、新しい値を適用します:
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
- GitLab がHTTPS で設定されていることを確認します。
-
docker-compose.yml
を編集し、OmniAuth とgroup_saml
プロバイダを有効にします:version: "3.6" services: gitlab: environment: GITLAB_OMNIBUS_CONFIG: | gitlab_rails['omniauth_enabled'] = true gitlab_rails['omniauth_providers'] = [{ name: 'group_saml' }]
-
ファイルを保存して GitLab を再起動します:
docker compose up -d
- GitLab がHTTPS で設定されていることを確認します。
-
/home/git/gitlab/config/gitlab.yml
を編集し、OmniAuth とgroup_saml
プロバイダを有効にします:production: &base omniauth: enabled: true providers: - { name: 'group_saml' }
-
ファイルを保存して GitLab を再起動します:
# For systems running systemd sudo systemctl restart gitlab.target # For systems running SysV init sudo service gitlab restart
マルチテナント・ソリューションとして、自己管理インスタンス上のグループ SAML は、推奨されるインスタンス全体の SAML に比べて制限されます。インスタンスワイドSAMLを利用してください:
IdP 上の SAML アプリの追加設定
IdP で SAML アプリを設定する場合、IdP で以下のような追加設定が必要になることがあります:
項目 | 値 | 備考 |
---|---|---|
SAMLプロファイル | WebブラウザSSOプロファイル | GitLabはSAMLを使ってブラウザからユーザーにサインインします。IdPへの直接のリクエストは行われません。 |
SAML リクエストバインディング | HTTPリダイレクト | GitLab (SP) は、base64 エンコードされたSAMLRequest HTTP パラメータを使ってユーザーを IdP にリダイレクトします。 |
SAML レスポンスのバインディング | HTTP POST | IdP から SAML トークンを送信する方法を指定します。ユーザーのブラウザが GitLab に送り返すSAMLResponse を含みます。 |
SAML レスポンスの署名 | 必須 | いたずら防止 |
レスポンスのX.509証明書 | 必須 | レスポンスに署名し、提供されたフィンガープリントと照合します。 |
フィンガープリントのアルゴリズム | SHA-1 | GitLab は証明書の SHA-1 ハッシュを使って SAML レスポンスに署名します。 |
署名アルゴリズム | SHA-1/SHA-256/SHA-384/SHA-512 | 応答の署名方法を決定します。ダイジェスト方式とも呼ばれ、SAML 応答で指定できます。 |
SAML アサーションを暗号化します。 | オプション | IDプロバイダ、ユーザーのブラウザ、GitLabの間でTLSを使用します。 |
SAML アサーションに署名します。 | オプション | SAML アサーションの整合性を検証します。アクティブな場合、応答全体に署名します。 |
SAML 要求の署名の確認 | オプション | SAML 応答の署名をチェックします。 |
デフォルトの RelayState | オプション | ユーザが IdP で SAML によるサインインに成功した後に到達するベース URL のサブパスを指定します。 |
NameID 形式 | 永続的 | NameID フォーマットの詳細を参照してください。 |
追加URL | オプション | プロバイダによっては、他のフィールドに発行者、識別子、またはアサーション・コンシューマ・サービ スの URL を含めることができます。 |
設定例については、特定のプロバイダに関する注記を参照。
用語解説
用語 | 説明 |
---|---|
アイデンティティ・プロバイダ(IdP) | OktaやOneLoginなど、ユーザーIDを管理するサービス。 |
サービスプロバイダ(SP) | ユーザーを認証するために、OktaなどのSAML IdPからアサーションを消費します。GitLab を SAML 2.0 SP として設定できます。 |
アサーション | 名前やロールなど、ユーザーの身元に関する情報の一部。クレームまたは属性とも呼ばれます。 |
シングルサインオン(SSO) | 認証スキームの名前。 |
アサーション・コンシューマー・サービスURL | IdPとの認証に成功した後、ユーザーがリダイレクトされるGitLab上のコールバック。 |
発行元 | GitLabがIdPに対して自身を識別する方法。Relying party trust identifier」とも呼ばれます。 |
証明書フィンガープリント | サーバが正しい証明書で通信に署名していることを確認することで、SAML を介した通信がセキュリ ティであることを確認します。証明書サムプリントとも呼ばれます。 |
トラブルシューティング
SAML のトラブルシューティング・ガイドを参照してください。