GitHub Enterprise Server の LDAP 認証について
LDAP はディレクトリ情報サービスへのアクセスと管理のための広く使われているアプリケーション プロトコルで、大企業のユーザー ディレクトリとサードパーティのソフトウェアを統合するための最も一般的なプロトコルの 1 つです。 詳しくは、Wikipedia の「Lightweight Directory Access Protocol」を参照してください。
一元化された認証に LDAP ディレクトリを使用する場合は、お使いの GitHub Enterprise Server インスタンスを使用するユーザーに対して LDAP 認証を構成できます。
Note
SAML または LDAP のどちらか一方だけを使用でき、両方は使用できません。
外部認証プロバイダーのアカウントを持たない一部のユーザーに対して認証を許可する場合は、お使いの GitHub Enterprise Server インスタンス でローカル アカウントへのフォールバック認証を許可できます。 詳しくは、「使用しているプロバイダーの外部ユーザーのためのビルトイン認証の許可」をご覧ください。
サポートされているLDAPサービス
GitHub Enterprise Server は、以下の LDAP サービスと統合できます:
- Active Directory
- FreeIPA
- Oracle Directory Server Enterprise Edition
- OpenLDAP
- Open Directory
- 389-ds
LDAPでのユーザ名についての考慮
GitHub は、外部認証プロバイダーからの値を正規化して、お使いの GitHub Enterprise Server インスタンス 上の Enterprise 内の新しい個人アカウントごとのユーザー名を決定します。詳しくは、「外部認証のユーザー名に関する考慮事項」をご覧ください。
お使いの GitHub Enterprise Server インスタンスでの LDAP の設定
LDAPを設定した後、ユーザは自分のLDAPクレデンシャルでインスタンスにサインインできるようになります。 ユーザが初めてサインインするときに、ディレクトリ内のLDAP属性を使ってプロフィール名、メールアドレス、SSHキーが設定されます。
[Management Console]経由でユーザのLDAPアクセスを設定した場合、インスタンスにユーザが初めてサインインするまで、ユーザライセンスは使われません。 ただし、サイト管理設定を使ってマニュアルでアカウントを作成した場合、ユーザライセンスはすぐに使われます。
Warning
お使いの GitHub Enterprise Server インスタンス で LDAP を構成する前に、ページングされた結果が LDAP サービスでサポートされていることを確認します。
- GitHub Enterprise Server の管理アカウントから、任意のページの右上隅にある をクリックします。
- [サイト管理者] ページにまだ表示されていない場合は、左上隅の [サイト管理者] をクリックします。
- [ サイト管理者] サイドバーで [Management Console] をクリックします。
- [設定] サイドバーで [認証] をクリックします。
- [認証] で、 [LDAP] を選択します。
- 必要に応じて、外部認証システムのアカウントを持たないユーザーがビルトイン認証でサインインできるようにするには、 [Allow built-in authentication](ビルトイン認証を許可する) を選択します。 詳しくは、「使用しているプロバイダーの外部ユーザーのためのビルトイン認証の許可」をご覧ください。
- 設定を追加してください。
LDAPの属性
以下の属性を使用して お使いの GitHub Enterprise Server インスタンスの LDAP の構成を完了します。
属性名 | 必須 | 説明 |
---|---|---|
Host | LDAP ホスト。たとえば、ldap.example.com または 10.0.0.30 。 ホスト名が内部ネットワークからしか利用できな場合は、まず、ホスト名を内部のネームサーバーを使って解決できるように お使いの GitHub Enterprise Server インスタンスの DNS を構成する必要があるかもしれません。 | |
Port | ホストの LDAP サービスが待ち受けるポート。 例:389及び636(LDAPS用)。 | |
Encryption | LDAP サーバーとの通信をセキュアにするために使われる暗号化の方法。 例:plain(暗号化なし)、SSL/LDAPS(最初からの暗号化)、StartTLS(接続後に暗号化通信にアップグレード)。 | |
Domain search user | 認証を許可するために、サインインする他のユーザを検索する LDAP ユーザ。 これは通常、サードパーティとのインテグレーションのために特に作成されるサービスアカウントです。 cn=Administrator,cn=Users,dc=Example,dc=com のような完全修飾名を使用します。 Active Directory では、ドメイン検索ユーザーに対して [DOMAIN]\[USERNAME] 構文 (WINDOWS\Administrator など) も使用できます。 | |
Domain search password | ドメイン検索ユーザのためのパスワード。 | |
Administrators group | このグループ内のユーザは、アプライアンスへサインインしたときにサイト管理者に昇格します。 LDAPの管理者グループを設定しなければ、アプライアンスに最初にサインインしたLDAPユーザが自動的にサイト管理者に昇格します。 | |
Domain base | ユーザーとグループを検索しようとする LDAP サブツリーの完全修飾された Distinguished Name (DN)。 各グループは、ユーザーが属するドメイン ベースで定義される必要があります。 制限されたユーザグループを指定したなら、それらのグループに属するユーザだけがスコープに入ります。 ドメインベースにはLDAPディレクトリツリーの最上位を指定し、制限されたユーザグループでアクセス制御することをおすすめします。 複数のドメイン ベースを構成できます。 ただし、GitHub Enterprise Server は構成された各ドメイン ベースに対してユーザーとグループ メンバーシップを順番に検索するため、複数のドメイン ベースを構成すると、実行される LDAP クエリの数が増える可能性があります。 インスタンスのパフォーマンスと安定性を確保するには、3 つ以下のドメイン ベースを構成することをお勧めします。 | |
Restricted user groups | 指定された場合、このグループ内のユーザだけがログインできます。 グループの共通名 (CN) のみを指定する必要があります。 グループが指定されていなければ、指定されたドメイン ベースのスコープ内の "すべての" ユーザーが GitHub Enterprise Server インスタンスにサインインできるようになります。 複数の制限されたユーザー グループを構成できます。 ただし、各グループは GitHub Enterprise Server が各ユーザーに対して実行するグループ メンバーシップ LDAP クエリの数を増やします。 認証タイムアウトと同期パフォーマンスの問題を回避するには、3 つ以下のグループを構成することをお勧めします。 | |
User ID | 認証を受けようとした LDAP ユーザを特定する LDAP 属性。 マッピングが確立されたら、ユーザは自分の GitHub Enterprise Server ユーザ名を変更できます。 このフィールドは、ほとんどの Active Directory インストールで sAMAccountName にする必要がありますが、他の LDAP ソリューション (OpenLDAP など) では uid にすることもできます。 既定値は uid です。 | |
Profile name | ユーザの GitHub Enterprise Server プロフィールページに表示される名前。 LDAP Syncが有効化されていなければ、ユーザは自分のプロフィール名を変更できます。 | |
Emails | ユーザの GitHub Enterprise Server アカウントのメールアドレス。 | |
SSH keys | ユーザの GitHub Enterprise Server アカウントにアタッチされた公開 SSH キー。 キーはOpenSSH形式でなければなりません。 | |
GPG keys | ユーザの GitHub Enterprise Server アカウントにアタッチされたGPGキー。 | |
Disable LDAP authentication for Git operations | 選択した場合、ユーザーが LDAP パスワードを使用して Git 操作を認証する機能が無効になります。 | |
Enable LDAP certificate verification | 選択した場合、LDAP 証明書の検証が有効になります。 | |
Synchronization | 選択した場合、LDAP 同期が有効になります。 |
Gitの操作のパスワード認証の無効化
LDAP 認証要求でサーバーが過負荷になることを防ぐために Git アクセスでの personal access token または SSH キーの使用を強制するには、Git 操作に対してパスワード認証を無効にします。
特にポーリングによる大量のリクエストと組み合わさると、レスポンスの遅いLDAPサーバーは頻繁にパフォーマンス問題や障害の原因となるので、この設定をおすすめします。
Git 操作に対してパスワード認証を無効にするには、LDAP 設定で [Git 操作のユーザー名とパスワード認証の無効化] を選びます。
このオプションを選択したときに、ユーザーがコマンド ラインを使用して Git 操作でパスワードを使用しようとすると、次のようなエラー メッセージが表示されます。Password authentication is not allowed for Git operations. You must use a personal access token.
LDAPの証明書検証の有効化
LDAP 証明書の検証を有効にすると、TLS で使う LDAP サーバー証明書を検証できます。
LDAP 証明書の検証を有効にするには、LDAP 設定で [LDAP 証明書の検証の有効化] を選びます。
このオプションが選択されると、以下のことを確実にするために証明書が検証されます:
- 証明書にAlternative Name (SAN) が少なくとも1つ含まれている場合には、SANの1つがLDAPホスト名に一致し、 そうでない場合はコモンネーム (CN) がLDAPホスト名に一致すること。
- 証明書の有効期限が切れていない。
- 証明書が信頼されている認証局 (CA) によって署名されていること。
LDAP Syncの有効化
確立した LDAP グループに対して GitHub Enterprise Server ユーザーと team メンバーシップを同期すると、LDAP サーバーのユーザーを対象としたロールベースのアクセス制御を確立できます。 詳しくは、「Team の作成」をご覧ください。
LDAP 同期では、お使いの GitHub Enterprise Server インスタンス にユーザー アカウントは作成されません。 詳しくは、「LDAP ユーザーの表示と作成」をご覧ください。
Note
メンバーが 1499 人を超えるグループで LDAP 同期を使うと、チーム メンバーシップの同期に失敗することがあります。
特に Active Directory を使っている場合は、Active Directory の MaxValRange
制限により、チームまたは [Management Console] で構成されている LDAP グループのメンバーが 1500 人を超えると、ユーザーの参照とチームの同期に失敗する可能性があります。 回避策として、メンバーが 1500 人未満の Active Directory グループを使うか、Active Directory 管理者と協力してドメイン コントローラーの MaxValRange
値を増やすことができます。 詳しくは、Microsoft Learn の「Ntdsutil.exe を使って Active Directory で LDAP ポリシーを表示および設定する」を参照してください。
MaxValRange
を変更することがご自分の Active Directory 環境にとって適切な方法かどうかを判断するのに支援が必要な場合は、Microsoft サポートにお問い合わせください。
LDAP 同期を有効にするには、LDAP 設定で [同期] を選択します。
すべてのユーザーとすべてのチームの同期間隔を選択するには、ドロップダウン メニューをクリックします。 次に、1 時間ごと、4 時間ごと、または 24 時間ごとに選択します。
LDAP から特定の属性を自動的に同期するには、[ユーザー 電子メール、SSH および GPG キーの同期] で、[電子メールの同期]、[SSH キーの同期]、[GPG キーの同期] の順にクリックします。
LDAP Sync を有効化すると、同期のジョブが指定された間隔で動作し、各ユーザアカウントに対して以下の操作を行います:
- アイデンティティプロバイダ外のユーザに対してビルトイン認証を許可し、ユーザがビルトイン認証を使っているなら、次のユーザに進みます。
- ユーザに LDAP のマッピングが存在しないなら、ユーザをディレクトリ中の LDAP エントリにマップしようとします。 ユーザが LDAP のエントリにマップできなかった場合、ユーザをサスペンドして次のユーザに進みます。
- LDAP マッピングが存在し、ディレクトリ中の対応する LDAP のエントリが欠けている場合、そのユーザをサスペンドして次のユーザに進みます。
- 対応する LDAP のエントリが無効としてマークされており、ユーザがまだサスペンドされていないなら、そのユーザをサスペンドして次のユーザに進みます。
- 対応する LDAP のエントリが無効としてマークされておらず、そのユーザーが一時停止されており、Admin Center で Reactivate suspended users が有効化されているなら、ユーザーの一時停止を解除します。
- インスタンスに 1 つ以上の制限付きユーザー グループが構成されていて、対応する LDAP エントリがこれらのグループのいずれにも含まれていない場合は、ユーザーを一時停止します。
- インスタンスに 1 つ以上の制限付きユーザー グループが構成されていて、対応する LDAP エントリがこれらのグループのいずれかに含まれ、Admin Ceter で Reactivate suspended users が有効化されているなら、ユーザーの一時停止を解除します。
- 対応する LDAP エントリが
name
属性を含んでいる場合、ユーザーのプロファイル名を更新します。 - 対応する LDAP エントリが Administrators グループ内にあるなら、そのユーザをサイト管理者に昇格させます。
- 対応する LDAP エントリが Administrators グループ内にない場合は、アカウントが一時停止されていない限り、そのユーザーを通常のアカウントに降格してください。 中断された管理者は降格されず、[サイト管理者] および [エンタープライズ所有者] ページには引き続きリストされます。
- LDAP の User フィールドがメール用に定義されているなら、ユーザのメール設定を LDAP のエントリと同期します。 最初の LDAP
mail
エントリをプライマリ メール アドレスとして設定します。 - LDAP の User フィールドが公開 SSH キー用に定義されているなら、ユーザの公開 SSH キーを LDAP のエントリと同期します。
- LDAP の User フィールドが GPG キー用に定義されているなら、ユーザの GPG キーを LDAP のエントリと同期します。
Note
LDAP エントリを無効としてマークできるのは、Active Directory を使用しており、userAccountControl
属性が存在し、ACCOUNTDISABLE
のフラグが設定されている場合のみです。 Active Directory の一部のバリエーション (AD LDS や ADAM など) では userAccountControl
属性はサポートされません。
同期ジョブは、LDAP グループにマップされなかった各 Team に対して以下の操作を行うためにも、指定された間隔で動作します。
-
Team に対応する LDAP グループが削除された場合、すべてのメンバーを Team から削除します。
-
LDAP グループから LDAP のメンバーエントリが削除された場合、対応するユーザを Team から削除します。 ユーザーが組織内のどのチームのメンバーでもなく、また組織の所有者でもなくなった場合は、そのユーザーを組織から削除します。 その結果、ユーザがリポジトリへのアクセスを失った場合、それらのリポジトリでユーザが持っていたプライベートなフォークを削除します。
Note
LDAP 同期では、organization の所有者であるユーザーは、その organization から削除されません。 別の組織の所有者が、代わりにユーザーを手動で削除する必要があります。
-
LDAP グループに LDAP のメンバーエントリが追加された場合、対応するユーザを Team に追加します。 その結果、ユーザがリポジトリへのアクセスを再度得ることになった場合、過去 90 日以内にユーザがアクセスを失ったために削除されたリポジトリのプライベートフォークがリストアされます。
LDAP 同期は、最適化構成の一部として、入れ子チームの構造を転送しません。 親子Teamの関係を作りたい場合は、入れ子チームの構造を手動で再作成し、対応するLDAPグループに同期させなければなりません。 詳細については、「Team の作成」を参照してください
Warning
LDAP Sync が有効化されると、サイト管理者と 組織のオーナーは Team をマップするグループを LDAP のディレクトリで検索できます。
これは、以下を含む組織に関する機密情報を契約者やその他の権限を持たないユーザに開示してしまう可能性があります。
- "ドメイン検索ユーザー" に特定の LDAP グループの存在が見えてしまう。
- GitHub Enterprise Server のユーザアカウントを持つ LDAP グループのメンバーが、その LDAP グループと同期する Team を作ったときに開示されてしまう。
こういった情報が開示されることを望まないなら、企業あるいは組織は構成された "ドメイン検索ユーザー" の権限を管理コンソールで制限する必要があります。 そういった制限ができない場合は、GitHub Enterprise サポート にアクセスしてください。
サポートされるLDAPグループのオブジェクトクラス
GitHub Enterprise Server は、以下の LDAP グループオブジェクトクラスをサポートします。 グループは入れ子にできます。
group
groupOfNames
groupOfUniqueNames
posixGroup
LDAPユーザの表示と作成
LDAP を使用すると、誰かが LDAP 認証情報を使用して初めて正常にサインインしたときに、インスタンスによってユーザー アカウントが作成されます。 または、ユーザー アカウントを手動でプロビジョニングすることもできます。
インスタンスにアクセスできる LDAP ユーザの完全なリストを表示し、新しいユーザをプロビジョニングできます。
http(s)://HOSTNAME/login
で お使いの GitHub Enterprise Server インスタンス にサインインします。- GitHub Enterprise Server の管理アカウントから、任意のページの右上隅にある をクリックします。
- [サイト管理者] ページにまだ表示されていない場合は、左上隅の [サイト管理者] をクリックします。
- 左側のサイドバーで、 [LDAP users](LDAP ユーザー) タブをクリックします。
- ユーザーを検索するには、ユーザー名の全体または一部を入力し、 Search をクリックします。 検索結果に該当するユーザが表示されます。 ユーザーが存在しない場合は、 Create をクリックして新しいユーザー アカウントをプロビジョニングします。
LDAPアカウントの更新
LDAP 同期が有効でない限り、LDAP アカウントの変更が自動的に GitHub Enterprise Server と同期されることはありません。
- 新しい LDAP 管理者グループを使うには、LDAP 内での変更を反映させるためにユーザを GitHub Enterprise Server 上で手動で昇格および降格させなければなりません。
- LDAP 管理グループに対して LDAP アカウントを追加または削除するには、GitHub Enterprise Server 上でアカウントを昇格または降格します。
- LDAP アカウントを削除するには、GitHub Enterprise Server アカウントを一時停止します。
手動でのLDAPアカウントの同期
http(s)://HOSTNAME/login
で お使いの GitHub Enterprise Server インスタンス にサインインします。- GitHub Enterprise Server の管理アカウントから、任意のページの右上隅にある をクリックします。
- [サイト管理者] ページにまだ表示されていない場合は、左上隅の [サイト管理者] をクリックします。
- [ユーザー、Organization、チーム、リポジトリ、gist、アプリケーションを検索する] のテキスト フィールドに、ユーザーの名前を入力します。
- テキスト フィールドの右側にある [検索] をクリックします。
- 正確に一致するアカウント名が見つからない場合は、[検索結果 – アカウント] の [あいまい一致] セクションで、管理するユーザーの名前をクリックします。
- 正確に一致するアカウント名が見つからない場合は、[検索結果 – アカウント] の [あいまい一致] セクションで、管理するユーザーの名前をクリックします。
- サイト管理者ページでユーザーについて詳しく確認し、正しいユーザーを特定したことを確認します。
- ページの右上隅にある [管理] をクリックします。
- [LDAP] の Sync now をクリックして、LDAP サーバーのデータでアカウントを手動で更新します。
API を使用して手動同期をトリガーすることもできます。
お使いの GitHub Enterprise Server インスタンスへのアクセスの取り消し
LDAP 同期が有効な場合にユーザーの LDAP 資格情報を削除すると、次の同期の実行後にそのユーザーのアカウントが一時停止されます。
LDAP 同期が有効でない場合は、LDAP 資格情報を削除した後で、GitHub Enterprise Server アカウントを手動で一時停止する必要があります。 詳しくは、「ユーザーのサスペンドとサスペンドの解除」をご覧ください。
LDAP のログ記録について
LDAP のログ イベントは、お使いの GitHub Enterprise Server インスタンス
上の systemd ジャーナル ログに表示されます。 LDAP 操作に関連するイベントは、 github-unicorn
と github-resqued
のログで確認できます。 詳しくは、「システム ログについて」をご覧ください。
GitHub Enterprise Server での LDAP の制限
GitHub Enterprise Server の LDAP 認証タイムアウト設定値は 10 秒です。 これは、ユーザー認証とグループ メンバーシップ クエリに必要なすべての LDAP クエリ (管理コンソールで管理者と制限されたユーザー グループが構成されている場合) は、GitHub Enterprise Server にログインしている LDAP ユーザーに対して 10 秒以内に正常に完了する必要があることを意味します。 現在、GitHub Enterprise Server ではこの 10 秒の LDAP 認証タイムアウトの延長はサポートされていません。これは、アプライアンスの他のサービスに悪影響を及ぼし、パフォーマンスの低下や予期しない停止につながる可能性があるためです。 認証タイムアウトを防ぐために、GitHub Enterprise Server と LDAP サーバーの間のネットワーク待ち時間を制限することをお勧めします。