グループ SAML および SCIM の設定例

これらは、GitLabサポートチームがトラブルシューティング中に時々使う、グループSAMLとSCIMに関するメモとスクリーンショットですが、公式ドキュメントには収まりきらないものです。GitLabはこれを公開することで、誰でもサポートチームが収集した知識を活用できるようにしています。

この機能や設定方法については、GitLabグループSAMLのドキュメントを参照してください。

SAML設定のトラブルシューティングを行う際、GitLabのチームメンバーはSAMLのトラブルシューティングセクションから始めることが多いでしょう。

そして、目的の ID プロバイダのテスト設定を行います。このセクションにはスクリーンショットの例が含まれています。

SAML および SCIM のスクリーンショット

このセクションでは、グループ SAMLおよびグループ SCIM の以下の設定例に関連するスクリーンショットを示しま す:

caution
これらのスクリーンショットは、GitLabサポートが必要に応じて更新するものです。公式のドキュメントではありません

現在GitLabでイシューを抱えている場合は、サポートオプションを確認するとよいでしょう。

Azure Active Directory

このセクションでは、Azure Active Directoryの設定要素のスクリーンショットを掲載しています。

SAML アプリの基本設定

Azure AD basic SAML

ユーザークレームと属性

Azure AD user claims

note
http://schemas.microsoft.com/ws/2008/06/identity/claims/ のようなフレーズで始まる属性名はサポートされていません。

SCIMマッピング

プロビジョニング:

Azure AD SCIM Provisioning

属性マッピング:

Azure AD SCIM Attribute Mapping

グループ同期

Azure Group Claims

グループ IDソース属性を使用すると、SAML グループ・リンクを設定するときに、ユーザーがグループ ID またはオブジェクト ID を入力する必要があります。

利用可能な場合は、代わりにユーザーフレンドリーなグループ名を追加できます。Azure グループ・クレームを設定する場合:

  1. sAMAccountNameソース属性を選択します。
  2. グループ名を入力します。256文字までの名前を指定できます。
  3. 属性がアサーションの一部であることを確認するには、クラウド専用グループのグループ名を送信するを選択します。

Azure AD は、SAML 応答で送信できるグループの数を 150 に制限しています。ユーザーが 150 を超えるグループのメンバーである場合、Azure はそのユーザーのグループ主張を SAML 応答に含めません。

Google ワークスペース

SAML アプリの基本設定:

Google Workspace basic SAML

ユーザークレームと属性:

Google Workspace user claims

IdP リンクと証明書:

note
Google ワークスペースでは、SHA256 フィンガープリントが表示されます。SAMLを設定するためにGitLabが必要とするSHA1フィンガープリントを取得するには、証明書をダウンロードし、SHA1証明書フィンガープリントを計算します。

Google Workspace Links and Certificate

Okta

GitLab.comグループ用のSAMLアプリの基本設定:

Okta basic SAML

GitLab 自己管理用 SAML アプリの基本設定:

Okta admin panel view

ユーザークレームと属性:

Okta Attributes

グループ属性:

Okta Group attribute

SAML アプリの詳細設定(デフォルト):

Okta Advanced Settings

IdP Links および Certificate:

Okta Links and Certificate

サインオンの設定

Okta SAML settings

サインオンの設定:新しくプロビジョニングされたユーザーにSCIMアプリを割り当てる際のユーザー名を設定します:

Assigning SCIM app to users on Okta

OneLogin

アプリケーションの詳細

OneLogin application details

パラメータを指定します:

OneLogin application details

ユーザーの追加

OneLogin user add

SSOの設定

OneLogin SSO settings

SAML レスポンスの例

ユーザーが SAML を使ってサインインすると、GitLab は SAML レスポンスを受け取ります。SAML レスポンスはproduction.log のログに base64 エンコードされたメッセージとして残っています。SAMLResponse を検索してレスポンスを見つけましょう。デコードされた SAML レスポンスは XML 形式です。例えば、以下のようになります:

