第4回目は「GitLab」を紹介する。

Gitリポジトリの管理システムとしてはかなり有名なものではないだろうか。
GitHubなんかと機能的に近い部分は多いが、特徴的な点としてSaaSとしての利用だけでなくセルフホストも可能である。

有名なシステムだけに多くの情報が出回っているが、認証連携、特にSamlを用いる場合に関しては案外情報が少なかったので試しにPassLogicと連携させてみた。

参考資料はこちらの記事公式のDocumentだ。

まず、GitLabを動かすのはDockerを用いると手軽だ。Docker Hubに公式imageがある上に、使い方も丁寧に書かれている。
最低限の設定で動かすならwebUI用にportを開けて、環境変数のGITLAB_OMNIBUS_CONFIGで’external_url’を指定すると、とりあえずブラウザから触れるようになる。portを変更する場合もexternal_urlにはportを記載しなくていいようだ。

docker run -d  -p 443:443 -p 80:80\
--env GITLAB_OMNIBUS_CONFIG="external_url 'http://{hostのip, domain等}'" gitlab/gitlab-ce

起動に多少時間がかかる。しばらくするとexternal_urlで指定したURLにアクセスすると、Password設定画面が出る。デフォルトの管理ユーザ”root”とここで定めたPasswordで管理画面にログインできる。

早速、Saml用の設定項目を探したいところだがWebUIからは設定できないようだ。Office 365もそうだったし、そういったシステムも多いのだろうか。
Samlで認証するにはServerにある設定ファイル(/etc/gitlab/gitlab.rb)に手を加える必要がある。

Docker containerで動かす場合は、起動時にGITLAB_OMNIBUS_CONFIGで渡した内容で設定ファイルの代替とできるようなので、こちらの手段で試してみた。Container起動後に中に入る必要がないからたぶんこの方が楽だと思う。
Samlで認証させるうえで必要な設定は

gitlab_rails['omniauth_enabled'] = true
gitlab_rails['omniauth_allow_single_sign_on'] = ['saml']
gitlab_rails['omniauth_block_auto_created_users'] = false
gitlab_rails['omniauth_providers'] = [{
name: 'saml',
args: {
assertion_consumer_service_url: 'http(s)://{hostのip, domain等}/users/auth/saml/callback',
idp_cert_fingerprint: '{IdPの公開鍵のfingerprint}',
idp_sso_target_url: 'https://{PassLogicのFQDN}/ui/sso-saml.php?target={PassLogicで指定したSP名}',
issuer: 'http(s)://{hostのip, domain等}',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
},
label: 'PassLogic'
}]
上から、外部での認証の許可、
SSOの形式の指定、
ユーザ自動生成の許可、
Saml SPとしての設定となる。
IdPの証明書をfingerprintで指定する必要があるのが注意点だろうか。実運用には向かないだろうが、GitLabをSSL化していなくてもSaml認証自体は動くようだ。

少々長いコマンドになるが、上記の全項目をセミコロン区切りで環境変数のGITLAB_OMNIBUS_CONFIGに指定して”docker run”で動かすと、Saml連携に対応したGitLabが立ち上がる。

それに対して、PassLogic側での設定は

SAMLタイプ
IdP initiated SSO
NameID フォーマット
urn:oasis:names:tc:SAML:2.0:nameid-format:persistent
ドメイン
{gitlab hostのip, domain}
Recipient
http(s)://{gitlab hostのip, domain等}/users/auth/saml/callback
Destination
http(s)://{gitlab hostのip, domain等}/users/auth/saml/callback
Issuer
http(s)://{gitlab hostのip, domain等}
Attribute mapping1
email : メールアドレス

指定がないものは空欄やデフォルトのままで問題ない。
GitLab側でユーザが自動生成される際にemailの情報が元になるので、ログインさせたいユーザはメールアドレスの設定が必要になる。
自動生成されるユーザはPassLogicのユーザIDの影響は受けずに、メールアドレスからユーザ名が作られるようだ。…

ログインして続きを読む