Skip to main content

このバージョンの GitHub Enterprise サーバーはこの日付をもって終了となりました: 2024-12-19. 重大なセキュリティの問題に対してであっても、パッチリリースは作成されません。 パフォーマンスの向上、セキュリティの向上、新機能の向上を図るために、最新バージョンの GitHub Enterprise サーバーにアップグレードしてください。 アップグレードに関するヘルプについては、GitHub Enterprise サポートにお問い合わせください

SAML 構成リファレンス

お使いの GitHub Enterprise Server インスタンス の SAML メタデータを確認できます。また、使用できる SAML 属性と応答の要件の詳細について確認することができます。

SAML 構成について

GitHub に対する認証に SAML シングル サインオン (SSO) を使うには、外部 SAML ID プロバイダー (IdP) と お使いの GitHub Enterprise Server インスタンス の両方を構成する必要があります。 SAML 構成では、GitHub は SAML サービス プロバイダー (SP) として機能します。 Enterprise の認証の詳細については、「ID とアクセス管理について」を参照してください。

GitHub は、SAML 2.0 仕様に準拠した統合を提供します。 詳細については、OASIS の Web サイトの SAML Wiki を参照してください。

GitHub 用に SAML SSO を構成する場合は、SAML IdP から一意の値を入力する必要があります。また、IdP 上では GitHub から一意の値を入力する必要もあります。

SAMLのメタデータ

お使いの GitHub Enterprise Server インスタンスの SP メタデータは、http(s)://HOSTNAME/saml/metadata で入手できます。HOSTNAME は、インスタンスのホスト名です。 GitHub Enterprise Server は、urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST バインディングを使います。

その他の名前説明
SP エンティティ IDSP URL、対象ユーザー制限お使いの GitHub Enterprise Server インスタンス の最上位レベルの URLhttp(s)://HOSTNAME
SP アサーションコンシューマーサービス (ACS) URL応答、受信者、または宛先 URLIdP が SAML レスポンスを送信する URLhttp(s)://HOSTNAME/saml/consume
SP シングルサインオン (SSO) URL
IdP が SSO を開始する URLhttp(s)://HOSTNAME/sso

SAMLの属性

GitHub では、次の SAML 属性を使用できます。administrator 属性を除き、[Management Console] で属性名を変更できます。 詳細については、「Web UI からインスタンスを管理する」を参照してください。

名前必須説明
NameID永続ユーザ識別子。 任意の名前識別子の形式を使用できます。 代替アサーションのいずれかが指定されていない限り、GitHub によって NameID 要素が正規化され、ユーザー名として使われます。 詳しくは、「外部認証のユーザー名に関する考慮事項」をご覧ください。

> [!NOTE] 人間が判読できる永続的識別子を使うことが重要です。 urn:oasis:names:tc:SAML:2.0:nameid-format:transient のような一時的な識別子の形式を使うと、サインインするたびにアカウントが再リンクされます。これは認可管理に悪影響を与える可能性があります。
SessionNotOnOrAfter関連付けられたセッションが GitHub によって無効化される日付。 無効になった後、お使いの GitHub Enterprise Server インスタンスにアクセスするには、ユーザーはもう一度認証を行う必要があります。 詳細については、「セッションの継続時間とタイムアウト」を参照してください。
administrator値が true の場合、GitHub によって、ユーザーは自動的にサイト管理者に昇格されます。 この属性を true 以外に設定すると、値が空白でない限り、降格になります。 この属性を省略するか、値を空白にすると、ユーザーのロールは変更されません。
usernameお使いの GitHub Enterprise Server インスタンス のユーザー名。
full_nameユーザーのプロファイル ページに表示するユーザーのフル ネーム。
emailsユーザーのメール アドレス。複数のアドレスを指定できます。GitHub Enterprise Server と GitHub Enterprise Cloud 間でライセンス使用状況を同期する場合、複数の製品にまたがって一意のユーザーを識別するために、GitHub Connect は emails を使います。 詳しくは、「GitHub Enterprise ServerとGitHub Enterprise Cloudとのライセンス利用状況の同期」をご覧ください。
public_keysユーザーのパブリック SSH キー。 複数のキーを指定できます。
gpg_keysユーザーの GPG キー。 複数のキーを指定できます。

属性に複数の値を指定するには、複数の <saml2:AttributeValue> 要素を使用します。

<saml2:Attribute FriendlyName="public_keys" Name="urn:oid:1.2.840.113549.1.1.1" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
    <saml2:AttributeValue>ssh-rsa LONG KEY</saml2:AttributeValue>
    <saml2:AttributeValue>ssh-rsa LONG KEY 2</saml2:AttributeValue>
</saml2:Attribute>

SAML 応答の要件

