SAML グループ同期

GitLab 15.1でセルフマネージドインスタンスに導入されました

caution
グループ同期の設定を追加または変更すると、マッピングされたGitLabグループからユーザーを削除することができます。グループ名とgroups SAML レスポンスの groupsリストに不一致がある場合、削除が行われます。groups 変更を行う前に、SAMLレスポンスに groups属性がgroups 含まれていて groupsAttributeValue の値がGitLabのSAMLグループ名と一致するか、GitLabからすべてのグループが削除されてGroup Syncが無効になっていることをgroups 確認して groupsください。

Azure を使った Group Sync のデモについては、Demo:SAML Group Syncをご覧ください。

SAML グループ同期の設定

note
SAML Group Syncを使用し、分散アーキテクチャや高可用性アーキテクチャなどで複数のGitLabノードを使用する場合は、Railsアプリケーションノードに加えてすべてのSidekiqノードにSAML設定ブロックを含める必要があります。
caution
ユーザーが誤ってGitLabグループから削除されるのを防ぐため、GitLabでグループ同期を有効にする前に、以下の指示によく従ってください。

自己管理GitLabインスタンスにSAMLグループ同期を設定するには:

  1. SAML OmniAuth Provider を設定します。
  2. SAML ID プロバイダが、groups_attribute 設定の値と同じ名前の属性文を送信することを確認します。以下の属性文の例を参照してください:

    gitlab_rails['omniauth_providers'] = [
      {
        name: "saml",
        label: "Provider name", # optional label for login button, defaults to "Saml",
        groups_attribute: 'Groups',
        args: {
          assertion_consumer_service_url: "https://gitlab.example.com/users/auth/saml/callback",
          idp_cert_fingerprint: "43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8",
          idp_sso_target_url: "https://login.example.com/idp",
          issuer: "https://gitlab.example.com",
          name_identifier_format: "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"
        }
      }
    ]
    

GitLab.com インスタンスに SAML グループ同期を設定するには:

  1. GitLab.com グループの SAML SSO を参照してください。
  2. SAML ID プロバイダがGroups またはgroups という名前の属性ステートメントを送信することを確認します。
note
SAML 応答のGroups またはgroups の値は、グループ名または ID のいずれかです。たとえば、Azure AD は、名前の代わりに Azure Group Object ID を送信します。SAML Group Links を設定する場合は、ID 値を使用します。
<saml:AttributeStatement>
  <saml:Attribute Name="Groups">
    <saml:AttributeValue xsi:type="xs:string">Developers</saml:AttributeValue>
    <saml:AttributeValue xsi:type="xs:string">Product Managers</saml:AttributeValue>
  </saml:Attribute>
</saml:AttributeStatement>

http://schemas.microsoft.com/ws/2008/06/identity/claims/groups などの他の属性名は、グループのソースとして受け入れられません。SAML ID プロバイダの設定で必要な属性名を設定する方法の詳細については、グループ SAML および SCIM の設定例を参照してください。

SAML が有効になっている場合、メンテナーまたはオーナーのロールを持つユーザーには、グループの設定 > SAML Group Links に新しいメニュー項目が表示されます。SAMLアイデンティティ・プロバイダのグループ名をGitLabロールにマッピングするために、1つ以上のSAML Group Linksを設定することができます。これはトップレベルグループでもサブグループでも可能です。

SAML グループをリンクするには、以下の手順に従います:

  1. SAML グループ名]に、該当するsaml:AttributeValue の値を入力します。ここで入力する値は、SAML 応答で送信される値と完全に一致する必要があります。IdP によっては、これはフレンドリーなグループ名ではなく、グループ ID またはオブジェクト ID(Azure AD)になる場合があります。
  2. Access Level でロールを選択します。
  3. Save を選択します。
  4. 必要に応じてグループリンクを追加します。

SAML Group Links

ユーザーが同じGitLabグループにマッピングされた複数のSAMLグループのメンバーである場合、ユーザーはグループから最も高いロールを取得します。例えば、あるグループがゲストとしてリンクされ、別のグループがメンテナーとしてリンクされている場合、両方のグループのユーザーはメンテナーのロールを得ます。

付与されるユーザー

SAML グループ・メンバシップは、ユーザがサインインするたびに評価されます。

API を使用します。

GitLab 15.3 で導入されました

GitLab API を使って SAML グループリンクを一覧、追加、削除することができます。

Microsoft Azure Active Directoryインテグレーション

GitLab 16.3 で導入されました

note
MicrosoftはAzure Active Directory(AD) の名称をEntra IDに変更すると発表しました。

