Google Workspace
Visualize Google Workspace domain user groups, users, and their authorized tokens, map Google Workspace users to employees and managers, and monitor changes through queries and alerts.
- Installation
- Authorization
- Data Model
- Types
- Release Notes
Installation
For this integration, you will need to add necessary API scopes to your Google Workspace as well as create a dedicated user and role with scopes and privileges for JupiterOne within the Admin console. Every step below is required whether or not your organization signs in through SSO; if it does, read the note under Create a JupiterOne user in Google Workspace for how to complete the dedicated user's one-time sign-in.
Add the JupiterOne API scopes
Log in to the Google Workspace Admin Console as a super administrator to perform the following actions:
-
Click Account > Account Settings > Profile and retrieve your Customer ID. It will have a format similar to
C1111abcd. Alternatively, click Security and expand Setup single sign-on (SSO) for SAML applications and copy theidpidproperty value from the SSO URL. For example,https://accounts.google.com/o/saml2/idp?idpid=C1111abcdprovides the IDC1111abcd. Retain this value for the Account ID field in the JupiterOne integration configuration. -
Return to the Admin Console home page. Click Security > Access and data control > API controls.
-
In the Domain wide delegation pane, select Manage Domain Wide Delegation.
-
Click Add new and enter the JupiterOne Service Account client ID
102174985137827290632(US region) or114158755753045408365(EU region) into the Client ID field. If the JupiterOne integration configuration UI shows you a different client ID, use the one it shows — that value is authoritative for your account. -
Add the following API scopes (comma separated):
https://www.googleapis.com/auth/admin.directory.domain.readonly, https://www.googleapis.com/auth/admin.directory.user.readonly, https://www.googleapis.com/auth/admin.directory.group.readonly, https://www.googleapis.com/auth/admin.directory.user.security, https://www.googleapis.com/auth/apps.groups.settings, https://www.googleapis.com/auth/admin.directory.rolemanagement.readonly,https://www.googleapis.com/auth/admin.directory.device.mobile.readonly, https://www.googleapis.com/auth/admin.directory.device.chromeos.readonly, https://www.googleapis.com/auth/cloud-identity.devices.readonly, https://www.googleapis.com/auth/chrome.management.reports.readonly -
Click Authorize.
-
Point to the client ID in the list and click View details to confirm all of the scopes above were saved. Google's console occasionally does not persist every scope on the first save; if any are missing, click Edit, re-add them, and Authorize again.
If your organization has enabled multi-party approval for sensitive admin actions, authorizing domain-wide delegation requires a second super administrator to approve the change before it takes effect. Scope changes can also take up to 24 hours to propagate.
Create a JupiterOne user in Google Workspace
Continuing in the Admin console, create a user the JupiterOne Service Account will impersonate.
-
Click Users > Add new user.
-
Enter First name "JupiterOne", Last name "SystemUser", Primary email "jupiterone-admin". Retain the email address for the Admin Email field in the JupiterOne integration configuration.
-
Click Add new user, and retain the temporary generated password for the next step.
-
In another browser (or using Chrome's Incognito feature), log in as the new user to set a complex password and accept the Google Workspaces Terms of Service. You may dispose of the password as it will not be used and may be reset by a super administrator in the future as needed.
Do not skip step 4, including when your organization signs in through SSO. Domain-wide delegation cannot impersonate a user who has never signed in: Google only sets the account's agreedToTerms flag after that first interactive login, it is an output-only field that no administrator or API call can set on the user's behalf, and until it is set the integration's authorization attempt fails. If your domain routes sign-in to an external identity provider, complete this one-time login through your IdP (provisioning jupiterone-admin there), or grant the account a temporary SSO exemption so it can sign in with the Google password, then remove the exemption afterward.
After that one-time login, the password is no longer used. JupiterOne authenticates as the Service Account and impersonates the address through domain-wide delegation, so the account needs no ongoing password, no IdP app assignment, and no interactive access.
Create a JupiterOne role in Google Workspace
Continuing in the Admin console, create a new role that will have only the permissions required by JupiterOne, and which will include only the jupiterone-admin system user.
-
Click Users, then click on the "JupiterOne SystemUser".
-
Click Admin roles and privileges, then click the icon to edit the user's roles
-
Click Create custom role > Create a new role.
-
Enter Name "JupiterOne System", a Description "Role for JupiterOne user to enable read-only access to Google Workspaces Admin APIs." If you have email controls that filter for employee impersonation attacks, you may want to change the name to something such as "j1-system”.
-
In the Admin privileges section, select these permissions:
- Users -> Read
- Groups -> Read
- Domains -> Domain Management
- Security -> User Security Management
- Services -> Mobile Device Management -> Manage Devices and Settings
- Services -> Chrome Management -> Manage ChromeOS Devices (read only)
- Services -> Chrome Management -> View Extensions List Report
Google has consolidated the privilege tree: the permissions above were previously split across separate Admin console privileges and Admin API privileges sections, and are now all found under Admin privileges. The fastest way to select them is the privileges search box in the role editor rather than expanding each branch.
Grant Manage ChromeOS Devices (read only), not Manage ChromeOS Devices. The integration only reads ChromeOS device data, so the read-only privilege is sufficient and avoids granting write access to your devices.
To ingest role and role assignment data you must grant this account Super Admin permissions in addition to the custom role listed above. Permissions will still be restricted by the readonly API scopes if Super Admin permissions are granted, however access to group setting updates and token deletions will be an incidental side effect due to the limitations in the Google domain wide API settings.
These permissions will not be used by the JupiterOne integration, but if granting those permissions is unacceptable, please do not provide Super Admin permissions. The only ingestion items that will not be ingested due to missing Super Admin permissions are roles, role assignments, and token information.
Adding Scopes and Privileges
Changes to the integration may include additional data ingestion requiring authorization of new scopes and additional privileges granted to the custom Admin Role.
To authorize additional scopes, log in to the Google Workspace Admin Console as a super administrator to perform the following actions.
-
Click Security > Access and data control > API controls.
-
In the Domain wide delegation pane, select Manage Domain Wide Delegation.
-
Identify the JupiterOne Service Account client ID shown in the JupiterOne integration configuration UI.
-
Click Edit to add scopes.
-
Click Authorize, then point to the client ID and click View details to confirm the new scopes were saved.
To grant additional privileges, return to the Admin console:
-
Click Admin roles, then click the "JupiterOne System" role.
-
Click Privileges to add additional privileges under Admin privileges to enable JupiterOne to fetch new data.
-
Click Save.
Configuration in JupiterOne
To add the Google Workspace integration in JupiterOne, navigate to the Integrations tab in JupiterOne and select Google Workspace. Click New Instance to begin configuring your integration. Enter the following:
- Account Name by which you want to identify this Google Workspace account in JupiterOne. Ingested entities will have this value stored in
tag.AccountNamewhen the AccountName toggle is enabled. - Description that assist your team when identifying the integration instance.
- Select a Polling Interval that you feel is sufficient for your monitoring needs. You may leave this as
DISABLEDand manually execute the integration. - Enter the Customer ID collected during the setup of Google Workspace.
- Enter the Email Address of the user created during setup of Google Workspace.
Click Create once all values are provided to finalize the integration.
Integration Jobs Events
A common log when running the integration job is Permission denied reading tokens for N users. This happens when the credentials provided to JupiterOne are insufficient for reading tokens of users with greater permissions, such as those with the Super Admin role assignment. This is not an error, but is only listed as informational.
As noted, this is due to the "JupiterOne SystemUser" that is configured for integration purposes not having sufficient permissions to list the tokens for users with higher privileges, such as the "Super Admin" Role. These tokens are not necessary for the job to complete and all other data will still be retrieved.
The "Tokens" step involves extensive API usage, often resulting in a long-running integration job. If you find this data less valuable, you may want to consider disabling this step using ingest sources.
Next steps
Now that your integration instance has been configured, it will begin running on the polling interval you provided, populating data within JupiterOne. Continue on to our Instance management guide to learn more about working with and editing integration instances.
Permissions
IAM permissions that must be granted to the integration principal for data ingestion.
Show Permissions (6)
Chrome Management -> Manage Chrome OS DevicesChrome Management -> View Extensions List ReportDomain ManagementGroups -> ReadManage Devices and SettingsUsers -> Read
Roles
RBAC roles that must be assigned to the integration principal.
Show Roles (1)
Super Admin
OAuth Scopes
OAuth scopes that must be granted to the application or service principal.
Show OAuth Scopes (10)
https://www.googleapis.com/auth/admin.directory.device.chromeos.readonlyhttps://www.googleapis.com/auth/admin.directory.device.mobile.readonlyhttps://www.googleapis.com/auth/admin.directory.domain.readonlyhttps://www.googleapis.com/auth/admin.directory.group.readonlyhttps://www.googleapis.com/auth/admin.directory.rolemanagement.readonlyhttps://www.googleapis.com/auth/admin.directory.user.readonlyhttps://www.googleapis.com/auth/admin.directory.user.securityhttps://www.googleapis.com/auth/apps.groups.settingshttps://www.googleapis.com/auth/chrome.management.reports.readonlyhttps://www.googleapis.com/auth/cloud-identity.devices.readonly
Documentation Links
Links to provider documentation relevant to setup and configuration.
Show Documentation Links (11)
- https://cloud.google.com/identity/docs/reference/rest/v1/devices
- https://developers.google.com/chrome/management/reference/rest/v1/customers.reports
- https://developers.google.com/workspace/admin/directory/reference/rest/v1/chromeosdevices
- https://developers.google.com/workspace/admin/directory/reference/rest/v1/domains
- https://developers.google.com/workspace/admin/directory/reference/rest/v1/groups
- https://developers.google.com/workspace/admin/directory/reference/rest/v1/mobiledevices
- https://developers.google.com/workspace/admin/directory/reference/rest/v1/roleAssignments
- https://developers.google.com/workspace/admin/directory/reference/rest/v1/roles
- https://developers.google.com/workspace/admin/directory/reference/rest/v1/tokens
- https://developers.google.com/workspace/admin/directory/reference/rest/v1/users
- https://developers.google.com/workspace/admin/groups-settings/v1/reference/groups
Per-Step Breakdown
Detailed authorization requirements for each ingestion step.
Show all steps (5)
| Step | Permissions | Roles | OAuth Scopes |
|---|---|---|---|
| Chrome Extension Devices | Chrome Management -> View Extensions List Report | - | https://www.googleapis.com/auth/chrome.management.reports.readonly |
| Group Settings | - | - | https://www.googleapis.com/auth/apps.groups.settings |
| Groups | Groups -> Read | - | https://www.googleapis.com/auth/admin.directory.group.readonly |
| Role Assignments | - | Super Admin | https://www.googleapis.com/auth/admin.directory.rolemanagement.readonly |
| Tokens | - | Super Admin | https://www.googleapis.com/auth/admin.directory.user.security |
Entities
The following entities are created:
| Resources | Entity _type | Entity _class |
|---|---|---|
| Account | google_account | Account |
| Chrome Extension | google_chrome_extension | Application |
| Chrome OS Device | google_chrome_os_device | Device |
| Device | google_device | Device |
| Domain | google_domain | Domain |
| Group | google_group | Group |
| Group Settings | google_group_settings | Configuration |
| Mobile Device | google_mobile_device | Device |
| Role | google_role | AccessRole |
| Site | google_site | Site |
| Token | google_token | AccessKey, NHI |
| User | google_user | User |
Relationships
The following relationships are created:
Source Entity _type | Relationship _class | Target Entity _type |
|---|---|---|
google_account | HAS | google_role |
google_account | HAS | google_user |
google_account | HAS | google_group |
google_account | MANAGES | google_chrome_os_device |
google_account | MANAGES | google_mobile_device |
google_account | MANAGES | google_device |
google_group | HAS | google_user |
google_group | HAS | google_group |
google_group | HAS | google_group_settings |
google_site | HAS | google_user |
google_token | ALLOWS | mapped_entity (class Vendor) |
google_user | ASSIGNED | google_role |
google_user | ASSIGNED | google_token |
Mapped Relationships
The following mapped relationships are created:
Source Entity _type | Relationship _class | Target Entity _type | Direction |
|---|---|---|---|
google_device | INSTALLED | google_chrome_extension | FORWARD |
Google Account
google_account inherits from Account
| Property | Type | Description | Specifications |
|---|---|---|---|
accountId | string | ||
domains * | array of strings | ||
primaryDomain | string | ||
vendor * | string | default: Google |
Google Chrome Extension
google_chrome_extension inherits from Application
| Property | Type | Description | Specifications |
|---|---|---|---|
deviceCount * | number | null | ||
disabled | boolean | null | ||
installType | string | null | ||
permissions * | string | ||
source | string | null | ||
type | string | null | ||
uri | string | null |
Google Chrome Os Device
google_chrome_os_device inherits from Device
| Property | Type | Description | Specifications |
|---|---|---|---|
annotatedUser | string | null | ||
bootMode | string | null | Any of: VerifiedDev | |
firmwareVersion | string | null | ||
googleStatus | string | null | Any of: ACTIVEDELINQUENTPRE_PROVISIONEDDEPROVISIONEDDISABLEDINACTIVERETURN_ARRIVEDRETURN_REQUESTEDSHIPPEDUNKNOWN | |
lastEnrollementTime | number | This property is deprecated. Use lastEnrollmentTime instead. | deprecated: true |
lastEnrollmentTime | number | ||
lastSync | number | ||
macAddress | string | null | ||
platformVersion | string | null | ||
recentUsersEmail | array of strings | ||
recentUsersType | array of strings | ||
serialNumber | string | null | ||
supportEndDate | number | null | The final date the device will be supported. This is applicable only for those devices purchased directly from Google. | |
tpmFamily | string | TPM 2.0 style encoding Examples: TPM 1.2: "1.2" -> 312e3200 | |
tpmFirmwareVersion | string | ||
tpmManufacturer | string | ||
tpmModel | string | ||
tpmSpecLevel | string | ||
tpmVendorId | string |
Google Device
google_device inherits from Device
| Property | Type | Description | Specifications |
|---|---|---|---|
androidEnabledUnknownSources | boolean | null | ||
androidOwnerProfileAccount | boolean | null | ||
androidOwnershipPrivilege | string | null | ||
androidSupportsWorkProfile | boolean | null | ||
basebandVersion | string | null | ||
bootloaderVersion | string | null | ||
brand | string | null | Examples: Samsung | |
buildNumber | string | null | ||
byod * | boolean | Please use BYOD instead. | deprecated: true |
compromisedState | string | null | ||
deviceType | string | null | ||
enabledDeveloperOptions | boolean | null | ||
enabledUsbDebugging | boolean | null | ||
encryptionState | string | null | ||
imei | string | null | ||
kernelVersion | string | null | ||
lastSyncedOn | number | ||
macAddress | array | null | ||
managementState | string | null | ||
meid | string | null | ||
networkOperator | string | null | ||
osKernel | string | null | ||
otherAccounts | array | null | ||
ownerType | string | null | ||
releaseVersion | string | null | Examples: 6.0 | |
securityPatchedOn | number | ||
serialNumber | string | null | ||
wifiMacAddresses | array | null |
Google Domain
google_domain inherits from Domain
| Property | Type | Description | Specifications |
|---|---|---|---|
primary * | boolean | ||
verified * | boolean |
Google Group
google_group inherits from Group
| Property | Type | Description | Specifications |
|---|---|---|---|
adminCreated | boolean | null | ||
aliases | array | null | ||
directMembersCount | string | null | ||
email | string | null | ||
kind | string | null | The type of the resource. Always admin#directory#group for groups. | |
nonEditableAliases | array | null | The list of the group's non-editable alias email addresses that are outside of the account's primary domain or subdomains. |
Google Group Settings
google_group_settings inherits from Configuration
| Property | Type | Description | Specifications |
|---|---|---|---|
allowExternalMembers | boolean | null | ||
allowWebPosting | boolean | null | ||
archiveOnly | boolean | null | ||
customFooterText | string | null | The maximum number of characters is 1,000. | |
customReplyTo | string | null | ||
customRolesEnabledForSettingsToBeMerged | boolean | null | ||
defaultMessageDenyNotificationText | string | null | ||
email | string | ||
enableCollaborativeInbox | boolean | null | ||
favoriteRepliesOnTop | boolean | null | ||
includeCustomFooter | boolean | null | ||
includeInGlobalAddressList | boolean | null | ||
isArchived | boolean | null | ||
membersCanPostAsTheGroup | boolean | null | ||
messageModerationLevel | string | null | Any of: MODERATE_ALL_MESSAGESMODERATE_NON_MEMBERSMODERATE_NEW_MEMBERSMODERATE_NONE | |
primaryLanguage | string | null | ||
replyTo | string | null | Any of: REPLY_TO_CUSTOMREPLY_TO_SENDERREPLY_TO_LISTREPLY_TO_OWNERREPLY_TO_IGNOREREPLY_TO_MANAGERS | |
sendMessageDenyNotification | boolean | null | ||
spamModerationLevel | string | null | Any of: ALLOWMODERATESILENTLY_MODERATEREJECT | |
whoCanApproveMembers | string | null | Any of: ALL_MEMBERS_CAN_APPROVEALL_MANAGERS_CAN_APPROVEALL_OWNERS_CAN_APPROVENONE_CAN_APPROVE | |
whoCanAssistContent | string | null | Any of: ALL_MEMBERSOWNERS_AND_MANAGERSMANAGERS_ONLYOWNERS_ONLYNONE | |
whoCanBanUsers | string | null | Any of: ALL_MEMBERSOWNERS_AND_MANAGERSOWNERS_ONLYNONE | |
whoCanContactOwner | string | null | Any of: ALL_IN_DOMAIN_CAN_CONTACTALL_MANAGERS_CAN_CONTACTALL_MEMBERS_CAN_CONTACTANYONE_CAN_CONTACTALL_OWNERS_CAN_CONTACT | |
whoCanDiscoverGroup | string | null | Any of: ALL_MEMBERS_CAN_DISCOVERALL_IN_DOMAIN_CAN_DISCOVERANYONE_CAN_DISCOVER | |
whoCanJoin | string | null | Any of: ANYONE_CAN_JOINALL_IN_DOMAIN_CAN_JOININVITED_CAN_JOINCAN_REQUEST_TO_JOIN | |
whoCanLeaveGroup | string | null | Any of: ALL_MANAGERS_CAN_LEAVEALL_MEMBERS_CAN_LEAVENONE_CAN_LEAVE | |
whoCanModerateContent | string | null | Any of: ALL_MEMBERSOWNERS_AND_MANAGERSOWNERS_ONLYNONE | |
whoCanModerateMembers | string | null | Any of: ALL_MEMBERSOWNERS_AND_MANAGERSOWNERS_ONLYNONE | |
whoCanPostMessage | string | null | Any of: NONE_CAN_POSTALL_MANAGERS_CAN_POSTALL_MEMBERS_CAN_POSTALL_OWNERS_CAN_POSTALL_IN_DOMAIN_CAN_POSTANYONE_CAN_POST | |
whoCanViewGroup | string | null | Any of: ANYONE_CAN_VIEWALL_IN_DOMAIN_CAN_VIEWALL_MEMBERS_CAN_VIEWALL_MANAGERS_CAN_VIEW | |
whoCanViewMembership | string | null | Any of: ALL_IN_DOMAIN_CAN_VIEWALL_MEMBERS_CAN_VIEWALL_MANAGERS_CAN_VIEW |
Google Mobile Device
google_mobile_device inherits from Device
| Property | Type | Description | Specifications |
|---|---|---|---|
adbStatus | boolean | null | Adb (USB debugging) enabled or disabled on device | |
brand | string | null | ||
deviceCompromisedStatus | string | null | ||
email | string | ||
encryptionStatus | string | null | ||
firstSyncOn | number | ||
googleStatus | string | null | Any of: ACTIVEDELINQUENTPRE_PROVISIONEDDEPROVISIONEDDISABLEDINACTIVERETURN_ARRIVEDRETURN_REQUESTEDSHIPPEDUNKNOWN | |
hardware | string | null | ||
hardwareId | string | null | The IMEI/MEID unique identifier for Android hardware | |
imei | string | null | ||
lastSyncOn | number | ||
macAddress | string | null | ||
manufacturer | string | null | ||
os | string | null | Examples: IOS 4.3, Android 2.3.5 | |
ownerName | string | ||
serialNumber | string | null | ||
type | string | null | ||
userAgent | string | null | ||
wifiMacAddress | string | null |
Google Role
google_role inherits from AccessRole
| Property | Type | Description | Specifications |
|---|---|---|---|
kind | string | null | The type of the resource. Always admin#directory#role. | |
vendor * | string | default: Google |
Google Site
google_site inherits from Site
| Property | Type | Description | Specifications |
|---|---|---|---|
area | string | null | ||
buildingId | string | null | ||
floorName | string | null | ||
floorSection | string | null | More specific location within the floor. For example if a floor is divided into sections "A", "B" and "C" this field would identify one of those values. | |
name * | string | ||
type | string | null |
Google Token
google_token inherits from AccessKey, NHI
| Property | Type | Description | Specifications |
|---|---|---|---|
anonymous | boolean | null | ||
clientId | string | null | ||
nativeApp | boolean | null | ||
scopes | array | null | ||
userKey | string | null |
Google User
google_user inherits from User
| Property | Type | Description | Specifications |
|---|---|---|---|
admin * | boolean | ||
agreedToTerms | boolean | null | ||
aliases | array | null | ||
archived * | boolean | ||
changePasswordAtNextLogin | boolean | null | ||
creationTime | number | ||
customerId | string | null | ||
deletionTime | number | ||
hashFunction | string | null | Examples: MD5, SHA-1, crypt | |
includeInGlobalAddressList * | boolean | ||
ipWhitelisted * | boolean | ||
isAdmin * | boolean | ||
isDelegatedAdmin * | boolean | ||
isEnforcedIn2Sv * | boolean | ||
isEnrolledIn2Sv * | boolean | ||
isMailboxSetup * | boolean | ||
kind | string | null | The type of the resource. Always admin#directory#user for users. | |
lastLoginOn | number | ||
lastLoginTime | number | ||
orgUnitPath | string | null | ||
primaryEmail | string | null | ||
recoveryEmail | string | null | ||
recoveryPhone | string | null | ||
suspended * | boolean | ||
suspensionReason | string | null | ||
thumbnailPhotoUrl | string | null |
Release Notes
- 2026-03-31 — Added OS kernel version property to Google Workspace endpoint device entities.
- 2025-07-24 — Added relationships linking Google Workspace Chrome extensions to the devices on which they are installed.