Enterprise Managed Users を使う場合、リポジトリ、issue、pull request などのエンタープライズ リソースへのアクセスは、SAML SSO によって制御やセキュリティ保護が行われます。 IdP に変更を加えると、ユーザー アカウントの作成とエンタープライズへのアクセスの管理は SCIM によって自動的に行われます。 また、GitHub 上のチームを IdP 上のグループと同期することもできます。詳しくは、「Enterprise Managed Users について」をご覧ください。
概要
このガイドは、PingFederate でGitHub の SAML 認証と SCIM プロビジョニングの両方を設定するのに役立ちます。
開始する前に、次の点に注意してください:
- このガイドは、PingFederate バージョン 12.1 に基づいています。 手順は、他のバージョンによって異なる場合があります。
- このガイドでは、作業セットアップを構成するための最小限の手順について説明します。 ID ディレクトリが PingFederate に異なる方法で接続されている可能性があるため、バッキング データ ストアから利用できる内容に基づいて、SAML と SCIM の正しいデータ属性を選択する必要があります。
前提条件
新しい企業に対して SCIM プロビジョニングを構成する場合は、最初の構成プロセスでこれまでの全手順を完了してください。 「Enterprise Managed Users の概要」をご覧ください。
さらに:
- PingFederate に [GitHub EMU コネクタ] がインストールされている必要があります。 コネクタのダウンロードとインストールの方法は、PingIdentity 説明書の「プロビジョナーのインストール」をご覧ください。
- SCIM を使用してユーザーをプロビジョニングするには、バッキング データ ストアとして LDAP サーバーを使用する必要があります。
- 場合によっては、GitHub 上の SCIM エンドポイントへの送信接続を許可するように PingFederate でファイアウォールを構成する必要があります。
- GitHub.com の場合:
https://api.github.com/scim/v2/enterprises/ENTERPRISE
- GHE.com の場合:
https://api.SUBDOMAIN.ghe.com/scim/v2/enterprises/SUBDOMAIN
- GitHub.com の場合:
- PingFederate の [プロビジョニング モード] は、SCIM プロビジョニングを許可する値に設定する必要があります。 PingIdentity の 「送信プロビジョニング設定の構成」ガイドの「開始する前に」セクションを参照してください。
- この手順では、X509 証明書を PingFederate にアップロードする必要があります。 続行する前に、証明書を作成して保存することができます。 証明書のチャレンジ パスワードも必要です。 この記事で後述する「X509 証明書の作成例」セクションをご覧ください。
- この手順では、SAML メタデータ ファイルを PingFederate にアップロードする必要があります。 GHE.com 上の データ所在地が を使用するエンタープライズを設定している場合は、開始する前にこのファイルを作成するのが最も簡単です。 「GHE.com の SAML メタデータ ファイルの作成」をご覧ください。
1. SAML を構成する
このセクションでは、PingFederate で SAML コネクタを作成し、LDAP IdP アダプター インスタンスを設定し、IdP アダプターからの SAML 出力を管理します。
このセクションを始める前に、「Enterprise Managed Users の概要」の前の手順を完了したことを確認してください。
SAML アダプターを作成する
-
PingFederate 管理コンソールを開きます。
-
ヘッダーの [アプリケーション] をクリックし、左側のサイドバーの [SP 接続] をクリックします。
-
[この接続用のテンプレートを使用する] をクリックし [接続テンプレート] ドロップダウンから [GitHub EMU コネクタ] を選択します。
Note
このオプションが表示されない場合は、GitHub EMU コネクタがインストールされていません。 サポートが必要な場合は、Ping 担当者に問い合わせください。
-
PingFederate の構成の一部のフィールドを設定するために、エンタープライズの SAML メタデータを含む XML ファイルをアップロードします。 ファイルを見つけるには:
- エンタープライズを GitHub.com で設定している場合、このファイルは PingFederate の [GitHub EMU Connector] にアタッチされている ZIP ファイル内にあります。
- エンタープライズを GHE.com で設定している場合は、ファイルを手動で作成します。 「GHE.com の SAML メタデータ ファイルの作成」をご覧ください。
-
PingFederate の [SP Connection] ページで、前のステップのファイルをメタデータ ファイルとしてアップロードします。
-
[接続の種類] タブに移動します。
-
[Browser SSO プロファイル] を選択し、[送信プロビジョニング] の選択を解除します (これは後でも有効にできます)。
-
次へ をクリックします。
-
[接続オプション] タブで、[Browser SSO] のみが選択されていることを確認します。
-
次へ をクリックします。
-
[全般情報] タブで、次の詳細情報を入力します。
- Partner’s Entity ID: ご使用の GitHub ホスト URL (
https://github.com
またはhttps://SUBDOMAIN.ghe.com
) - "接続名": PingFederate 内の SP 接続のためのわかりやすい名前
- Base URL: ご使用の GitHub ホスト URL (
https://github.com
またはhttps://SUBDOMAIN.ghe.com
) - "トランザクション ログ": Standard
- その他のフィールドはすべて空白のままで構いません。
- Partner’s Entity ID: ご使用の GitHub ホスト URL (
-
次へ をクリックします。
-
[Browser SSO の構成] をクリックします。
-
[アサーションの作成を構成] をクリックします。
-
[認証ソース マッピング] タブで、[新しいアダプター インスタンスをマップ] をクリックします。
-
[アダプター インスタンス] タブで、[アダプター インスタンスの管理] をクリックします。
-
[新しいインスタンスの作成] をクリックします。
LDAP IdP アダプター インスタンスを設定する
-
PingFederate の [アダプター インスタンスの作成] ページの [種類] タブで、次の詳細を入力します。
- "インスタンス名": インスタンスを識別する名前 (例:
pfghadapter
) - "インスタンス ID": インスタンスの ID (例:
pfghadapter
) - "種類": HTML フォーム IDP アダプター
- "親インスタンス": なし
- "インスタンス名": インスタンスを識別する名前 (例:
-
次へ をクリックします。
-
[IDP アダプター] タブのページ下部にある [パスワード認証情報検証コントロールの管理] をクリック。
-
[新しいインスタンスの作成] をクリックします。
-
[タイプ] タブで、次の情報を入力します。
- "インスタンス名": インスタンスを識別する名前 (例:
pfghdocscv
) - "インスタンス ID": インスタンスの ID (例:
pfghdocscv
) - "タイプ": LDAP ユーザー名パスワード資格情報検証コントロール
- "親インスタンス": なし
- "インスタンス名": インスタンスを識別する名前 (例:
-
次へ をクリックします。
-
[インスタンスの構成] タブで、[データ ストアの管理] をクリックします。
-
[新しいデータ ストアの追加] をクリックします。
-
[データ ストアの種類] タブで、次の情報を入力します。
- "インスタンス名": 一意の値 (例:
pfghdocsds
) - "タイプ": ディレクトリ (LDAP)
- "ログ内の値をマスクする": 選択解除
- "インスタンス名": 一意の値 (例:
-
次へ をクリックします。
-
[LDAP の構成] タブで、LDAP サーバーの詳細を構成します。
-
[接続テスト] をクリックします。 「接続テストが成功しました」と表示されます。
-
ページの下部にある [Advanced] をクリックします。
-
[LDAP バイナリ属性] タブをクリックし、属性として
guidAttribute
とobjectGUID
を追加します。 -
[Done] をクリックします。 [LDAP の構成] タブに戻る必要があります。
-
[次へ] をクリックし、[保存] をクリックします。
-
[データ ストアの管理] タブで、[完了] をクリックします。
-
[インスタンスの構成] タブで、次の詳細を入力します。
- "LDAP データストア": 上記で作成したデータ ストアの名前
- "Search Base": LDAP 検索を開始するディレクトリ内の場所
- "検索フィルター": サインイン時にユーザーが入力したユーザー名が LDAP サーバーのフィールドと一致することを保証するフィルター (例:
sAMAccountName=${username}
) - "検索範囲": サブツリー
- "大文字と小文字を区別する照合": 選択済み
-
[次へ] をクリックし、もう一度 [次へ] をクリックし、[保存] をします。
IdP アダプターからの SAML 出力を管理する
-
[パスワード認証情報検証コントロールの管理] ページで、[完了] をクリックします。
-
[IDP アダプター] タブに、次の情報を入力します。
- "パスワード認証情報検証コントロール インスタンス": 上で作成した検証コントロール インスタンスの名前 (例:
pfghdocscv
)。 [更新] をクリックして選択を確定します。 - その他のフィールドはすべて既定値のままにすることも、要件に合わせて変更することもできます。
- "パスワード認証情報検証コントロール インスタンス": 上で作成した検証コントロール インスタンスの名前 (例:
-
[次へ] をクリックしてから、もう一度 [次へ] をクリックします。
-
[アダプター属性] タブで、次の詳細を入力します。
-
"一意のユーザー キー属性":
username
-
username
属性の横にある [仮名] を選択します。
Note
このステップは重要です。 アダプター属性は、SCIM プロビジョニング中に GitHub でユーザーを一意に識別するために使用されます。
-
-
[次へ] をクリックしてから、もう一度 [次へ] をクリックします。
-
概要ページで設定を確認して、[保存] をクリックします。
-
[IdP アダプター] タブに、先ほど作成したアダプターが表示されます。 [Done] をクリックします。
-
[アダプター インスタンス] タブの [アダプター インスタンス] ドロップダウンで、先ほど作成したアダプターを選択します。
-
次へ をクリックします。
-
[マッピング方法] タブで、[SAML アサーション内のアダプター コントラクト値のみを使用する] を選択します (他の選択でも機能する可能性がありますが、確認されていない場合があります)。
-
次へ をクリックします。
-
[属性コントラクト フルフィルメント] タブで、
SAML_SUBJECT
をソースとして [アダプター] にマップし、値としてusername
します。Note
このステップは重要です。 正規化された
SAML_SUBJECT
は、SCIM がプロビジョニングしたユーザーの正規化されたユーザー名と一致する必要があります。 -
[次へ]、もう一度 次へ、[完了] の順でクリックします。
-
[認証ソース マッピング] タブに戻り、[アダプター インスタンス名] セクションには先ほど作成したアダプター インスタンスが含まれている必要があります。
-
次へ をクリックします。
-
[Protocol Settings] タブで [Configure Protocol Settings] をクリックします。
-
[Assertion Consumer Service URL] には、次の詳細を含む行を追加します。
- [Default] の選択
- Index: 0
- Binding: POST
- Endpoint URL:
/enterprises/ENTERPRISE/saml/consume
(ENTERPRISE はエンタープライズ名またはサブドメイン)
-
次へ をクリックします。
-
[Allowable SAML Bindings] タブで、[POST] と [REDIRECT] のみが選択されていることを確認します。
-
次へ をクリックします。
-
[Signature Policy] ページで、[SIGN RESPONSE AS REQUIRED] のみが選択されていることを確認します。
-
次へ をクリックします。
-
[Encryption Policy] タブで、[NONE] が選択されていることを確認します。
-
次へ をクリックします。
-
[保存] をクリックします。
-
[次へ] をクリックし、[認証情報] タブが表示されるまで [完了] をクリックします。
-
[認証情報] タブで、[認証情報の構成] をクリックし [証明書の管理] をクリックします。
-
[Certificate Management] ページで、[Import] をクリックして、X509 証明書をアップロードします (ヘルプについては、「X509 証明書の作成例」セクションをご覧ください)。
-
[パスワード] には、証明書のチャレンジ パスワードを使用します。
-
[次へ] をクリックし、[保存] をクリックします。
-
[証明書の管理] タブに、インポートした証明書が表示されるはずです。 [Done] をクリックします。
-
[デジタル署名の設定] タブで、次の手順を実行します。
- 先ほど作成した証明書を [署名証明書] に選択します。
- セカンダリ証明書は空白のままにし、[署名に証明書を含める] チェックボックスの選択を解除できます。
- 署名アルゴリズムは "RSA SHA256" である必要があります。
-
[次へ] から、[完了]、[次へ] の順にクリックします。
-
[概要] タブで、[SSO アプリケーション エンドポイント] の切り替えを有効にします。
-
[保存] をクリックします。 SP 接続の一覧に戻ります。ここで、新しく作成された SP 接続が表示されます。
SAML 構成の情報を収集する
GitHub で SAML を構成するには、PingFederate からいくつかの詳細が必要になります。
- [SP 接続] ページの新しい接続の行で、[アクションの選択] をクリックし、[メタデータのエクスポート] をクリックします。
- [メタデータ署名] タブの新しい接続の行で、上で作成した署名証明書を選択します。 証明書をダウンロードするには、[次へ] をクリックし、[エクスポート] をクリックします。
- PingFederate で、ヘッダーの [システム] をクリックし、次に [サーバー]、[プロトコル設定] をクリックします。
SAML 2.0 ENTITY ID
が定義されていることを確認します。 これは、GitHub の SAML 設定の [Issuer] フィールドに必要であるため、メモしておきます。 - ダウンロードしたメタデータ ファイルを開き、次の手順に備えて準備します。
GitHub を構成する
-
エンタープライズのセットアップ ユーザーとして GitHub にサインインします。
-
エンタープライズ設定で SAML を有効にします。 「Enterprise マネージド ユーザーの SAML シングル サインオンの構成」をご覧ください。
-
前のセクションの SAML メタデータ ファイルから次の値を入力します。
- [シングル サインオン URL] には、
<md: SingleSignOnService>
フィールドのlocation
値を使用します。 これには、末尾が/idp/SSO.saml2
の URL が必要です。 - "発行元" に関しては、
<md: EntityDescriptor>
フィールド (URL) のentityId
値を使用します。
- [シングル サインオン URL] には、
-
"検証証明書" の場合は、前に作成した X509 証明書ファイルをアップロードします。
-
Save settings をクリックします。
2. SCIMを構成する
このセクションでは、PingFederate で SCIM 設定と属性マッピングを構成します。
このセクションを始める前に、「Enterprise Managed Users の概要」の前の手順を完了したことを確認してください。
SCIM 設定を構成する
-
PingFederate の [SP 接続] ページに戻り、以前に作成した SP 接続を選択します。
-
[接続の種類] タブをクリックします。
-
[送信プロビジョニング] を選択します。
-
[Browser SSO プロファイル] が選択されていることを確認します。
-
[送信プロビジョニング] タブに到達するまで [次へ をクリックし、構成プロビジョニング をクリックします。
-
[対象] タブで、次の詳細情報を入力します。
- Base URL:
https://api.github.com/scim/v2/enterprises/{enterprise}/
またはhttps://api.SUBDOMAIN.ghe.com/scim/v2/enterprises/SUBDOMAIN
- Access Token: セットアップ ユーザー用に作成された personal access token (classic)
- Base URL:
-
次へ をクリックします。
-
[チャネルの管理] タブで、[作成] をクリックし、
pfghscim
などの一意のチャネル名を入力します。 -
次へ をクリックします。
-
[ソース] タブで、前に作成したデータ ストアを選択します。
-
次へ をクリックします。
-
[ソース設定] タブでは、すべての既定の設定を維持できます。 その他の設定でも機能する可能性がありますが、確認されていません。
-
次へ をクリックします。
-
[ソースの場所] タブで、プロビジョニングされたユーザーの送信元となる LDAP サーバーの場所を構成します。 これは、セットアップとニーズによって異なります。 構成後、[次へ] をクリックします。
LDAP フィールドを SCIM にマップする
[属性マッピング] タブで、LDAP サーバーのフィールドを SCIM フィールドにマップする必要があります。 GitHub のサポートされている SCIM フィールドと、それぞれに必要な値については、次の一覧を参照してください。
- Username: これは正規化され、プロビジョニングされたユーザーの GitHub ユーザー名として使用されます。 「外部認証のユーザー名に関する考慮事項」をご覧ください。 これは、PingFederate の
SAML_SUBJECT
プロパティで構成した SAML アサーションで送信されたサブジェクトの正規化と一致する必要があります。 - 電子メール: ユーザーのメール アドレスを含むフィールド。
- 表示名: ユーザーの人間が判読可能な名前。
- 書式設定済みの名前: 表示用に書式設定された、すべてのミドル ネーム、役職、サフィックスを含む、ユーザーのフル ネーム。
- 名: ユーザーの名。
- 姓: ユーザーの姓。
- 外部 ID: この識別子は、IdP プロバイダーによって生成されます。
- Roles: このフィールドには、GitHub に対するユーザーの目的のロールを表す文字列が含まれている必要があります。 有効なロールは、
enterprise_owner
、user
、billing_manager
およびguest_collaborator
です。
これらの設定の構成が完了したら、[次へ] をクリックします。
構成とテストを完了する
- [アクティブ化と概要] タブの [チャンネルの状態] で、[アクティブ] を選択します。
- [チャンネルの管理] タブで、[完了] をクリックします。
- [送信プロビジョニング] タブで、[保存] をクリックします。 SCIM が構成され、有効になりました。
- プロビジョニングが実行されるまで数分待ってから、新しいプライベート ブラウザー ウィンドウを開き GitHub に移動します。
- [SAML でサインイン] をクリックします。 PingFederate ログイン ページにリダイレクトされます。
- GitHub にプロビジョニングされている LDAP サーバー内のユーザーの認証情報を使用してログインできる必要があります。
PingFederate プロビジョニングは、ユーザーとグループを個別に処理します。 プロビジョニングするには、ユーザーを直接割り当てる必要があります。 割り当てられたグループに含まれるが、直接割り当てられないユーザーはプロビジョニングされません。
X509 証明書の作成例
X509 証明書は、複数の方法で作成できます。 こちらに要件に適した例を示します。
-
ターミナル ウィンドウで、
openssl version
を実行して OpenSSL がインストールされていることを確認します。 インストールされていない場合は、インストールします。 -
次のコマンドを使って、秘密キーを生成します。
Shell openssl req -nodes -sha256 -newkey rsa:2048 -keyout MyPrivateKey.key -out MyCertificateRequest.csr
openssl req -nodes -sha256 -newkey rsa:2048 -keyout MyPrivateKey.key -out MyCertificateRequest.csr
必要な情報を入力し、作成するチャレンジ パスワードの メモを取ります。
-
キーが作成されたのを確認するには、次のコマンドを実行します。
MyPrivateKey.key
という名前のファイルをコマンド出力に一覧表示する必要があります。Shell ls | grep MyPrivateKey.key
ls | grep MyPrivateKey.key
-
次のコマンドを使用して認定資格証を生成します。
Shell openssl x509 -req -days 365 -sha256 -in MyCertificateRequest.csr -signkey MyPrivateKey.key -out pfgh256.crt
openssl x509 -req -days 365 -sha256 -in MyCertificateRequest.csr -signkey MyPrivateKey.key -out pfgh256.crt
-
認定資格証が確実に作成されるように、次のコマンドを実行します。
pfgh256.crt
という名前のファイルをコマンド出力に一覧表示する必要があります。Shell ls | grep pfgh256.crt
ls | grep pfgh256.crt
-
次のコマンドを使用して、PKCS #12 ファイルをエクスポートします。 これは、PingFederate に アップロード する必要があるファイルです。
Shell openssl pkcs12 -export -in pfgh256.crt -inkey MyPrivateKey.key -out pfgh256.p12
openssl pkcs12 -export -in pfgh256.crt -inkey MyPrivateKey.key -out pfgh256.p12
-
ファイルがエクスポートされたことを確認するには、次のコマンドを実行します。
pfgh256.p12
という名前のファイルをコマンド出力に一覧表示する必要があります。Shell ls | grep pfgh256.p12
ls | grep pfgh256.p12
GHE.com
の SAML メタデータ ファイルの作成
一部の値は、PingFederate が GitHub.com に提供するメタデータ ファイルと異なるため、エンタープライズの SAML メタデータの XML ファイルを手動で作成します。
-
テキスト エディターに次の XML をコピーします。
XML <?xml version="1.0"?> <md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" entityID="https://SUBDOMAIN.ghe.com/enterprises/SUBDOMAIN" cacheDuration="PT1440M"> <md:SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol" AuthnRequestsSigned="false" WantAssertionsSigned="false"> <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat> <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://SUBDOMAIN.ghe.com/enterprises/SUBDOMAIN/saml/consume" isDefault="true" index="0"/> </md:SPSSODescriptor> </md:EntityDescriptor>
<?xml version="1.0"?> <md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" entityID="https://SUBDOMAIN.ghe.com/enterprises/SUBDOMAIN" cacheDuration="PT1440M"> <md:SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol" AuthnRequestsSigned="false" WantAssertionsSigned="false"> <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat> <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://SUBDOMAIN.ghe.com/enterprises/SUBDOMAIN/saml/consume" isDefault="true" index="0"/> </md:SPSSODescriptor> </md:EntityDescriptor>
-
SUBDOMAIN のすべてのインスタンスを、エンタープライズの GHE.com のサブドメインで置き換えます。 (例:
octocorp
)。 -
ファイルを XML ファイルとして保存します。
-
「SAML アダプターを作成する」の手順に戻ります。