GitHub では、IdP からの応答メッセージが次の要件を満たしている必要があります。

  • IdP では、ルート応答ドキュメントで <Destination> 要素を指定し、ルート応答ドキュメントが署名されている場合にのみ ACS URL と一致する必要があります。 IdP によってアサーションに署名されている場合、GitHub ではアサーションが無視されます。

  • IdP では常に、<AudienceRestriction> 要素の一部として <Audience> 要素を指定する必要があります。 値は GitHub の EntityId と一致している必要があります。この値は、http(s)://HOSTNAME などの GitHub にアクセスする URL です。

  • IdP は、応答でデジタル署名付きの 1 つのアサーションを提供する必要があります。 これを行うには、<Assertion> 要素に署名するか、<Response> 要素に署名します。

  • IdP では、<Subject> 要素の一部として <NameID> 要素を指定する必要があります。 任意の永続的な名前識別子の形式を使用できます。

  • IdP には Recipient 属性を含める必要があり、これは ACS URL に設定される必要があります。 次の例は、属性を示しています。

    <samlp:Response ...>
      <saml:Assertion ...>
        <saml:Subject>
          <saml:NameID ...>...</saml:NameID>
          <saml:SubjectConfirmation ...>
            <saml:SubjectConfirmationData Recipient="https://HOSTNAME/saml/consume" .../>
          </saml:SubjectConfirmation>
        </saml:Subject>
        <saml:AttributeStatement>
          <saml:Attribute FriendlyName="USERNAME-ATTRIBUTE" ...>
            <saml:AttributeValue>monalisa</saml:AttributeValue>
          </saml:Attribute>
        </saml:AttributeStatement>
      </saml:Assertion>
    </samlp:Response>
    

AuthnRequests の SAML 署名証明書

最初に GitHub Enterprise Server を設定してインスタンスを起動すると、IdP の SAML 証明書とは別に、自己署名 SAML 署名証明書が生成されます。 この証明書は、IdP に送信される SAML AuthnRequests に署名するために使われ、10 年間有効です。 これは /data/user/common/saml-sp.p12 に格納されています。詳細については、http(s)://HOSTNAME/saml/metadata の base64 エンコード形式を参照してください。

IdP が SAML 署名証明書を検証する場合、または SAML 暗号化アサーションが有効な場合、証明書の有効期限が切れると、ユーザーは認証の issue に直面する可能性があります。 有効期限をチェックするには、GitHub Enterprise Server 管理者が SSH 経由でサーバーに接続し、以下のコマンドを実行します。 「SSH 経由での管理シェルへの接続」を参照してください。

sudo openssl pkcs12 -in /data/user/common/saml-sp.p12 -clcerts -nokeys -password pass: | sudo openssl x509 -noout -enddate

この SAML SP 署名証明書の有効期限が切れており、IdP または暗号化アサーションで必須とされている場合にこの SAML SP 署名証明書を再生成するには、GitHub Enterprise Server 管理者は GitHub Enterprise Server SSH セッションで以下のコマンドを実行できます。

Note

nomad コマンドを実行すると、github-unicorn サービスの再起動時に一時的な中断が発生することになります。

# Backup the old certificate
sudo cp /data/user/common/saml-sp.p12 /data/user/common/saml-sp.p12-$(date +%d%m%Y_%H%M%S)

saml_tempdir=$(sudo mktemp -d)
sudo openssl req -new -newkey rsa:4096 -days 3650 -nodes -x509 -sha256 -subj "/CN=github_enterprise" -keyout $saml_tempdir/saml.key -out $saml_tempdir/saml.crt
sudo openssl pkcs12 -export -inkey $saml_tempdir/saml.key -in $saml_tempdir/saml.crt -nodes -password pass: -out /data/user/common/saml-sp.p12
sudo rm -rf $saml_tempdir

sudo nomad stop github-unicorn
sudo nomad run -hcl1 /etc/nomad-jobs/github/unicorn.hcl

セッションの継続期間とタイムアウト

ユーザーの IdP で他のユーザーが認証を行い、無期限に認可される状態を防ぐため、お使いの GitHub Enterprise Server インスタンス に対してアクセス権を持つ各ユーザー アカウントのセッションは、GitHub によって定期的に無効にされます。 無効になると、ユーザーは IdP でもう一度認証を行う必要があります。

既定では、IdP が SessionNotOnOrAfter 属性の値をアサートしない場合、IdP による認証に成功してから 1 週間後に、GitHub によってセッションが無効にされます。

GitHub でカスタマイズしたセッション期間がサポートされるのは、IdP が SessionNotOnOrAfter 属性と値を構成するオプションを提供している場合です。また、この属性が SAML 応答に含まれている場合です。 IdP で SessionNotOnOrAfter 属性が許可されていない場合、サイト管理者は管理シェルで ghe-config saml.default-session-expiration [seconds] コマンドを使い、インスタンス上のすべてのユーザーに対してカスタム SAML セッション タイムアウトを構成できます。

カスタマイズされたセッション継続時間の値を 24 時間未満に定義すると、GitHub がリダイレクトを開始するたびに、GitHub からユーザーに対して認証が求められる場合があります。

インスタンスで使用されている認証方法に関係なく、GitHub Enterprise Server は非アクティブ状態が 2 週間続くとユーザー セッションを終了します。

Note

Microsoft Entra ID (旧称 Azure AD) の場合、SAML トークンの構成可能な有効期間ポリシーによって、GitHub のセッション タイムアウトは制御されません。