scim_setup.md 6.0 KB
Newer Older
R
Russell Dickenson 已提交
1 2 3 4
---
type: howto, reference
---

5
# SCIM provisioning using SAML SSO for Groups **(SILVER ONLY)**
6 7 8

> [Introduced](https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/9388) in [GitLab.com Silver](https://about.gitlab.com/pricing/) 11.10.

R
Russell Dickenson 已提交
9 10 11 12
System for Cross-domain Identity Management (SCIM), is an open standard that enables the
automation of user provisioning. When SCIM is provisioned for a GitLab group, membership of
that group is synchronized between GitLab and the identity provider.

13
GitLab's [SCIM API](../../../api/scim.md) implements part of [the RFC7644 protocol](https://tools.ietf.org/html/rfc7644).
14 15 16 17 18 19 20 21 22 23 24 25 26

Currently, the following actions are available:

- CREATE
- UPDATE
- DELETE (deprovisioning)

The following identity providers are supported:

- Azure

## Requirements

E
Evan Read 已提交
27
- [Group SSO](index.md) needs to be configured.
28 29
- The `scim_group` feature flag must be enabled:

30
  Run the following commands in a Rails console:
E
Evan Read 已提交
31

32 33 34
  ```sh
  # Omnibus GitLab
  gitlab-rails console
E
Evan Read 已提交
35

36 37 38 39
  # Installation from source
  cd /home/git/gitlab
  sudo -u git -H bin/rails console RAILS_ENV=production
  ```
E
Evan Read 已提交
40

41
  To enable SCIM for a group named `group_name`:
E
Evan Read 已提交
42

43 44 45 46
  ```ruby
  group = Group.find_by_full_path('group_name')
  Feature.enable(:group_scim, group)
  ```
E
Evan Read 已提交
47

48
## GitLab configuration
49 50 51 52 53 54 55

Once [Single sign-on](index.md) has been configured, we can:

1. Navigate to the group and click **Settings > SAML SSO**.
1. Click on the **Generate a SCIM token** button.
1. Save the token and URL so they can be used in the next step.

E
Evan Read 已提交
56
![SCIM token configuration](img/scim_token.png)
57

58
## Identity Provider configuration
59

60
### Azure
61

62
First, double check the [Single sign-on](index.md) configuration for your group and ensure that **Name identifier value** (NameID) points to `user.objectid` or another unique identifier. This will match the `extern_uid` used on GitLab.
63

64
![Name identifier value mapping](img/scim_name_identifier_mapping.png)
65

66 67 68 69 70 71 72
#### Set up admin credentials

Next, configure your GitLab application in Azure by following the
[Provisioning users and groups to applications that support SCIM](https://docs.microsoft.com/en-us/azure/active-directory/manage-apps/use-scim-to-provision-users-and-groups#provisioning-users-and-groups-to-applications-that-support-scim) 
section in Azure's SCIM setup documentation.

During this configuration, note the following:
73 74

- The `Tenant URL` and `secret token` are the ones retrieved in the
E
Evan Read 已提交
75
  [previous step](#gitlab-configuration).
76
- Should there be any problems with the availability of GitLab or similar
E
Evan Read 已提交
77
  errors, the notification email set will get those.
78
- It is recommended to set a notification email and check the **Send an email notification when a failure occurs** checkbox.
79 80
- For mappings, we will only leave `Synchronize Azure Active Directory Users to AppName` enabled.

81
You can then test the connection by clicking on **Test Connection**. If the connection is successful, be sure to save your configuration before moving on. See below for [troubleshooting](#troubleshooting).
82

83
#### Configure attribute mapping
84

85 86 87 88 89 90 91
1. Click on `Synchronize Azure Active Directory Users to AppName`, to configure the attribute mapping.
1. Click **Delete** next to the `mail` mapping.
1. Map `userPrincipalName` to `emails[type eq "work"].value` and change it's **Matching precedence** to `2`.
1. Map `mailNickname` to `userName`.
1. Create a new mapping by clicking **Add New Mapping** then set **Source attribute** to `objectId`, **Target attribute** to `id`, **Match objects using this attribute** to `Yes`, and **Matching precedence** to `1`.
1. Create a new mapping by clicking **Add New Mapping** then set **Source attribute** to `objectId`, and **Target attribute** to `externalId`.
1. Click the `userPrincipalName` mapping and change **Match objects using this attribute** to `No`.
92

93
    Save your changes and you should have the following configuration:
E
Evan Read 已提交
94

95
   ![Azure's attribute mapping configuration](img/scim_attribute_mapping.png)
96

97 98 99
    NOTE: **Note:** If you used a unique identifier **other than** `objectId`, be sure to map it instead to both `id` and `externalId`.

1. Below the mapping list click on **Show advanced options > Edit attribute list for AppName**.
100 101
1. Leave the `id` as the primary and only required field.

102 103 104
   NOTE: **Note:**
   `username` should neither be primary nor required as we don't support
   that field on GitLab SCIM yet.
E
Evan Read 已提交
105

106
   ![Azure's attribute advanced configuration](img/scim_advanced.png)
107 108

1. Save all the screens and, in the **Provisioning** step, set
109 110 111
   the `Provisioning Status` to `On`.

    ![Provisioning status toggle switch](img/scim_provisioning_status.png)
112

113 114 115
   NOTE: **Note:**
   You can control what is actually synced by selecting the `Scope`. For example,
   `Sync only assigned users and groups` will only sync the users assigned to
116
   the application (`Users and groups`), otherwise, it will sync the whole Active Directory.
117 118 119

Once enabled, the synchronization details and any errors will appear on the
bottom of the **Provisioning** screen, together with a link to the audit logs.
R
Russell Dickenson 已提交
120

121
## Troubleshooting
R
Russell Dickenson 已提交
122

123
### Testing Azure connection: invalid credentials
R
Russell Dickenson 已提交
124

125
When testing the connection, you may encounter an error: **You appear to have entered invalid credentials. Please confirm you are using the correct information for an administrative account**. If `Tenant URL` and `secret token` are correct, check whether your group path contains characters that may be considered invalid JSON primitives (such as `.`). Removing such characters from the group path typically resolves the error.
126 127 128 129 130 131 132 133 134 135 136 137 138 139

### Azure: (Field) can't be blank sync error

When checking the Audit Logs for the Provisioning, you can sometimes see the
error `Namespace can't be blank, Name can't be blank, and User can't be blank.`

This is likely caused because not all required fields (such as first name and 
last name) are present for all users being mapped.

As a workaround, try an alternate mapping:

1. Follow the Azure mapping instructions from above.
1. Delete the `name.formatted` target attribute entry.
1. Change the `displayName` source attribute to have `name.formatted` target attribute.