Skip to main content

SAML 構成リファレンス

組織またはエンタープライズ お使いの GitHub Enterprise Server インスタンス使用可能な 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 属性を使用できます。 [Management Console]属性を除き、administrator内の属性名を変更できます。 詳細については、 AUTOTITLE を参照してください。

名前必須説明
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 からクラウドへのライセンス使用量の同期」をご覧ください。 | | public_keys | | 公開 SSH キー。 複数のキーを指定できます。 | | gpg_keys | | 。 複数のキーを指定できます。 |

属性に複数の値を指定するには、複数の <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 では常に、<Audience> 要素の一部として <AudienceRestriction> 要素を指定する必要があります。 値は、EntityIdのGitHubと一致する必要があります。 この値は、GitHubなど、http(s)://HOSTNAMEにアクセスする URL です。

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

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

  • 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 または暗号化されたアサーションで必要な場合に生成し直すには、 GitHub Enterprise Server 管理者が GitHub Enterprise Server SSH セッションで以下のコマンドを実行できます。

メモ

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 は、 お使いの GitHub Enterprise Server インスタンス。 無効になると、ユーザーは IdP でもう一度認証を行う必要があります。

既定では、IdP が SessionNotOnOrAfter 属性の値をアサートしない場合、GitHubは IdP での認証が成功した後24 時間セッションを無効にします。

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

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

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

メモ

Microsoft Entra ID (旧称 Azure AD) ** は、SessionNotOnOrAfter 属性**をサポートしていません。 さらに、Entra IDによって発行された SAML トークンの構成可能な有効期間ポリシーでは、**** のGitHub。