グループアクセスと権限

グループの権限とアクセスを制御するためにグループを設定します。

グループプッシュルール

グループプッシュルールにより、グループのメンテナーは特定のグループで新しく作成されたプロジェクトのプッシュルールを設定することができます。

GitLab 15.4以降では、グループのプッシュルールを設定するために

  1. 左側のサイドバーで、設定 > リポジトリ を選択します。
  2. 定義済みプッシュルール]セクションを展開します。
  3. 必要な設定を選択します。
  4. プッシュルールの保存を選択します。

GitLab 15.3以前では、グループのプッシュルールを設定するには:

  1. 左サイドバーで、Push rulesを選択します。
  2. 必要な設定を選択します。
  3. プッシュルールの保存を選択します。

グループの新しいサブグループには、どちらかに基づいてプッシュルールが設定されます:

  • プッシュルールが定義されている最も近い親グループ。
  • 親グループにプッシュルールが定義されていない場合、インスタンスレベルで設定されるプッシュルール。

Git アクセスプロトコルの制限

グループのリポジトリへのアクセスに使用する許可プロトコルを、SSH、HTTPS、またはその両方に設定できます。インスタンス設定が管理者によって構成されている場合、この設定は無効になります。

グループの Git アクセス許可プロトコルを変更するには:

  1. 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
  2. 設定] > [全般]を選択します。
  3. 権限とグループの機能」セクションを展開します。
  4. 許可するプロトコルを[有効なGitアクセスプロトコル]から選択します。
  5. 変更を保存を選択します。

IPアドレスによるグループアクセスの制限

組織の人だけが特定のリソースにアクセスできるようにするために、IPアドレスでグループへのアクセスを制限することができます。このトップレベルのグループ設定は以下に適用されます:

管理者はIPアドレスによるアクセス制限とグローバルに許可するIPアドレスを組み合わせることができます。

IP アドレスでグループアクセスを制限するには、次の手順に従います:

  1. 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
  2. 設定] > [全般]を選択します。
  3. 権限とグループの機能」セクションを展開します。
  4. Restrict access by IP address]テキストボックスに、IPv4 または IPv6 アドレス範囲のリストを CIDR 表記で入力します。このリスト
    • IP アドレス範囲の数に制限はありません。
    • 1GBのサイズ制限があります。
    • SSH または HTTP の両方の作成者に適用されます。作成者のタイプによってこのリストを分割することはできません。
  5. 変更を保存を選択します。

セキュリティの意味

IPアドレスによるグループアクセスの制限には、次のような意味があることに留意してください:

  • 管理者とグループオーナーは、IP制限に関係なく、どのIPアドレスからでもグループ設定にアクセスできます。しかし
    • グループオーナーは、許可されていないIPアドレスからアクセスした場合、サブグループにはアクセスできますが、グループまたはサブグループに属するプロジェクトにはアクセスできません。
    • 管理者は、許可されていない IP アドレスからアクセスした場合、グループに属するプロジェクトにアクセスできます。プロジェクトへのアクセスには、プロジェクトからのコードのクローンも含まれます。
    • ユーザーは、グループ名とプロジェクト名と階層を見ることができます。制限されるのは、次のものだけです:
  • ランナーを登録すると、IP制限に拘束されません。ランナーが新しいジョブやジョブの状態の更新を要求するときも、IP制限に縛られません。しかし、実行中の CI/CD ジョブが制限された IP アドレスから Git リクエストを送信すると、IP 制限によってコードがクローンされるのを防ぐことができます。
  • それでも、IP 制限されたグループやプロジェクトのイベントがダッシュボードに表示されるかもしれません。アクティビティには、プッシュやマージ、イシュー、コメントなどのイベントが含まれるかもしれません。
  • SSH経由でのGitオペレーションに対するIPアクセス制限は、GitLab SaaSでサポートされています。自己管理インスタンスに適用されるIPアクセス制限は、PROXYプロトコルが有効なgitlab-sshd
  • IP制限はグループに属する共有リソースには適用されません。グループにアクセスできないユーザーであっても、共有リソースにはアクセスできます。

GitLab.comのアクセス制限

GitLab.comの共有Runnerはグローバル許可リストに追加され、IP制限に関係なく利用できるようになります。

ランナーからのアーティファクトやレジストリのダウンロードは、その地域のGoogleや、MacOSランナーの場合はAmazonのIPアドレスから行われます。そのため、ダウンロードはグローバル許可リストに追加されません。Runnerのダウンロードを許可するには、アウトバウンドのRunnerのCIDR範囲をグループの許可リストに追加します。

ドメインによるグループアクセスの制限

  • GitLab 13.1で複数のメールドメインを指定できるようになりました
  • GitLab 14.1.2でグループ内のプロジェクトへのアクセス制限に対応。
  • GitLab 15.1.1で追加された、許可されたメールドメインのサブセットを持つグループへのグループメンバーシップの制限をサポート。