Azure AD は、グループクレームで最大 150 グループを送信します。ユーザーが 150 を超えるグループのメンバーである場合、Azure AD は SAML 応答にグループ超過請求属性を送信します。その場合、Microsoft Graph API を使用してグループメンバーシップを取得する必要があります。

Microsoft Azure AD をインテグレーションするには、以下を実行します:

  • GitLabがMicrosoft Graph APIと通信できるようにAzure ADを設定します。
  • GitLab を設定します。

GitLabの設定をAzure ADのフィールドへ

GitLabの設定|Azureのフィールド|| =====================================|テナントID|ディレクトリ(テナント)ID|クライアントID|アプリケーション(クライアント)ID|クライアントシークレット|値(証明書とシークレットのページ)

Azure AD の設定

  1. Azure PortalでAzure Active Directory > App registrations > All applicationsと進み、GitLab SAMLアプリケーションを選択します。
  2. Essentialsの下に、Application (client) IDと Directory (tenant) IDの値が表示されます。GitLabの設定に必要なので、これらの値をコピーしてください。
  3. 左側のナビゲーションで、[Certificates & secrets]を選択します。
  4. クライアントシークレット]タブで、[新しいクライアントシークレット]を選択します。
    1. 説明テキストボックスに、説明を追加します。
    2. Expiresドロップダウンリストで、認証情報の有効期限を設定します。シークレットの有効期限が切れると、認証情報が更新されるまでGitLabインテグレーションは動作しなくなります。
    3. 認証情報を生成するには、Add を選択します。
    4. クレデンシャルの値をコピーします。この値は一度だけ表示され、GitLabの設定に必要です。
  5. 左のナビゲーションで、API権限を選択します。
  6. Microsoft Graph] > [アプリケーション権限] を選択します。
  7. GroupMember.Read.Allと User.Read.Allのチェックボックスを選択します。
  8. Add permissionsを選択して保存します。
  9. に対して管理者の同意を付与する] を選択<application_name>し、確認ダイアログで [はい]を選択 ** <application_name>します<application_name>。 ** 両方の権限の [ステータス] 列が緑色のチェックに変わり、 [許可] になって <application_name>いる<application_name> はず <application_name>です。

GitLab の設定

GitLab.comグループの設定を行います:

  1. 左側のサイドバーで、「検索」を選択するか、または「アクセス」してトップレベルグループを検索します。
  2. 設定]、[SAML SSO] の順に選択します。
  3. グループのSAML SSO を設定します。
  4. Microsoft Azure インテグレーションセクションで、[このグループの Microsoft Azure インテグレーションを有効にする] チェックボックスを選択します。このセクションは、グループに SAML SSO が設定され、有効になっている場合にのみ表示されます。
  5. Azure Portal で Azure Active Directory を設定する際に取得したテナント IDクライアント IDクライアントシークレットを入力します。
  6. オプション。Azure AD for US Government または Azure AD China を使用している場合は、適切なLogin API エンドポイントとGraph API エンドポイントを入力します。デフォルト値は、ほとんどの組織で使用できます。
  7. 変更を保存を選択します。

セルフマネージドを設定するには

  1. インスタンスに SAML SSO を設定します。
  2. 左のサイドバーで、Search を選択するか、次のページに進んでください。
  3. Admin Areaを選択します。
  4. 設定] > [全般]を選択します。
  5. Microsoft Azureインテグレーション]セクションで、[このグループのMicrosoft Azureインテグレーションを有効にする]チェックボックスを選択します。
  6. Azure Portal で Azure Active Directory を設定する際に取得したテナント IDクライアント IDクライアントシークレットを入力します。
  7. オプション。Azure AD for US Government または Azure AD China を使用している場合は、適切なLogin API エンドポイントとGraph API エンドポイントを入力します。デフォルト値は、ほとんどの組織で使用できます。
  8. 変更を保存を選択します。

この設定により、ユーザーがSAMLでサインインし、Azureがレスポンスでグループ超過クレームを送信した場合、GitLabはMicrosoft Graph APIを呼び出し、ユーザーのグループメンバーシップを取得するグループ同期ジョブを開始します。その後、SAML Group Linksに従ってGitLabグループのメンバーシップが更新されます。

グローバル SAML グループメンバーシップのロック

GitLab 15.10 で導入されました

GitLab管理者は、グローバルSAMLグループメンバーシップロックを使用して、SAMLグループリンクでメンバーシップが同期されているサブグループにグループメンバーが新しいメンバーを招待できないようにすることができます。

