GitHub Enterprise認証をJupyterHubに導入する方法：初心者向けガイド

# はじめに
## 本記事の目的
- 本記事の目的は、JupyterHubにGitHub Enterprise認証を導入する具体的な手順を、初心者にもわかりやすく解説することです
## 対象読者
- JupyterHubの認証機能をどのように設定すれば良いか分からない方
- GitHub Enterpriseを使用している企業ユーザー

# JupyterHubとは？
## JupyterHubの基本概要
- JupyterHubは、シングルユーザーのJupyter Notebook(JupyterLab)を手軽に複数人で共有できる環境を構築できます


# GitHub認証を導入するメリット
## 認証方式
- JupyterHubの認証方式には、ローカル認証やLDAP認証、OAuthなど様々な選択肢があります

## GitHub Enterprise認証の利便性
- 既存のGitHub　Enterpriseアカウントを利用して手軽にログインできる利便性が得られます。特に、既にGitHub Enterpriseを活用している開発者やチームにとって、認証の一元管理が可能になり、アカウント管理の手間が大幅に軽減されます

# 必要な準備
- 前提条件
  - Ubuntu 24.04 LTS
  - GitHub Enterpriseアカウントの作成
  - JupyterHub 5.1.0のインストール(参考：https://github.com/jupyterhub/jupyterhub)

# oauthenticatorのインストール
JupyterHubにGitHub認証を導入するには、まずoauthenticatorライブラリをインストールする必要があります。oauthenticatorは、OAuthプロトコルを使用した認証をサポートするプラグインで、GitHubをはじめ、GoogleやGitLabなど多くのサービスと連携可能です。
以下のコマンドで、oauthenticatorをインストールします。
```
python3 -m pip install oauthenticator
```


# GitHub Enterprise OAuthアプリケーションの設定
## GitHub EnterpriseでのOAuthアプリの登録手順
JupyterHubでGitHub Enterprise認証を利用するためには、まずGitHub Enterprise上でOAuthアプリケーションを登録する必要があります。
GitHub Enterpriseの「Settings」から左側にあるメニューの下の方にある「Developer settings」へ進み、「OAuth Apps」を選択して新しいアプリを作成します。ここで、アプリケーション名やホームページURL、コールバックURLを入力し、アプリケーションを登録します。

- OAuth Appsを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809795/e60a4174-71b4-12f4-778a-132202d3af37.png)



- URLは各自の環境に合わせたURLを設定してください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809795/ca6b0420-0f58-9d51-22c0-91114dadfa50.png)



## クライアントIDとシークレットの取得
アプリケーションを登録すると、自動的にクライアントIDが生成されます。さらに、「Generate a new client secret」ボタンをクリックしてクライアントシークレットを生成し、表示されるシークレットを控えておきます。このクライアントIDとシークレットは、JupyterHubの設定に必要な情報であり、GitHub認証を正しく動作させるために必須です。これらの情報は機密情報となるため、慎重に管理し、外部に漏れないように注意してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809795/e2929602-765f-7f0e-eccd-2d4edf5f509f.png)


# JupyterHubでのGitHub認証設定
JupyterHubの設定ファイルを生成するために、以下のコマンドを実行します。
```
jupyterhub --generate-config
```
jupyterhub_config.pyという名前の設定ファイルが作成されます。このファイルに、GitHub Enterprise認証を有効にするための設定を追加していきます。
jupyterhub_config.pyファイルをvi等のテキストエディタで開き、GitHub Enterprise OAuth認証に必要な設定を以下のように行います。
```
c.JupyterHub.authenticator_class = 'oauthenticator.github.LocalGitHubOAuthenticator'

# GitHub EnterpriseでのOAuthアプリ登録で取得したクライアントIDとシークレットを設定
c.LocalGitHubOAuthenticator.client_id = 'client_idを入力'
c.LocalGitHubOAuthenticator.client_secret = 'client_secretを入力'

# GitHub EnterpriseのURLを設定
c.LocalGitHubOAuthenticator.github_url = 'https://github.enterprise.com'

# 新しいユーザーのシステムアカウントを自動作成するかどうかを設定します。
c.LocalAuthenticator.create_system_users = True

# すべてのGitHub Enterpriseユーザーのログインを許可するかどうかを設定します。
c.LocalGitHubOAuthenticator.allow_all = True
```

## ログイン可能なユーザーを特定Organizationsに限定する方法
先ほどの設定の場合、GitHub Enterpriseユーザーは全員ログイン可能となりますが、もし特定のOrganizationsに所属しているユーザーのみを許可したい場合は以下のような設定を行います。
```
# すべてのGitHub Enterpriseユーザーのログインを許可するかどうかを設定します。
c.LocalGitHubOAuthenticator.allow_all = False

# 指定したGitHub EnterpriseのOrganizationsに所属するユーザーだけがログインできるように設定します。
c.LocalGitHubOAuthenticator.allowed_organizations = ['Organizations名']
```


# 動作確認
設定ファイルを保存後、JupyterHubを起動すれば、GitHub認証が有効になったことが確認できます。
```
jupyterhub
```

もし、jupyterhub_config.pyが違うディレクトリにある場合は、ファイルを指定して起動します。
```
jupyterhub --config /path/jupyterhub_config.py
```

- ブラウザでアクセスして、Username/Passwordを入力してログイン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809795/70f3535a-6d01-9a0c-31f7-73c84e0d2920.png)

# まとめ
この記事では、JupyterHubにGitHub Enterprise認証を導入する手順を初心者向けに解説しました。GitHub Enterpriseを利用することで、企業内でのユーザー管理が簡単になり、セキュリティも強化されます。設定手順を一つずつ確認しながら進めることで、誰でも簡単にJupyterHubの認証機能を導入できるようになります。これにより、開発環境がより効率的かつ安全になり、チーム全体の生産性が向上するでしょう。ぜひ、今回の手順をベースにして、自社の環境に最適な設定を実施してみてください。


# 参考リンク

https://github.com/jupyterhub/jupyterhub

https://oauthenticator.readthedocs.io/en/latest/index.html