特定のドメインのメールアドレスを持つユーザーをグループやそのプロジェクトに追加できないようにすることができます。

ドメインごとにグループへのアクセスを制限するには、以下の手順に従います:

  1. 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
  2. 設定] > [全般]を選択します。
  3. 権限とグループの機能」セクションを展開します。
  4. メールによるメンバーシップの制限]フィールドに、ドメイン名を入力します。
  5. 変更を保存を選択します。

新しいユーザーを追加しようとすると、そのユーザーのプライマリEメールがこのリストと比較されます。設定された電子メールドメインの制限のいずれかに一致するプライマリ電子メールを持つユーザーのみが、グループに追加できます。

最も一般的な公開メールドメインは制限できません:

  • gmail.com,yahoo.com,aol.comicloud.com
  • hotmail.com,hotmail.co.ukhotmail.fr
  • msn.com,live.comoutlook.com

グループを共有する場合、ソース・ネームスペースとターゲット・ネームスペースの両方で、メンバの電子メールアドレ スのドメインを許可する必要があります。

note
電子メールによるメンバ資格の制限リストからドメインを削除しても、この電子メール・ドメインを持つユーザーがこのグループ配下のグループやプロジェクトから削除されるわけではありません。また、グループまたはプロジェクトを別のグループと共有する場合、ターゲット・グループは、ソース・グループのリストにない電子メール・ドメインをそのリストに追加できます。したがって、この機能では、現在のメンバが常にメール リストによる制限メンバシップに適合するわけではありません。

グループ階層外でのグループ共有の禁止

トップレベル グループのサブグループとプロジェクトが、トップレベル グループの階層外にある他のグループを招待できないように設定できます。このオプションは、トップレベルグループでのみ使用できます。

たとえば、次のようなグループとプロジェクトの階層があります:

  • 動物 > 犬 > 犬プロジェクト
  • 動物 > 猫
  • 植物 > 木

動物」グループの階層外でのグループ共有を禁止する場合:

  • 犬はグループ「」を招待できます。
  • 犬は Treesグループを招待できません。
  • 犬プロジェクトは グループを招待できます。
  • Dog Projectは Treesグループを招待できません。

グループの階層外での共有を防ぐため:

  1. 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
  2. 設定] > [全般]を選択します。
  3. 権限とグループ機能] を展開します。
  4. を選択 メンバーは、<group_name> およびそのサブグループ以外のグループを招待できません。
  5. を選択 変更を保存.

プロジェクトをグループで共有できないようにします。

プロジェクトを別のグループと共有すると、プロジェクトにさらにメンバーを招待できるユーザーが増えます。それぞれの(サブ)グループは、アクセス権限の追加ソースとなり、混乱を招き、コントロールが難しくなる可能性があります。

プロジェクトメンバーの招待権限を1つに制限するには、プロジェクトを他のグループと共有できないようにします:

  1. 左サイドバーで、Searchを選択するか、 、グループを検索します。
  2. 設定 > 一般 を選択します。
  3. 権限とグループ機能 セクションを展開します。
  4. <group_name> のプロジェクトを他のグループと共有することはできませんを選択します。
  5. 変更を保存を選択します。

この設定は、グループオーナーによって上書きされない限り、すべてのサブグループに適用されます。この設定を有効にすると、すでにプロジェクトに追加されているグループはアクセスできなくなります。

ユーザーによるグループへのアクセス要求の禁止

グループのオーナーになると、メンバー以外からのグループへのアクセス要求を防ぐことができます。

  1. 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
  2. 設定] > [全般]を選択します。
  3. 権限とグループの機能」セクションを展開します。
  4. ユーザーによるアクセス要求の許可] チェックボックスをオフにします。
  5. 変更を保存を選択します。

グループ外へのプロジェクトのフォークの防止

GitLab 13.3 で導入されました

デフォルトでは、グループ内のプロジェクトはフォークできます。オプションとして、GitLab PremiumとUltimateの階層では、グループ内のプロジェクトが現在のトップレベルグループ以外でフォークされないようにすることができます。

この設定は SAML 設定ページから削除され、グループ設定ページにマイグレーションされます。暫定期間では、これらの設定は両方とも考慮されます。1つでもtrue に設定されている場合、そのグループは外部からのフォークを許可しません。

プロジェクトがグループ外部でフォークされるのを防ぐためです:

  1. 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
  2. 設定] > [全般]を選択します。
  3. 権限とグループの機能」セクションを展開します。
  4. Prevent project forking outside current groupにチェックを入れます。
  5. 変更を保存を選択します。

既存のフォークは削除されません。

グループのプロジェクトにメンバーが追加されないようにします。

グループオーナーになると、グループ内のすべてのプロジェクトに新しいメンバーが追加されないようにすることができます。

例えば、監査イベントのためにグループをロックしたい場合、監査中にプロジェクトメンバーシップを変更できないようにすることができます。

