Seamlessly synchronize Google Workspace users and groups to AWS IAM Identity Center
SSO Sync is a powerful CLI tool and AWS Lambda function that enables automatic provisioning of Google Workspace (formerly G Suite) users and groups into AWS IAM Identity Center (formerly AWS SSO). Built with Go and powered by AWS SDK v2, it provides reliable, scalable, and secure identity synchronization.
- 🔄 Uni-directional Sync: Supports both
groupsandusers_groupssync methods - 🎯 Advanced Filtering: Flexible user and group filtering with Google API query parameters
- 🛡️ Dry-Run Mode: Test synchronization without making actual changes
- ⚡ High Performance: Built with AWS SDK v2 for improved performance and reliability
- 🔧 Multiple Deployment Options: CLI, AWS Lambda, or AWS SAM deployment
- 📊 Comprehensive Logging: Structured logging with configurable levels and formats
- 🔐 Secure: AWS Secrets Manager integration for credential management
- 📈 Scalable: Supports large directories with user caching and pagination
Use one of the quick start templates to simplify the your deployment. Use these templates, with the Sync from Git option, to make updates to your deployment far simpler.
Want to dive straight in? Try this hands-on lab from the AWS Control Tower Workshop. The lab guides you through the complete setup process for both AWS and Google Workspace using the recommended Lambda deployment from the AWS Serverless Application Repository.
| Method | Best For | Setup Time |
|---|---|---|
| AWS Serverless App Repository | Production use | 5 minutes |
| CLI Binary | Local testing, CI/CD | 2 minutes |
| AWS SAM | Custom deployments | 10 minutes |
As per the AWS SSO Homepage:
AWS Single Sign-On (SSO) makes it easy to centrally manage access to multiple AWS accounts and business applications and provide users with single sign-on access to all their assigned accounts and applications from one place.
Key part further down:
With AWS SSO, you can create and manage user identities in AWS SSO's identity store, or easily connect to your existing identity source including Microsoft Active Directory and Azure Active Directory (Azure AD).
AWS SSO can use other Identity Providers as well... such as Google Apps for Domains. Although AWS SSO supports a subset of the SCIM protocol for populating users, it currently only has support for Azure AD.
This project provides a CLI tool to pull users and groups from Google and push them into AWS SSO.
ssosync deals with removing users as well. The heavily commented code provides you with the detail of
what it is going to do.
Important
From v2.7.x the behavior when syncing users has changed for the following situation: If a user in the Google Workspace Directory has been deleted and recreated (and therefore its user id has changed but the email address remains the same).
- Since v2.4 the existing IAM Identity Store user would have the ExternalId field updated. However, in the situation where an email address has been re-assigned to a different user this would lead to them silently inheriting permission assignments made directly to the user. Therefore this option should be used with caution.
- From v2.7 the default bahvaiour will be to delete the existing user and create a new one. This behavior can be overriden with
--force-externalid-updateoption.
Important
Region and IdentityStoreID are no longer configurable parameters. Region is extracted programmatically from the SCIM Endpoint URL, and IdentityStoreID is resolved automatically via the IAM Identity Center ListInstances API. These parameters are still present in template.yaml to avoid breaking deployment tooling for anyone passing a parameter file to the CloudFormation Stack. They will be fully removed in v3.x.
Caution
When using ssosync with an instance of IAM Identity Center integrated with AWS Control Tower. AWS Control Tower creates a number of groups and users (directly via the Identity Store API), when an external identity provider is configured these users and groups are can not be used to log in. However it is important to remember that because ssosync implemements a uni-directional sync it will make the IAM Identity Store match the subset of your Google Workspaces directory you specify, including removing these groups and users created by AWS Control Tower. If you wish to retain unmatched local users/groups, then the retain-unmatched option can be enabled. This will retain 'local' users and groups (those where an ExternalId has not be set), users will be set to suspended, since these users will not be able to authenticate unless a matching user existings in the Google Workspace Directory. If a matching user is created in Google Workspace Directory, then it will be re-activated.
Warning
There are breaking changes for versions >= 0.02
Warning
>= 1.0.0-rc.5 groups to do not get deleted in AWS SSO when deleted in the Google Directory, and groups are synced by their email address
Warning
>= 2.0.0 this makes use of the Identity Store API which means:
- it should be run from a linked account, not the Organization management account.
- if deploying the lambda from the AWS Serverless Application Repository, deploy it into a linked account; the function's execution role carries the IAM permissions it needs.
- if you are running the project as a cli tool, then the environment needs credentials for a principal in that linked account with the appropriate Identity Store and
sso:ListInstancespermissions.
Note: guidance before v2.5.0 required deployment into the IAM Identity Center delegated administration account. From v2.5.0 this is no longer necessary — ssosync works from an ordinary linked account without delegated administration. See the Installation section below.
Warning
>= 2.1.0 make use of named IAM resources, so if deploying via CICD or IaC template will require CAPABILITY_NAMED_IAM to be specified.
Important
>= 2.1.0 switched to using provided.al2 powered by ARM64 instances.
Important
As of v2.2.0 multiple query patterns are supported for both Group and User matching, simply separate each query with a ,. For full sync of groups and/or users specify '*' in the relevant match field.
User match and group match can now be used in combination with the sync method of groups.
Nested groups will now be flattened into the top level groups.
External users are ignored.
Group owners are treated as regular group members.
User details are now cached to reduce the number of api calls and improve execution times on large directories.
- SCIM Protocol RFC
- AWS SSO - Connect to Your External Identity Provider
- AWS SSO - Automatic Provisioning
- AWS IAM Identity Center - Identity Store API
The recommended installation is:
- Setup IAM Identity Center, in the management account of your organization
- Create a linked account (for example an
Identityaccount) from which to run ssosync - Deploy the SSOSync app from the AWS Serverless Application Repository into that linked account
Note
From v2.5.0 ssosync no longer requires IAM Identity Center delegated administration. It operates through the Identity Store and SCIM APIs using only the IAM permissions granted to its execution role, so the best practice is now to deploy it in an ordinary linked account without delegating IAM Identity Center administration to that account. Deploying into the management account is still not recommended.
You can also:
You can go get github.com/awslabs/ssosync or grab a Release binary from the release page. The binary
can be used from your local computer, or you can deploy to AWS Lambda to run on a CloudWatch Event
for regular synchronization.
SSO Sync requires configuration from both Google Workspace and AWS sides.
ssosync reads your directory as a service account that impersonates a Google Workspace admin via domain-wide delegation. The steps below produce the two things ssosync needs: a credentials.json key file and the email address of an admin for the service account to impersonate.
These steps mirror the AWS Control Tower workshop, which you can follow for a fully guided walkthrough.
Note: steps 1–4 are performed in the Google Cloud Console and steps 5–6 in the Google Admin console. You need a Google Cloud account that can create projects/service accounts and a Google Workspace super admin to grant the domain-wide delegation in step 5.
-
Create (or select) a Google Cloud project
- Go to the Google Cloud Console and create a new project (or select an existing one) to own the service account.
-
Enable the Admin SDK API
- In the same project, go to APIs & Services > Enabled APIs & services > Enable APIs and Services.
- Search for Admin SDK API and click Enable. The service account cannot read the directory until this API is enabled on the project.
-
Create a service account and a JSON key
- Go to APIs & Services > Credentials (or IAM & Admin > Service Accounts) and click Create credentials > Service account.
- Give it a name (for example
ssosync) and click Create and continue. No project roles are required (the access is granted in Google Workspace, not in Google Cloud), so you can skip the optional role/grant steps and click Done. - Open the new service account, go to the Keys tab, and choose Add key > Create new key > JSON. A JSON key file downloads automatically.
- Rename the downloaded file to
credentials.json. This is the file ssosync uses (--google-credentials/GOOGLE_CREDENTIALS). Keep it secret; anyone with it can read your directory.
-
Copy the service account's Client ID
- Still on the service account, expand Advanced settings (or the Details tab) and copy the numeric Client ID (also called the Unique ID / OAuth2 client ID). You need it for the next step.
-
Grant domain-wide delegation in the Admin console
- Sign in to the Google Admin console as a super admin.
- Go to Security > Access and data control > API controls, then under Domain wide delegation select Manage Domain Wide Delegation.
- Click Add new and enter:
- Client ID: the Client ID you copied in step 4.
- OAuth scopes (comma-separated, read-only):
https://www.googleapis.com/auth/admin.directory.group.readonlyhttps://www.googleapis.com/auth/admin.directory.group.member.readonlyhttps://www.googleapis.com/auth/admin.directory.user.readonly
- Click Authorize. Only these three read-only scopes are needed; do not grant broader access.
-
Choose the admin user to impersonate
- ssosync must impersonate an existing Google Workspace admin that can read the directory. Note that user's email address — it is the value you pass as
--google-admin(GOOGLE_ADMIN). A super admin always works; a custom admin role with the Users and Groups read privileges is sufficient.
- ssosync must impersonate an existing Google Workspace admin that can read the directory. Note that user's email address — it is the value you pass as
Tip:
credentials.jsonholds the service account key (the who ssosync authenticates as) andGOOGLE_ADMINis the admin it impersonates (the who it acts on behalf of). You need both.
-
Enable IAM Identity Center
- Go to AWS IAM Identity Center console
- Select Settings → Enable automatic provisioning
- Copy the SCIM Endpoint URL and Access Token
-
AWS Credentials
- Configure AWS credentials using any standard method:
- AWS credentials file (
~/.aws/credentials) - Environment variables (
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY) - IAM roles (for Lambda deployment)
- AWS credentials file (
- The executing role needs permissions for
sso:ListInstancesto auto-detect the Identity Store ID
- Configure AWS credentials using any standard method:
./ssosync --help./ssosync \
--google-admin admin@company.com \
--google-credentials ./credentials.json \
--endpoint https://scim.us-east-1.amazonaws.com/... \
--access-token AQoDYXdzE... \
--group-match "name:AWS*"# Sync specific groups with dry-run
./ssosync \
--group-match "name:Engineering*,email:aws-*" \
--sync-method groups \
--dry-run \
--log-level debug
# Sync all users and groups
./ssosync \
--user-match "*" \
--group-match "*" \
--sync-method users_groups
# Ignore specific users/groups
./ssosync \
--group-match "*" \
--ignore-users "service@company.com,bot@company.com" \
--ignore-groups "temp-group@company.com"All CLI flags can be set via environment variables with the SSOSYNC_ prefix:
export SSOSYNC_GOOGLE_ADMIN="admin@company.com"
export SSOSYNC_GOOGLE_CREDENTIALS="./credentials.json"
export SSOSYNC_SCIM_ENDPOINT="https://scim.us-east-1.amazonaws.com/..."
export SSOSYNC_SCIM_ACCESS_TOKEN="AQoDYXdzE..."
export SSOSYNC_GROUP_MATCH="name:AWS*"
export SSOSYNC_DRY_RUN="true"| Flag | Environment Variable | Description | Default |
|---|---|---|---|
--google-admin / -u |
SSOSYNC_GOOGLE_ADMIN |
Google Workspace admin email | Required |
--google-credentials / -c |
SSOSYNC_GOOGLE_CREDENTIALS |
Path to Google credentials JSON | credentials.json |
--customer-id |
SSOSYNC_CUSTOMER_ID |
Google Workspace customer ID | my_customer |
--endpoint / -e |
SSOSYNC_SCIM_ENDPOINT |
AWS SCIM endpoint URL | Required |
--access-token / -t |
SSOSYNC_SCIM_ACCESS_TOKEN |
AWS SCIM access token | Required |
--sync-method / -s |
SSOSYNC_SYNC_METHOD |
Sync method (groups or users_groups) |
groups |
--group-match / -g |
SSOSYNC_GROUP_MATCH |
Google Groups filter query | * |
--user-match / -m |
SSOSYNC_USER_MATCH |
Google Users filter query | "" |
--ignore-users |
SSOSYNC_IGNORE_USERS |
Comma-separated list of users to ignore | [] |
--ignore-groups |
SSOSYNC_IGNORE_GROUPS |
Comma-separated list of groups to ignore | [] |
--include-groups |
SSOSYNC_INCLUDE_GROUPS |
Include only these groups (users_groups method only) | [] |
--precache-ous |
SSOSYNC_PRECACHE_ORG_UNITS |
Comma-separated list of Google OrgUnit paths to precache | [] |
--cache-metrics |
SSOSYNC_CACHE_METRICS |
Gather cache hit/miss metrics and output them at the end of the run to help refine --precache-ous |
false |
--dry-run / -n |
SSOSYNC_DRY_RUN |
Enable dry-run mode | false |
--suspended |
SSOSYNC_SYNC_SUSPENDED |
Include suspended users when syncing | false |
--force-externalid-update |
SSOSYNC_FORCE_EXTERNAL_ID_UPDATE |
When a Google user shares the same primary email as an existing Identity Store user but has a different ID, update the existing user's ExternalId in place instead of deleting and recreating it. Enabling this option carrys the risk of silent permission inheritance, is an email address is re-assigned to a different user in the Google Workspace Directory. See Preserving assignments when migrating IdPs. |
false |
--retain-unmatched / -r |
SSOSYNC_RETAIN_UNMATCHED |
Retain 'local' users and groups that exist in the IAM Identity Store but cannot be matched to the Google Workspace directory, instead of deleting them. A 'local' user or group is one which has been created in the Identity Store directly and not synced via SCIM, from any external identity provider. See Retaining unmatched users and groups. | false |
--debug / -d |
SSOSYNC_DEBUG |
Enable verbose / debug logging (forces log level to debug) |
false |
--log-level |
SSOSYNC_LOG_LEVEL |
Log level (debug, info, warn, error) | info |
--log-format |
SSOSYNC_LOG_FORMAT |
Log format (text, json) | text |
Note:
--regionand--identity-store-idare no longer required. Region is extracted from the SCIM endpoint URL, and Identity Store ID is resolved automatically via the IAM Identity Center API.
When ssosync finds an Identity Store user whose primary email matches a Google Workspace user but whose ID differs, the default behaviour is to delete the existing Identity Store user and create a new one. This is intentional: it prevents a new Google user from inheriting the permission set and group assignments of a previous, unrelated user that happened to reuse the same email address.
Setting --force-externalid-update (or SSOSYNC_FORCE_EXTERNAL_ID_UPDATE=true) changes this behaviour. Instead of delete-and-recreate, ssosync updates the existing Identity Store user's ExternalId in place, which preserves that user's existing assignments and group memberships.
This is required when migrating from another external IdP (for example Microsoft Entra) to Google Workspace Directory, where the users already exist in the Identity Store and their assignments need to be retained.
If an existing Identity Store user matches a Google Workspace user by email address but has no ExternalId set, that user is adopted and updated to sync with its Google Workspace equivalent. This happens regardless of the --force-externalid-update flag, and no delete-and-recreate occurs because there is no prior external identity to preserve or displace.
Caution
Enabling this flag can cause a user to inherit privileges from the previously matched Identity Store user. Only enable it when you understand and accept that risk, such as during a controlled IdP migration.
ssosync performs a uni-directional sync: by default any user or group that exists in the IAM Identity Store but cannot be matched to the subset of your Google Workspace directory you are syncing is deleted so the Identity Store mirrors Google Workspace.
Setting --retain-unmatched (or SSOSYNC_RETAIN_UNMATCHED=true) blocks the deletion of 'local' users and groups. Users and groups that exist in the Identity Store (and don't have an ExternalId set) and have no match in the Google Workspace directory are left in place instead of being removed. Users are have an ExternalId set, are assumed to have been previous synced by ssosync and are there managed as usual. If a local user or group matches with one in Google Workspace directory, then the ExternalId is set and it becomes managed by ssosync.
This option does not prevent deletion when a Google Workspace user has the same email address as an Identity Store user but a different, non-empty ExternalId. By default, ssosync deletes the old Identity Store user and creates a new one to avoid carrying the old user's permissions forward. The replacement has the same email address but a different Identity Store ID, so compare its group memberships and account assignments after the sync. Use --force-externalid-update to update the existing user in place only when preserving those assignments is intended; this carries the permission-inheritance risk described above.
This is useful when the Identity Store also contains identities managed outside of ssosync (for example users and groups created by AWS Control Tower) that you do not want removed on each sync.
Caution
If you want to be able to test what changes would be performed by ssosync with a specific configuration against your existing Identity Store, then --dry-run is recommended. In this mode ssosync, simulates the changes it would make but doesn't make any changes at all to the identity store. This is highly recommended when making configuration changes.
ExternalIdunset- primary email address matches Outcome User is updated with their ExternalId (and any other fields that differ) from the Google Workspace Directory. They have been adopted and are managed by ssosync, and will be treated as a synced user in the next execution.
ExternalIdset but doesn't match- primary email address doesn't match Outcome the user is deleted.
ExternalIdset but doesn't match- primary email address matches
Outcome
Default is to delete the user and create a new user, this ensures the 'new user' doesn't inherit privileges from the previous user that happen to be assigned the same email address. This behavior can be overridden so the exist user is updated and it retains the privileges, if the
--force-externalid-updateis also set.
ExternalIdset and matches- primary email address is not inspected Outcome User is compared to the matching user in Google, if it differs in anyway (including primary email address) its updated to match.
ExternalIdunsetDisplayNamedoesn't match Outcome The group is retained .
ExternalIdunsetDisplayNamedoes match Outcome Groups is updated with their ExternalId from the Google Workspace Directory. They have been adopted and are managed by ssosync
ExternalIdset but doesn't match Outcome the group is deleted.
ExternalIdset and matchesDisplayNameis not inspected Outcome Group is compared to the matching group in Google, if it differs in anyway its updated to match.
The --group-match value is passed through to the Google Admin SDK groups.list query, so it supports the following query fields and operators:
| Field | Prefix (:) |
Exact (=) |
Example |
|---|---|---|---|
name |
✓ | ✓ | name:AWS* or name=Administrators |
email |
✓ | ✓ | email:aws-* or email=aws-admins@company.com |
memberKey |
— | ✓ | memberKey=user@company.com |
- Use
:for prefix/wildcard matching (e.g.name:AWS*) - Use
=for exact matching (e.g.name=Administrators) - Use
memberKey=<email>to match every group that a specific user (or group) is a direct member of. This is an exact match only; the value must be the full primary email address of the member and wildcards are not supported. WhenmemberKeyis used you must supply your real Google Workspace customer ID via--customer-id(SSOSYNC_CUSTOMER_ID); the defaultmy_customerplaceholder is not accepted for member-key queries. - Combine multiple patterns with
,(each pattern is run as a separate query and the results are merged) - Use
*alone to sync all groups (and, with thegroupssync method, their member users)
# Sync groups starting with "AWS"
--group-match "name:AWS*"
# Sync multiple patterns
--group-match "name:Admin*,email:aws-*"
# Sync specific group
--group-match "name=Administrators"
# Sync every group that a specific user belongs to
--group-match "memberKey=user@company.com"
# Sync all groups
--group-match "*"Google's directory query syntax only matches group name and email with prefix/wildcard patterns, so the common prefix/suffix convention (e.g. name:aws-*) requires you to name every group you want synced accordingly. If your groups don't follow a shared naming convention, you can use memberKey with a dedicated "marker" group instead, so any group can be synced regardless of its name.
-
Create a single marker group in Google Workspace, for example:
- Name:
Any group with this as a member will be synced to IAM Identity Center - Description:
Any group with this as a member will be synced to IAM Identity Center - Email:
aws-ssosync@your-domain.com
- Name:
-
Add this marker group as a member of every group you want ssosync to sync. (Groups can be members of other groups in Google Workspace.)
-
Set the group match to the marker group's email:
--group-match "memberKey=aws-ssosync@your-domain.com"
ssosync then selects every group that has the marker group as a member, no matter what those groups are named. To add or remove a group from the sync scope later, just add or remove the marker group from its membership.
Note:
memberKeyqueries require your real Google Workspace customer ID. Set--customer-id(SSOSYNC_CUSTOMER_ID) to your actual customer ID rather than leaving it as themy_customerdefault.
The --user-match parameter supports the following query fields and operators:
| Field | Prefix (:) |
Exact (=) |
Example |
|---|---|---|---|
name |
✓ | ✓ | name:John* or name=John Doe |
email |
✓ | ✓ | email:admin* or email=john@company.com |
manager |
— | ✓ | manager=boss@company.com |
managerId |
✓ | ✓ | managerId:abc123* |
orgName |
✓ | ✓ | orgName=Engineering |
orgDepartment |
✓ | ✓ | orgDepartment:Sales* |
orgCostCenter |
✓ | ✓ | orgCostCenter=CC-1234 |
- Use
:for prefix/wildcard matching (e.g.name:John*) - Use
=for exact matching (e.g.name=John Doeoremail=admin@company.com) - Use
"for exact values containing spaces (e.g.orgName="My Department") - Combine multiple patterns with
,or space separator - Use
*alone to sync all users
# Sync users with specific name pattern
--user-match "name:John*"
# Sync users by email prefix
--user-match "email:admin*"
# Sync users in a specific org unit
--user-match "orgName=Engineering"
# Sync users by department and cost center
--user-match "orgDepartment:Sales*,orgCostCenter=CC-1234"
# Sync users managed by a specific person
--user-match "manager=boss@company.com"
# Combine multiple query fields
--user-match "name:John*,email:admin*,orgName=Engineering"
# Sync all users
--user-match "*"For complete query syntax, see:
- Go 1.24+
- Make
- AWS CLI (for deployment)
# Clone repository
git clone https://github.com/awslabs/ssosync.git
cd ssosync/
# Install development dependencies
make setup
# Run tests
make test
# Build locally
make go-build
# Run with development configuration
make devmake help # Show all available targets
make setup # Install all dependencies
make test # Run tests with coverage
make test-verbose # Run tests with verbose output
make test-coverage # Generate HTML coverage report
make lint # Run linters
make fmt # Format code
make go-build # Build application
make clean # Clean build artifacts
make ci # Run CI pipeline (fmt, vet, test)The project includes comprehensive tests with 61%+ coverage:
# Run all tests
make test
# Run tests with verbose output
make test-verbose
# Generate coverage report
make test-coverage
# Run integration tests (requires valid credentials)
go test -tags=integration ./internal -vDeploy directly from the AWS Serverless Application Repository.
| Pattern | Description | Use Case |
|---|---|---|
| App + Secrets | Default mode, creates app and secrets | Single account deployment |
| App Only | Creates app, expects existing secrets | Shared secrets across environments |
| Secrets Only | Creates secrets without app | Centralized secret management |
| Cross-Account | App in one account, secrets in another | Multi-account organizations |
# Build
sam build
# Deploy with guided setup
sam deploy --guided
# Or deploy with parameters
sam deploy \
--stack-name ssosync \
--capabilities CAPABILITY_NAMED_IAM \
--parameter-overrides \
GoogleAdminEmail=admin@company.com \
ScheduleExpression="rate(15 minutes)"When deployed as Lambda, configuration is managed through environment variables. Sensitive values can be stored in AWS Secrets Manager or SSM Parameter Store — simply set the environment variable to the resource ARN and ssosync will resolve the value automatically:
- Secrets Manager:
arn:aws:secretsmanager:<region>:<account>:secret:<name> - SSM Parameter Store (SecureString):
arn:aws:ssm:<region>:<account>:parameter/<name>
# Required secrets (stored in Secrets Manager or SSM Parameter Store)
GOOGLE_ADMIN=<secret-arn or ssm-parameter-arn>
GOOGLE_CREDENTIALS=<secret-arn or ssm-parameter-arn>
SCIM_ENDPOINT=<secret-arn or ssm-parameter-arn>
SCIM_ACCESS_TOKEN=<secret-arn or ssm-parameter-arn>
CUSTOMER_ID=<secret-arn, ssm-parameter-arn, or plain value>
# Optional environment variables
LOG_LEVEL=info
LOG_FORMAT=json
SYNC_METHOD=groups
GROUP_MATCH=*
USER_MATCH=
IGNORE_USERS=
IGNORE_GROUPS=
INCLUDE_GROUPS=
PRECACHE_ORG_UNITS=
CACHE_METRICS=false
DRY_RUN=false
SYNC_SUSPENDED=false
FORCE_EXTERNAL_ID_UPDATE=false
RETAIN_UNMATCHED=falseNote:
REGIONandIDENTITY_STORE_IDenvironment variables are no longer required. Region is derived from the SCIM endpoint URL, and Identity Store ID is resolved via the IAM Identity Center API.
When deployed as Lambda, logs are automatically sent to CloudWatch:
# View logs
aws logs describe-log-groups --log-group-name-prefix /aws/lambda/ssosync
# Tail logs
aws logs tail /aws/lambda/ssosync-function --followError: AWS SSO SCIM API rate limits errors
Solution: Reduce sync frequency or implement exponential backoff
Error: cannot read secret: <secret-name>
Solution: Verify IAM permissions for Secrets Manager access
Error: Error Getting Deleted Users
Solution: Verify Google service account permissions and domain-wide delegation
- User Caching: Enable user caching for large directories
- Filtering: Use specific group/user filters to reduce API calls
- Batch Size: Adjust batch sizes for large sync operations
- Scheduling: Set appropriate sync intervals based on directory size
We welcome contributions! Please see our Contributing Guidelines for details.
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests for new functionality
- Run the test suite:
make ci - Submit a pull request
- Follow Go best practices
- Maintain test coverage above 60%
- Use structured logging
- Document public APIs
- Follow semantic versioning
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
- AWS Labs team for the original implementation
- Google Workspace Directory API team
- AWS IAM Identity Center team
- All contributors and community members
Need help? Check out our Issues page or start a Discussion.