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 エンティティーID | SP URL、対象ユーザー制限 | ||
| お使いの GitHub Enterprise Server インスタンス の最上位 URL | http(s):/ | ||
| SP アサーションコンシューマーサービス (ACS) URL | 応答、受信者、または宛先 URL | IdP が SAML レスポンスを送信する URL | http(s):/ |
| SP シングルサインオン (SSO) URL | |||
| IdP が SSO を開始する URL | http(s):/ |
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。