グローバルグループメンバーシップロックは、SAML Group Links の同期が設定されているトップレベルグループのサブグループにのみ適用されます。SAML Group Links 同期が設定されているトップレベル・グループのメンバシップを変更することはできま せん。

グローバル・グループ・メンバーシップ・ロックが有効になっている場合:

  • アクセスレベルを含め、グループのメンバーシップを管理できるのは管理者のみです。
  • ユーザーはできません:
    • プロジェクトを他のグループと共有すること。
    • グループで作成したプロジェクトにメンバーを招待。

グローバルグループメンバーシップのロックを有効にします:

  1. 自己管理する GitLab インスタンスにSAML を設定します。
  2. 左のサイドバーで、Search を選択するか、次のページに進んでください。
  3. Admin Areaを選択します。
  4. 左サイドバーで、設定 > 一般を選択します。
  5. 表示とアクセス制御」セクションを展開します。
  6. メンバーシップを SAML 同期でロックする] チェックボックスが選択されていることを確認します。

メンバーの自動削除

グループ同期後、マッピングされた SAML グループのメンバーでないユーザーはグループから削除されます。GitLab.comでは、トップレベルグループのユーザーは削除される代わりにデフォルトのメンバーシップロールが割り当てられます。

例えば、以下の図では

  • Alex Garcia が GitLab にサインインし、GitLab グループ C から外されました。
  • Sidney Jones は SAML グループ C に属していますが、まだサインインしていないため GitLab グループ C には追加されていません。
graph TB subgraph SAML users SAMLUserA[Sidney Jones] SAMLUserB[Zhang Wei] SAMLUserC[Alex Garcia] SAMLUserD[Charlie Smith] end subgraph SAML groups SAMLGroupA["Group A"] --> SAMLGroupB["Group B"] SAMLGroupA --> SAMLGroupC["Group C"] SAMLGroupA --> SAMLGroupD["Group D"] end SAMLGroupB --> |Member|SAMLUserA SAMLGroupB --> |Member|SAMLUserB SAMLGroupC --> |Member|SAMLUserA SAMLGroupC --> |Member|SAMLUserB SAMLGroupD --> |Member|SAMLUserD SAMLGroupD --> |Member|SAMLUserC
graph TB subgraph GitLab users GitLabUserA[Sidney Jones] GitLabUserB[Zhang Wei] GitLabUserC[Alex Garcia] GitLabUserD[Charlie Smith] end subgraph GitLab groups GitLabGroupA["Group A (SAML configured)"] --> GitLabGroupB["Group B (SAML Group Link not configured)"] GitLabGroupA --> GitLabGroupC["Group C (SAML Group Link configured)"] GitLabGroupA --> GitLabGroupD["Group D (SAML Group Link configured)"] end GitLabGroupB --> |Member|GitLabUserA GitLabGroupC --> |Member|GitLabUserB GitLabGroupC --> |Member|GitLabUserC GitLabGroupD --> |Member|GitLabUserC GitLabGroupD --> |Member|GitLabUserD
graph TB subgraph GitLab users GitLabUserA[Sidney Jones] GitLabUserB[Zhang Wei] GitLabUserC[Alex Garcia] GitLabUserD[Charlie Smith] end subgraph GitLab groups after Alex Garcia signs in GitLabGroupA[Group A] GitLabGroupA["Group A (SAML configured)"] --> GitLabGroupB["Group B (SAML Group Link not configured)"] GitLabGroupA --> GitLabGroupC["Group C (SAML Group Link configured)"] GitLabGroupA --> GitLabGroupD["Group D (SAML Group Link configured)"] end GitLabGroupB --> |Member|GitLabUserA GitLabGroupC --> |Member|GitLabUserB GitLabGroupD --> |Member|GitLabUserC GitLabGroupD --> |Member|GitLabUserD

多くの SAML グループに属しているユーザーは、自動的に GitLab グループから削除されます。

Azure AD を SAML で使用する場合、組織内のユーザーが 150 を超えるグループのメンバーであり、SAML グループ同期を使用すると、そのユーザーはグループメンバーシップを失う可能性があります。詳細については、Microsoft Group overages を参照してください。

GitLabには、150を超えるグループにユーザーを持つ組織でSAMLグループ同期を可能にするMicrosoft Azure Active Directoryインテグレーションがあります。このインテグレーションは、Microsoft Graph APIを使用してすべてのユーザーメンバーシップを取得し、150グループに制限されません。

そうでない場合は、グループのクレームを変更して代わりにGroups assigned to the application オプションを使用することで、このイシューを回避できます。

Manage Group Claims.