summaryrefslogtreecommitdiff
path: root/doc/user/group
diff options
context:
space:
mode:
Diffstat (limited to 'doc/user/group')
-rw-r--r--doc/user/group/access_and_permissions.md260
-rw-r--r--doc/user/group/custom_project_templates.md2
-rw-r--r--doc/user/group/index.md847
-rw-r--r--doc/user/group/iterations/index.md68
-rw-r--r--doc/user/group/manage.md570
-rw-r--r--doc/user/group/saml_sso/example_saml_config.md211
-rw-r--r--doc/user/group/saml_sso/group_sync.md12
-rw-r--r--doc/user/group/saml_sso/img/AzureAD-basic_SAML.pngbin0 -> 101427 bytes
-rw-r--r--doc/user/group/saml_sso/img/AzureAD-claims.pngbin0 -> 13625 bytes
-rw-r--r--doc/user/group/saml_sso/img/AzureAD-scim_attribute_mapping.pngbin0 -> 11981 bytes
-rw-r--r--doc/user/group/saml_sso/img/AzureAD-scim_provisioning.pngbin0 -> 80244 bytes
-rw-r--r--doc/user/group/saml_sso/img/GoogleWorkspace-basic-SAML_v14_10.pngbin0 -> 39027 bytes
-rw-r--r--doc/user/group/saml_sso/img/GoogleWorkspace-claims_v14_10.pngbin0 -> 30571 bytes
-rw-r--r--doc/user/group/saml_sso/img/GoogleWorkspace-linkscert_v14_10.pngbin0 -> 50479 bytes
-rw-r--r--doc/user/group/saml_sso/img/Okta-GroupAttribute.pngbin0 -> 7744 bytes
-rw-r--r--doc/user/group/saml_sso/img/Okta-GroupSAML.pngbin0 -> 23681 bytes
-rw-r--r--doc/user/group/saml_sso/img/Okta-SM.pngbin0 -> 23386 bytes
-rw-r--r--doc/user/group/saml_sso/img/Okta-advancedsettings.pngbin0 -> 18912 bytes
-rw-r--r--doc/user/group/saml_sso/img/Okta-attributes.pngbin0 -> 13687 bytes
-rw-r--r--doc/user/group/saml_sso/img/Okta-linkscert.pngbin0 -> 55321 bytes
-rw-r--r--doc/user/group/saml_sso/img/OneLogin-SSOsettings.pngbin0 -> 25397 bytes
-rw-r--r--doc/user/group/saml_sso/img/OneLogin-app_details.pngbin0 -> 18305 bytes
-rw-r--r--doc/user/group/saml_sso/img/OneLogin-parameters.pngbin0 -> 5051 bytes
-rw-r--r--doc/user/group/saml_sso/img/OneLogin-userAdd.pngbin0 -> 10021 bytes
-rw-r--r--doc/user/group/saml_sso/img/azure_configure_group_claim.pngbin0 -> 14833 bytes
-rw-r--r--doc/user/group/saml_sso/img/okta_saml_settings.pngbin0 -> 21280 bytes
-rw-r--r--doc/user/group/saml_sso/img/okta_setting_username.pngbin0 -> 17785 bytes
-rw-r--r--doc/user/group/saml_sso/index.md12
-rw-r--r--doc/user/group/saml_sso/scim_setup.md6
-rw-r--r--doc/user/group/settings/group_access_tokens.md3
-rw-r--r--doc/user/group/subgroups/index.md26
31 files changed, 1126 insertions, 891 deletions
diff --git a/doc/user/group/access_and_permissions.md b/doc/user/group/access_and_permissions.md
new file mode 100644
index 00000000000..c469d6c2f6d
--- /dev/null
+++ b/doc/user/group/access_and_permissions.md
@@ -0,0 +1,260 @@
+---
+stage: Manage
+group: Workspace
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# Group access and permissions
+
+Configure your groups to control group permissions and access.
+
+## Group push rules **(PREMIUM)**
+
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/34370) in GitLab 12.8.
+> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/224129) in GitLab 13.4.
+
+Group push rules allow group maintainers to set
+[push rules](../project/repository/push_rules.md) for newly created projects in the specific group.
+
+To configure push rules for a group:
+
+1. Go to the groups's **Push Rules** page.
+1. Select the settings you want.
+1. Select **Save Push Rules**.
+
+The group's new subgroups have push rules set for them based on either:
+
+- The closest parent group with push rules defined.
+- Push rules set at the instance level, if no parent groups have push rules defined.
+
+## Restrict group access by IP address **(PREMIUM)**
+
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/1985) in GitLab 12.0.
+> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/issues/215410) from GitLab Ultimate to GitLab Premium in 13.1.
+
+To ensure only people from your organization can access particular
+resources, you can restrict access to groups by IP address. This group-level setting
+applies to:
+
+- The GitLab UI, including subgroups, projects, and issues.
+- [In GitLab 12.3 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/12874), the API.
+
+### Security implications
+
+You should consider some security implications before configuring IP address restrictions.
+
+- Restricting HTTP traffic on GitLab.com with IP address restrictions causes SSH requests (including Git operations over
+ SSH) to fail. For more information, see [the relevant issue](https://gitlab.com/gitlab-org/gitlab/-/issues/271673).
+- Administrators and group owners can access group settings from any IP address, regardless of IP restriction. However:
+ - Groups owners cannot access projects belonging to the group when accessing from a disallowed IP address.
+ - Administrators can access projects belonging to the group when accessing from a disallowed IP address.
+ Access to projects includes cloning code from them.
+ - Users can still see group and project names and hierarchies. Only the following are restricted:
+ - [Groups](../../api/groups.md), including all [group resources](../../api/api_resources.md#group-resources).
+ - [Project](../../api/projects.md), including all [project resources](../../api/api_resources.md#project-resources).
+- When you register a runner, it is not bound by the IP restrictions. When the runner requests a new job or an update to
+ a job's state, it is also not bound by the IP restrictions. But when the running CI/CD job sends Git requests from a
+ restricted IP address, the IP restriction prevents code from being cloned.
+- Users may still see some events from the IP restricted groups and projects on their dashboard. Activity may include
+ push, merge, issue, or comment events.
+
+### Restrict group access by IP address
+
+To restrict group access by IP address:
+
+1. Go to the group's **Settings > General** page.
+1. Expand the **Permissions and group features** section.
+1. In the **Allow access to the following IP addresses** field, enter IPv4 or IPv6 address ranges in CIDR notation.
+1. Select **Save changes**.
+
+In self-managed installations of GitLab 15.1 and later, you can also configure
+[globally-allowed IP address ranges](../admin_area/settings/visibility_and_access_controls.md#configure-globally-allowed-ip-address-ranges)
+at the group level.
+
+## Restrict group access by domain **(PREMIUM)**
+
+> - Support for specifying multiple email domains [added](https://gitlab.com/gitlab-org/gitlab/-/issues/33143) in GitLab 13.1.
+> - Support for restricting access to projects in the group [added](https://gitlab.com/gitlab-org/gitlab/-/issues/14004) in GitLab 14.1.2.
+> - Support for restricting group memberships to groups with a subset of the allowed email domains [added](https://gitlab.com/gitlab-org/gitlab/-/issues/354791) in GitLab 15.1.1
+
+You can prevent users with email addresses in specific domains from being added to a group and its projects.
+
+To restrict group access by domain:
+
+1. Go to the group's **Settings > General** page.
+1. Expand the **Permissions and group features** section.
+1. In the **Restrict membership by email** field, enter the domain names.
+1. Select **Save changes**.
+
+Any time you attempt to add a new user, the user's [primary email](../profile/index.md#change-your-primary-email) is compared against this list.
+Only users with a [primary email](../profile/index.md#change-your-primary-email) that matches any of the configured email domain restrictions
+can be added to the group.
+
+The most popular public email domains cannot be restricted, such as:
+
+- `gmail.com`, `yahoo.com`, `aol.com`, `icloud.com`
+- `hotmail.com`, `hotmail.co.uk`, `hotmail.fr`
+- `msn.com`, `live.com`, `outlook.com`
+
+When you share a group, both the source and target namespaces must allow the domains of the members' email addresses.
+
+NOTE:
+Removing a domain from the **Restrict membership by email** list does not remove the users with this email domain from the groups and projects under this group.
+Also, if you share a group or project with another group, the target group can add more email domains to its list that are not in the list of the source group.
+Hence, this feature does not ensure that the current members always conform to the **Restrict membership by email** list.
+
+## Prevent group sharing outside the group hierarchy
+
+You can configure a top-level group so its subgroups and projects
+cannot invite other groups outside of the top-level group's hierarchy.
+This option is only available for top-level groups.
+
+For example, in the following group and project hierarchy:
+
+- **Animals > Dogs > Dog Project**
+- **Animals > Cats**
+- **Plants > Trees**
+
+If you prevent group sharing outside the hierarchy for the **Animals** group:
+
+- **Dogs** can invite the group **Cats**.
+- **Dogs** cannot invite the group **Trees**.
+- **Dog Project** can invite the group **Cats**.
+- **Dog Project** cannot invite the group **Trees**.
+
+To prevent sharing outside of the group's hierarchy:
+
+1. On the top bar, select **Menu > Groups** and find your group.
+1. On the left sidebar, select **Settings > General**.
+1. Expand **Permissions and group features**.
+1. Select **Prevent members from sending invitations to groups outside of `<group_name>` and its subgroups**.
+1. Select **Save changes**.
+
+## Prevent a project from being shared with groups
+
+Prevent projects in a group from
+[sharing a project with another group](../project/members/share_project_with_groups.md)
+to enable tighter control over project access.
+
+To prevent a project from being shared with other groups:
+
+1. Go to the group's **Settings > General** page.
+1. Expand the **Permissions and group features** section.
+1. Select **Prevent sharing a project in `<group_name>` with other groups**.
+1. Select **Save changes**.
+
+This setting applies to all subgroups unless overridden by a group owner. Groups already
+added to a project lose access when the setting is enabled.
+
+## Prevent users from requesting access to a group
+
+As a group owner, you can prevent non-members from requesting access to
+your group.
+
+1. On the top bar, select **Menu > Groups**.
+1. Select **Your Groups**.
+1. Find the group and select it.
+1. From the left menu, select **Settings > General**.
+1. Expand the **Permissions and group features** section.
+1. Clear the **Allow users to request access** checkbox.
+1. Select **Save changes**.
+
+## Prevent project forking outside group **(PREMIUM)**
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/216987) in GitLab 13.3.
+
+By default, projects in a group can be forked.
+Optionally, on [GitLab Premium](https://about.gitlab.com/pricing/) or higher tiers,
+you can prevent the projects in a group from being forked outside of the current top-level group.
+
+This setting will be removed from the SAML setting page, and migrated to the
+group settings page. In the interim period, both of these settings are taken into consideration.
+If even one is set to `true`, then the group does not allow outside forks.
+
+To prevent projects from being forked outside the group:
+
+1. Go to the top-level group's **Settings > General** page.
+1. Expand the **Permissions and group features** section.
+1. Check **Prevent project forking outside current group**.
+1. Select **Save changes**.
+
+Existing forks are not removed.
+
+## Prevent members from being added to projects in a group **(PREMIUM)**
+
+As a group owner, you can prevent any new project membership for all
+projects in a group, allowing tighter control over project membership.
+
+For example, if you want to lock the group for an [Audit Event](../../administration/audit_events.md),
+you can guarantee that project membership cannot be modified during the audit.
+
+You can still invite groups or to add members to groups, implicitly giving members access to projects in the **locked** group.
+
+The setting does not cascade. Projects in subgroups observe the subgroup configuration, ignoring the parent group.
+
+To prevent members from being added to projects in a group:
+
+1. Go to the group's **Settings > General** page.
+1. Expand the **Permissions and group features** section.
+1. Under **Membership**, select **Prevent adding new members to projects within this group**.
+1. Select **Save changes**.
+
+All users who previously had permissions can no longer add members to a group.
+API requests to add a new user to a project are not possible.
+
+## Manage group memberships via LDAP **(PREMIUM SELF)**
+
+Group syncing allows LDAP groups to be mapped to GitLab groups. This provides more control over per-group user management. To configure group syncing, edit the `group_base` **DN** (`'OU=Global Groups,OU=GitLab INT,DC=GitLab,DC=org'`). This **OU** contains all groups that are associated with GitLab groups.
+
+Group links can be created by using either a CN or a filter. To create these group links, go to the group's **Settings > LDAP Synchronization** page. After configuring the link, it may take more than an hour for the users to sync with the GitLab group.
+
+For more information on the administration of LDAP and group sync, refer to the [main LDAP documentation](../../administration/auth/ldap/ldap_synchronization.md#group-sync).
+
+NOTE:
+When you add LDAP synchronization, if an LDAP user is a group member and they are not part of the LDAP group, they are removed from the group.
+
+### Create group links via CN **(PREMIUM SELF)**
+
+To create group links via CN:
+
+<!-- vale gitlab.Spelling = NO -->
+
+1. Select the **LDAP Server** for the link.
+1. As the **Sync method**, select `LDAP Group cn`.
+1. In the **LDAP Group cn** field, begin typing the CN of the group. There is a dropdown list with matching CNs in the configured `group_base`. Select your CN from this list.
+1. In the **LDAP Access** section, select the [permission level](../permissions.md) for users synced in this group.
+1. Select **Add Synchronization**.
+
+<!-- vale gitlab.Spelling = YES -->
+
+### Create group links via filter **(PREMIUM SELF)**
+
+To create group links via filter:
+
+1. Select the **LDAP Server** for the link.
+1. As the **Sync method**, select `LDAP user filter`.
+1. Input your filter in the **LDAP User filter** box. Follow the [documentation on user filters](../../administration/auth/ldap/index.md#set-up-ldap-user-filter).
+1. In the **LDAP Access** section, select the [permission level](../permissions.md) for users synced in this group.
+1. Select **Add Synchronization**.
+
+### Override user permissions **(PREMIUM SELF)**
+
+LDAP user permissions can be manually overridden by an administrator. To override a user's permissions:
+
+1. Go to your group's **Group information > Members** page.
+1. In the row for the user you are editing, select the pencil (**{pencil}**) icon.
+1. Select **Edit permissions** in the modal.
+
+Now you can edit the user's permissions from the **Members** page.
+
+## Troubleshooting
+
+### Verify if access is blocked by IP restriction
+
+If a user sees a 404 when they would normally expect access, and the problem is limited to a specific group, search the `auth.log` rails log for one or more of the following:
+
+- `json.message`: `'Attempting to access IP restricted group'`
+- `json.allowed`: `false`
+
+In viewing the log entries, compare the `remote.ip` with the list of
+[allowed IPs](#restrict-group-access-by-ip-address) for the group.
diff --git a/doc/user/group/custom_project_templates.md b/doc/user/group/custom_project_templates.md
index 6755bf9ffb9..43587dd54ef 100644
--- a/doc/user/group/custom_project_templates.md
+++ b/doc/user/group/custom_project_templates.md
@@ -30,7 +30,7 @@ To set up custom project templates in a group, add the subgroup that contains th
project templates to the group settings:
1. In the group, create a [subgroup](subgroups/index.md).
-1. [Add projects to the new subgroup](index.md#add-projects-to-a-group) as your templates.
+1. [Add projects to the new subgroup](manage.md#add-projects-to-a-group) as your templates.
1. In the left menu for the group, select **Settings > General**.
1. Expand **Custom project templates** and select the subgroup.
diff --git a/doc/user/group/index.md b/doc/user/group/index.md
index 56d1569c908..c7d92af8ee8 100644
--- a/doc/user/group/index.md
+++ b/doc/user/group/index.md
@@ -18,17 +18,9 @@ You can use groups to communicate with all of the members of the group at once.
For larger organizations, you can also create [subgroups](subgroups/index.md).
-## View groups
+For more information about creating and managing your groups, see [Manage groups](manage.md).
-To view groups:
-
-1. On the top bar, select **Menu > Groups**.
-1. Select **Your Groups**. All groups you are a member of are displayed.
-1. To view a list of public groups, select **Explore public groups**.
-
-You can also view groups by namespace.
-
-### Group visibility
+## Group visibility
Like projects, a group can be configured to limit the visibility of it to:
@@ -43,816 +35,6 @@ empty for anonymous users. The group page has a visibility level icon.
Administrator users cannot create a subgroup or project with a higher visibility level than that of
the immediate parent group.
-### Namespaces
-
-In GitLab, a *namespace* organizes related projects together.
-GitLab has two types of namespaces:
-
-- A *personal* namespace, which is based on your username. Projects under a personal namespace must be configured one at a time.
-- A *group* or *subgroup* namespace. In these namespaces, you can manage multiple projects at once.
-
-To determine whether you're viewing a group or personal namespace, you can view the URL. For example:
-
-| Namespace for | URL | Namespace |
-| ------------- | --- | --------- |
-| A user named `alex`. | `https://gitlab.example.com/alex` | `alex` |
-| A group named `alex-team`. | `https://gitlab.example.com/alex-team` | `alex-team` |
-| A group named `alex-team` with a subgroup named `marketing`. | `https://gitlab.example.com/alex-team/marketing` | `alex-team/marketing` |
-
-## Create a group
-
-To create a group:
-
-1. On the top bar, either:
- - Select **Menu > Groups**, and on the right, select **Create group**.
- - To the left of the search box, select the plus sign and then **New group**.
-1. Select **Create group**.
-1. Enter a name for the group in **Group name**. For a list of words that cannot be used as group names, see
- [reserved names](../reserved_names.md).
-1. Enter a path for the group in **Group URL**, which is used for the [namespace](#namespaces).
-1. Choose the [visibility level](../public_access.md).
-1. Personalize your GitLab experience by answering the following questions:
- - What is your role?
- - Who will be using this group?
- - What will you use this group for?
-1. Invite GitLab members or other users to join the group.
-
-<i class="fa fa-youtube-play youtube" aria-hidden="true"></i>
-For details about groups, watch [GitLab Namespaces (users, groups and subgroups)](https://youtu.be/r0sJgjR2f5A).
-
-## Add users to a group
-
-You can give a user access to all projects in a group.
-
-1. On the top bar, select **Menu > Groups** and find your group.
-1. On the left sidebar, select **Group information > Members**.
-1. Select **Invite members**.
-1. Fill in the fields.
- - The role applies to all projects in the group. [Learn more about permissions](../permissions.md).
- - On the **Access expiration date**, the user can no longer access projects in the group.
-1. Select **Invite**.
-
-Members that are not automatically added are displayed on the **Invited** tab.
-Users can be on this tab because they:
-
-- Have not yet accepted the invitation.
-- Are waiting for [approval from an administrator](../admin_area/moderate_users.md).
-- [Exceed the group user cap](#user-cap-for-groups).
-
-## Request access to a group
-
-As a user, you can request to be a member of a group, if an administrator allows it.
-
-1. On the top bar, select **Menu > Groups** and find your group.
-1. Under the group name, select **Request Access**.
-
-As many as ten of the most-recently-active group owners receive an email with your request.
-Any group owner can approve or decline the request.
-
-If you change your mind before your request is approved, select
-**Withdraw Access Request**.
-
-## Prevent users from requesting access to a group
-
-As a group owner, you can prevent non-members from requesting access to
-your group.
-
-1. On the top bar, select **Menu > Groups**.
-1. Select **Your Groups**.
-1. Find the group and select it.
-1. From the left menu, select **Settings > General**.
-1. Expand the **Permissions and group features** section.
-1. Clear the **Allow users to request access** checkbox.
-1. Select **Save changes**.
-
-## Change the owner of a group
-
-You can change the owner of a group. Each group must always have at least one
-member with the Owner role.
-
-- As an administrator:
- 1. Go to the group and from the left menu, select **Group information > Members**.
- 1. Give a different member the **Owner** role.
- 1. Refresh the page. You can now remove the **Owner** role from the original owner.
-- As the current group's owner:
- 1. Go to the group and from the left menu, select **Group information > Members**.
- 1. Give a different member the **Owner** role.
- 1. Have the new owner sign in and remove the **Owner** role from you.
-
-## Remove a member from the group
-
-Prerequisites:
-
-- You must have the Owner role.
-- The member must have direct membership in the group. If
- membership is inherited from a parent group, then the member can be removed
- from the parent group only.
-
-To remove a member from a group:
-
-1. Go to the group.
-1. From the left menu, select **Group information > Members**.
-1. Next to the member you want to remove, select **Delete**.
-1. Optional. On the **Remove member** confirmation box, select the
- **Also unassign this user from linked issues and merge requests** checkbox.
-1. Select **Remove member**.
-
-## Filter and sort members in a group
-
-> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/21727) in GitLab 12.6.
-> - [Improved](https://gitlab.com/gitlab-org/gitlab/-/issues/228675) in GitLab 13.7.
-> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/289911) in GitLab 13.8.
-
-To find members in a group, you can sort, filter, or search.
-
-### Filter a group
-
-Filter a group to find members. By default, all members in the group and subgroups are displayed.
-
-1. Go to the group and select **Group information > Members**.
-1. Above the list of members, in the **Filter members** box, enter filter criteria.
- - To view members in the group only, select **Membership = Direct**.
- - To view members of the group and its subgroups, select **Membership = Inherited**.
- - To view members with two-factor authentication enabled or disabled, select **2FA = Enabled** or **Disabled**.
- - [In GitLab 14.0 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/349887), to view GitLab users created by [SAML SSO](saml_sso/index.md) or [SCIM provisioning](saml_sso/scim_setup.md) select **Enterprise = true**.
-
-### Search a group
-
-You can search for members by name, username, or email.
-
-1. Go to the group and select **Group information > Members**.
-1. Above the list of members, in the **Filter members** box, enter search criteria.
-1. To the right of the **Filter members** box, select the magnifying glass (**{search}**).
-
-### Sort members in a group
-
-You can sort members by **Account**, **Access granted**, **Max role**, or **Last sign-in**.
-
-1. Go to the group and select **Group information > Members**.
-1. Above the list of members, on the top right, from the **Account** list, select
- the criteria to filter by.
-1. To switch the sort between ascending and descending, to the right of the **Account** list, select the
- arrow (**{sort-lowest}** or **{sort-highest}**).
-
-## Mention a group in an issue or merge request
-
-When you mention a group in a comment, every member of the group gets a to-do item
-added to their To-do list.
-
-1. Open the MR or issue.
-1. In a comment, type `@` followed by the user, group, or subgroup namespace.
- For example, `@alex`, `@alex-team`, or `@alex-team/marketing`.
-1. Select **Comment**.
-
-A to-do item is created for all the group and subgroup members.
-
-## Change the default branch protection of a group
-
-> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/7583) in GitLab 12.9.
-> - [Settings moved and renamed](https://gitlab.com/gitlab-org/gitlab/-/issues/340403) in GitLab 14.9.
-
-By default, every group inherits the branch protection set at the global level.
-
-To change this setting for a specific group, see [group level default branch protection](../project/repository/branches/default.md#group-level-default-branch-protection).
-
-To change this setting globally, see [initial default branch protection](../project/repository/branches/default.md#instance-level-default-branch-protection).
-
-NOTE:
-In [GitLab Premium or higher](https://about.gitlab.com/pricing/), GitLab administrators can choose to [disable group owners from updating the default branch protection](../project/repository/branches/default.md#prevent-overrides-of-default-branch-protection).
-
-## Add projects to a group
-
-There are two different ways to add a new project to a group:
-
-- Select a group, and then select **New project**. You can then continue [creating your project](../../user/project/working_with_projects.md#create-a-project).
-- While you are creating a project, select a group from the dropdown list.
-
- ![Select group](img/select_group_dropdown_13_10.png)
-
-### Specify who can add projects to a group
-
-> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/2534) in GitLab 10.5.
-> - [Moved](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/25975) from GitLab Premium to GitLab Free in 11.10.
-
-By default, users with at least the Developer role can create projects under a group.
-
-To change this setting for a specific group:
-
-1. On the top bar, select **Menu > Groups**.
-1. Select **Your Groups**.
-1. Find the group and select it.
-1. From the left menu, select **Settings > General**.
-1. Expand the **Permissions and group features** section.
-1. Select the desired option in the **Roles allowed to create projects** dropdown list.
-1. Select **Save changes**.
-
-To change this setting globally, see [Default project creation protection](../admin_area/settings/visibility_and_access_controls.md#define-which-roles-can-create-projects).
-
-## Group activity analytics **(PREMIUM)**
-
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/207164) in GitLab 12.10 as a [Beta feature](../../policy/alpha-beta-support.md#beta-features).
-
-For a group, you can view how many merge requests, issues, and members were created in the last 90 days.
-
-These Group Activity Analytics can be enabled with the `group_activity_analytics` [feature flag](../../development/feature_flags/index.md#enabling-a-feature-flag-locally-in-development).
-
-![Recent Group Activity](img/group_activity_analytics_v13_10.png)
-
-Changes to [group wikis](../project/wiki/group.md) do not appear in group activity analytics.
-
-### View group activity
-
-You can view the most recent actions taken in a group, either in your browser or in an RSS feed:
-
-1. On the top bar, select **Menu > Groups**.
-1. Select **Your Groups**.
-1. Find the group and select it.
-1. On the left sidebar, select **Group information > Activity**.
-
-To view the activity feed in Atom format, select the
-**RSS** (**{rss}**) icon.
-
-## Share a group with another group
-
-> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/18328) in GitLab 12.7.
-> - [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/247208) in GitLab 13.11 from a form to a modal window [with a flag](../feature_flags.md). Disabled by default.
-> - Modal window [enabled on GitLab.com and self-managed](https://gitlab.com/gitlab-org/gitlab/-/issues/247208) in GitLab 14.8.
-> - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/352526) in GitLab 14.9.
- [Feature flag `invite_members_group_modal`](https://gitlab.com/gitlab-org/gitlab/-/issues/352526) removed.
-
-Similar to how you [share a project with a group](../project/members/share_project_with_groups.md),
-you can share a group with another group. To invite a group, you must be a member of it. Members get direct access
-to the shared group. This includes members who inherited group membership from a parent group.
-
-To share a given group, for example, `Frontend` with another group, for example,
-`Engineering`:
-
-1. Go to the `Frontend` group.
-1. On the left sidebar, select **Group information > Members**.
-1. Select **Invite a group**.
-1. In the **Select a group to invite** list, select `Engineering`.
-1. Select a [role](../permissions.md) as maximum access level.
-1. Select **Invite**.
-
-After sharing the `Frontend` group with the `Engineering` group:
-
-- The **Groups** tab lists the `Engineering` group.
-- The **Groups** tab lists a group regardless of whether it is a public or private group.
-- All members of the `Engineering` group have access to the `Frontend` group. The same access levels of the members apply up to the maximum access level selected when sharing the group.
-
-## Manage group memberships via LDAP **(PREMIUM SELF)**
-
-Group syncing allows LDAP groups to be mapped to GitLab groups. This provides more control over per-group user management. To configure group syncing, edit the `group_base` **DN** (`'OU=Global Groups,OU=GitLab INT,DC=GitLab,DC=org'`). This **OU** contains all groups that are associated with GitLab groups.
-
-Group links can be created by using either a CN or a filter. To create these group links, go to the group's **Settings > LDAP Synchronization** page. After configuring the link, it may take more than an hour for the users to sync with the GitLab group.
-
-For more information on the administration of LDAP and group sync, refer to the [main LDAP documentation](../../administration/auth/ldap/ldap_synchronization.md#group-sync).
-
-NOTE:
-When you add LDAP synchronization, if an LDAP user is a group member and they are not part of the LDAP group, they are removed from the group.
-
-### Create group links via CN **(PREMIUM SELF)**
-
-To create group links via CN:
-
-<!-- vale gitlab.Spelling = NO -->
-
-1. Select the **LDAP Server** for the link.
-1. As the **Sync method**, select `LDAP Group cn`.
-1. In the **LDAP Group cn** field, begin typing the CN of the group. There is a dropdown list with matching CNs in the configured `group_base`. Select your CN from this list.
-1. In the **LDAP Access** section, select the [permission level](../permissions.md) for users synced in this group.
-1. Select **Add Synchronization**.
-
-<!-- vale gitlab.Spelling = YES -->
-
-### Create group links via filter **(PREMIUM SELF)**
-
-To create group links via filter:
-
-1. Select the **LDAP Server** for the link.
-1. As the **Sync method**, select `LDAP user filter`.
-1. Input your filter in the **LDAP User filter** box. Follow the [documentation on user filters](../../administration/auth/ldap/index.md#set-up-ldap-user-filter).
-1. In the **LDAP Access** section, select the [permission level](../permissions.md) for users synced in this group.
-1. Select **Add Synchronization**.
-
-### Override user permissions **(PREMIUM SELF)**
-
-LDAP user permissions can be manually overridden by an administrator. To override a user's permissions:
-
-1. Go to your group's **Group information > Members** page.
-1. In the row for the user you are editing, select the pencil (**{pencil}**) icon.
-1. Select **Edit permissions** in the modal.
-
-Now you can edit the user's permissions from the **Members** page.
-
-## Transfer a group
-
-You can transfer groups in the following ways:
-
-- Transfer a subgroup to a new parent group.
-- Convert a top-level group into a subgroup by transferring it to the desired group.
-- Convert a subgroup into a top-level group by transferring it out of its current group.
-
-When transferring groups, note:
-
-- Changing a group's parent can have unintended side effects. See [what happens when a repository path changes](../project/repository/index.md#what-happens-when-a-repository-path-changes).
-- You can only transfer groups to groups you manage.
-- You must update your local repositories to point to the new location.
-- If the immediate parent group's visibility is lower than the group's current visibility, visibility levels for subgroups and projects change to match the new parent group's visibility.
-- Only explicit group membership is transferred, not inherited membership. If the group's owners have only inherited membership, this leaves the group without an owner. In this case, the user transferring the group becomes the group's owner.
-- Transfers fail if [packages](../packages/index.md) exist in any of the projects in the group, or in any of its subgroups.
-
-## Change a group's path
-
-Changing a group's path (group URL) can have unintended side effects. Read
-[how redirects behave](../project/repository/index.md#what-happens-when-a-repository-path-changes)
-before you proceed.
-
-If you are changing the path so it can be claimed by another group or user,
-you must rename the group too. Both names and paths must
-be unique.
-
-To retain ownership of the original namespace and protect the URL redirects,
-create a new group and transfer projects to it instead.
-
-To change your group path (group URL):
-
-1. Go to your group's **Settings > General** page.
-1. Expand the **Advanced** section.
-1. Under **Change group URL**, enter a new name.
-1. Select **Change group URL**.
-
-WARNING:
-It is not possible to rename a namespace if it contains a
-project with [Container Registry](../packages/container_registry/index.md) tags,
-because the project cannot be moved.
-
-## Use a custom name for the initial branch
-
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/43290) in GitLab 13.6.
-
-When you create a new project in GitLab, a default branch is created with the
-first push. The group owner can
-[customize the initial branch](../project/repository/branches/default.md#group-level-custom-initial-branch-name)
-for the group's projects to meet your group's needs.
-
-## Remove a group
-
-To remove a group and its contents:
-
-1. On the top bar, select **Menu > Groups** and find your group.
-1. On the left sidebar, select **Settings > General**.
-1. Expand the **Advanced** section.
-1. In the **Remove group** section, select **Remove group**.
-1. Type the group name.
-1. Select **Confirm**.
-
-A group can also be removed from the groups dashboard:
-
-1. On the top bar, select **Menu > Groups**.
-1. Select **Your Groups**.
-1. Select (**{ellipsis_v}**) for the group you want to delete.
-1. Select **Delete**.
-1. In the Remove group section, select **Remove group**.
-1. Type the group name.
-1. Select **Confirm**.
-
-This action removes the group. It also adds a background job to delete all projects in the group.
-
-Specifically:
-
-- In [GitLab 12.8 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/33257), on [GitLab Premium](https://about.gitlab.com/pricing/premium/) or higher tiers, this action adds a background job to mark a group for deletion. By default, the job schedules the deletion 7 days in the future. You can modify this waiting period through the [instance settings](../admin_area/settings/visibility_and_access_controls.md#deletion-protection).
-- In [GitLab 13.6 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/39504), if the user who sets up the deletion is removed from the group before the
-deletion happens, the job is cancelled, and the group is no longer scheduled for deletion.
-
-## Remove a group immediately **(PREMIUM)**
-
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/336985) in GitLab 14.2.
-
-If you don't want to wait, you can remove a group immediately.
-
-Prerequisites:
-
-- You must have at least the Owner role for a group.
-- You have [marked the group for deletion](#remove-a-group).
-
-To immediately remove a group marked for deletion:
-
-1. On the top bar, select **Menu > Groups** and find your group.
-1. On the left sidebar, select **Settings > General**.
-1. Expand **Advanced**.
-1. In the "Permanently remove group" section, select **Remove group**.
-1. Confirm the action when asked to.
-
-Your group, its subgroups, projects, and all related resources, including issues and merge requests,
-are deleted.
-
-## Restore a group **(PREMIUM)**
-
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/33257) in GitLab 12.8.
-
-To restore a group that is marked for deletion:
-
-1. Go to your group's **Settings > General** page.
-1. Expand the **Path, transfer, remove** section.
-1. In the Restore group section, select **Restore group**.
-
-## Prevent group sharing outside the group hierarchy
-
-You can configure a top-level group so its subgroups and projects
-cannot invite other groups outside of the top-level group's hierarchy.
-This option is only available for top-level groups.
-
-For example, in the following group and project hierarchy:
-
-- **Animals > Dogs > Dog Project**
-- **Animals > Cats**
-- **Plants > Trees**
-
-If you prevent group sharing outside the hierarchy for the **Animals** group:
-
-- **Dogs** can invite the group **Cats**.
-- **Dogs** cannot invite the group **Trees**.
-- **Dog Project** can invite the group **Cats**.
-- **Dog Project** cannot invite the group **Trees**.
-
-To prevent sharing outside of the group's hierarchy:
-
-1. On the top bar, select **Menu > Groups** and find your group.
-1. On the left sidebar, select **Settings > General**.
-1. Expand **Permissions and group features**.
-1. Select **Members cannot invite groups outside of `<group_name>` and its subgroups**.
-1. Select **Save changes**.
-
-## Prevent a project from being shared with groups
-
-Prevent projects in a group from [sharing
-a project with another group](../project/members/share_project_with_groups.md) to enable tighter control over project access.
-
-To prevent a project from being shared with other groups:
-
-1. Go to the group's **Settings > General** page.
-1. Expand the **Permissions and group features** section.
-1. Select **Projects in `<group_name>` cannot be shared with other groups**.
-1. Select **Save changes**.
-
-This setting applies to all subgroups unless overridden by a group owner. Groups already
-added to a project lose access when the setting is enabled.
-
-## User cap for groups
-
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/330027) in GitLab 14.7.
-
-FLAG:
-On self-managed GitLab, this feature is not available. On GitLab.com, this feature is available for some groups.
-This feature is not ready for production use.
-
-When the number of billable members reaches the user cap, new users can't be added to the group
-without being approved by the group owner.
-
-Groups with the user cap feature enabled have [group sharing](#share-a-group-with-another-group)
-disabled for the group and its subgroups.
-
-### Specify a user cap for a group
-
-Prerequisite:
-
-- You must be assigned the Owner role) for the group.
-
-To specify a user cap:
-
-1. On the top bar, select **Menu > Groups** and find your group.
- You can set a cap on the top-level group only.
-1. On the left sidebar, select **Settings > General**.
-1. Expand **Permissions and group features**.
-1. In the **User cap** box, enter the desired number of users.
-1. Select **Save changes**.
-
-If you already have more users in the group than the user cap value, users
-are not removed. However, you can't add more without approval.
-
-Increasing the user cap does not approve pending members.
-
-### Remove the user cap for a group
-
-You can remove the user cap, so there is no limit on the number of members you can add to a group.
-
-Prerequisite:
-
-- You must be assigned the Owner role) for the group.
-
-To remove the user cap:
-
-1. On the top bar, select **Menu > Groups** and find your group.
-1. On the left sidebar, select **Settings > General**.
-1. Expand **Permissions and group features**.
-1. In the **User cap** box, delete the value.
-1. Select **Save changes**.
-
-Decreasing the user cap does not approve pending members.
-
-### Approve pending members for a group
-
-When the number of billable users reaches the user cap, any new member is put in a pending state
-and must be approved.
-
-Pending members do not count as billable. Members count as billable only after they have been approved and are no longer in a pending state.
-
-Prerequisite:
-
-- You must be assigned the Owner role) for the group.
-
-To approve members that are pending because they've exceeded the user cap:
-
-1. On the top bar, select **Menu > Groups** and find your group.
-1. On the left sidebar, select **Settings > Usage Quotas**.
-1. On the **Seats** tab, under the alert, select **View pending approvals**.
-1. For each member you want to approve, select **Approve**.
-
-## Prevent members from being added to projects in a group **(PREMIUM)**
-
-As a group owner, you can prevent any new project membership for all
-projects in a group, allowing tighter control over project membership.
-
-For example, if you want to lock the group for an [Audit Event](../../administration/audit_events.md),
-you can guarantee that project membership cannot be modified during the audit.
-
-You can still invite groups or to add members to groups, implicitly giving members access to projects in the **locked** group.
-
-The setting does not cascade. Projects in subgroups observe the subgroup configuration, ignoring the parent group.
-
-To prevent members from being added to projects in a group:
-
-1. Go to the group's **Settings > General** page.
-1. Expand the **Permissions and group features** section.
-1. Under **Membership**, select **Users cannot be added to projects in this group**.
-1. Select **Save changes**.
-
-All users who previously had permissions can no longer add members to a group.
-API requests to add a new user to a project are not possible.
-
-## Export members as CSV **(PREMIUM)**
-
-> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/287940) in GitLab 14.2.
-> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/336520) in GitLab 14.5.
-
-You can export a list of members in a group or subgroup as a CSV.
-
-1. Go to your group or subgroup and select either **Group information > Members** or **Subgroup information > Members**.
-1. Select **Export as CSV**.
-1. After the CSV file has been generated, it is emailed as an attachment to the user that requested it.
-
-## Group access restriction by IP address **(PREMIUM)**
-
-> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/1985) in GitLab 12.0.
-> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/issues/215410) from GitLab Ultimate to GitLab Premium in 13.1.
-
-To ensure only people from your organization can access particular
-resources, you can restrict access to groups by IP address. This group-level setting
-applies to:
-
-- The GitLab UI, including subgroups, projects, issues, and pages.
-- [In GitLab 12.3 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/12874), the API.
-- Using Git over SSH on GitLab.com.
-
-### Security implications
-
-You should consider some security implications before configuring IP address restrictions.
-
-- Administrators and group owners can access group settings from any IP address, regardless of IP restriction. However:
- - Groups owners cannot access projects belonging to the group when accessing from a disallowed IP address.
- - Administrators can access projects belonging to the group when accessing from a disallowed IP address.
- Access to projects includes cloning code from them.
- - Users can still see group and project names and hierarchies. Only the following are restricted:
- - [Groups](../../api/groups.md), including all [group resources](../../api/api_resources.md#group-resources).
- - [Project](../../api/projects.md), including all [project resources](../../api/api_resources.md#project-resources).
-- When you register a runner, it is not bound by the IP restrictions. When the runner requests a new job or an update to
- a job's state, it is also not bound by the IP restrictions. But when the running CI/CD job sends Git requests from a
- restricted IP address, the IP restriction prevents code from being cloned.
-- Users may still see some events from the IP restricted groups and projects on their dashboard. Activity may include
- push, merge, issue, or comment events.
-- IP access restrictions for Git operations via SSH are supported only on GitLab SaaS.
- IP access restrictions applied to self-managed instances block SSH completely.
-
-### Restrict group access by IP address
-
-To restrict group access by IP address:
-
-1. Go to the group's **Settings > General** page.
-1. Expand the **Permissions and group features** section.
-1. In the **Restrict access by IP address** field, enter IPv4 or IPv6 address ranges in CIDR notation.
-1. Select **Save changes**.
-
-In self-managed installations of GitLab 15.1 and later, you can also configure
-[globally-allowed IP address ranges](../admin_area/settings/visibility_and_access_controls.md#configure-globally-allowed-ip-address-ranges)
-at the group level.
-
-## Restrict group access by domain **(PREMIUM)**
-
-> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/7297) in GitLab 12.2.
-> - Support for specifying multiple email domains [added](https://gitlab.com/gitlab-org/gitlab/-/issues/33143) in GitLab 13.1.
-> - Support for restricting access to projects in the group [added](https://gitlab.com/gitlab-org/gitlab/-/issues/14004) in GitLab 14.1.2.
-> - Support for restricting group memberships to groups with a subset of the allowed email domains [added](https://gitlab.com/gitlab-org/gitlab/-/issues/354791) in GitLab 15.0.1
-
-You can prevent users with email addresses in specific domains from being added to a group and its projects.
-
-To restrict group access by domain:
-
-1. Go to the group's **Settings > General** page.
-1. Expand the **Permissions and group features** section.
-1. In the **Restrict membership by email** field, enter the domain names.
-1. Select **Save changes**.
-
-Any time you attempt to add a new user, the user's [primary email](../profile/index.md#change-your-primary-email) is compared against this list.
-Only users with a [primary email](../profile/index.md#change-your-primary-email) that matches any of the configured email domain restrictions
-can be added to the group.
-
-The most popular public email domains cannot be restricted, such as:
-
-- `gmail.com`, `yahoo.com`, `aol.com`, `icloud.com`
-- `hotmail.com`, `hotmail.co.uk`, `hotmail.fr`
-- `msn.com`, `live.com`, `outlook.com`
-
-When you share a group, both the source and target namespaces must allow the domains of the members' email addresses.
-
-## Restrict Git access protocols
-
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/365601) in GitLab 15.1 [with a flag](../../administration/feature_flags.md) named `group_level_git_protocol_control`. Disabled by default.
-
-FLAG:
-On self-managed GitLab, by default this feature is not available. To make it available, ask an administrator to
-[enable the feature flag](../../administration/feature_flags.md) named `group_level_git_protocol_control`. On GitLab.com,
-this feature is available.
-
-You can set the permitted protocols used to access a group's repositories to either SSH, HTTPS, or both. This setting
-is disabled when the [instance setting](../admin_area/settings/visibility_and_access_controls.md#configure-enabled-git-access-protocols) is
-configured by an administrator.
-
-To change the permitted Git access protocols for a group:
-
-1. Go to the group's **Settings > General** page.
-1. Expand the **Permissions and group features** section.
-1. Choose the permitted protocols from **Enabled Git access protocols**.
-1. Select **Save changes**.
-
-## Group file templates **(PREMIUM)**
-
-Use group file templates to share a set of templates for common file
-types with every project in a group. It is analogous to the
-[instance template repository](../admin_area/settings/instance_template_repository.md).
-The selected project should follow the same naming conventions as
-are documented on that page.
-
-You can only choose projects in the group as the template source.
-This includes projects shared with the group, but it **excludes** projects in
-subgroups or parent groups of the group being configured.
-
-You can configure this feature for both subgroups and immediate parent groups. A project
-in a subgroup has access to the templates for that subgroup, as well as
-any immediate parent groups.
-
-To learn how to create templates for issues and merge requests, see
-[Description templates](../project/description_templates.md).
-
-Define project templates at a group level by setting a group as the template source.
-[Learn more about group-level project templates](custom_project_templates.md).
-
-### Enable group file template **(PREMIUM)**
-
-To enable group file templates:
-
-1. Go to the group's **Settings > General** page.
-1. Expand the **Templates** section.
-1. Choose a project to act as the template repository.
-1. Select **Save changes**.
-
-## Disable email notifications
-
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/23585) in GitLab 12.2.
-
-You can disable all email notifications related to the group, which includes its subgroups and projects.
-
-To disable email notifications:
-
-1. Go to the group's **Settings > General** page.
-1. Expand the **Permissions and group features** section.
-1. Select **Email notifications are disabled**.
-1. Select **Save changes**.
-
-## Disable group mentions
-
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/21301) in GitLab 12.6.
-
-You can prevent users from being added to a conversation and getting notified when
-anyone [mentions a group](../discussions/index.md#mentions)
-in which those users are members.
-
-Groups with disabled mentions are visualized accordingly in the autocompletion dropdown list.
-
-This is particularly helpful for groups with a large number of users.
-
-To disable group mentions:
-
-1. Go to the group's **Settings > General** page.
-1. Expand the **Permissions and group features** section.
-1. Select **Group mentions are disabled**.
-1. Select **Save changes**.
-
-## Enable delayed project deletion **(PREMIUM)**
-
-> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/220382) in GitLab 13.2.
-> - [Inheritance and enforcement added](https://gitlab.com/gitlab-org/gitlab/-/issues/321724) in GitLab 13.11.
-> - [Instance setting to enable by default added](https://gitlab.com/gitlab-org/gitlab/-/issues/255449) in GitLab 14.2.
-> - [Instance setting is inherited and enforced when disabled](https://gitlab.com/gitlab-org/gitlab/-/issues/352960) in GitLab 15.1.
-> - [User interface changed](https://gitlab.com/gitlab-org/gitlab/-/issues/352961) in GitLab 15.1.
-
-[Delayed project deletion](../project/settings/index.md#delayed-project-deletion) is locked and disabled unless the instance-level settings for
-[deletion protection](../admin_area/settings/visibility_and_access_controls.md#deletion-protection) are enabled for either groups only or groups and projects.
-When enabled on groups, projects in the group are deleted after a period of delay. During this period, projects are in a read-only state and can be restored.
-The default period is seven days but [is configurable at the instance level](../admin_area/settings/visibility_and_access_controls.md#retention-period).
-
-On self-managed GitLab, projects are deleted immediately by default.
-In GitLab 14.2 and later, an administrator can
-[change the default setting](../admin_area/settings/visibility_and_access_controls.md#deletion-protection)
-for projects in newly-created groups.
-
-On GitLab.com, see the [GitLab.com settings page](../gitlab_com/index.md#delayed-project-deletion) for
-the default setting.
-
-To enable delayed deletion of projects in a group:
-
-1. Go to the group's **Settings > General** page.
-1. Expand the **Permissions and group features** section.
-1. Scroll to:
- - (GitLab 15.1 and later) **Deletion protection** and select **Keep deleted projects**.
- - (GitLab 15.0 and earlier) **Enable delayed project deletion** and tick the checkbox.
-1. Optional. To prevent subgroups from changing this setting, select:
- - (GitLab 15.1 and later), **Enforce deletion protection for all subgroups**
- - (GitLab 15.0 and earlier), **Enforce for all subgroups**.
-1. Select **Save changes**.
-
-NOTE:
-In GitLab 13.11 and above the group setting for delayed project deletion is inherited by subgroups. As discussed in [Cascading settings](../../development/cascading_settings.md) inheritance can be overridden, unless enforced by an ancestor.
-
-## Prevent project forking outside group **(PREMIUM)**
-
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/216987) in GitLab 13.3.
-
-By default, projects in a group can be forked.
-Optionally, on [GitLab Premium](https://about.gitlab.com/pricing/) or higher tiers,
-you can prevent the projects in a group from being forked outside of the current top-level group.
-
-This setting will be removed from the SAML setting page, and migrated to the
-group settings page. In the interim period, both of these settings are taken into consideration.
-If even one is set to `true`, then the group does not allow outside forks.
-
-To prevent projects from being forked outside the group:
-
-1. Go to the top-level group's **Settings > General** page.
-1. Expand the **Permissions and group features** section.
-1. Check **Prevent project forking outside current group**.
-1. Select **Save changes**.
-
-Existing forks are not removed.
-
-## Group push rules **(PREMIUM)**
-
-> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/34370) in GitLab 12.8.
-> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/224129) in GitLab 13.4.
-
-Group push rules allow group maintainers to set
-[push rules](../project/repository/push_rules.md) for newly created projects in the specific group.
-
-To configure push rules for a group:
-
-1. Go to the groups's **Push Rules** page.
-1. Select the settings you want.
-1. Select **Save Push Rules**.
-
-The group's new subgroups have push rules set for them based on either:
-
-- The closest parent group with push rules defined.
-- Push rules set at the instance level, if no parent groups have push rules defined.
-
-## Group merge request approval settings **(PREMIUM)**
-
-> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/285458) in GitLab 13.9. [Deployed behind the `group_merge_request_approval_settings_feature_flag` flag](../../administration/feature_flags.md), disabled by default.
-> - [Enabled by default](https://gitlab.com/gitlab-org/gitlab/-/issues/285410) in GitLab 14.5.
-> - [Feature flag `group_merge_request_approval_settings_feature_flag`](https://gitlab.com/gitlab-org/gitlab/-/issues/343872) removed in GitLab 14.9.
-
-Group approval settings manage [project merge request approval settings](../project/merge_requests/approvals/settings.md)
-at the top-level group level. These settings [cascade to all projects](../project/merge_requests/approvals/settings.md#settings-cascading)
-that belong to the group.
-
-To view the merge request approval settings for a group:
-
-1. Go to the top-level group's **Settings > General** page.
-1. Expand the **Merge request approvals** section.
-1. Select the settings you want.
-1. Select **Save changes**.
-
-Support for group-level settings for merge request approval rules is tracked in this [epic](https://gitlab.com/groups/gitlab-org/-/epics/4367).
-
## Related topics
- [Group wikis](../project/wiki/index.md)
@@ -874,31 +56,8 @@ Support for group-level settings for merge request approval rules is tracked in
- [Integrations](../admin_area/settings/project_integration_management.md).
- [Transfer a project into a group](../project/settings/index.md#transfer-a-project-to-another-namespace).
- [Share a project with a group](../project/members/share_project_with_groups.md): Give all group members access to the project at once.
-- [Lock the sharing with group feature](#prevent-a-project-from-being-shared-with-groups).
+- [Lock the sharing with group feature](access_and_permissions.md#prevent-a-project-from-being-shared-with-groups).
- [Enforce two-factor authentication (2FA)](../../security/two_factor_authentication.md#enforce-2fa-for-all-users-in-a-group): Enforce 2FA
for all group members.
- Namespaces [API](../../api/namespaces.md) and [Rake tasks](../../raketasks/index.md).
- [Control access and visibility](../admin_area/settings/visibility_and_access_controls.md).
-
-## Troubleshooting
-
-### Verify if access is blocked by IP restriction
-
-If a user sees a 404 when they would normally expect access, and the problem is limited to a specific group, search the `auth.log` rails log for one or more of the following:
-
-- `json.message`: `'Attempting to access IP restricted group'`
-- `json.allowed`: `false`
-
-In viewing the log entries, compare the `remote.ip` with the list of
-[allowed IPs](#group-access-restriction-by-ip-address) for the group.
-
-### Validation errors on namespaces and groups
-
-[GitLab 14.4 and later](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/70365) performs
-the following checks when creating or updating namespaces or groups:
-
-- Namespaces must not have parents.
-- Group parents must be groups and not namespaces.
-
-In the unlikely event that you see these errors in your GitLab installation,
-[contact Support](https://about.gitlab.com/support/) so that we can improve this validation.
diff --git a/doc/user/group/iterations/index.md b/doc/user/group/iterations/index.md
index 858b13b87b8..530635802a6 100644
--- a/doc/user/group/iterations/index.md
+++ b/doc/user/group/iterations/index.md
@@ -35,10 +35,22 @@ In GitLab, iterations are similar to milestones, with a few differences:
## View the iterations list
-To view the iterations list, go to **{issues}** **Issues > Iterations**.
+To view the iterations list:
+
+1. On the top bar, select **Menu > Projects** and find your project.
+1. Select **Issues > Iterations**.
+
To view all the iterations in a cadence, ordered by descending date, select that iteration cadence.
From there you can create a new iteration or select an iteration to get a more detailed view.
+NOTE:
+If a project has issue tracking
+[turned off](../../project/settings/index.md#configure-project-visibility-features-and-permissions),
+you can view the iterations list
+by going to its URL. To do so, add: `/-/cadences` to your project or group URL.
+For example `https://gitlab.com/gitlab-org/sample-data-templates/sample-gitlab-project/-/cadences`.
+This is tracked in [issue 339009](https://gitlab.com/gitlab-org/gitlab/-/issues/339009).
+
## Create an iteration
> - [Deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/356069) in GitLab 14.10.
@@ -175,6 +187,7 @@ To group issues by label:
> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/5077) in GitLab 14.1 [with a flag](../../../administration/feature_flags.md), named `iteration_cadences`. Disabled by default.
> - [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/354977) in GitLab 15.0: All scheduled iterations must start on the same day of the week as the cadence start day. Start date of cadence cannot be edited after the first iteration starts.
> - [Enabled on GitLab.com and self-managed](https://gitlab.com/gitlab-org/gitlab/-/issues/354878) in GitLab 15.0.
+> - [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/367493) in GitLab 15.3: A new automation start date can be selected for cadence. Upcoming iterations will be scheduled to start on the same day of the week as the changed start date.
Iteration cadences automate iteration scheduling. You can use them to
automate creating iterations every 1, 2, 3, or 4 weeks. You can also
@@ -195,7 +208,7 @@ To create an iteration cadence:
1. Select **New iteration cadence**.
1. Complete the fields.
- Enter the title and description of the iteration cadence.
- - Enter the first iteration start date of the iteration cadence. Iterations will be scheduled to
+ - Select the automation start date of the iteration cadence. Iterations will be scheduled to
begin on the same day of the week as the day of the week of the start date.
- From the **Duration** dropdown list, select how many weeks each iteration should last.
- From the **Upcoming iterations** dropdown list, select how many upcoming iterations should be
@@ -215,10 +228,9 @@ To edit an iteration cadence:
1. On the left sidebar, select **Issues > Iterations**.
1. Select **Edit iteration cadence**.
-When you edit the **Duration**, **Upcoming iterations**, or **First iteration start date** fields,
-only upcoming iterations are affected.
-
-You can edit the first iteration start date of a cadence if the cadence has not started yet.
+When you edit the **Automation start date** field,
+you must set a new start date that doesn't overlap with the existing
+current or past iterations.
Editing **Upcoming iterations** is a non-destructive action.
If ten upcoming iterations already exist, changing the number under **Upcoming iterations** to `2`
@@ -261,25 +273,12 @@ To upgrade the iteration cadence to use the automation features:
1. On the top bar, select **Menu > Groups** and find your group.
1. On the left sidebar, select **Issues > Iterations**.
1. Select the three-dot menu (**{ellipsis_v}**) > **Edit cadence** for the cadence you want to upgrade.
-1. Complete the required fields **Duration** and **Upcoming iterations**.
+1. Complete the required fields **Duration**, **Upcoming iterations**, and **Automation start date**.
+For **Automation start date**, you can select any date that doesn't overlap with the existing open iterations.
+If you have upcoming iterations, the automatic scheduling adjusts them appropriately to fit
+your chosen duration.
1. Select **Save changes**.
-#### Start dates of converted cadences
-
-The first iteration start date of your converted cadence is set to the start date of its
-**first** existing iteration.
-
-If you attempt to set a new start date, the conversion fails with an error message.
-If your manual cadence is empty, converting it to use automatic scheduling is effectively
-the same as creating a new automated cadence.
-
-GitLab will start scheduling new iterations on the same day of the week as the start date,
-starting from the nearest such day from the current date.
-
-During the conversion process GitLab does not delete or modify existing **ongoing** or
-**closed** iterations. If you have iterations with start dates in the future,
-they are updated to fit your cadence settings.
-
#### Converted cadences example
For example, suppose it's Friday, April 15, and you have three iterations in a manual cadence:
@@ -288,20 +287,21 @@ For example, suppose it's Friday, April 15, and you have three iterations in a m
- Tuesday, April 12 - Friday, April 15 (ongoing)
- Tuesday, May 3 - Friday, May 6 (upcoming)
-On Friday, April 15, you convert the manual cadence
-to automate scheduling iterations every week, up to two upcoming iterations.
-
-The first iteration is closed, and the second iteration is ongoing,
-so they aren't deleted or modified in the conversion process.
-
-To observe the weekly duration, the third iteration is updated so that it:
+The earliest possible **Automation start date** you can choose
+is Saturday, April 16 in this scenario, because April 15 overlaps with
+the ongoing iteration.
-- Starts on Monday, April 18 - which is the nearest date that is Monday.
-- Ends on Sunday, April 24.
-
-Finally, to always have two upcoming iterations, an additional iteration is scheduled:
+If you select Monday, April 18 as the automation start date to
+automate scheduling iterations every week up to two upcoming iterations,
+after the conversion you have the following iterations:
- Monday, April 4 - Friday, April 8 (closed)
- Tuesday, April 12 - Friday, April 15 (ongoing)
- Monday, April 18 - Sunday, April 24 (upcoming)
- Monday, April 25 - Sunday, May 1 (upcoming)
+
+Your existing upcoming iteration "Tuesday, April 12 - Friday, April 15"
+is changed to "April 18 - Sunday, April 24".
+
+An additional upcoming iteration "April 25 - Sunday, May 1" is scheduled
+to satisfy the requirement that there are at least two upcoming iterations scheduled.
diff --git a/doc/user/group/manage.md b/doc/user/group/manage.md
new file mode 100644
index 00000000000..a9cc6cc8432
--- /dev/null
+++ b/doc/user/group/manage.md
@@ -0,0 +1,570 @@
+---
+stage: Manage
+group: Workspace
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# Manage groups
+
+Use groups to manage one or more related projects at the same time.
+
+## View groups
+
+1. On the top bar, select **Menu > Groups**.
+1. Select **Explore groups**.
+
+The **Groups** page shows a list of groups, sorted by last updated date.
+
+- To explore all public groups, select **Explore groups**.
+- To view groups where you have a direct or indirect membership, select **Your groups**. This tab shows groups that you are a member of:
+ - Through membership of a subgroup's parent group.
+ - Through direct or inherited membership of a project in the group or subgroup.
+
+## Create a group
+
+To create a group:
+
+1. On the top bar, either:
+ - Select **Menu > Groups**, and on the right, select **Create group**.
+ - To the left of the search box, select the plus sign and then **New group**.
+1. Select **Create group**.
+1. Enter a name for the group in **Group name**. For a list of words that cannot be used as group names, see
+ [reserved names](../reserved_names.md).
+1. Enter a path for the group in **Group URL**, which is used for the [namespace](../namespace/index.md).
+1. Choose the [visibility level](../public_access.md).
+1. Personalize your GitLab experience by answering the following questions:
+ - What is your role?
+ - Who will be using this group?
+ - What will you use this group for?
+1. Invite GitLab members or other users to join the group.
+
+<i class="fa fa-youtube-play youtube" aria-hidden="true"></i>
+For details about groups, watch [GitLab Namespaces (users, groups and subgroups)](https://youtu.be/r0sJgjR2f5A).
+
+## Remove a group
+
+To remove a group and its contents:
+
+1. On the top bar, select **Menu > Groups** and find your group.
+1. On the left sidebar, select **Settings > General**.
+1. Expand the **Advanced** section.
+1. In the **Remove group** section, select **Remove group**.
+1. Type the group name.
+1. Select **Confirm**.
+
+A group can also be removed from the groups dashboard:
+
+1. On the top bar, select **Menu > Groups**.
+1. Select **Your Groups**.
+1. Select (**{ellipsis_v}**) for the group you want to delete.
+1. Select **Delete**.
+1. In the Remove group section, select **Remove group**.
+1. Type the group name.
+1. Select **Confirm**.
+
+This action removes the group. It also adds a background job to delete all projects in the group.
+
+Specifically:
+
+- In [GitLab 12.8 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/33257), on [GitLab Premium](https://about.gitlab.com/pricing/premium/) or higher tiers, this action adds a background job to mark a group for deletion. By default, the job schedules the deletion 7 days in the future. You can modify this waiting period through the [instance settings](../admin_area/settings/visibility_and_access_controls.md#deletion-protection).
+- In [GitLab 13.6 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/39504), if the user who sets up the deletion is removed from the group before the
+deletion happens, the job is cancelled, and the group is no longer scheduled for deletion.
+
+## Remove a group immediately **(PREMIUM)**
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/336985) in GitLab 14.2.
+
+If you don't want to wait, you can remove a group immediately.
+
+Prerequisites:
+
+- You must have at least the Owner role for a group.
+- You have [marked the group for deletion](#remove-a-group).
+
+To immediately remove a group marked for deletion:
+
+1. On the top bar, select **Menu > Groups** and find your group.
+1. On the left sidebar, select **Settings > General**.
+1. Expand **Advanced**.
+1. In the "Permanently remove group" section, select **Remove group**.
+1. Confirm the action when asked to.
+
+Your group, its subgroups, projects, and all related resources, including issues and merge requests,
+are deleted.
+
+## Restore a group **(PREMIUM)**
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/33257) in GitLab 12.8.
+
+To restore a group that is marked for deletion:
+
+1. Go to your group's **Settings > General** page.
+1. Expand the **Path, transfer, remove** section.
+1. In the Restore group section, select **Restore group**.
+
+## Request access to a group
+
+As a user, you can request to be a member of a group, if an administrator allows it.
+
+1. On the top bar, select **Menu > Groups** and find your group.
+1. Under the group name, select **Request Access**.
+
+As many as ten of the most-recently-active group owners receive an email with your request.
+Any group owner can approve or decline the request.
+
+If you change your mind before your request is approved, select
+**Withdraw Access Request**.
+
+## Filter and sort members in a group
+
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/21727) in GitLab 12.6.
+> - [Improved](https://gitlab.com/gitlab-org/gitlab/-/issues/228675) in GitLab 13.7.
+> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/289911) in GitLab 13.8.
+
+To find members in a group, you can sort, filter, or search.
+
+### Filter a group
+
+Filter a group to find members. By default, all members in the group and subgroups are displayed.
+
+1. Go to the group and select **Group information > Members**.
+1. Above the list of members, in the **Filter members** box, enter filter criteria.
+ - To view members in the group only, select **Membership = Direct**.
+ - To view members of the group and its subgroups, select **Membership = Inherited**.
+ - To view members with two-factor authentication enabled or disabled, select **2FA = Enabled** or **Disabled**.
+ - [In GitLab 14.0 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/349887), to view GitLab users created by [SAML SSO](saml_sso/index.md) or [SCIM provisioning](saml_sso/scim_setup.md) select **Enterprise = true**.
+
+### Search a group
+
+You can search for members by name, username, or email.
+
+1. Go to the group and select **Group information > Members**.
+1. Above the list of members, in the **Filter members** box, enter search criteria.
+1. To the right of the **Filter members** box, select the magnifying glass (**{search}**).
+
+### Sort members in a group
+
+You can sort members by **Account**, **Access granted**, **Max role**, or **Last sign-in**.
+
+1. Go to the group and select **Group information > Members**.
+1. Above the list of members, on the top right, from the **Account** list, select
+ the criteria to filter by.
+1. To switch the sort between ascending and descending, to the right of the **Account** list, select the
+ arrow (**{sort-lowest}** or **{sort-highest}**).
+
+## Add users to a group
+
+You can give a user access to all projects in a group.
+
+1. On the top bar, select **Menu > Groups** and find your group.
+1. On the left sidebar, select **Group information > Members**.
+1. Select **Invite members**.
+1. Fill in the fields.
+ - The role applies to all projects in the group. [Learn more about permissions](../permissions.md).
+ - On the **Access expiration date**, the user can no longer access projects in the group.
+1. Select **Invite**.
+
+Members that are not automatically added are displayed on the **Invited** tab.
+Users can be on this tab because they:
+
+- Have not yet accepted the invitation.
+- Are waiting for [approval from an administrator](../admin_area/moderate_users.md).
+- [Exceed the group user cap](#user-cap-for-groups).
+
+## Remove a member from the group
+
+Prerequisites:
+
+- You must have the Owner role.
+- The member must have direct membership in the group. If
+ membership is inherited from a parent group, then the member can be removed
+ from the parent group only.
+
+To remove a member from a group:
+
+1. Go to the group.
+1. From the left menu, select **Group information > Members**.
+1. Next to the member you want to remove, select **Delete**.
+1. Optional. On the **Remove member** confirmation box, select the
+ **Also unassign this user from linked issues and merge requests** checkbox.
+1. Select **Remove member**.
+
+## Add projects to a group
+
+There are two different ways to add a new project to a group:
+
+- Select a group, and then select **New project**. You can then continue [creating your project](../../user/project/working_with_projects.md#create-a-project).
+- While you are creating a project, select a group from the dropdown list.
+
+ ![Select group](img/select_group_dropdown_13_10.png)
+
+### Specify who can add projects to a group
+
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/2534) in GitLab 10.5.
+> - [Moved](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/25975) from GitLab Premium to GitLab Free in 11.10.
+
+By default, users with at least the Developer role can create projects under a group.
+
+To change this setting for a specific group:
+
+1. On the top bar, select **Menu > Groups**.
+1. Select **Your Groups**.
+1. Find the group and select it.
+1. From the left menu, select **Settings > General**.
+1. Expand the **Permissions and group features** section.
+1. Select the desired option in the **Allowed to create projects** dropdown list.
+1. Select **Save changes**.
+
+To change this setting globally, see [Default project creation protection](../admin_area/settings/visibility_and_access_controls.md#define-which-roles-can-create-projects).
+
+## Change the owner of a group
+
+You can change the owner of a group. Each group must always have at least one
+member with the Owner role.
+
+- As an administrator:
+ 1. Go to the group and from the left menu, select **Group information > Members**.
+ 1. Give a different member the **Owner** role.
+ 1. Refresh the page. You can now remove the **Owner** role from the original owner.
+- As the current group's owner:
+ 1. Go to the group and from the left menu, select **Group information > Members**.
+ 1. Give a different member the **Owner** role.
+ 1. Have the new owner sign in and remove the **Owner** role from you.
+
+## Change a group's path
+
+Changing a group's path (group URL) can have unintended side effects. Read
+[how redirects behave](../project/repository/index.md#what-happens-when-a-repository-path-changes)
+before you proceed.
+
+If you are changing the path so it can be claimed by another group or user,
+you must rename the group too. Both names and paths must
+be unique.
+
+To retain ownership of the original namespace and protect the URL redirects,
+create a new group and transfer projects to it instead.
+
+To change your group path (group URL):
+
+1. Go to your group's **Settings > General** page.
+1. Expand the **Advanced** section.
+1. Under **Change group URL**, enter a new name.
+1. Select **Change group URL**.
+
+WARNING:
+It is not possible to rename a namespace if it contains a
+project with [Container Registry](../packages/container_registry/index.md) tags,
+because the project cannot be moved.
+
+## Change the default branch protection of a group
+
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/7583) in GitLab 12.9.
+> - [Settings moved and renamed](https://gitlab.com/gitlab-org/gitlab/-/issues/340403) in GitLab 14.9.
+
+By default, every group inherits the branch protection set at the global level.
+
+To change this setting for a specific group, see [group level default branch protection](../project/repository/branches/default.md#group-level-default-branch-protection).
+
+To change this setting globally, see [initial default branch protection](../project/repository/branches/default.md#instance-level-default-branch-protection).
+
+NOTE:
+In [GitLab Premium or higher](https://about.gitlab.com/pricing/), GitLab administrators can choose to [disable group owners from updating the default branch protection](../project/repository/branches/default.md#prevent-overrides-of-default-branch-protection).
+
+## Use a custom name for the initial branch
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/43290) in GitLab 13.6.
+
+When you create a new project in GitLab, a default branch is created with the
+first push. The group owner can
+[customize the initial branch](../project/repository/branches/default.md#group-level-custom-initial-branch-name)
+for the group's projects to meet your group's needs.
+
+## Share a group with another group
+
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/18328) in GitLab 12.7.
+> - [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/247208) in GitLab 13.11 from a form to a modal window [with a flag](../feature_flags.md). Disabled by default.
+> - Modal window [enabled on GitLab.com and self-managed](https://gitlab.com/gitlab-org/gitlab/-/issues/247208) in GitLab 14.8.
+> - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/352526) in GitLab 14.9.
+ [Feature flag `invite_members_group_modal`](https://gitlab.com/gitlab-org/gitlab/-/issues/352526) removed.
+
+Similar to how you [share a project with a group](../project/members/share_project_with_groups.md),
+you can share a group with another group. To invite a group, you must be a member of it. Members get direct access
+to the shared group. This includes members who inherited group membership from a parent group.
+
+To share a given group, for example, `Frontend` with another group, for example,
+`Engineering`:
+
+1. Go to the `Frontend` group.
+1. On the left sidebar, select **Group information > Members**.
+1. Select **Invite a group**.
+1. In the **Select a group to invite** list, select `Engineering`.
+1. Select a [role](../permissions.md) as maximum access level.
+1. Select **Invite**.
+
+After sharing the `Frontend` group with the `Engineering` group:
+
+- The **Groups** tab lists the `Engineering` group.
+- The **Groups** tab lists a group regardless of whether it is a public or private group.
+- All members of the `Engineering` group have access to the `Frontend` group. The same access levels of the members apply up to the maximum access level selected when sharing the group.
+
+## Transfer a group
+
+You can transfer groups in the following ways:
+
+- Transfer a subgroup to a new parent group.
+- Convert a top-level group into a subgroup by transferring it to the desired group.
+- Convert a subgroup into a top-level group by transferring it out of its current group.
+
+When transferring groups, note:
+
+- Changing a group's parent can have unintended side effects. See [what happens when a repository path changes](../project/repository/index.md#what-happens-when-a-repository-path-changes).
+- You can only transfer groups to groups you manage.
+- You must update your local repositories to point to the new location.
+- If the immediate parent group's visibility is lower than the group's current visibility, visibility levels for subgroups and projects change to match the new parent group's visibility.
+- Only explicit group membership is transferred, not inherited membership. If the group's owners have only inherited membership, this leaves the group without an owner. In this case, the user transferring the group becomes the group's owner.
+- Transfers fail if [packages](../packages/index.md) exist in any of the projects in the group, or in any of its subgroups.
+
+To transfer a group:
+
+1. On the top bar, select **Menu > Groups** and find your group.
+1. On the left sidebar, select **Settings > General**.
+1. Expand the **Advanced** section.
+1. In the **Remove group** section, select **Transfer group**.
+1. Select the group name in the drop down menu.
+1. Select **Transfer group**.
+
+## Enable delayed project deletion **(PREMIUM)**
+
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/220382) in GitLab 13.2.
+> - [Inheritance and enforcement added](https://gitlab.com/gitlab-org/gitlab/-/issues/321724) in GitLab 13.11.
+> - [Instance setting to enable by default added](https://gitlab.com/gitlab-org/gitlab/-/issues/255449) in GitLab 14.2.
+> - [Instance setting is inherited and enforced when disabled](https://gitlab.com/gitlab-org/gitlab/-/issues/352960) in GitLab 15.1.
+> - [User interface changed](https://gitlab.com/gitlab-org/gitlab/-/issues/352961) in GitLab 15.1.
+
+[Delayed project deletion](../project/settings/index.md#delayed-project-deletion) is locked and disabled unless the instance-level settings for
+[deletion protection](../admin_area/settings/visibility_and_access_controls.md#deletion-protection) is enabled for either groups only or groups and projects.
+When enabled on groups, projects in the group are deleted after a period of delay. During this period, projects are in a read-only state and can be restored.
+The default period is seven days but [is configurable at the instance level](../admin_area/settings/visibility_and_access_controls.md#retention-period).
+
+On self-managed GitLab, projects are deleted immediately by default.
+In GitLab 14.2 and later, an administrator can
+[change the default setting](../admin_area/settings/visibility_and_access_controls.md#deletion-protection)
+for projects in newly-created groups.
+
+On GitLab.com, see the [GitLab.com settings page](../gitlab_com/index.md#delayed-project-deletion) for
+the default setting.
+
+To enable delayed deletion of projects in a group:
+
+1. Go to the group's **Settings > General** page.
+1. Expand the **Permissions and group features** section.
+1. Scroll to:
+ - (GitLab 15.1 and later) **Deletion protection** and select **Keep deleted projects**.
+ - (GitLab 15.0 and earlier) **Enable delayed project deletion** and tick the checkbox.
+1. Optional. To prevent subgroups from changing this setting, select:
+ - (GitLab 15.1 and later), **Enforce deletion protection for all subgroups**
+ - (GitLab 15.0 and earlier), **Enforce for all subgroups**.
+1. Select **Save changes**.
+
+NOTE:
+In GitLab 13.11 and above the group setting for delayed project deletion is inherited by subgroups. As discussed in [Cascading settings](../../development/cascading_settings.md) inheritance can be overridden, unless enforced by an ancestor.
+
+## Disable email notifications
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/23585) in GitLab 12.2.
+
+You can disable all email notifications related to the group, which includes its subgroups and projects.
+
+To disable email notifications:
+
+1. Go to the group's **Settings > General** page.
+1. Expand the **Permissions and group features** section.
+1. Select **Disable email notifications**.
+1. Select **Save changes**.
+
+## Disable group mentions
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/21301) in GitLab 12.6.
+
+You can prevent users from being added to a conversation and getting notified when
+anyone [mentions a group](../discussions/index.md#mentions)
+in which those users are members.
+
+Groups with disabled mentions are visualized accordingly in the autocompletion dropdown list.
+
+This is particularly helpful for groups with a large number of users.
+
+To disable group mentions:
+
+1. Go to the group's **Settings > General** page.
+1. Expand the **Permissions and group features** section.
+1. Select **Disable group mentions**.
+1. Select **Save changes**.
+
+## Export members as CSV **(PREMIUM)**
+
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/287940) in GitLab 14.2.
+> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/336520) in GitLab 14.5.
+
+You can export a list of members in a group or subgroup as a CSV.
+
+1. Go to your group or subgroup and select either **Group information > Members** or **Subgroup information > Members**.
+1. Select **Export as CSV**.
+1. After the CSV file has been generated, it is emailed as an attachment to the user that requested it.
+
+## User cap for groups
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/330027) in GitLab 14.7.
+
+FLAG:
+On self-managed GitLab, this feature is not available. On GitLab.com, this feature is available for some groups.
+This feature is not ready for production use.
+
+When the number of billable members reaches the user cap, new users can't be added to the group
+without being approved by the group owner.
+
+Groups with the user cap feature enabled have [group sharing](#share-a-group-with-another-group)
+disabled for the group and its subgroups.
+
+### Specify a user cap for a group
+
+Prerequisite:
+
+- You must be assigned the Owner role) for the group.
+
+To specify a user cap:
+
+1. On the top bar, select **Menu > Groups** and find your group.
+ You can set a cap on the top-level group only.
+1. On the left sidebar, select **Settings > General**.
+1. Expand **Permissions and group features**.
+1. In the **User cap** box, enter the desired number of users.
+1. Select **Save changes**.
+
+If you already have more users in the group than the user cap value, users
+are not removed. However, you can't add more without approval.
+
+Increasing the user cap does not approve pending members.
+
+### Remove the user cap for a group
+
+You can remove the user cap, so there is no limit on the number of members you can add to a group.
+
+Prerequisite:
+
+- You must be assigned the Owner role) for the group.
+
+To remove the user cap:
+
+1. On the top bar, select **Menu > Groups** and find your group.
+1. On the left sidebar, select **Settings > General**.
+1. Expand **Permissions and group features**.
+1. In the **User cap** box, delete the value.
+1. Select **Save changes**.
+
+Decreasing the user cap does not approve pending members.
+
+### Approve pending members for a group
+
+When the number of billable users reaches the user cap, any new member is put in a pending state
+and must be approved.
+
+Pending members do not count as billable. Members count as billable only after they have been approved and are no longer in a pending state.
+
+Prerequisite:
+
+- You must be assigned the Owner role) for the group.
+
+To approve members that are pending because they've exceeded the user cap:
+
+1. On the top bar, select **Menu > Groups** and find your group.
+1. On the left sidebar, select **Settings > Usage Quotas**.
+1. On the **Seats** tab, under the alert, select **View pending approvals**.
+1. For each member you want to approve, select **Approve**.
+
+## Group file templates **(PREMIUM)**
+
+Use group file templates to share a set of templates for common file
+types with every project in a group. It is analogous to the
+[instance template repository](../admin_area/settings/instance_template_repository.md).
+The selected project should follow the same naming conventions as
+are documented on that page.
+
+You can only choose projects in the group as the template source.
+This includes projects shared with the group, but it **excludes** projects in
+subgroups or parent groups of the group being configured.
+
+You can configure this feature for both subgroups and immediate parent groups. A project
+in a subgroup has access to the templates for that subgroup, as well as
+any immediate parent groups.
+
+To learn how to create templates for issues and merge requests, see
+[Description templates](../project/description_templates.md).
+
+Define project templates at a group level by setting a group as the template source.
+[Learn more about group-level project templates](custom_project_templates.md).
+
+### Enable group file template **(PREMIUM)**
+
+To enable group file templates:
+
+1. Go to the group's **Settings > General** page.
+1. Expand the **Templates** section.
+1. Choose a project to act as the template repository.
+1. Select **Save changes**.
+
+## Group merge request approval settings **(PREMIUM)**
+
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/285458) in GitLab 13.9. [Deployed behind the `group_merge_request_approval_settings_feature_flag` flag](../../administration/feature_flags.md), disabled by default.
+> - [Enabled by default](https://gitlab.com/gitlab-org/gitlab/-/issues/285410) in GitLab 14.5.
+> - [Feature flag `group_merge_request_approval_settings_feature_flag`](https://gitlab.com/gitlab-org/gitlab/-/issues/343872) removed in GitLab 14.9.
+
+Group approval settings manage [project merge request approval settings](../project/merge_requests/approvals/settings.md)
+at the top-level group level. These settings [cascade to all projects](../project/merge_requests/approvals/settings.md#settings-cascading)
+that belong to the group.
+
+To view the merge request approval settings for a group:
+
+1. Go to the top-level group's **Settings > General** page.
+1. Expand the **Merge request approvals** section.
+1. Select the settings you want.
+1. Select **Save changes**.
+
+Support for group-level settings for merge request approval rules is tracked in this [epic](https://gitlab.com/groups/gitlab-org/-/epics/4367).
+
+## Group activity analytics **(PREMIUM)**
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/207164) in GitLab 12.10 as a [Beta feature](../../policy/alpha-beta-support.md#beta-features).
+
+For a group, you can view how many merge requests, issues, and members were created in the last 90 days.
+
+These Group Activity Analytics can be enabled with the `group_activity_analytics` [feature flag](../../development/feature_flags/index.md#enabling-a-feature-flag-locally-in-development).
+
+![Recent Group Activity](img/group_activity_analytics_v13_10.png)
+
+Changes to [group wikis](../project/wiki/group.md) do not appear in group activity analytics.
+
+### View group activity
+
+You can view the most recent actions taken in a group, either in your browser or in an RSS feed:
+
+1. On the top bar, select **Menu > Groups**.
+1. Select **Your Groups**.
+1. Find the group and select it.
+1. On the left sidebar, select **Group information > Activity**.
+
+To view the activity feed in Atom format, select the
+**RSS** (**{rss}**) icon.
+
+## Troubleshooting
+
+### Validation errors on namespaces and groups
+
+[GitLab 14.4 and later](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/70365) performs
+the following checks when creating or updating namespaces or groups:
+
+- Namespaces must not have parents.
+- Group parents must be groups and not namespaces.
+
+In the unlikely event that you see these errors in your GitLab installation,
+[contact Support](https://about.gitlab.com/support/) so that we can improve this validation.
diff --git a/doc/user/group/saml_sso/example_saml_config.md b/doc/user/group/saml_sso/example_saml_config.md
new file mode 100644
index 00000000000..97e8f9c54a3
--- /dev/null
+++ b/doc/user/group/saml_sso/example_saml_config.md
@@ -0,0 +1,211 @@
+---
+stage: Manage
+group: Authentication and Authorization
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+type: reference
+---
+
+# Example group SAML and SCIM configurations **(PREMIUM SAAS)**
+
+These are notes and screenshots regarding Group SAML and SCIM that the GitLab Support Team sometimes uses while troubleshooting, but which do not fit into the official documentation. GitLab is making this public, so that anyone can make use of the Support team's collected knowledge.
+
+Please refer to the GitLab [Group SAML](index.md) docs for information on the feature and how to set it up.
+
+When troubleshooting a SAML configuration, GitLab team members will frequently start with the [SAML troubleshooting section](index.md#troubleshooting).
+
+They may then set up a test configuration of the desired identity provider. We include example screenshots in this section.
+
+## SAML and SCIM screenshots
+
+This section includes relevant screenshots of the following example configurations of [Group SAML](index.md) and [Group SCIM](scim_setup.md):
+
+- [Azure Active Directory](#azure-active-directory)
+- [Google Workspace](#google-workspace)
+- [Okta](#okta)
+- [OneLogin](#onelogin)
+
+WARNING:
+These screenshots are updated only as needed by GitLab Support. They are **not** official documentation.
+
+If you are currently having an issue with GitLab, you may want to check your [support options](https://about.gitlab.com/support/).
+
+## Azure Active Directory
+
+Basic SAML app configuration:
+
+![Azure AD basic SAML](img/AzureAD-basic_SAML.png)
+
+User claims and attributes:
+
+![Azure AD user claims](img/AzureAD-claims.png)
+
+SCIM mapping:
+
+![Azure AD SCIM Provisioning](img/AzureAD-scim_provisioning.png)
+![Azure AD SCIM Attribute Mapping](img/AzureAD-scim_attribute_mapping.png)
+
+Group Sync:
+
+![Azure Group Claims](img/azure_configure_group_claim.png)
+
+## Google Workspace
+
+Basic SAML app configuration:
+
+![Google Workspace basic SAML](img/GoogleWorkspace-basic-SAML_v14_10.png)
+
+User claims and attributes:
+
+![Google Workspace user claims](img/GoogleWorkspace-claims_v14_10.png)
+
+IdP links and certificate:
+
+NOTE:
+Google Workspace displays a SHA256 fingerprint. To retrieve the SHA1 fingerprint required by GitLab for configuring SAML, download the certificate and calculate the SHA1 certificate
+fingerprint.
+
+![Google Workspace Links and Certificate](img/GoogleWorkspace-linkscert_v14_10.png)
+
+## Okta
+
+Basic SAML app configuration for GitLab.com groups:
+
+![Okta basic SAML](img/Okta-GroupSAML.png)
+
+Basic SAML app configuration for GitLab self-managed:
+
+![Okta admin panel view](img/Okta-SM.png)
+
+User claims and attributes:
+
+![Okta Attributes](img/Okta-attributes.png)
+
+Groups attribute:
+
+![Okta Group attribute](img/Okta-GroupAttribute.png)
+
+Advanced SAML app settings (defaults):
+
+![Okta Advanced Settings](img/Okta-advancedsettings.png)
+
+IdP Links and Certificate:
+
+![Okta Links and Certificate](img/Okta-linkscert.png)
+
+Sign on settings:
+
+![Okta SAML settings](img/okta_saml_settings.png)
+
+Setting the username for the newly provisioned users when assigning them the SCIM app:
+
+![Assigning SCIM app to users on Okta](img/okta_setting_username.png)
+
+## OneLogin
+
+Application details:
+
+![OneLogin application details](img/OneLogin-app_details.png)
+
+Parameters:
+
+![OneLogin application details](img/OneLogin-parameters.png)
+
+Adding a user:
+
+![OneLogin user add](img/OneLogin-userAdd.png)
+
+SSO settings:
+
+![OneLogin SSO settings](img/OneLogin-SSOsettings.png)
+
+## SAML response example
+
+When a user signs in using SAML, GitLab receives a SAML response. The SAML response can be found in `production.log` logs as a base64-encoded message. Locate the response by
+searching for `SAMLResponse`. The decoded SAML response is in XML format. For example:
+
+```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>
+```
diff --git a/doc/user/group/saml_sso/group_sync.md b/doc/user/group/saml_sso/group_sync.md
index b8b7a16b31b..8bc316f9396 100644
--- a/doc/user/group/saml_sso/group_sync.md
+++ b/doc/user/group/saml_sso/group_sync.md
@@ -28,7 +28,7 @@ To configure SAML Group Sync:
1. Ensure your SAML identity provider sends an attribute statement with the same name as the value of the `groups_attribute` setting.
- For GitLab.com:
1. See [SAML SSO for GitLab.com groups](index.md).
- 1. Ensure your SAML identity provider sends an attribute statement named `Groups` or `groups`.
+ 1. Ensure your SAML identity provider sends an attribute statement named `Groups` or `groups`.
NOTE:
The value for `Groups` or `groups` in the SAML response can be either the group name or the group ID.
@@ -44,8 +44,8 @@ The value for `Groups` or `groups` in the SAML response can be either the group
Other attribute names such as `http://schemas.microsoft.com/ws/2008/06/identity/claims/groups`
are not accepted as a source of groups.
-See the [SAML troubleshooting page](../../../administration/troubleshooting/group_saml_scim.md)
-for examples on configuring the required attribute name in the SAML identity provider's settings.
+See [examples](../../../user/group/saml_sso/example_saml_config.md)
+for configuring the required attribute name in the SAML identity provider's settings.
## Configure SAML Group Links
@@ -161,3 +161,9 @@ graph TB
GitLabGroupD --> |Member|GitLabUserC
GitLabGroupD --> |Member|GitLabUserD
```
+
+### Use the API
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/290367) in GitLab 15.3.
+
+You can use the GitLab API to [list, add, and delete](../../../api/groups.md#saml-group-links) SAML group links.
diff --git a/doc/user/group/saml_sso/img/AzureAD-basic_SAML.png b/doc/user/group/saml_sso/img/AzureAD-basic_SAML.png
new file mode 100644
index 00000000000..7a0d83ab2dd
--- /dev/null
+++ b/doc/user/group/saml_sso/img/AzureAD-basic_SAML.png
Binary files differ
diff --git a/doc/user/group/saml_sso/img/AzureAD-claims.png b/doc/user/group/saml_sso/img/AzureAD-claims.png
new file mode 100644
index 00000000000..576040be337
--- /dev/null
+++ b/doc/user/group/saml_sso/img/AzureAD-claims.png
Binary files differ
diff --git a/doc/user/group/saml_sso/img/AzureAD-scim_attribute_mapping.png b/doc/user/group/saml_sso/img/AzureAD-scim_attribute_mapping.png
new file mode 100644
index 00000000000..5ad82003eed
--- /dev/null
+++ b/doc/user/group/saml_sso/img/AzureAD-scim_attribute_mapping.png
Binary files differ
diff --git a/doc/user/group/saml_sso/img/AzureAD-scim_provisioning.png b/doc/user/group/saml_sso/img/AzureAD-scim_provisioning.png
new file mode 100644
index 00000000000..b2c385151a6
--- /dev/null
+++ b/doc/user/group/saml_sso/img/AzureAD-scim_provisioning.png
Binary files differ
diff --git a/doc/user/group/saml_sso/img/GoogleWorkspace-basic-SAML_v14_10.png b/doc/user/group/saml_sso/img/GoogleWorkspace-basic-SAML_v14_10.png
new file mode 100644
index 00000000000..e002503ddc0
--- /dev/null
+++ b/doc/user/group/saml_sso/img/GoogleWorkspace-basic-SAML_v14_10.png
Binary files differ
diff --git a/doc/user/group/saml_sso/img/GoogleWorkspace-claims_v14_10.png b/doc/user/group/saml_sso/img/GoogleWorkspace-claims_v14_10.png
new file mode 100644
index 00000000000..2b827e122a8
--- /dev/null
+++ b/doc/user/group/saml_sso/img/GoogleWorkspace-claims_v14_10.png
Binary files differ
diff --git a/doc/user/group/saml_sso/img/GoogleWorkspace-linkscert_v14_10.png b/doc/user/group/saml_sso/img/GoogleWorkspace-linkscert_v14_10.png
new file mode 100644
index 00000000000..8d6c5010670
--- /dev/null
+++ b/doc/user/group/saml_sso/img/GoogleWorkspace-linkscert_v14_10.png
Binary files differ
diff --git a/doc/user/group/saml_sso/img/Okta-GroupAttribute.png b/doc/user/group/saml_sso/img/Okta-GroupAttribute.png
new file mode 100644
index 00000000000..54c69053754
--- /dev/null
+++ b/doc/user/group/saml_sso/img/Okta-GroupAttribute.png
Binary files differ
diff --git a/doc/user/group/saml_sso/img/Okta-GroupSAML.png b/doc/user/group/saml_sso/img/Okta-GroupSAML.png
new file mode 100644
index 00000000000..7871e4ff82b
--- /dev/null
+++ b/doc/user/group/saml_sso/img/Okta-GroupSAML.png
Binary files differ
diff --git a/doc/user/group/saml_sso/img/Okta-SM.png b/doc/user/group/saml_sso/img/Okta-SM.png
new file mode 100644
index 00000000000..b335009fed9
--- /dev/null
+++ b/doc/user/group/saml_sso/img/Okta-SM.png
Binary files differ
diff --git a/doc/user/group/saml_sso/img/Okta-advancedsettings.png b/doc/user/group/saml_sso/img/Okta-advancedsettings.png
new file mode 100644
index 00000000000..1478dc58ccd
--- /dev/null
+++ b/doc/user/group/saml_sso/img/Okta-advancedsettings.png
Binary files differ
diff --git a/doc/user/group/saml_sso/img/Okta-attributes.png b/doc/user/group/saml_sso/img/Okta-attributes.png
new file mode 100644
index 00000000000..38af72474d8
--- /dev/null
+++ b/doc/user/group/saml_sso/img/Okta-attributes.png
Binary files differ
diff --git a/doc/user/group/saml_sso/img/Okta-linkscert.png b/doc/user/group/saml_sso/img/Okta-linkscert.png
new file mode 100644
index 00000000000..62db5d2b7e3
--- /dev/null
+++ b/doc/user/group/saml_sso/img/Okta-linkscert.png
Binary files differ
diff --git a/doc/user/group/saml_sso/img/OneLogin-SSOsettings.png b/doc/user/group/saml_sso/img/OneLogin-SSOsettings.png
new file mode 100644
index 00000000000..58f936d8567
--- /dev/null
+++ b/doc/user/group/saml_sso/img/OneLogin-SSOsettings.png
Binary files differ
diff --git a/doc/user/group/saml_sso/img/OneLogin-app_details.png b/doc/user/group/saml_sso/img/OneLogin-app_details.png
new file mode 100644
index 00000000000..77618960897
--- /dev/null
+++ b/doc/user/group/saml_sso/img/OneLogin-app_details.png
Binary files differ
diff --git a/doc/user/group/saml_sso/img/OneLogin-parameters.png b/doc/user/group/saml_sso/img/OneLogin-parameters.png
new file mode 100644
index 00000000000..a2fa734152c
--- /dev/null
+++ b/doc/user/group/saml_sso/img/OneLogin-parameters.png
Binary files differ
diff --git a/doc/user/group/saml_sso/img/OneLogin-userAdd.png b/doc/user/group/saml_sso/img/OneLogin-userAdd.png
new file mode 100644
index 00000000000..54c1ecd2e68
--- /dev/null
+++ b/doc/user/group/saml_sso/img/OneLogin-userAdd.png
Binary files differ
diff --git a/doc/user/group/saml_sso/img/azure_configure_group_claim.png b/doc/user/group/saml_sso/img/azure_configure_group_claim.png
new file mode 100644
index 00000000000..9d8c5348273
--- /dev/null
+++ b/doc/user/group/saml_sso/img/azure_configure_group_claim.png
Binary files differ
diff --git a/doc/user/group/saml_sso/img/okta_saml_settings.png b/doc/user/group/saml_sso/img/okta_saml_settings.png
new file mode 100644
index 00000000000..9c774b72d66
--- /dev/null
+++ b/doc/user/group/saml_sso/img/okta_saml_settings.png
Binary files differ
diff --git a/doc/user/group/saml_sso/img/okta_setting_username.png b/doc/user/group/saml_sso/img/okta_setting_username.png
new file mode 100644
index 00000000000..5f87d14bb8b
--- /dev/null
+++ b/doc/user/group/saml_sso/img/okta_setting_username.png
Binary files differ
diff --git a/doc/user/group/saml_sso/index.md b/doc/user/group/saml_sso/index.md
index 80e7a5903fa..25060f8e749 100644
--- a/doc/user/group/saml_sso/index.md
+++ b/doc/user/group/saml_sso/index.md
@@ -99,7 +99,7 @@ After you set up your identity provider to work with GitLab, you must configure
![Group SAML Settings for GitLab.com](img/group_saml_settings_v13_12.png)
NOTE:
-The certificate [fingerprint algorithm](../../../integration/saml.md#notes-on-configuring-your-identity-provider) must be in SHA1. When configuring the identity provider, use a secure signature algorithm.
+The certificate [fingerprint algorithm](../../../integration/saml.md#notes-on-configuring-your-identity-provider) must be in SHA1. When configuring the identity provider (such as [Google Workspace](#google-workspace-setup-notes)), use a secure signature algorithm.
### SSO enforcement
@@ -131,6 +131,8 @@ SSO has the following effects when enabled:
- Git activity originating from CI/CD jobs do not have the SSO check enforced.
- Credentials that are not tied to regular users (for example, project and group access tokens, and deploy keys) do not have the SSO check enforced.
- Users must be signed-in through SSO before they can pull images using the [Dependency Proxy](../../packages/dependency_proxy/index.md).
+- When the **Enforce SSO-only authentication for Git and Dependency Proxy activity for this group** option is enabled, any API endpoint that involves Git activity is under SSO
+ enforcement. For example, creating or deleting a branch, commit, or tag.
When SSO is enforced, users are not immediately revoked. If the user:
@@ -174,7 +176,7 @@ The recommended attributes and claims settings are:
If using [Group Sync](#group-sync), customize the name of the group claim to match the required attribute.
-See the [troubleshooting page](../../../administration/troubleshooting/group_saml_scim.md#azure-active-directory) for an example configuration.
+See our [example configuration page](example_saml_config.md#azure-active-directory).
### Google Workspace setup notes
@@ -191,7 +193,7 @@ with the notes below for consideration.
NOTE:
Google Workspace displays a SHA256 fingerprint. To retrieve the SHA1 fingerprint required by GitLab for [configuring SAML](#configure-gitlab), download the certificate and calculate
-the SHA1 certificate fingerprint.
+the SHA1 certificate fingerprint using this sample command: `openssl x509 -noout -fingerprint -sha1 -inform pem -in "GoogleIDPCertificate-domain.com.pem"`.
The recommended attributes and claims settings are:
@@ -206,7 +208,7 @@ For NameID, the following settings are recommended:
When selecting **Verify SAML Configuration** on the GitLab SAML SSO page, disregard the warning recommending setting the NameID format to "persistent".
-See the [troubleshooting page](../../../administration/troubleshooting/group_saml_scim.md#google-workspace) for an example configuration.
+See our [example configuration page](example_saml_config.md#google-workspace).
### Okta setup notes
@@ -445,7 +447,7 @@ To generate a SAML Response:
### Verifying configuration
-For convenience, we've included some [example resources](../../../administration/troubleshooting/group_saml_scim.md) used by our Support Team. While they may help you verify the SAML app configuration, they are not guaranteed to reflect the current state of third-party products.
+For convenience, we've included some [example resources](../../../user/group/saml_sso/example_saml_config.md) used by our Support Team. While they may help you verify the SAML app configuration, they are not guaranteed to reflect the current state of third-party products.
### Verifying NameID
diff --git a/doc/user/group/saml_sso/scim_setup.md b/doc/user/group/saml_sso/scim_setup.md
index 04aa99e08af..7962f171166 100644
--- a/doc/user/group/saml_sso/scim_setup.md
+++ b/doc/user/group/saml_sso/scim_setup.md
@@ -82,7 +82,7 @@ For a list of required attributes, refer to the [SCIM API documentation](../../.
| `userPrincipalName` | `emails[type eq "work"].value` | |
| `mailNickname` | `userName` | |
-For guidance, you can view [an example configuration in the troubleshooting reference](../../../administration/troubleshooting/group_saml_scim.md#azure-active-directory).
+For guidance, you can view [an example configuration](example_saml_config.md#azure-active-directory).
1. Below the mapping list select **Show advanced options > Edit attribute list for AppName**.
1. Ensure the `id` is the primary and required field, and `externalId` is also required.
@@ -106,7 +106,7 @@ Before you start this section:
- Check that you are using Okta [Lifecycle Management](https://www.okta.com/products/lifecycle-management/) product. This product tier is required to use SCIM on Okta. To check which Okta product you are using, check your signed Okta contract, contact your Okta AE, CSM, or Okta support.
- Complete the [GitLab configuration](#gitlab-configuration) process.
-- Complete the setup for SAML application for [Okta](https://developer.okta.com/docs/guides/build-sso-integration/saml2/overview/), as described in the [Okta setup notes](index.md#okta-setup-notes).
+- Complete the setup for SAML application for [Okta](https://developer.okta.com/docs/guides/build-sso-integration/saml2/main/), as described in the [Okta setup notes](index.md#okta-setup-notes).
- Check that your Okta SAML setup matches our documentation exactly, especially the NameID configuration. Otherwise, the Okta SCIM app may not work properly.
After the above steps are complete:
@@ -220,6 +220,8 @@ It is important that this SCIM `id` and SCIM `externalId` are configured to the
### How do I verify user's SAML NameId matches the SCIM externalId
+Admins can use the Admin Area to [list SCIM identities for a user](../../admin_area/#user-identities).
+
Group owners can see the list of users and the `externalId` stored for each user in the group SAML SSO Settings page.
A possible alternative is to use the [SCIM API](../../../api/scim.md#get-a-list-of-scim-provisioned-users) to manually retrieve the `externalId` we have stored for users, also called the `external_uid` or `NameId`.
diff --git a/doc/user/group/settings/group_access_tokens.md b/doc/user/group/settings/group_access_tokens.md
index 9e8fc120731..c3098bb56c2 100644
--- a/doc/user/group/settings/group_access_tokens.md
+++ b/doc/user/group/settings/group_access_tokens.md
@@ -154,5 +154,8 @@ to groups instead of projects. Bot users for groups:
- Do not count as licensed seats.
- Can have a maximum role of Owner for a group. For more information, see
[Create a group access token](../../../api/group_access_tokens.md#create-a-group-access-token).
+- The username is set to `group_{project_id}_bot` for the first access token. For example, `project_123_bot`.
+- The email is set to `group{group_id}_bot@noreply.{Gitlab.config.gitlab.host}`. For example, `group123_bot@noreply.example.com`.
+- All other properties are similar to [bot users for projects](../../project/settings/project_access_tokens.md#bot-users-for-projects)
For more information, see [Bot users for projects](../../project/settings/project_access_tokens.md#bot-users-for-projects).
diff --git a/doc/user/group/subgroups/index.md b/doc/user/group/subgroups/index.md
index bf4e13779fd..12434de5efc 100644
--- a/doc/user/group/subgroups/index.md
+++ b/doc/user/group/subgroups/index.md
@@ -47,6 +47,28 @@ graph TD
end
```
+## View subgroups of a group
+
+Prerequisite:
+
+- To view private nested subgroups, you must be a direct or inherited member of
+the private subgroup.
+
+To view the subgroups of a group:
+
+1. On the top bar, select **Menu > Groups** and find your group.
+1. Select the **Subgroups and projects** tab.
+1. To view a nested subgroup, expand a subgroup in the hierarchy list.
+
+### Private subgroups in public parent groups
+
+In the hierarchy list, public groups with a private subgroup have an expand option (**{chevron-down}**)
+for all users that indicate there is a subgroup. When users who are not direct or inherited members of
+the private subgroup select expand (**{chevron-down}**), the nested subgroup does not display.
+
+If you prefer to keep information about the presence of nested subgroups private, we advise that you only
+add private subgroups to private parent groups.
+
## Create a subgroup
Prerequisites:
@@ -102,7 +124,7 @@ Subgroup members can:
1. Be [direct members](../../project/members/index.md#add-users-to-a-project) of the subgroup.
1. [Inherit membership](../../project/members/index.md#inherited-membership) of the subgroup from the subgroup's parent group.
-1. Be a member of a group that was [shared with the subgroup's top-level group](../index.md#share-a-group-with-another-group).
+1. Be a member of a group that was [shared with the subgroup's top-level group](../manage.md#share-a-group-with-another-group).
```mermaid
flowchart RL
@@ -161,7 +183,7 @@ In the screenshot above:
- Administrator has the Owner role on group _Four_ and is a member of all subgroups. For that reason, as with User 3,
the **Source** column indicates they are a direct member.
-Members can be [filtered by inherited or direct membership](../index.md#filter-a-group).
+Members can be [filtered by inherited or direct membership](../manage.md#filter-a-group).
### Override ancestor group membership