Gitlab の SAML Groups 機能を試してみた
概要
Gitlab の SAML Groups 機能は SAML Idp 側から送信される Groups 情報を元にログインの許可やユーザ属性の自動付与を行うことができます
今回は AzureAD を使って試してみました
環境
- Gitlab 14.3.4-ee
- AzureAD (20211126 時点)
Required Groups
Required Groups 機能はリスト内に含まれるグループ情報でなければログインできなくする機能です
gitlab.rb では以下のように設定します
gitlab_rails['omniauth_allow_single_sign_on'] = ['saml']
gitlab_rails['omniauth_block_auto_created_users'] = false
gitlab_rails['omniauth_auto_link_saml_user'] = true
gitlab_rails['omniauth_providers'] = [
{
name: "saml",
label: "AzureAdTest",
groups_attribute: 'Groups',
required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors'],
args: {
assertion_consumer_service_url: "https://your.gitlab.example.com/users/auth/saml/callback",
idp_cert_fingerprint: "xxxx",
idp_sso_target_url: "https://login.microsoftonline.com/xxxxxx/saml2",
issuer: "https://your.gitlab.example.com",
name_identifier_format: "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"
}
}
]
まず groups_attribute で AzureAD 側から送信される「属性とクレーム」のクレーム名を指定します
そして required_groups を使って必須のグループ名を指定します
ここで指定されるグループ名が AzureAD から送信されない場合はログインエラーになります
AzureAD 側のクレーム設定は以下のとおりです
例えば Admins という属性を持っている場合はログインできます
ここで注意してほしいのは例え AzureAD 側で Admins を設定していても Gitlab 側の管理者グループに所属するわけではないという点です
もし管理者グループに自動で登録したい場合は required_groups ではなく admin_groups を使います
これで再度ログインしてみるとちゃんとログインできるのが確認できます
またどのグループにも属していないのが確認できると思います
External Groups
external_groups はリスト内に記載されているグループだった場合に Gitlab の External user フラグを自動的にオンにしてくれる機能です
gitlab.rb は以下のように記載します
先程 required_groups と記載していたところを external_groups に変更します
gitlab_rails['omniauth_allow_single_sign_on'] = ['saml']
gitlab_rails['omniauth_block_auto_created_users'] = false
gitlab_rails['omniauth_auto_link_saml_user'] = true
gitlab_rails['omniauth_providers'] = [
{
name: "saml",
label: "AzureAdTest",
groups_attribute: 'Groups',
external_groups: ['Freelancers'],
args: {
assertion_consumer_service_url: "https://your.gitlab.example.com/users/auth/saml/callback",
idp_cert_fingerprint: "xxxx",
idp_sso_target_url: "https://login.microsoftonline.com/xxxxxx/saml2",
issuer: "https://your.gitlab.example.com",
name_identifier_format: "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"
}
}
]
AzureAD 側のクレームは Admins ではなく Freelancers が送信されるようにします
これでログインすると Gitlab の External user フラグが自動でオンになっているの確認できます
External user フラグがオンになっている場合はプロジェクトが作成できなかったり Public なプロジェクトしか見れなくなります
最後に
他には Administrator groups と Auditor groups があります
前者は自動で Gitlab の管理者グループに登録する機能で後者はリードオンリーユーザとして登録する機能になります
それぞれの機能は And 条件として使うことができます
なので必須のグループ名かつこのグループ名は Admin として登録するということが可能です
自動で特定の属性を付与したい場合には便利かもしれません
参考サイト