📖

GitHub Enterprise Managed Users (EMU) 移行によるセッション延長の試行錯誤

に公開

経緯

組織やプロダクト開発の拡大に伴うセキュリティ統制の強化として、GitHub Enterprise Managed Users (EMU) への移行プロジェクトを進めていました。しかし、移行に際して最大の課題となったのが、「セッションが1時間で強制終了してしまう」という事象です。Microsoftサポートへの問い合わせや調査を経て、この問題の解決に至ったプロセスをまとめます。

まとめ

GitHub EMUのセッション挙動

GitHub Enterprise Managed User (EMU) の認証有効期限は、外部IDプロバイダー(Microsoft Entra ID)の Service Principal および TokenLifetimePolicy に依存します。

GUIの限界

2026年現在、Entra IDの管理画面やGitHub EnterpriseのUIからは、このトークン有効期限(AccessTokenLifetime)の詳細設定はできません。
PowerShellが必須: 管理者のPCからMicrosoft Graph PowerShell SDKを使用し、直接Microsoft Graph APIを叩いてポリシーを作成・適用する必要があります。

条件付きアクセスとの併用

Entra IDの「条件付きアクセス」で「永続的なブラウザセッション」を構成する。

対話式での設定

ポリシーの付与をスムーズにするため、初回は対話式(Interactive)での実行を推奨します。

参照した記事

構成可能なトークンの有効期限 (Microsoft ID プラットフォーム)

https://learn.microsoft.com/ja-jp/entra/identity-platform/configurable-token-lifetimes
トークンの有効期限の仕組みと、各トークン種別のデフォルト値、制限事項が記載されています。

条件付きアクセスでの認証セッション管理の構成

https://learn.microsoft.com/ja-jp/entra/identity/conditional-access/howto-conditional-access-session-lifetime
Token Lifetime Policyだけでなく、「ブラウザを閉じてもサインイン状態を維持する」ための条件付きアクセスの設定方法です

事前準備

Entra ID P1/P2ライセンス: 条件付きアクセスおよびトークン有効期限のカスタマイズに必要です。
Microsoft Entra 多要素認証 (MFA): 対象アカウントにAuthenticator等による認証を構成。
GitHub Enterprise Managed User アプリ: Entra IDのエンタープライズアプリケーションとして構成済みであること。
PowerShell環境: Microsoft Graph SDKがインストールされていること。

用語解説

Token Lifetime Policy

(以下、TLP) アクセス権を証明するトークンの有効期限を定義するポリシーです。最大 23:59:59 まで指定可能です。
公式ドキュメント:Microsoft ID プラットフォームの構成可能なトークンの有効期限
https://learn.microsoft.com/ja-jp/entra/identity-platform/configurable-token-lifetimes

Service Principal

(以下、SP) Entra ID上の「GitHub Enterprise Managed User」アプリケーションの実体(インスタンス)です。このSPに対してTLPを割り当てます。

必要な権限の整理

Microsoft Graph を操作するためには、以下の権限(スコープ)が必要です。
Policy.ReadWrite.ApplicationConfiguration(ポリシーの作成・変更)
Application.ReadWrite.All(サービスプリンシパルへのポリシー適用)
Policy.Read.All(既存ポリシーの確認)
参照:Microsoft Learn - New-MgPolicyTokenLifetimePolicy
https://learn.microsoft.com/en-us/powershell/module/microsoft.graph.identity.signins/new-mgpolicytokenlifetimepolicy?view=graph-powershell-1.0

構築手順:TLPの作成から適用まで

1. 実行環境の用意 (PowerShellのインストール)

macOSの場合は、Homebrewを使用してPowerShellをインストールします。Windowsの場合はおそらく不要です。

2. Microsoft Graph PowerShell SDKのインストール

PowerShell上で以下のコマンドを実行します。
参照:Microsoft Graph SDK インストールガイド

3. Microsoft Graph へのサインイン

必要なスコープを指定して接続します。ブラウザが立ち上がるので、全体管理者のアカウントで認証してください。

PS>Connect-MgGraph -Scopes "Policy.Read.All,Policy.ReadWrite.ApplicationConfiguration,Application.ReadWrite.All"
〜ブラウザによる認証のセッションが発生〜
Welcome to Microsoft Graph!

4. トークン有効期限ポリシーの作成

トークンの有効期間ポリシーを構成する (プレビュー)
トークンの有効期間を設定する - Microsoft identity platform
を参考に作成します。

作成後は以下の実行で情報が取得できます。


PS>Get-MgPolicyTokenLifetimePolicy | Select-Object Id, DisplayName 

5. Service Principal IDの取得

GitHub EMU アプリケーションの ObjectId を特定します。
コマンド操作でも、Entra IDの管理画面でもサービス名を入力すると表示されます。

Microsoft Learn Get-MgServicePrincipal (Microsoft.Graph.Applications)
https://learn.microsoft.com/en-us/powershell/module/microsoft.graph.applications/get-mgserviceprincipal?view=graph-powershell-1.0

6. ポリシーをService Principalに割り当てる

取得したポリシーIDを、サービスプリンシパルに紐づけます。

PS>New-MgApplicationTokenLifetimePolicyByRef
をPowershellに入力し、対話式でID情報を入力します。

New-MgApplicationTokenLifetimePolicyByRef (Microsoft.Graph.Applications)
https://learn.microsoft.com/en-us/powershell/module/microsoft.graph.applications/new-mgapplicationtokenlifetimepolicybyref?view=graph-powershell-1.0

7. 設定の確認とサインアウト

正しく割り当てられているか確認し、終了します。
参考:Get-MgServicePrincipalTokenLifetimePolicy
Get-MgServicePrincipalTokenLifetimePolicy (Microsoft.Graph.Applications)

Get-MgServicePrincipalTokenLifetimePolicyを入力し、ServicePrincipalIdを入力すると実行結果が得られます。

PS>Get-MgServicePrincipalTokenLifetimePolicy
PS>cmdlet Get-MgServicePrincipalTokenLifetimePolicy at command pipeline position 1
PS>Supply values for the following parameters:
PS>ServicePrincipalId:

8.その他

ポリシーを延長したい
3時間に設定していたが6時間に延長したいなどの場合、新しくTLPを作成し、既存のTLPを削除し、新規のTLPを作成し、SPにTLPを適用する必要があります。
試行錯誤の結果、削除を直接指定するInvoke-MgGraphRequestで直接Microsoft GraphのURIを指定して削除しました。
Invoke-MgGraphRequest
Invoke-MgGraphRequest (Microsoft.Graph.Authentication)
https://learn.microsoft.com/en-us/powershell/module/microsoft.graph.authentication/invoke-mggraphrequest?view=graph-powershell-1.0

おわりに

GUIでは設定が完結せず、当初は操作に手間取りましたが、CLIからの制御により、頻繁なログインから解放されました。ただし、セッション延長は利便性向上につながる反面、トークン漏洩時のリスク拡大というトレードオフを伴います。組織でセキュリティの方針と利便性のバランスをよく加味していただき、本記事が、同様の問題に直面している方の一助となれば幸いです。

Discussion