tail -f /dev/null

If you haven't had any obstacles lately, you're not challenging. be the worst.

GitLab で Okta SAML 認証させる

Precondition

  • GitLab の version は 13.12 とする
  • GitLab endpoint は https://gitlab.***.com とする

Okta application の作成

SAML Settings を次の内容で設定する.

Work Procedure

Okta menu > Admin > Applications > GitLab > Sign On > View Setup Instructions にて Okta の各種 parameter をメモする.

  • Single Sign-On URL
  • Identity Provider Issuer
  • X.509 Certificate (file download も可)
  • IDP metadata > md:NameIDFormat

X.509 Certificate の cert file から、証明書の Fingerprint を確認する.

$ openssl x509 -in okta.cert -noout -sha256 -fingerprint 

GitLab server の /etc/gitlab/gitlab.rb へ以下の値を追記する.

gitlab_rails['omniauth_allow_single_sign_on'] = ['saml']
gitlab_rails['omniauth_block_auto_created_users'] = true # 新規に作成されるユーザーをブロックする
gitlab_rails['omniauth_auto_link_saml_user'] = true
gitlab_rails['omniauth_providers'] = [
  {
    name: 'saml',
    args: {
             assertion_consumer_service_url: 'https://gitlab.***.com/users/auth/saml/callback',
             idp_cert_fingerprint: '**:**...',
             idp_sso_target_url: 'https://**.okta.com/app/**/.../sso/saml',
             issuer: 'https://gitlab.***.com',
             name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:transient',
             attribute_statements: { email: ['EmailAddress'] }
           },
    label: 'Okta' # optional label for SAML login button, defaults to "Saml"
  }
]

上記設定の変更を反映する。

$ gitlab-ctl reconfigure

Okta SAML 認証経由でログイン出来ることを確認する.

GitLab 管理画面にて Admin > Settings > General で、password 認証を無効化する (web interface のみ影響).

f:id:hrt0kmt:20220109093534p:plain
ログイン画面を Okta Sign in ボタンのみにする

Okta / GitLab parameter の詳細

Okta, GitLab で共通の parameter があるが、名称が異なったりして分かり辛い.

Okta param GitLab param Value Desc
Single Sign on URL assertion_consumer_service_url https://gitlab.***.com/users/auth/saml/callback SP (Service Provider, ここでは GitLab) の ACS (Assertion Consumer Service)
Identity Provider Single Sign-On URL idp_sso_target_url https://.okta.com/app//***/sso/saml
Audience URI (SP Entity ID),Identity Provider Issuer issuer https://gitlab.***.com GitLab が ID プロバイダに対して自身を識別する方法。Relying party trust identifier とも呼ばれる。
IDP metadata > md:NameIDFormat name_identifier_format urn:oasis:names:tc:SAML:2.0:nameid-format:transient ユーザー識別子の format
Attribute Statements attribute_statements Okta EmailAddress: user.email, GitLab attribute_statements: { email: ['EmailAddress'] }

References