<?xml version="1.0" encoding="UTF-8"?>
<saml2p:Response xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:xs="http://www.w3.org/2001/XMLSchema" Destination="https://gitlabexample/-/saml/callback" ID="id4898983630840142426821432" InResponseTo="_c65e4c88-9425-4472-b42c-37f4186ac0ee" IssueInstant="2022-05-30T21:30:35.696Z" Version="2.0">
 <saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://www.okta.com/exk2y6j57o1Pdr2lI8qh7</saml2:Issuer>
 <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
   <ds:SignedInfo>
     <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
     <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
     <ds:Reference URI="#id4898983630840142426821432">
       <ds:Transforms>
         <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
         <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
           <ec:InclusiveNamespaces xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#" PrefixList="xs"/>
         </ds:Transform>
       </ds:Transforms>
       <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
       <ds:DigestValue>neiQvv9d3OgS4GZW8Nptp4JhjpKs3GCefibn+vmRgk4=</ds:DigestValue>
     </ds:Reference>
   </ds:SignedInfo>
   <ds:SignatureValue>dMsQX8ivi...HMuKGhyLRvabGU6CuPrf7==</ds:SignatureValue>
   <ds:KeyInfo>
     <ds:X509Data>
       <ds:X509Certificate>MIIDq...cptGr3vN9TQ==</ds:X509Certificate>
     </ds:X509Data>
   </ds:KeyInfo>
 </ds:Signature>
 <saml2p:Status xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol">
   <saml2p:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
 </saml2p:Status>
 <saml2:Assertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:xs="http://www.w3.org/2001/XMLSchema" ID="id489" IssueInstant="2022-05-30T21:30:35.696Z" Version="2.0">
   <saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://www.okta.com/exk2y6j57o1Pdr2lI8qh7</saml2:Issuer>
   <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
     <ds:SignedInfo>
       <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
       <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
       <ds:Reference URI="#id48989836309833801859473359">
         <ds:Transforms>
           <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
           <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
             <ec:InclusiveNamespaces xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#" PrefixList="xs"/>
           </ds:Transform>
         </ds:Transforms>
         <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
         <ds:DigestValue>MaIsoi8hbT9gsi/mNZsz449mUuAcuEWY0q3bc4asOQs=</ds:DigestValue>
       </ds:Reference>
     </ds:SignedInfo>
     <ds:SignatureValue>dMsQX8ivi...HMuKGhyLRvabGU6CuPrf7==<</ds:SignatureValue>
     <ds:KeyInfo>
       <ds:X509Data>
         <ds:X509Certificate>MIIDq...cptGr3vN9TQ==</ds:X509Certificate>
       </ds:X509Data>
     </ds:KeyInfo>
   </ds:Signature>
   <saml2:Subject xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">
     <saml2:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent">useremail@domain.com</saml2:NameID>
     <saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
       <saml2:SubjectConfirmationData InResponseTo="_c65e4c88-9425-4472-b42c-37f4186ac0ee" NotOnOrAfter="2022-05-30T21:35:35.696Z" Recipient="https://gitlab.example.com/-/saml/callback"/>
     </saml2:SubjectConfirmation>
   </saml2:Subject>
   <saml2:Conditions xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" NotBefore="2022-05-30T21:25:35.696Z" NotOnOrAfter="2022-05-30T21:35:35.696Z">
     <saml2:AudienceRestriction>
       <saml2:Audience>https://gitlab.example.com/</saml2:Audience>
     </saml2:AudienceRestriction>
   </saml2:Conditions>
   <saml2:AuthnStatement xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" AuthnInstant="2022-05-30T21:30:35.696Z" SessionIndex="_c65e4c88-9425-4472-b42c-37f4186ac0ee">
     <saml2:AuthnContext>
       <saml2:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml2:AuthnContextClassRef>
     </saml2:AuthnContext>
   </saml2:AuthnStatement>
   <saml2:AttributeStatement xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">
     <saml2:Attribute Name="email" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified">
       <saml2:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">useremail@domain.com</saml2:AttributeValue>
     </saml2:Attribute>
     <saml2:Attribute Name="firtname" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified">
       <saml2:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">John</saml2:AttributeValue>
     </saml2:Attribute>
     <saml2:Attribute Name="lastname" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified">
       <saml2:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">Doe</saml2:AttributeValue>
     </saml2:Attribute>
     <saml2:Attribute Name="Groups" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified">
       <saml2:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">Super-awesome-group</saml2:AttributeValue>
     </saml2:Attribute>
   </saml2:AttributeStatement>
 </saml2:Assertion>
</saml2p:Response>