🐱

GitLab認証を事前に行うプロキシサーバを作ってみた

2024/08/23に公開

主にオンプレミス(Self-Managed)でGitLabを運用している方向けです。

GitLab用に用意するPlantUMLサーバ(や他の機能)を、GitLabユーザのみ(ログイン中のみ)アクセス可能となるようにしたかったので、その為のプロキシサーバ(GitLab Auth Proxy)を作ってみたという内容になります。

https://github.com/playree/gitlab-auth-proxy

基本的に本記事は、PlantUMLサーバの組み込みを例として記載します。
他のサービスでも同様ですので、対象サービスに置き換えてお読みください。

経緯

GitLabにPlantUMLを組み込む手順は下記の通り提供されている。
https://docs.gitlab.com/ee/administration/integration/plantuml.html

もちろんこれでGitLabからPlantUMLが利用できるようになるのですが、PlantUML用のURLにアクセスすれば直接利用可能(GitLabユーザにかかわらず)な状態となっていたため、これを何とかできないかということで開発してみました。

概要と構成

GitLabにPlantUMLを普通に組み込んだ場合

GitLabにドキュメントの手順のみでPlantUMLを組み込むと、下記のような構成になります。

GitLabのパッケージに含まれるNginxから、PlantUML用のURL(パス)ならPlantUMLサーバに流すという単純な構成。
なので、GitLabとは関係なしに使えてしまう。

GitLab Auth Proxyを利用してPlantUMLを組み込んだ場合

GitLab Auth Proxyを利用した場合は、下記のような構成になります。

構成としては、PlantUMLサーバの前にGitLab Auth Proxyを挟むという単純なもの。
仕組み自体も単純で、ブラウザが持つGitLabのセッショントークン、またはパーソナルアクセストークンの有効性をGitLabに確認してから、PlantUMLサーバに流すという仕組みになります。

GitLabの認証方法

GitLabへ(トークン)の認証方法は、GitLabのAPI(/api/v4/version)にアクセスして、正常応答かを確認するだけなので、GitLabへログインしていればOK、ログインしていなければNGという単純なものになります。
細かい権限などの確認はしていません。

利用方法

利用方法はGithubのREADMEに記載しているので、そちらをご覧ください。

https://github.com/playree/gitlab-auth-proxy

Discussion