You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+67-1Lines changed: 67 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -16,11 +16,16 @@ Keep your [AWS IAM Identity Center](https://aws.amazon.com/iam/identity-center/)
16
16
## ✨ Features
17
17
18
18
* ✅ **Extended Attribute Support**: Syncs extended AWS SSO SCIM API fields as described in the [official documentation](https://docs.aws.amazon.com/singlesignon/latest/developerguide/limitations.html).
19
+
* ✅ **Configurable User Fields**: Choose which optional user attributes (phone numbers, addresses, enterprise data, etc.) to sync. See [Configurable User Fields](#configurable-user-fields) for details.
19
20
* ✅ **Efficient Data Retrieval**: Uses [partial responses](https://cloud.google.com/storage/docs/json_api#partial-response) from the Google Workspace API to fetch only the data you need.
20
21
* ✅ **Nested Groups Support**: Supports nested groups in Google Workspace thanks to the `includeDerivedMembership` API query parameter.
21
22
* ✅ **Multiple Deployment Options**: Can be deployed via the `AWS Serverless Application Repository`, as a `Container Image`, or as a `CLI`.
22
23
* ✅ **Incremental Sync**: Drastically reduces the number of requests to the AWS SSO SCIM API by using a [state file](docs/State-File-example.md) to track changes.
23
24
25
+
## 🆕 What's New
26
+
27
+
For a detailed list of new features, improvements, and bug fixes in each release, see the [What's New](docs/Whats-New.md) page.
28
+
24
29
## Compatibility
25
30
26
31
This project is compatible with the latest AWS Lambda runtimes. Since version `v0.0.19`, it uses the `provided.al2` runtime and `arm64` architecture.
@@ -116,6 +121,66 @@ make build-dist
116
121
***Docker Image**
117
122
* Pull the image from one of the public repositories.
118
123
124
+
## Configurable User Fields
125
+
126
+
By default, all optional user attributes are synced from Google Workspace to AWS SSO SCIM. You can control which optional fields are included using the `sync_user_fields` configuration option.
Set the `SyncUserFields` parameter when deploying:
172
+
173
+
```bash
174
+
sam deploy --parameter-overrides SyncUserFields=phoneNumbers,addresses,enterpriseData
175
+
```
176
+
177
+
### Behavior Notes
178
+
179
+
***Default (empty or not set):** When `sync_user_fields` is empty or not configured, all optional fields are synced. This preserves backward compatibility with existing deployments.
180
+
***Specifying fields:** Only the listed fields will be synced. For example, setting `sync_user_fields: [phoneNumbers]` will sync only phone numbers; addresses, enterprise data, and other optional attributes will not be sent to AWS SSO SCIM.
181
+
***Invalid field names:** If an invalid field name is provided, the application will fail at startup with a clear error message listing the unrecognized field.
182
+
***Changing on an existing deployment:** The first sync after modifying this configuration will detect all users as "changed" (due to hash differences) and update them in AWS SSO. This is expected behavior — it will clear the excluded fields from SCIM.
***Group Limit**: The AWS SSO SCIM API has a limit of 50 groups per request. Please support the feature request on the [AWS Support site](https://repost.aws/questions/QUqqnVkIo_SYyF_SlX5LcUjg/aws-sso-scim-api-pagination-for-methods) to help get this limit increased.
129
-
***Throttling**: With a large number of users and groups, you may encounter a `ThrottlingException` from the AWS SSO SCIM API. This project uses a [retryable HTTP client](https://github.com/hashicorp/go-retryablehttp) to mitigate this, but it's still a possibility.
194
+
***Throttling**: With a large number of users and groups, you may encounter a `ThrottlingException` from the AWS SSO SCIM API. This project uses a [retryable HTTP client](https://github.com/p2p-b2b/httpretrier) to mitigate this, but it's still a possibility.
130
195
***User Status**: The Google Workspace API doesn't differentiate between normal and guest users except for their status. This project only syncs `ACTIVE` users.
131
196
132
197
## For `ssosync` Users
@@ -135,6 +200,7 @@ If you are coming from the [awslabs/ssosync](https://github.com/awslabs/ssosync)
135
200
136
201
* This project only implements the `--sync-method groups`.
137
202
* This project only implements filtering for Google Workspace Groups, not Users.
203
+
* This project supports selecting which optional user attributes to sync via `--sync-user-fields` (e.g., phone numbers, addresses, enterprise data).
138
204
* The flag names are different.
139
205
* Not all features of `ssosync` are implemented here, and they may not be in the future.
rootCmd.PersistentFlags().StringVarP(&cfg.SyncMethod, "sync-method", "m", config.DefaultSyncMethod, "Sync method to use [groups]")
79
79
rootCmd.PersistentFlags().BoolVarP(&cfg.UseSecretsManager, "use-secrets-manager", "g", config.DefaultUseSecretsManager, "use AWS Secrets Manager content or not (default false)")
80
+
rootCmd.Flags().StringSliceVar(&cfg.SyncUserFields, "sync-user-fields", nil, "optional user fields to sync (e.g., phoneNumbers,addresses,enterpriseData); default: all fields")
This document tracks notable changes, new features, and bug fixes across releases.
4
+
5
+
## v0.44.0
6
+
7
+
### Configurable User Fields
8
+
9
+
You can now choose which optional user attributes are synced from Google Workspace to AWS SSO SCIM using the new `sync_user_fields` configuration option.
10
+
11
+
For example, sync only phone numbers and enterprise data while excluding addresses, locale, or timezone. When not configured, all fields are synced as before (fully backward compatible).
See [Configurable User Fields](../README.md#configurable-user-fields) for configuration examples and behavior notes.
16
+
17
+
### Bug Fix: Unnecessary member re-syncs
18
+
19
+
Fixed a bug where group members were re-synced on every Lambda execution even when nothing changed in Google Workspace.
20
+
21
+
**Root cause:**`MergeGroupsMembersResult` was not consolidating entries for the same group when merging "created" and "equal" member sets. This produced duplicate group entries in the state file, causing the groups-members hash to never match the IDP data on subsequent syncs.
22
+
23
+
**Impact:** After upgrading, the first sync will reconcile the state file automatically. Subsequent syncs will correctly skip member reconciliation when no changes are detected.
24
+
25
+
### Performance Improvements
26
+
27
+
***Concurrent user fetching:**`GetUsersByGroupsMembers` now fetches user details from the Google Workspace API concurrently (up to 10 parallel requests) instead of sequentially. For deployments with 100+ users, this reduces the user retrieval phase from minutes to seconds.
28
+
29
+
***Optimized member comparison:** Removed a redundant O(m) inner loop in `membersDataSets` that iterated over the entire SCIM member set to find an email already confirmed by a direct map lookup. Benchmarks show ~16-19% improvement for large groups.
30
+
31
+
***Goroutine leak safety:** Concurrent operations are verified with `synctest.Test` (Go 1.26) to ensure no goroutine leaks in both success and error paths.
0 commit comments