グループ・メンバーシップ・ロックが有効な場合でも、グループ・オーナーは変更できません:

  • グループを招待したり、グループにメンバーを追加して、ロックされたグループのプロジェクトにアクセスできるようにすることができます。
  • グループメンバーのロールを変更します。

設定はカスケードされません。サブグループのプロジェクトは、親グループを無視してサブグループの設定を遵守します。

グループのプロジェクトにメンバが追加されないようにするには:

  1. 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
  2. 設定] > [全般]を選択します。
  3. 権限とグループの機能」セクションを展開します。
  4. メンバーシップ] で、[ユーザーはこのグループのプロジェクトに追加できません] を選択します。
  5. 変更を保存を選択します。

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

  • 以前に権限を持っていたすべてのユーザーは、グループにメンバーを追加できなくなります。
  • プロジェクトに新しいユーザーを追加するAPIリクエストはできません。

LDAPによるグループメンバーシップの管理

グループ同期により、LDAPグループをGitLabグループにマッピングすることができます。これにより、グループごとのユーザー管理をよりコントロールできるようになります。グループ同期を設定するには、group_base DN('OU=Global Groups,OU=GitLab INT,DC=GitLab,DC=org') を編集します。このOUには、GitLabグループに関連付けられているすべてのグループがコンテナされています。

グループリンクはCNかフィルタのどちらかを使って作成することができます。これらのグループリンクを作成するには、グループのSettings > LDAP Synchronizationページにアクセスしてください。リンクを設定した後、ユーザーがGitLabグループと同期するまでに1時間以上かかる場合があります。

LDAPおよびグループシンクの管理の詳細については、LDAPのメインドキュメントを参照してください。

note
LDAP同期を追加すると、LDAPユーザーがグループ・メンバーであり、LDAPグループに属していない場合、そのユーザーはグループから削除されます。

LDAPグループを使ってプロジェクト・アクセスを管理するには、回避策を使用できます。

CNでグループリンクを作成する場合。

  1. リンク先のLDAPサーバーを選択します。
  2. 同期方法としてLDAP Group cnを選択します。
  3. LDAP Group cn]フィールドに、グループの CN を入力します。設定されたgroup_baseに一致する CN がドロップダウンリストに表示されます。このリストから CN を選択します。
  4. LDAPアクセス」セクションで、このグループでシンクされるユーザーの権限レベルを選択します。
  5. 同期の追加]を選択します。

フィルターでグループリンクを作成する場合。

  1. リンク先のLDAPサーバーを選択します。
  2. 同期方法としてLDAP user filterを選択します。
  3. LDAP User filterボックスにフィルターを入力します。ユーザーフィルターに関するドキュメントに従います。
  4. LDAPアクセス」セクションで、このグループでシンクされるユーザーの権限レベルを選択します。
  5. 同期の追加]を選択します。

ユーザー権限の上書き

LDAPユーザー権限は、管理者が手動で上書きすることができます。ユーザーの権限を上書きするには、以下の手順に従います:

  1. 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
  2. 左側のサイドバーで、[管理] > [メンバー] を選択します。LDAP同期化によってユーザーにロールが付与された場合:
    • 親グループのメンバシップよりも多くの権限がLDAP同期によってユーザーに付与されている場合、そのユーザーはグループの直接のメンバシップを持つものとして表示されます。
    • 親グループのメンバシップと同じか少ない権限では、そのユーザーはグループのメンバシップを継承していると表示されます。
  3. オプション。編集するユーザーが継承されたメンバーシップを持つものとして表示される場合は、LDAPユーザー権限を上書きする前に、サブグループをフィルタリングして直接のメンバーを表示します。
  4. 編集するユーザーの行で、鉛筆({pencil})アイコンを選択します。
  5. モーダルで[権限の編集]を選択します。

これでMembersページからユーザーの権限を編集することができます。

トラブルシューティング

IP制限によりアクセスがブロックされているかどうかの確認

ユーザーが通常アクセスできるはずのときに 404 が表示され、その問題が特定のグループに限定されている場合は、auth.log Rails ログを検索して、次の 1 つ以上を確認してください:

  • json.message:'Attempting to access IP restricted group'
  • json.allowed:false

ログエントリを表示するには、remote.ip をグループの許可された IP アドレスのリストと比較します。

グループメンバーの権限を更新できません。

グループオーナーがグループメンバーの権限を更新できない場合、どのメンバーシップが表示されているかを確認してください。グループオーナーが更新できるのは、直接のメンバーのみです。

親グループのメンバシップがサブグループと同じかそれ以上のロールを持つ場合、グループに直接メンバシップが存在しても、継承されたメンバシップはサブグループのメンバページに表示されます。

直接のメンバーを表示および更新するには、グループをフィルタリングして直接のメンバーを表示します。

直接会員と継承会員の両方を一覧表示する新しいデザインの会員ページを通じて、会員をタイプ別にフィルタリングする必要性は、イシュー337539で提案されています。