CINXE.COM
Sync different identity systems | Cloud Search | Google for Developers
<!doctype html> <html lang="en" dir="ltr"> <head> <meta name="google-signin-client-id" content="721724668570-nbkv1cfusk7kk4eni4pjvepaus73b13t.apps.googleusercontent.com"> <meta name="google-signin-scope" content="profile email https://www.googleapis.com/auth/developerprofiles https://www.googleapis.com/auth/developerprofiles.award"> <meta property="og:site_name" content="Google for Developers"> <meta property="og:type" content="website"><meta name="theme-color" content="#fff"><meta charset="utf-8"> <meta content="IE=Edge" http-equiv="X-UA-Compatible"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="manifest" href="/_pwa/developers/manifest.json" crossorigin="use-credentials"> <link rel="preconnect" href="//www.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.googleapis.com" crossorigin> <link rel="preconnect" href="//apis.google.com" crossorigin> <link rel="preconnect" href="//www.google-analytics.com" crossorigin><link rel="stylesheet" href="//fonts.googleapis.com/css?family=Google+Sans:400,500|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"> <link rel="stylesheet" href="//fonts.googleapis.com/css2?family=Material+Icons&family=Material+Symbols+Outlined&display=block"><link rel="stylesheet" href="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/developers/css/app.css"> <link rel="shortcut icon" href="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/developers/images/favicon-new.png"> <link rel="apple-touch-icon" href="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/developers/images/touchicon-180-new.png"><link rel="canonical" href="https://developers.google.com/cloud-search/docs/guides/identity-mapping"><link rel="search" type="application/opensearchdescription+xml" title="Google for Developers" href="https://developers.google.com/s/opensearch.xml"> <link rel="alternate" hreflang="en" href="https://developers.google.com/cloud-search/docs/guides/identity-mapping" /><link rel="alternate" hreflang="x-default" href="https://developers.google.com/cloud-search/docs/guides/identity-mapping" /><link rel="alternate" hreflang="ar" href="https://developers.google.com/cloud-search/docs/guides/identity-mapping?hl=ar" /><link rel="alternate" hreflang="bn" href="https://developers.google.com/cloud-search/docs/guides/identity-mapping?hl=bn" /><link rel="alternate" hreflang="zh-Hans" href="https://developers.google.com/cloud-search/docs/guides/identity-mapping?hl=zh-cn" /><link rel="alternate" hreflang="zh-Hant" href="https://developers.google.com/cloud-search/docs/guides/identity-mapping?hl=zh-tw" /><link rel="alternate" hreflang="fa" href="https://developers.google.com/cloud-search/docs/guides/identity-mapping?hl=fa" /><link rel="alternate" hreflang="fr" href="https://developers.google.com/cloud-search/docs/guides/identity-mapping?hl=fr" /><link rel="alternate" hreflang="de" href="https://developers.google.com/cloud-search/docs/guides/identity-mapping?hl=de" /><link rel="alternate" hreflang="he" href="https://developers.google.com/cloud-search/docs/guides/identity-mapping?hl=he" /><link rel="alternate" hreflang="hi" href="https://developers.google.com/cloud-search/docs/guides/identity-mapping?hl=hi" /><link rel="alternate" hreflang="id" href="https://developers.google.com/cloud-search/docs/guides/identity-mapping?hl=id" /><link rel="alternate" hreflang="it" href="https://developers.google.com/cloud-search/docs/guides/identity-mapping?hl=it" /><link rel="alternate" hreflang="ja" href="https://developers.google.com/cloud-search/docs/guides/identity-mapping?hl=ja" /><link rel="alternate" hreflang="ko" href="https://developers.google.com/cloud-search/docs/guides/identity-mapping?hl=ko" /><link rel="alternate" hreflang="pl" href="https://developers.google.com/cloud-search/docs/guides/identity-mapping?hl=pl" /><link rel="alternate" hreflang="pt-BR" href="https://developers.google.com/cloud-search/docs/guides/identity-mapping?hl=pt-br" /><link rel="alternate" hreflang="ru" href="https://developers.google.com/cloud-search/docs/guides/identity-mapping?hl=ru" /><link rel="alternate" hreflang="es-419" href="https://developers.google.com/cloud-search/docs/guides/identity-mapping?hl=es-419" /><link rel="alternate" hreflang="th" href="https://developers.google.com/cloud-search/docs/guides/identity-mapping?hl=th" /><link rel="alternate" hreflang="tr" href="https://developers.google.com/cloud-search/docs/guides/identity-mapping?hl=tr" /><link rel="alternate" hreflang="vi" href="https://developers.google.com/cloud-search/docs/guides/identity-mapping?hl=vi" /><title>Sync different identity systems | Cloud Search | Google for Developers</title> <meta property="og:title" content="Sync different identity systems | Cloud Search | Google for Developers"><meta property="og:url" content="https://developers.google.com/cloud-search/docs/guides/identity-mapping"><meta property="og:image" content="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/developers/images/opengraph/white.png"> <meta property="og:image:width" content="1200"> <meta property="og:image:height" content="675"><meta property="og:locale" content="en"><meta name="twitter:card" content="summary_large_image"><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Article", "headline": "Sync different identity systems" } </script><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{ "@type": "ListItem", "position": 1, "name": "Google Workspace", "item": "https://developers.google.com/workspace" },{ "@type": "ListItem", "position": 2, "name": "Cloud Search", "item": "https://developers.google.com/cloud-search" },{ "@type": "ListItem", "position": 3, "name": "Sync different identity systems", "item": "https://developers.google.com/cloud-search/docs/guides/identity-mapping" }] } </script> <link rel="stylesheet" href="/extras.css"></head> <body class="" template="page" theme="white" type="article" layout="docs" concierge='closed' display-toc pending> <devsite-progress type="indeterminate" id="app-progress"></devsite-progress> <section class="devsite-wrapper"> <devsite-cookie-notification-bar></devsite-cookie-notification-bar><devsite-header role="banner"> <div class="devsite-header--inner nocontent"> <div class="devsite-top-logo-row-wrapper-wrapper"> <div class="devsite-top-logo-row-wrapper"> <div class="devsite-top-logo-row"> <button type="button" id="devsite-hamburger-menu" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Navigation menu button" visually-hidden aria-label="Open menu"> </button> <div class="devsite-product-name-wrapper"> <a href="https://developers.google.com/workspace"> <div class="devsite-product-logo-container" size="medium" > <picture> <img class="devsite-product-logo" alt="Google Workspace" src="https://fonts.gstatic.com/s/i/productlogos/googleg/v6/16px.svg" srcset=" https://fonts.gstatic.com/s/i/productlogos/googleg/v6/16px.svg" sizes="64px" loading="lazy" > </picture> </div> </a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item devsite-has-google-wordmark"> <a href="https://developers.google.com/workspace" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Upper Header" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="Google Workspace" > <svg class="devsite-google-wordmark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 148 48"> <title>Google</title> <path class="devsite-google-wordmark-svg-path" d="M19.58,37.65c-9.87,0-18.17-8.04-18.17-17.91c0-9.87,8.3-17.91,18.17-17.91c5.46,0,9.35,2.14,12.27,4.94l-3.45,3.45c-2.1-1.97-4.93-3.49-8.82-3.49c-7.21,0-12.84,5.81-12.84,13.02c0,7.21,5.64,13.02,12.84,13.02c4.67,0,7.34-1.88,9.04-3.58c1.4-1.4,2.32-3.41,2.66-6.16H19.58v-4.89h16.47c0.18,0.87,0.26,1.92,0.26,3.06c0,3.67-1.01,8.21-4.24,11.44C28.93,35.9,24.91,37.65,19.58,37.65z M61.78,26.12c0,6.64-5.1,11.53-11.36,11.53s-11.36-4.89-11.36-11.53c0-6.68,5.1-11.53,11.36-11.53S61.78,19.43,61.78,26.12z M56.8,26.12c0-4.15-2.96-6.99-6.39-6.99c-3.43,0-6.39,2.84-6.39,6.99c0,4.11,2.96,6.99,6.39,6.99C53.84,33.11,56.8,30.22,56.8,26.12z M87.25,26.12c0,6.64-5.1,11.53-11.36,11.53c-6.26,0-11.36-4.89-11.36-11.53c0-6.68,5.1-11.53,11.36-11.53C82.15,14.59,87.25,19.43,87.25,26.12zM82.28,26.12c0-4.15-2.96-6.99-6.39-6.99c-3.43,0-6.39,2.84-6.39,6.99c0,4.11,2.96,6.99,6.39,6.99C79.32,33.11,82.28,30.22,82.28,26.12z M112.09,15.29v20.7c0,8.52-5.02,12.01-10.96,12.01c-5.59,0-8.95-3.76-10.22-6.81l4.41-1.83c0.79,1.88,2.71,4.1,5.81,4.1c3.8,0,6.16-2.36,6.16-6.77v-1.66h-0.18c-1.14,1.4-3.32,2.62-6.07,2.62c-5.76,0-11.05-5.02-11.05-11.49c0-6.51,5.28-11.57,11.05-11.57c2.75,0,4.93,1.22,6.07,2.58h0.18v-1.88H112.09z M107.64,26.16c0-4.06-2.71-7.03-6.16-7.03c-3.49,0-6.42,2.97-6.42,7.03c0,4.02,2.93,6.94,6.42,6.94C104.93,33.11,107.64,30.18,107.64,26.16z M120.97,3.06v33.89h-5.07V3.06H120.97z M140.89,29.92l3.93,2.62c-1.27,1.88-4.32,5.11-9.61,5.11c-6.55,0-11.28-5.07-11.28-11.53c0-6.86,4.77-11.53,10.71-11.53c5.98,0,8.91,4.76,9.87,7.34l0.52,1.31l-15.42,6.38c1.18,2.31,3.01,3.49,5.59,3.49C137.79,33.11,139.58,31.84,140.89,29.92zM128.79,25.77l10.31-4.28c-0.57-1.44-2.27-2.45-4.28-2.45C132.24,19.04,128.66,21.31,128.79,25.77z"/> </svg>Workspace </a> </li> </ul> </span> </div> <div class="devsite-top-logo-row-middle"> <div class="devsite-header-upper-tabs"> <devsite-tabs class="upper-tabs"> <nav class="devsite-tabs-wrapper" aria-label="Upper tabs"> <tab > <a href="https://developers.google.com/workspace" track-metadata-eventdetail="https://developers.google.com/workspace" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - home" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Home" track-name="home" > Home </a> </tab> <tab class="devsite-active"> <a href="https://developers.google.com/cloud-search" track-metadata-eventdetail="https://developers.google.com/cloud-search" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - cloud search" track-metadata-module="primary nav" aria-label="Cloud Search, selected" data-category="Site-Wide Custom Events" data-label="Tab: Cloud Search" track-name="cloud search" > Cloud Search </a> </tab> <tab class="devsite-dropdown "> <a href="https://developers.google.com/workspace/products-menu" track-metadata-eventdetail="https://developers.google.com/workspace/products-menu" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - all products" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: All products" track-name="all products" > All products </a> <a href="#" role="button" aria-haspopup="true" aria-expanded="false" aria-label="Dropdown menu for All products" track-type="nav" track-metadata-eventdetail="https://developers.google.com/workspace/products-menu" track-metadata-position="nav - all products" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: All products" track-name="all products" class="devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down"></a> <div class="devsite-tabs-dropdown" aria-label="submenu" hidden> <div class="devsite-tabs-dropdown-content"> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>Google Workspace apps</li> <li class="devsite-nav-item"> <a href="https://developers.google.com/admin-sdk" track-type="nav" track-metadata-eventdetail="https://developers.google.com/admin-sdk" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline="google workspace apps" tooltip data-label="Tab menu: All products - Admin console" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Admin console </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/cloud-search" track-type="nav" track-metadata-eventdetail="https://developers.google.com/cloud-search" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline="google workspace apps" tooltip data-category="Workspace top menu navigation" data-label="Tab menu: All products - Cloud Search" > <div class="devsite-nav-item-title"> Cloud Search </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/gmail" track-type="nav" track-metadata-eventdetail="https://developers.google.com/gmail" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline="google workspace apps" tooltip data-category="Workspace top menu navigation" data-label="Tab menu: All products - Gmail" > <div class="devsite-nav-item-title"> Gmail </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/calendar" track-type="nav" track-metadata-eventdetail="https://developers.google.com/calendar" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline="google workspace apps" tooltip data-category="Workspace top menu navigation" data-label="Tab menu: All products - Google Calendar" > <div class="devsite-nav-item-title"> Google Calendar </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/workspace/chat" track-type="nav" track-metadata-eventdetail="https://developers.google.com/workspace/chat" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline="google workspace apps" tooltip data-label="Tab menu: All products - Google Chat" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Google Chat </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/classroom" track-type="nav" track-metadata-eventdetail="https://developers.google.com/classroom" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline="google workspace apps" tooltip data-label="Tab menu: All products - Google Classroom" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Google Classroom </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/docs" track-type="nav" track-metadata-eventdetail="https://developers.google.com/docs" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline="google workspace apps" tooltip data-label="Tab menu: All products - Google Docs" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Google Docs </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/drive" track-type="nav" track-metadata-eventdetail="https://developers.google.com/drive" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline="google workspace apps" tooltip data-label="Tab menu: All products - Google Drive" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Google Drive </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/forms" track-type="nav" track-metadata-eventdetail="https://developers.google.com/forms" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline=" " tooltip data-category="Workspace top menu navigation" data-label="Tab menu: All products - Google Forms" > <div class="devsite-nav-item-title"> Google Forms </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/keep" track-type="nav" track-metadata-eventdetail="https://developers.google.com/keep" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline=" " tooltip data-category="Workspace top menu navigation" data-label="Tab menu: All products - Google Keep" > <div class="devsite-nav-item-title"> Google Keep </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/meet" track-type="nav" track-metadata-eventdetail="https://developers.google.com/meet" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline=" " tooltip data-label="Tab menu: All products - Google Meet" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Google Meet </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/sheets" track-type="nav" track-metadata-eventdetail="https://developers.google.com/sheets" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline=" " tooltip data-label="Tab menu: All products - Google Sheets" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Google Sheets </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/workspace/sites" track-type="nav" track-metadata-eventdetail="https://developers.google.com/workspace/sites" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline=" " tooltip data-label="Tab menu: All products - Google Sites" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Google Sites </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/slides" track-type="nav" track-metadata-eventdetail="https://developers.google.com/slides" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline=" " tooltip data-label="Tab menu: All products - Google Slides" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Google Slides </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/tasks" track-type="nav" track-metadata-eventdetail="https://developers.google.com/tasks" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline=" " tooltip data-label="Tab menu: All products - Google Tasks" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Google Tasks </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/vault" track-type="nav" track-metadata-eventdetail="https://developers.google.com/vault" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline=" " tooltip data-category="Workspace top menu navigation" data-label="Tab menu: All products - Google Vault" > <div class="devsite-nav-item-title"> Google Vault </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>Extend, automate & share</li> <li class="devsite-nav-item"> <a href="https://developers.google.com/workspace/add-ons" track-type="nav" track-metadata-eventdetail="https://developers.google.com/workspace/add-ons" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline="extend, automate & share" tooltip data-label="Tab menu: All products - Add-ons" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Add-ons </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/apps-script" track-type="nav" track-metadata-eventdetail="https://developers.google.com/apps-script" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline="extend, automate & share" tooltip data-label="Tab menu: All products - Apps Script" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Apps Script </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/workspace/chat/overview" track-type="nav" track-metadata-eventdetail="https://developers.google.com/workspace/chat/overview" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline="extend, automate & share" tooltip data-label="Tab menu: All products - Chat apps" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Chat apps </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/drive/api/guides/about-apps" track-type="nav" track-metadata-eventdetail="https://developers.google.com/drive/api/guides/about-apps" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline="extend, automate & share" tooltip data-label="Tab menu: All products - Drive apps" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Drive apps </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/workspace/marketplace" track-type="nav" track-metadata-eventdetail="https://developers.google.com/workspace/marketplace" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline="extend, automate & share" tooltip data-label="Tab menu: All products - Marketplace" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Marketplace </div> </a> </li> </ul> </div> </div> </div> </tab> <tab class="devsite-dropdown "> <a href="https://developers.google.com/workspace/resources-menu" track-metadata-eventdetail="https://developers.google.com/workspace/resources-menu" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - resources" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Resources" track-name="resources" > Resources </a> <a href="#" role="button" aria-haspopup="true" aria-expanded="false" aria-label="Dropdown menu for Resources" track-type="nav" track-metadata-eventdetail="https://developers.google.com/workspace/resources-menu" track-metadata-position="nav - resources" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Resources" track-name="resources" class="devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down"></a> <div class="devsite-tabs-dropdown" aria-label="submenu" hidden> <div class="devsite-tabs-dropdown-content"> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>Tools</li> <li class="devsite-nav-item"> <a href="https://admin.google.com/" track-type="nav" track-metadata-eventdetail="https://admin.google.com/" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="tools" tooltip data-category="Workspace top menu navigation" target="admin-console" data-label="Tab menu: Resources - Admin console" > <div class="devsite-nav-item-title"> Admin console </div> </a> </li> <li class="devsite-nav-item"> <a href="https://script.google.com/" track-type="nav" track-metadata-eventdetail="https://script.google.com/" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="tools" tooltip data-label="Tab menu: Resources - Apps Script dashboard" target="_blank" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Apps Script dashboard </div> </a> </li> <li class="devsite-nav-item"> <a href="https://console.cloud.google.com/workspace-api" track-type="nav" track-metadata-eventdetail="https://console.cloud.google.com/workspace-api" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="tools" tooltip data-category="Workspace top menu navigation" target="console" data-label="Tab menu: Resources - Google Cloud console" > <div class="devsite-nav-item-title"> Google Cloud console </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/workspace/explore" track-type="nav" track-metadata-eventdetail="https://developers.google.com/workspace/explore" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="tools" tooltip data-category="Workspace top menu navigation" data-label="Tab menu: Resources - APIs Explorer" > <div class="devsite-nav-item-title"> APIs Explorer </div> </a> </li> <li class="devsite-nav-item"> <a href="https://addons.gsuite.google.com/uikit/builder" track-type="nav" track-metadata-eventdetail="https://addons.gsuite.google.com/uikit/builder" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="tools" tooltip target="_blank" data-category="Workspace top menu navigation" data-label="Tab menu: Resources - Card Builder" > <div class="devsite-nav-item-title"> Card Builder </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>Training & support</li> <li class="devsite-nav-item"> <a href="https://developers.google.com/workspace/guides/get-started" track-type="nav" track-metadata-eventdetail="https://developers.google.com/workspace/guides/get-started" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="training & support" tooltip data-category="Workspace top menu navigation" data-label="Tab menu: Resources - How to get started" > <div class="devsite-nav-item-title"> How to get started </div> </a> </li> <li class="devsite-nav-item"> <a href="https://codelabs.developers.google.com/?product=googleworkspace" track-type="nav" track-metadata-eventdetail="https://codelabs.developers.google.com/?product=googleworkspace" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="training & support" tooltip data-category="Workspace top menu navigation" target="_blank" data-label="Tab menu: Resources - Codelabs" > <div class="devsite-nav-item-title"> Codelabs </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/workspace/support" track-type="nav" track-metadata-eventdetail="https://developers.google.com/workspace/support" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="training & support" tooltip data-label="Tab menu: Resources - Developer support" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Developer support </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>Updates</li> <li class="devsite-nav-item"> <a href="https://developers.googleblog.com/search/?query=Google+Workspace" track-type="nav" track-metadata-eventdetail="https://developers.googleblog.com/search/?query=Google+Workspace" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="updates" tooltip data-label="Tab menu: Resources - Blog" target="_blank" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Blog </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/workspace/preview" track-type="nav" track-metadata-eventdetail="https://developers.google.com/workspace/preview" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="updates" tooltip data-label="Tab menu: Resources - Developer previews" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Developer Previews </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/workspace/newsletters" track-type="nav" track-metadata-eventdetail="https://developers.google.com/workspace/newsletters" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="updates" tooltip data-category="Workspace top menu navigation" data-label="Tab menu: Resources - Newsletter" > <div class="devsite-nav-item-title"> Newsletter </div> </a> </li> <li class="devsite-nav-item"> <a href="https://twitter.com/workspacedevs" track-type="nav" track-metadata-eventdetail="https://twitter.com/workspacedevs" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="updates" tooltip target="_blank" data-category="Workspace top menu navigation" data-label="Tab menu: Resources - X (Twitter)" > <div class="devsite-nav-item-title"> X (Twitter) </div> </a> </li> <li class="devsite-nav-item"> <a href="https://www.youtube.com/channel/UCUcg6az6etU_gRtZVAhBXaw" track-type="nav" track-metadata-eventdetail="https://www.youtube.com/channel/UCUcg6az6etU_gRtZVAhBXaw" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="updates" tooltip data-label="Tab menu: Resources - YouTube" target="_blank" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> YouTube </div> </a> </li> </ul> </div> </div> </div> </tab> </nav> </devsite-tabs> </div> <devsite-search enable-signin enable-search enable-suggestions enable-query-completion project-name="Cloud Search" tenant-name="Google for Developers" project-scope="/cloud-search" url-scoped="https://developers.google.com/s/results/cloud-search" > <form class="devsite-search-form" action="https://developers.google.com/s/results" method="GET"> <div class="devsite-search-container"> <button type="button" search-open class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Open search"></button> <div class="devsite-searchbox"> <input aria-activedescendant="" aria-autocomplete="list" aria-label="Search" aria-expanded="false" aria-haspopup="listbox" autocomplete="off" class="devsite-search-field devsite-search-query" name="q" placeholder="Search" role="combobox" type="text" value="" > <div class="devsite-search-image material-icons" aria-hidden="true"> </div> <div class="devsite-search-shortcut-icon-container" aria-hidden="true"> <kbd class="devsite-search-shortcut-icon">/</kbd> </div> </div> </div> </form> <button type="button" search-close class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Close search"></button> </devsite-search> </div> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="de" >Deutsch</a> </li> <li role="presentation"> <a role="menuitem" lang="es" >Español</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="fr" >Français</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="it" >Italiano</a> </li> <li role="presentation"> <a role="menuitem" lang="pl" >Polski</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="vi" >Tiếng Việt</a> </li> <li role="presentation"> <a role="menuitem" lang="tr" >Türkçe</a> </li> <li role="presentation"> <a role="menuitem" lang="ru" >Русский</a> </li> <li role="presentation"> <a role="menuitem" lang="he" >עברית</a> </li> <li role="presentation"> <a role="menuitem" lang="ar" >العربيّة</a> </li> <li role="presentation"> <a role="menuitem" lang="fa" >فارسی</a> </li> <li role="presentation"> <a role="menuitem" lang="hi" >हिंदी</a> </li> <li role="presentation"> <a role="menuitem" lang="bn" >বাংলা</a> </li> <li role="presentation"> <a role="menuitem" lang="th" >ภาษาไทย</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_tw" >中文 – 繁體</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> <devsite-user enable-profiles fp-auth id="devsite-user"> <span class="button devsite-top-button" aria-hidden="true" visually-hidden>Sign in</span> </devsite-user> </div> </div> </div> <div class="devsite-collapsible-section "> <div class="devsite-header-background"> <div class="devsite-product-id-row" > <div class="devsite-product-description-row"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item "> <a href="https://developers.google.com/cloud-search" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Lower Header" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="Cloud Search" > Cloud Search </a> </li> </ul> </div> </div> <div class="devsite-doc-set-nav-row"> <devsite-tabs class="lower-tabs"> <nav class="devsite-tabs-wrapper" aria-label="Lower tabs"> <tab > <a href="https://developers.google.com/cloud-search" track-metadata-eventdetail="https://developers.google.com/cloud-search" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - overview" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Overview" track-name="overview" > Overview </a> </tab> <tab class="devsite-active"> <a href="https://developers.google.com/cloud-search/docs/guides" track-metadata-eventdetail="https://developers.google.com/cloud-search/docs/guides" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - guides" track-metadata-module="primary nav" aria-label="Guides, selected" data-category="Site-Wide Custom Events" data-label="Tab: Guides" track-name="guides" > Guides </a> </tab> <tab > <a href="https://developers.google.com/cloud-search/docs/reference" track-metadata-eventdetail="https://developers.google.com/cloud-search/docs/reference" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - reference" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Reference" track-name="reference" > Reference </a> </tab> <tab > <a href="https://developers.google.com/cloud-search/support" track-metadata-eventdetail="https://developers.google.com/cloud-search/support" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - support" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Support" track-name="support" > Support </a> </tab> <tab > <a href="https://developers.google.com/cloud-search/docs/connector-directory" track-metadata-eventdetail="https://developers.google.com/cloud-search/docs/connector-directory" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - connector directory" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Connector Directory" track-name="connector directory" > Connector Directory </a> </tab> </nav> </devsite-tabs> </div> </div> </div> </div> </devsite-header> <devsite-book-nav scrollbars > <div class="devsite-book-nav-filter" > <span class="filter-list-icon material-icons" aria-hidden="true"></span> <input type="text" placeholder="Filter" aria-label="Type to filter" role="searchbox"> <span class="filter-clear-button hidden" data-title="Clear filter" aria-label="Clear filter" role="button" tabindex="0"></span> </div> <nav class="devsite-book-nav devsite-nav nocontent" aria-label="Side menu"> <div class="devsite-mobile-header"> <button type="button" id="devsite-close-nav" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Close navigation" aria-label="Close navigation"> </button> <div class="devsite-product-name-wrapper"> <a href="https://developers.google.com/workspace"> <div class="devsite-product-logo-container" size="medium" > <picture> <img class="devsite-product-logo" alt="Google Workspace" src="https://fonts.gstatic.com/s/i/productlogos/googleg/v6/16px.svg" srcset=" https://fonts.gstatic.com/s/i/productlogos/googleg/v6/16px.svg" sizes="64px" loading="lazy" > </picture> </div> </a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item devsite-has-google-wordmark"> <a href="https://developers.google.com/workspace" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Upper Header" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="Google Workspace" > <svg class="devsite-google-wordmark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 148 48"> <title>Google</title> <path class="devsite-google-wordmark-svg-path" d="M19.58,37.65c-9.87,0-18.17-8.04-18.17-17.91c0-9.87,8.3-17.91,18.17-17.91c5.46,0,9.35,2.14,12.27,4.94l-3.45,3.45c-2.1-1.97-4.93-3.49-8.82-3.49c-7.21,0-12.84,5.81-12.84,13.02c0,7.21,5.64,13.02,12.84,13.02c4.67,0,7.34-1.88,9.04-3.58c1.4-1.4,2.32-3.41,2.66-6.16H19.58v-4.89h16.47c0.18,0.87,0.26,1.92,0.26,3.06c0,3.67-1.01,8.21-4.24,11.44C28.93,35.9,24.91,37.65,19.58,37.65z M61.78,26.12c0,6.64-5.1,11.53-11.36,11.53s-11.36-4.89-11.36-11.53c0-6.68,5.1-11.53,11.36-11.53S61.78,19.43,61.78,26.12z M56.8,26.12c0-4.15-2.96-6.99-6.39-6.99c-3.43,0-6.39,2.84-6.39,6.99c0,4.11,2.96,6.99,6.39,6.99C53.84,33.11,56.8,30.22,56.8,26.12z M87.25,26.12c0,6.64-5.1,11.53-11.36,11.53c-6.26,0-11.36-4.89-11.36-11.53c0-6.68,5.1-11.53,11.36-11.53C82.15,14.59,87.25,19.43,87.25,26.12zM82.28,26.12c0-4.15-2.96-6.99-6.39-6.99c-3.43,0-6.39,2.84-6.39,6.99c0,4.11,2.96,6.99,6.39,6.99C79.32,33.11,82.28,30.22,82.28,26.12z M112.09,15.29v20.7c0,8.52-5.02,12.01-10.96,12.01c-5.59,0-8.95-3.76-10.22-6.81l4.41-1.83c0.79,1.88,2.71,4.1,5.81,4.1c3.8,0,6.16-2.36,6.16-6.77v-1.66h-0.18c-1.14,1.4-3.32,2.62-6.07,2.62c-5.76,0-11.05-5.02-11.05-11.49c0-6.51,5.28-11.57,11.05-11.57c2.75,0,4.93,1.22,6.07,2.58h0.18v-1.88H112.09z M107.64,26.16c0-4.06-2.71-7.03-6.16-7.03c-3.49,0-6.42,2.97-6.42,7.03c0,4.02,2.93,6.94,6.42,6.94C104.93,33.11,107.64,30.18,107.64,26.16z M120.97,3.06v33.89h-5.07V3.06H120.97z M140.89,29.92l3.93,2.62c-1.27,1.88-4.32,5.11-9.61,5.11c-6.55,0-11.28-5.07-11.28-11.53c0-6.86,4.77-11.53,10.71-11.53c5.98,0,8.91,4.76,9.87,7.34l0.52,1.31l-15.42,6.38c1.18,2.31,3.01,3.49,5.59,3.49C137.79,33.11,139.58,31.84,140.89,29.92zM128.79,25.77l10.31-4.28c-0.57-1.44-2.27-2.45-4.28-2.45C132.24,19.04,128.66,21.31,128.79,25.77z"/> </svg>Workspace </a> </li> </ul> </span> </div> </div> <div class="devsite-book-nav-wrapper"> <div class="devsite-mobile-nav-top"> <ul class="devsite-nav-list"> <li class="devsite-nav-item"> <a href="/workspace" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Home" track-name="home" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Home" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Home </span> </a> </li> <li class="devsite-nav-item"> <a href="/cloud-search" class="devsite-nav-title gc-analytics-event devsite-nav-active" data-category="Site-Wide Custom Events" data-label="Tab: Cloud Search" track-name="cloud search" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Cloud Search" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Cloud Search </span> </a> <ul class="devsite-nav-responsive-tabs"> <li class="devsite-nav-item"> <a href="/cloud-search" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Overview" track-name="overview" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Overview" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Overview </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> </li> <li class="devsite-nav-item"> <a href="/cloud-search/docs/guides" class="devsite-nav-title gc-analytics-event devsite-nav-has-children devsite-nav-active" data-category="Site-Wide Custom Events" data-label="Tab: Guides" track-name="guides" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Guides" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip menu="_book"> Guides </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="_book"> </span> </a> </li> <li class="devsite-nav-item"> <a href="/cloud-search/docs/reference" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Reference" track-name="reference" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Reference" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Reference </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> </li> <li class="devsite-nav-item"> <a href="/cloud-search/support" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Support" track-name="support" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Support" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Support </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> </li> <li class="devsite-nav-item"> <a href="/cloud-search/docs/connector-directory" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Connector Directory" track-name="connector directory" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Connector Directory" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Connector Directory </span> </a> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/workspace/products-menu" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: All products" track-name="all products" data-category="Site-Wide Custom Events" data-label="Responsive Tab: All products" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > All products </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu "> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: All products" track-name="all products" > <span class="devsite-nav-text" tooltip menu="All products"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="All products"> </span> </span> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/workspace/resources-menu" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Resources" track-name="resources" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Resources" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Resources </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu "> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Resources" track-name="resources" > <span class="devsite-nav-text" tooltip menu="Resources"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Resources"> </span> </span> </li> </ul> </li> </ul> </div> <div class="devsite-mobile-nav-bottom"> <ul class="devsite-nav-list" menu="_book"> <li class="devsite-nav-item"><a href="/cloud-search/docs/guides" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides" ><span class="devsite-nav-text" tooltip>Introduction to Google Cloud Search</span></a></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Get started</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item devsite-nav-external"><a href="/workspace/guides/get-started" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/guides/get-started" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/guides/get-started" target="_blank"><span class="devsite-nav-text" tooltip>Overview</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-external"><a href="/workspace/guides/configure-oauth-consent" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/guides/configure-oauth-consent" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/guides/configure-oauth-consent" target="_blank"><span class="devsite-nav-text" tooltip>Configure OAuth consent</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li><li class="devsite-nav-item"><a href="/cloud-search/docs/guides/project-setup" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides/project-setup" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides/project-setup" ><span class="devsite-nav-text" tooltip>Configure access to the Google Cloud Search REST API</span></a></li><li class="devsite-nav-item"><a href="/cloud-search/docs/guides/delegation" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides/delegation" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides/delegation" ><span class="devsite-nav-text" tooltip>Domain-wide delegation of authority</span></a></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Get started with Cloud Search</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/cloud-search/docs/tutorials/end-to-end" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/tutorials/end-to-end" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/tutorials/end-to-end" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/cloud-search/docs/tutorials/end-to-end/setup-connector" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/tutorials/end-to-end/setup-connector" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/tutorials/end-to-end/setup-connector" ><span class="devsite-nav-text" tooltip>Build & deploy the connector</span></a></li><li class="devsite-nav-item"><a href="/cloud-search/docs/tutorials/end-to-end/setup-app" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/tutorials/end-to-end/setup-app" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/tutorials/end-to-end/setup-app" ><span class="devsite-nav-text" tooltip>Set up the UI</span></a></li><li class="devsite-nav-item"><a href="/cloud-search/docs/tutorials/end-to-end/finish" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/tutorials/end-to-end/finish" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/tutorials/end-to-end/finish" ><span class="devsite-nav-text" tooltip>Clean up resources</span></a></li></ul></div></li></ul></div></li> <li class="devsite-nav-item"><a href="/cloud-search/docs/guides/schema-guide" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides/schema-guide" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides/schema-guide" ><span class="devsite-nav-text" tooltip>Create and register a schema</span></a></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Create connectors</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/cloud-search/docs/guides/connectors" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides/connectors" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides/connectors" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/cloud-search/docs/guides/content-connector" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides/content-connector" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides/content-connector" ><span class="devsite-nav-text" tooltip>Create a content connector</span></a></li><li class="devsite-nav-item"><a href="/cloud-search/docs/guides/identity-connector" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides/identity-connector" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides/identity-connector" ><span class="devsite-nav-text" tooltip>Create an identity connector</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Deploy connectors</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/cloud-search/docs/guides/csv-connector" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides/csv-connector" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides/csv-connector" ><span class="devsite-nav-text" tooltip>CSV connector</span></a></li><li class="devsite-nav-item"><a href="/cloud-search/docs/guides/apache-nutch-connector" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides/apache-nutch-connector" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides/apache-nutch-connector" ><span class="devsite-nav-text" tooltip>Apache Nutch indexer plugin</span></a></li><li class="devsite-nav-item"><a href="/cloud-search/docs/guides/database-connector" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides/database-connector" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides/database-connector" ><span class="devsite-nav-text" tooltip>Database connector</span></a></li><li class="devsite-nav-item"><a href="/cloud-search/docs/guides/filesystem-connector" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides/filesystem-connector" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides/filesystem-connector" ><span class="devsite-nav-text" tooltip>File systems connector</span></a></li><li class="devsite-nav-item"><a href="/cloud-search/docs/guides/norconex-http-connector" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides/norconex-http-connector" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides/norconex-http-connector" ><span class="devsite-nav-text" tooltip>Norconex HTTP Collector indexer plugin</span></a></li><li class="devsite-nav-item"><a href="/cloud-search/docs/guides/sharepoint-online-connector" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides/sharepoint-online-connector" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides/sharepoint-online-connector" ><span class="devsite-nav-text" tooltip>SharePoint online connector</span></a></li><li class="devsite-nav-item"><a href="/cloud-search/docs/guides/sharepoint-on-prem-connector" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides/sharepoint-on-prem-connector" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides/sharepoint-on-prem-connector" ><span class="devsite-nav-text" tooltip>SharePoint on-premises connector</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Additional connector topics</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/cloud-search/docs/guides/tune-connector" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides/tune-connector" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides/tune-connector" ><span class="devsite-nav-text" tooltip>Tune connector settings</span></a></li><li class="devsite-nav-item"><a href="/cloud-search/docs/guides/acls" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides/acls" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides/acls" ><span class="devsite-nav-text" tooltip>Map ACLs</span></a></li><li class="devsite-nav-item"><a href="/cloud-search/docs/guides/queues" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides/queues" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides/queues" ><span class="devsite-nav-text" tooltip>The Cloud Search Indexing Queues</span></a></li><li class="devsite-nav-item"><a href="/cloud-search/docs/guides/identity-mapping" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides/identity-mapping" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides/identity-mapping" ><span class="devsite-nav-text" tooltip>Sync different identity systems</span></a></li><li class="devsite-nav-item"><a href="/cloud-search/docs/guides/synonyms" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides/synonyms" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides/synonyms" ><span class="devsite-nav-text" tooltip>Define synonyms</span></a></li><li class="devsite-nav-item"><a href="/cloud-search/docs/guides/handle-sensitive" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides/handle-sensitive" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides/handle-sensitive" ><span class="devsite-nav-text" tooltip>Obfuscate sensitive configuration file information</span></a></li><li class="devsite-nav-item"><a href="/cloud-search/docs/guides/thumbnails" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides/thumbnails" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides/thumbnails" ><span class="devsite-nav-text" tooltip>Enable thumbnails</span></a></li><li class="devsite-nav-item"><a href="/cloud-search/docs/guides/operations" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides/operations" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides/operations" ><span class="devsite-nav-text" tooltip>Handle revisions after manual deletes</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Create search interfaces</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/cloud-search/docs/guides/search-interface" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides/search-interface" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides/search-interface" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/cloud-search/docs/guides/query-guide" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides/query-guide" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides/query-guide" ><span class="devsite-nav-text" tooltip>Create a custom interface using the Query API</span></a></li><li class="devsite-nav-item"><a href="/cloud-search/docs/guides/search-widget" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides/search-widget" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides/search-widget" ><span class="devsite-nav-text" tooltip>Create a search interface with the search widget</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Optimize the search experience</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/cloud-search/docs/guides/default-optimizations" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides/default-optimizations" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides/default-optimizations" ><span class="devsite-nav-text" tooltip>Default expansions, optimizations, and interpretations</span></a></li><li class="devsite-nav-item"><a href="/cloud-search/docs/guides/improve-search-quality" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides/improve-search-quality" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides/improve-search-quality" ><span class="devsite-nav-text" tooltip>Improve search quality</span></a></li><li class="devsite-nav-item"><a href="/cloud-search/docs/guides/query-interpretation" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides/query-interpretation" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides/query-interpretation" ><span class="devsite-nav-text" tooltip>Structure a schema for optimal query interpretation</span></a></li><li class="devsite-nav-item"><a href="/cloud-search/docs/guides/autocomplete" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides/autocomplete" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides/autocomplete" ><span class="devsite-nav-text" tooltip>Implement autocomplete</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Monitoring and security</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/cloud-search/docs/guides/implement-vpc-service-controls" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides/implement-vpc-service-controls" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides/implement-vpc-service-controls" ><span class="devsite-nav-text" tooltip>Enhance security with VPC Service Controls</span></a></li><li class="devsite-nav-item"><a href="/cloud-search/docs/guides/audit-logging-manual" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides/audit-logging-manual" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides/audit-logging-manual" ><span class="devsite-nav-text" tooltip>Audit logging</span></a></li></ul></div></li> <li class="devsite-nav-item"><a href="/cloud-search/docs/guides/known-issues" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/guides/known-issues" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/guides/known-issues" ><span class="devsite-nav-text" tooltip>Known issues</span></a></li> <li class="devsite-nav-item"><a href="/cloud-search/docs/samples" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cloud-search/docs/samples" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cloud-search/docs/samples" ><span class="devsite-nav-text" tooltip>Samples</span></a></li> </ul> <ul class="devsite-nav-list" menu="All products" aria-label="Side menu" hidden> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Google Workspace apps </span> </span> </li> <li class="devsite-nav-item"> <a href="/admin-sdk" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Admin console" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Admin console </span> </a> </li> <li class="devsite-nav-item"> <a href="/cloud-search" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Cloud Search" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Cloud Search </span> </a> </li> <li class="devsite-nav-item"> <a href="/gmail" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Gmail" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Gmail </span> </a> </li> <li class="devsite-nav-item"> <a href="/calendar" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Calendar" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Calendar </span> </a> </li> <li class="devsite-nav-item"> <a href="/workspace/chat" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Chat" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Chat </span> </a> </li> <li class="devsite-nav-item"> <a href="/classroom" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Classroom" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Classroom </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Docs" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Docs </span> </a> </li> <li class="devsite-nav-item"> <a href="/drive" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Drive" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Drive </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > </span> </span> </li> <li class="devsite-nav-item"> <a href="/forms" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Forms" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Forms </span> </a> </li> <li class="devsite-nav-item"> <a href="/keep" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Keep" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Keep </span> </a> </li> <li class="devsite-nav-item"> <a href="/meet" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Meet" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Meet </span> </a> </li> <li class="devsite-nav-item"> <a href="/sheets" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Sheets" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Sheets </span> </a> </li> <li class="devsite-nav-item"> <a href="/workspace/sites" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Sites" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Sites </span> </a> </li> <li class="devsite-nav-item"> <a href="/slides" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Slides" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Slides </span> </a> </li> <li class="devsite-nav-item"> <a href="/tasks" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Tasks" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Tasks </span> </a> </li> <li class="devsite-nav-item"> <a href="/vault" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Vault" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Vault </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Extend, automate & share </span> </span> </li> <li class="devsite-nav-item"> <a href="/workspace/add-ons" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Add-ons" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Add-ons </span> </a> </li> <li class="devsite-nav-item"> <a href="/apps-script" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Apps Script" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Apps Script </span> </a> </li> <li class="devsite-nav-item"> <a href="/workspace/chat/overview" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Chat apps" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Chat apps </span> </a> </li> <li class="devsite-nav-item"> <a href="/drive/api/guides/about-apps" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Drive apps" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Drive apps </span> </a> </li> <li class="devsite-nav-item"> <a href="/workspace/marketplace" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Marketplace" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Marketplace </span> </a> </li> </ul> <ul class="devsite-nav-list" menu="Resources" aria-label="Side menu" hidden> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Tools </span> </span> </li> <li class="devsite-nav-item"> <a href="https://admin.google.com/" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Admin console" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Admin console </span> </a> </li> <li class="devsite-nav-item"> <a href="https://script.google.com/" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Apps Script dashboard" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Apps Script dashboard </span> </a> </li> <li class="devsite-nav-item"> <a href="https://console.cloud.google.com/workspace-api" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Cloud console" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Cloud console </span> </a> </li> <li class="devsite-nav-item"> <a href="/workspace/explore" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: APIs Explorer" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > APIs Explorer </span> </a> </li> <li class="devsite-nav-item"> <a href="https://addons.gsuite.google.com/uikit/builder" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Card Builder" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Card Builder </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Training & support </span> </span> </li> <li class="devsite-nav-item"> <a href="/workspace/guides/get-started" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: How to get started" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > How to get started </span> </a> </li> <li class="devsite-nav-item"> <a href="https://codelabs.developers.google.com/?product=googleworkspace" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Codelabs" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Codelabs </span> </a> </li> <li class="devsite-nav-item"> <a href="/workspace/support" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Developer support" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Developer support </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Updates </span> </span> </li> <li class="devsite-nav-item"> <a href="https://developers.googleblog.com/search/?query=Google+Workspace" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Blog" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Blog </span> </a> </li> <li class="devsite-nav-item"> <a href="/workspace/preview" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Developer Previews" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Developer Previews </span> </a> </li> <li class="devsite-nav-item"> <a href="/workspace/newsletters" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Newsletter" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Newsletter </span> </a> </li> <li class="devsite-nav-item"> <a href="https://twitter.com/workspacedevs" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: X (Twitter)" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > X (Twitter) </span> </a> </li> <li class="devsite-nav-item"> <a href="https://www.youtube.com/channel/UCUcg6az6etU_gRtZVAhBXaw" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: YouTube" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > YouTube </span> </a> </li> </ul> </div> </div> </nav> </devsite-book-nav> <section id="gc-wrapper"> <main role="main" class="devsite-main-content" has-book-nav > <devsite-content> <article class="devsite-article"> <div class="devsite-article-meta nocontent" role="navigation"> <ul class="devsite-breadcrumb-list" aria-label="Breadcrumb"> <li class="devsite-breadcrumb-item "> <a href="https://developers.google.com/" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="" > Home </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://developers.google.com/workspace" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="2" track-type="globalNav" track-name="breadcrumb" track-metadata-position="2" track-metadata-eventdetail="Google Workspace" > Google Workspace </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://developers.google.com/cloud-search" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="3" track-type="globalNav" track-name="breadcrumb" track-metadata-position="3" track-metadata-eventdetail="Cloud Search" > Cloud Search </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://developers.google.com/cloud-search/docs/guides" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="4" track-type="globalNav" track-name="breadcrumb" track-metadata-position="4" track-metadata-eventdetail="" > Guides </a> </li> </ul> <devsite-thumb-rating position="header"> </devsite-thumb-rating> </div> <devsite-feedback position="header" project-name="Cloud Search" product-id="717201" bucket="cloud-search" context="" version="t-devsite-webserver-20241114-r00-rc02.464922260396498922" data-label="Send Feedback Button" track-type="feedback" track-name="sendFeedbackLink" track-metadata-position="header" class="nocontent" project-feedback-url="https://issuetracker.google.com/issues/new?component=1134311&template=1640548" project-icon="https://www.gstatic.com/images/branding/product/1x/google_cloud_search_64dp.png" project-support-url="https://developers.google.com/cloud-search/support" > <button> Send feedback </button> </devsite-feedback> <h1 class="devsite-page-title" tabindex="-1"> Sync different identity systems </h1> <devsite-feature-tooltip ack-key="AckCollectionsBookmarkTooltipDismiss" analytics-category="Site-Wide Custom Events" analytics-action-show="Callout Profile displayed" analytics-action-close="Callout Profile dismissed" analytics-label="Create Collection Callout" class="devsite-page-bookmark-tooltip nocontent" dismiss-button="true" id="devsite-collections-dropdown" dismiss-button-text="Dismiss" close-button-text="Got it"> <devsite-bookmark></devsite-bookmark> <span slot="popout-heading"> Stay organized with collections </span> <span slot="popout-contents"> Save and categorize content based on your preferences. </span> </devsite-feature-tooltip> <div class="devsite-page-title-meta"><devsite-view-release-notes></devsite-view-release-notes></div> <devsite-toc class="devsite-nav" depth="2" devsite-toc-embedded > </devsite-toc> <div class="devsite-article-body clearfix "> <p>Access control in Google Cloud Search is based on the user's Google account. When indexing content, all ACLs on items must resolve to valid Google user or group IDs (email addresses).</p> <p>In many cases a repository doesn't have direct knowledge of Google accounts. Instead, users may be represented by local accounts or use federated sign-in with an identity provider and ID, other than the user's email address, to identify each account. This ID is called the <em>external ID</em>.</p> <p>Created using the Admin console, <em>Identity sources</em> help bridge this gap between identity systems by:</p> <ul> <li>Defining a <a href="/admin-sdk/directory/v1/guides/manage-schemas">custom user field</a> to store external IDs. The field is used to resolve external IDs to a Google account.</li> <li>Define a <a href="https://cloud.google.com/identity/docs/overview#concepts">namespace for security groups</a> managed by a repository or <a href="https://en.wikipedia.org/wiki/Identity_provider">identity provider</a>.</li> </ul> <p>Use identity sources when either:</p> <ul> <li>The repository does not have knowledge of the primary email address of the user in Google Workspace or Google Cloud Directory.</li> <li>The repository defines groups for access control that do not correspond to email-based groups in Google Workspace.</li> </ul> <p>Identity sources improve indexing efficiency by decoupling indexing from identity mapping. This decoupling allows you to defer looking up the user when creating ACLs and indexing items.</p> <h3 id="example_deployment" data-text="Example deployment" tabindex="-1">Example deployment</h3> <p>Figure 1 shows an example deployment where both on-premise and cloud repositories are used by an enterprise. Each repository uses a different type of external ID to refer to users.</p> <figure id="identity-arch"> <img src="/static/cloud-search/images/identity-arch.png" alt="Example deployment"> <figcaption><b>Figure 1.</b> Example enterprise deployment with different identity types.</figcaption> </figure> <p>Repository 1 identifies the user using the email address asserted using <a href="https://en.wikipedia.org/wiki/Security_Assertion_Markup_Language">SAML</a>. Because repository 1 has knowledge of the primary email address of the user in Google Workspace or Cloud Directory, an identity source is not needed.</p> <p>Repository 2 integrates directly with an on-premise directory and identifies the user by their <code translate="no" dir="ltr">sAMAccountName</code> attribute. Because repository 2 uses a <code translate="no" dir="ltr">sAMAccountName</code> attribute as an external ID, an identity source is needed.</p> <h2 id="create_an_identity_source" data-text="Create an identity source" tabindex="-1">Create an identity source</h2> <p>If you require an identity source, see <a href="https://support.google.com/a/answer/9039510">Map user identities in Cloud Search</a>.</p> <p>You must create an identity source before creating a content connector because you will need the identity source ID to create ACLs and index data. As mentioned previously, creating an identity source also creates a <a href="https://developers.google.com/admin-sdk/directory/v1/guides/manage-schemas">custom user property</a> in Cloud Directory. Use this property to record the external ID for each user in your repository. The property is named using the convention <code translate="no" dir="ltr"><var translate="no">IDENTITY_SOURCE_ID</var>_identity</code>.</p> <p>The following table shows two identity sources, one to hold SAM account names (sAMAccountName) as external IDs and one to hold user IDs (uid) as external IDs.</p> <table> <thead> <tr> <th>Identity source</th> <th>user property</th> <th>external ID</th> </tr> </thead> <tbody> <tr> <td>id1</td> <td>id1_identity</td> <td>sAMAccountName</td> </tr> <tr> <td>id2</td> <td>id2_identity</td> <td>uid</td> </tr> </tbody> </table> <p>Create an identity source for each possible external ID that is used to refer to a user in your enterprise.</p> <p>The following table shows how a user with a Google account and two external IDs (id1_identity and id2_identity) and their values appear in Cloud Directory:</p> <table> <thead> <tr> <th>user</th> <th>email</th> <th>id1_identity</th> <th>id2_identity</th> </tr> </thead> <tbody> <tr> <td>Ann</td> <td>ann@example.com</td> <td>example\ann</td> <td>1001</td> </tr> </tbody> </table> <p>You can reference the same user using the three different IDs, (Google email, sAMAccountName, and uid) when forming ACLs for indexing.</p> <h3 id="write_user_acls" data-text="Write user ACLs" tabindex="-1">Write user ACLs</h3> <p>Use the <a href="/cloud-search/docs/reference/sdk/com/google/enterprise/cloudsearch/sdk/indexing/Acl#getUserPrincipal(java.lang.String)">getUserPrincpal()</a> method or the <a href="/cloud-search/docs/reference/sdk/com/google/enterprise/cloudsearch/sdk/indexing/Acl#getGroupPrincipal(java.lang.String)">getGroupPrincipal()</a> method to create principals using a provided external ID.</p> <p>The following example demonstrates how to retrieve file permissions. These permissions include the name of each user who has access to the file.</p> <style> .filepath { color: #fff; margin: 6px; max-width: calc(100% - 160px); /* Give at least 160px for the "View on GitHub" button. */ text-overflow: ellipsis; text-shadow: rgba(0,0,0,0.1) 1px 1px; overflow: hidden; } .github-docwidget-gitinclude-code .prettyprint { margin: 0; } .view-on-github { text-shadow: rgba(12,12,12,0.1) 1px 1px; } </style> <div class="github-docwidget-include" style="border-bottom: 0; border-radius: 3px 3px 0 0; padding: 4px; background-color: #4285f4;"> <div class="filepath" style="text-align: left; float: left;">FilePermissionSample.java</div> <div style="text-align: right; float: right;"> <a class="view-on-github button" target="_blank" href="https://github.com/googleworkspace/cloud-search-samples/blob/master/indexing/connector/sdk/acls/src/main/java/com/google/cloudsearch/samples/FilePermissionSample.java" style="color: #4285f4;" track-type="github" track-name="gitHubViewButton" track-metadata-link-destination="https://github.com/googleworkspace/cloud-search-samples/blob/master/indexing/connector/sdk/acls/src/main/java/com/google/cloudsearch/samples/FilePermissionSample.java">View on GitHub</a> </div> <div style="clear: both;"></div> </div><!-- Code --><div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre class=" devsite-click-to-copy" track-metadata-position="googleworkspace/cloud-search-samples/indexing/connector/sdk/acls/src/main/java/com/google/cloudsearch/samples/FilePermissionSample.java/master/cloud_search_content_sdk_posix_acl" data-code-snippet="true" data-github-path="googleworkspace/cloud-search-samples/indexing/connector/sdk/acls/src/main/java/com/google/cloudsearch/samples/FilePermissionSample.java" data-git-revision="master" data-region-tag="cloud_search_content_sdk_posix_acl" translate="no" dir="ltr" is-upgraded syntax="Java"><span class="devsite-syntax-cm">/**</span> <span class="devsite-syntax-cm"> * Sample for mapping permissions from a source repository to Cloud Search</span> <span class="devsite-syntax-cm"> * ACLs. In this example, POSIX file permissions are used a the source</span> <span class="devsite-syntax-cm"> * permissions.</span> <span class="devsite-syntax-cm"> *</span> <span class="devsite-syntax-cm"> * @return Acl</span> <span class="devsite-syntax-cm"> * @throws IOException if unable to read file permissions</span> <span class="devsite-syntax-cm"> */</span> <span class="devsite-syntax-kd">static</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Acl</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nf">mapPosixFilePermissionToCloudSearchAcl</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">Path</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">pathToFile</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">throws</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">IOException</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Id of the identity source for external user/group IDs. Shown here,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// but may be omitted in the SDK as it is automatically applied</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// based on the `api.identitySourceId` configuration parameter.</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">String</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">identitySourceId</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"abcdef12345"</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Retrieve the file system permissions for the item being indexed.</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">PosixFileAttributeView</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">attributeView</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Files</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">getFileAttributeView</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">pathToFile</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">PosixFileAttributeView</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">class</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">LinkOption</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">NOFOLLOW_LINKS</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">attributeView</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">==</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kc">null</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Can't read, return empty ACl</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">return</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Acl</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">Builder</span><span class="devsite-syntax-p">().</span><span class="devsite-syntax-na">build</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">PosixFileAttributes</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">attrs</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">attributeView</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">readAttributes</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// ...</span> <span class="devsite-syntax-p">}</span></pre></devsite-code> </div> <p>The following code snippet shows how to create principals who are owners using the external ID (<code translate="no" dir="ltr">externalUserName</code>) stored in the attributes.</p> <style> .filepath { color: #fff; margin: 6px; max-width: calc(100% - 160px); /* Give at least 160px for the "View on GitHub" button. */ text-overflow: ellipsis; text-shadow: rgba(0,0,0,0.1) 1px 1px; overflow: hidden; } .github-docwidget-gitinclude-code .prettyprint { margin: 0; } .view-on-github { text-shadow: rgba(12,12,12,0.1) 1px 1px; } </style> <div class="github-docwidget-include" style="border-bottom: 0; border-radius: 3px 3px 0 0; padding: 4px; background-color: #4285f4;"> <div class="filepath" style="text-align: left; float: left;">FilePermissionSample.java</div> <div style="text-align: right; float: right;"> <a class="view-on-github button" target="_blank" href="https://github.com/googleworkspace/cloud-search-samples/blob/master/indexing/connector/sdk/acls/src/main/java/com/google/cloudsearch/samples/FilePermissionSample.java" style="color: #4285f4;" track-type="github" track-name="gitHubViewButton" track-metadata-link-destination="https://github.com/googleworkspace/cloud-search-samples/blob/master/indexing/connector/sdk/acls/src/main/java/com/google/cloudsearch/samples/FilePermissionSample.java">View on GitHub</a> </div> <div style="clear: both;"></div> </div><!-- Code --><div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre class=" devsite-click-to-copy" track-metadata-position="googleworkspace/cloud-search-samples/indexing/connector/sdk/acls/src/main/java/com/google/cloudsearch/samples/FilePermissionSample.java/master/cloud_search_content_sdk_posix_acl_owner" data-code-snippet="true" data-github-path="googleworkspace/cloud-search-samples/indexing/connector/sdk/acls/src/main/java/com/google/cloudsearch/samples/FilePermissionSample.java" data-git-revision="master" data-region-tag="cloud_search_content_sdk_posix_acl_owner" translate="no" dir="ltr" is-upgraded syntax="Java"><span class="devsite-syntax-c1">// Owner, for search quality.</span> <span class="devsite-syntax-c1">// Note that for principals the name is not the primary</span> <span class="devsite-syntax-c1">// email address in Cloud Directory, but the local ID defined</span> <span class="devsite-syntax-c1">// by the OS. Users and groups must be referred to by their</span> <span class="devsite-syntax-c1">// external ID and mapped via an identity source.</span> <span class="devsite-syntax-n">List<Principal></span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">owners</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Collections</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">singletonList</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Acl</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">getUserPrincipal</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">attrs</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">owner</span><span class="devsite-syntax-p">().</span><span class="devsite-syntax-na">getName</span><span class="devsite-syntax-p">(),</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">identitySourceId</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-p">);</span></pre></devsite-code> </div> <p>Finally, the following code snippet shows how to create principals who are readers of the file.</p> <style> .filepath { color: #fff; margin: 6px; max-width: calc(100% - 160px); /* Give at least 160px for the "View on GitHub" button. */ text-overflow: ellipsis; text-shadow: rgba(0,0,0,0.1) 1px 1px; overflow: hidden; } .github-docwidget-gitinclude-code .prettyprint { margin: 0; } .view-on-github { text-shadow: rgba(12,12,12,0.1) 1px 1px; } </style> <div class="github-docwidget-include" style="border-bottom: 0; border-radius: 3px 3px 0 0; padding: 4px; background-color: #4285f4;"> <div class="filepath" style="text-align: left; float: left;">FilePermissionSample.java</div> <div style="text-align: right; float: right;"> <a class="view-on-github button" target="_blank" href="https://github.com/googleworkspace/cloud-search-samples/blob/master/indexing/connector/sdk/acls/src/main/java/com/google/cloudsearch/samples/FilePermissionSample.java" style="color: #4285f4;" track-type="github" track-name="gitHubViewButton" track-metadata-link-destination="https://github.com/googleworkspace/cloud-search-samples/blob/master/indexing/connector/sdk/acls/src/main/java/com/google/cloudsearch/samples/FilePermissionSample.java">View on GitHub</a> </div> <div style="clear: both;"></div> </div><!-- Code --><div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre class=" devsite-click-to-copy" track-metadata-position="googleworkspace/cloud-search-samples/indexing/connector/sdk/acls/src/main/java/com/google/cloudsearch/samples/FilePermissionSample.java/master/cloud_search_content_sdk_posix_acl_reader" data-code-snippet="true" data-github-path="googleworkspace/cloud-search-samples/indexing/connector/sdk/acls/src/main/java/com/google/cloudsearch/samples/FilePermissionSample.java" data-git-revision="master" data-region-tag="cloud_search_content_sdk_posix_acl_reader" translate="no" dir="ltr" is-upgraded syntax="Java"><span class="devsite-syntax-c1">// List of users to grant access to</span> <span class="devsite-syntax-n">List<Principal></span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">readers</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">ArrayList</span><><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-c1">// Add owner, group, others to readers list if permissions</span> <span class="devsite-syntax-c1">// exist. For this example, other is mapped to everyone</span> <span class="devsite-syntax-c1">// in the organization.</span> <span class="devsite-syntax-n">Set<PosixFilePermission></span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">permissions</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">attrs</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">permissions</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">permissions</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">contains</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">PosixFilePermission</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">OWNER_READ</span><span class="devsite-syntax-p">))</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">readers</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">add</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">Acl</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">getUserPrincipal</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">attrs</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">owner</span><span class="devsite-syntax-p">().</span><span class="devsite-syntax-na">getName</span><span class="devsite-syntax-p">(),</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">identitySourceId</span><span class="devsite-syntax-p">));</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">permissions</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">contains</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">PosixFilePermission</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">GROUP_READ</span><span class="devsite-syntax-p">))</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">String</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">externalGroupName</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">attrs</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">group</span><span class="devsite-syntax-p">().</span><span class="devsite-syntax-na">getName</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Principal</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">group</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Acl</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">getGroupPrincipal</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">externalGroupName</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">identitySourceId</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">readers</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">add</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">group</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">permissions</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">contains</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">PosixFilePermission</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">OTHERS_READ</span><span class="devsite-syntax-p">))</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Principal</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">everyone</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Acl</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">getCustomerPrincipal</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">readers</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">add</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">everyone</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-p">}</span></pre></devsite-code> </div> <p>Once you have a list of readers and owners, you can create the ACL:</p> <style> .filepath { color: #fff; margin: 6px; max-width: calc(100% - 160px); /* Give at least 160px for the "View on GitHub" button. */ text-overflow: ellipsis; text-shadow: rgba(0,0,0,0.1) 1px 1px; overflow: hidden; } .github-docwidget-gitinclude-code .prettyprint { margin: 0; } .view-on-github { text-shadow: rgba(12,12,12,0.1) 1px 1px; } </style> <div class="github-docwidget-include" style="border-bottom: 0; border-radius: 3px 3px 0 0; padding: 4px; background-color: #4285f4;"> <div class="filepath" style="text-align: left; float: left;">FilePermissionSample.java</div> <div style="text-align: right; float: right;"> <a class="view-on-github button" target="_blank" href="https://github.com/googleworkspace/cloud-search-samples/blob/master/indexing/connector/sdk/acls/src/main/java/com/google/cloudsearch/samples/FilePermissionSample.java" style="color: #4285f4;" track-type="github" track-name="gitHubViewButton" track-metadata-link-destination="https://github.com/googleworkspace/cloud-search-samples/blob/master/indexing/connector/sdk/acls/src/main/java/com/google/cloudsearch/samples/FilePermissionSample.java">View on GitHub</a> </div> <div style="clear: both;"></div> </div><!-- Code --><div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre class=" devsite-click-to-copy" track-metadata-position="googleworkspace/cloud-search-samples/indexing/connector/sdk/acls/src/main/java/com/google/cloudsearch/samples/FilePermissionSample.java/master/cloud_search_content_sdk_posix_acl_build" data-code-snippet="true" data-github-path="googleworkspace/cloud-search-samples/indexing/connector/sdk/acls/src/main/java/com/google/cloudsearch/samples/FilePermissionSample.java" data-git-revision="master" data-region-tag="cloud_search_content_sdk_posix_acl_build" translate="no" dir="ltr" is-upgraded syntax="Java"><span class="devsite-syntax-c1">// Build the Cloud Search ACL. Note that inheritance of permissions</span> <span class="devsite-syntax-c1">// from parents is omitted. See `setInheritFrom()` and `setInheritanceType()`</span> <span class="devsite-syntax-c1">// methods on the builder if required by your implementation.</span> <span class="devsite-syntax-n">Acl</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">acl</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Acl</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">Builder</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">setReaders</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">readers</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">setOwners</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">owners</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">build</span><span class="devsite-syntax-p">();</span></pre></devsite-code> </div> <p>The underlying REST API uses the pattern <code translate="no" dir="ltr">identitysources/<var translate="no">IDENTITY_SOURCE_ID</var>/users/<var translate="no">EXTERNAL_ID</var></code> for the ID when creating principals. Referring back to the previous tables, if you create an ACL with Ann's <code translate="no" dir="ltr">id1_identity</code> (SAMAccountName), the ID would resolve to:</p> <p><code translate="no" dir="ltr">identitysources/id1_identity/users/example/ann</code></p> <p>This entire ID is called the user's <em>intermediate ID</em> because it provides a bridge between the external ID and the Google IDs stored with Cloud Directory.</p> <p>For further information on modeling the ACLs used for a repository, see <a href="/cloud-search/docs/guides/acls">ACLs</a>.</p> <h2 id="map_groups" data-text="Map groups" tabindex="-1">Map groups</h2> <p>Identity sources also serve as a namespace for groups used in ACLs. You can use this namespace feature to create and map groups that are used for security purposes only or are local to a repository.</p> <p>Use the <a href="https://cloud.google.com/identity/docs/">Cloud Identity Groups API</a> to create a group and manage the memberships. To associate the group with an identity source, use the identity source resource name as the group namespace.</p> <p>The following code snippet shows how to create a group using the <a href="https://cloud.google.com/identity/docs/">Cloud Identity Groups API</a>:</p> <style> .filepath { color: #fff; margin: 6px; max-width: calc(100% - 160px); /* Give at least 160px for the "View on GitHub" button. */ text-overflow: ellipsis; text-shadow: rgba(0,0,0,0.1) 1px 1px; overflow: hidden; } .github-docwidget-gitinclude-code .prettyprint { margin: 0; } .view-on-github { text-shadow: rgba(12,12,12,0.1) 1px 1px; } </style> <div class="github-docwidget-include" style="border-bottom: 0; border-radius: 3px 3px 0 0; padding: 4px; background-color: #4285f4;"> <div class="filepath" style="text-align: left; float: left;">CreateGroupCommand.java</div> <div style="text-align: right; float: right;"> <a class="view-on-github button" target="_blank" href="https://github.com/googleworkspace/cloud-search-samples/blob/master/identity/rest/cloud-identity/src/main/java/com/google/cloudsearch/samples/CreateGroupCommand.java" style="color: #4285f4;" track-type="github" track-name="gitHubViewButton" track-metadata-link-destination="https://github.com/googleworkspace/cloud-search-samples/blob/master/identity/rest/cloud-identity/src/main/java/com/google/cloudsearch/samples/CreateGroupCommand.java">View on GitHub</a> </div> <div style="clear: both;"></div> </div><!-- Code --><div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre class=" devsite-click-to-copy" track-metadata-position="googleworkspace/cloud-search-samples/identity/rest/cloud-identity/src/main/java/com/google/cloudsearch/samples/CreateGroupCommand.java/master/cloud_identity_create_group" data-code-snippet="true" data-github-path="googleworkspace/cloud-search-samples/identity/rest/cloud-identity/src/main/java/com/google/cloudsearch/samples/CreateGroupCommand.java" data-git-revision="master" data-region-tag="cloud_identity_create_group" translate="no" dir="ltr" is-upgraded syntax="Java"><span class="devsite-syntax-n">String</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">namespace</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"identitysources/"</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">+</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">idSource</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-n">Group</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">group</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Group</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">setGroupKey</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-k">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">EntityKey</span><span class="devsite-syntax-p">().</span><span class="devsite-syntax-na">setNamespace</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">namespace</span><span class="devsite-syntax-p">).</span><span class="devsite-syntax-na">setId</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">groupId</span><span class="devsite-syntax-p">))</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">setDescription</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"Demo group"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">setDisplayName</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">groupName</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">setLabels</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">Collections</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">singletonMap</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"system/groups/external"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">""</span><span class="devsite-syntax-p">))</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">setParent</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">namespace</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-k">try</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">CloudIdentity</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">service</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Utils</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">buildCloudIdentityService</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Operation</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">createOperation</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">service</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">groups</span><span class="devsite-syntax-p">().</span><span class="devsite-syntax-na">create</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">group</span><span class="devsite-syntax-p">).</span><span class="devsite-syntax-na">execute</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">createOperation</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">getDone</span><span class="devsite-syntax-p">())</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Note: The response contains the data for a Group object, but as</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// individual fields. To convert to a Group instance, either populate</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// the fields individually or serialize & deserialize to/from JSON.</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">//</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Example:</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// String json = service.getJsonFactory().toString(response);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Group createdGroup = service.getObjectParser()</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// .parseAndClose(new StringReader(json), Group.class);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">System</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">out</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">printf</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"Group: %s\n"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">createOperation</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">getResponse</span><span class="devsite-syntax-p">().</span><span class="devsite-syntax-na">toString</span><span class="devsite-syntax-p">());</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">else</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Handle case where operation not yet complete, poll for</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// completion. API is currently synchronous and all operations return</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// as completed.</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// ...</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-p">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">catch</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">Exception</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">e</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">System</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">err</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">printf</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"Unable to create group: %s"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">e</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">getMessage</span><span class="devsite-syntax-p">());</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">e</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">printStackTrace</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">System</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">err</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-p">}</span></pre></devsite-code> </div> <h3 id="create_a_group_acl" data-text="Create a group ACL" tabindex="-1">Create a group ACL</h3> <p>To create a group ACL, use the <a href="/cloud-search/docs/reference/sdk/com/google/enterprise/cloudsearch/sdk/indexing/Acl#getGroupPrincipal(java.lang.String)">getGroupPrincipal()</a> method to create a group principal using a provided external ID. Then, build the ACL using the <a href="/cloud-search/docs/reference/sdk/com/google/enterprise/cloudsearch/sdk/indexing/Acl.Builder">Acl.Builder</a> class as follows:</p> <style> .filepath { color: #fff; margin: 6px; max-width: calc(100% - 160px); /* Give at least 160px for the "View on GitHub" button. */ text-overflow: ellipsis; text-shadow: rgba(0,0,0,0.1) 1px 1px; overflow: hidden; } .github-docwidget-gitinclude-code .prettyprint { margin: 0; } .view-on-github { text-shadow: rgba(12,12,12,0.1) 1px 1px; } </style> <div class="github-docwidget-include" style="border-bottom: 0; border-radius: 3px 3px 0 0; padding: 4px; background-color: #4285f4;"> <div class="filepath" style="text-align: left; float: left;">FilePermissionSample.java</div> <div style="text-align: right; float: right;"> <a class="view-on-github button" target="_blank" href="https://github.com/googleworkspace/cloud-search-samples/blob/master/indexing/connector/sdk/acls/src/main/java/com/google/cloudsearch/samples/FilePermissionSample.java" style="color: #4285f4;" track-type="github" track-name="gitHubViewButton" track-metadata-link-destination="https://github.com/googleworkspace/cloud-search-samples/blob/master/indexing/connector/sdk/acls/src/main/java/com/google/cloudsearch/samples/FilePermissionSample.java">View on GitHub</a> </div> <div style="clear: both;"></div> </div><!-- Code --><div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre class=" devsite-click-to-copy" track-metadata-position="googleworkspace/cloud-search-samples/indexing/connector/sdk/acls/src/main/java/com/google/cloudsearch/samples/FilePermissionSample.java/master/cloud_search_content_sdk_posix_acl_group" data-code-snippet="true" data-github-path="googleworkspace/cloud-search-samples/indexing/connector/sdk/acls/src/main/java/com/google/cloudsearch/samples/FilePermissionSample.java" data-git-revision="master" data-region-tag="cloud_search_content_sdk_posix_acl_group" translate="no" dir="ltr" is-upgraded syntax="Java"><span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">permissions</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">contains</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">PosixFilePermission</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">GROUP_READ</span><span class="devsite-syntax-p">))</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">String</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">externalGroupName</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">attrs</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">group</span><span class="devsite-syntax-p">().</span><span class="devsite-syntax-na">getName</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Principal</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">group</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Acl</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">getGroupPrincipal</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">externalGroupName</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">identitySourceId</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">readers</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">add</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">group</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-p">}</span></pre></devsite-code> </div> <h2 id="identity_connectors" data-text="Identity connectors" tabindex="-1">Identity connectors</h2> <p>While you can use external, non-Google IDs to create ACLs and index items, users can't see items in a search until their external IDs resolve to a Google ID in Cloud Directory. There are three ways to ensure that Cloud Directory knows both the Google ID and external IDs for a user:</p> <ul> <li>Manually update each individual user profile through the <a href="https://admin.google.com">Admin console</a> This process is only recommended for testing and prototyping using a few user profiles.</li> <li>Map external IDs to Google IDs using the <a href="/admin-sdk/directory">Directory API</a>. This process is recommended for those who can't use the Identity Connector SDK.</li> <li><a href="/cloud-search/docs/guides/identity-connector">Create an identity connector</a> using the <a href="/cloud-search/docs/reference/sdk/com/google/enterprise/cloudsearch/sdk/identity/package-summary">Identity Connector SDK</a>. This SDK simplifies the use of the <a href="/admin-sdk/directory">Directory API</a> to map IDs.</li> </ul> <p>Identity connectors are programs used to map external IDs from enterprise identities (users and groups) to internal Google identities used by Google Cloud Search. If you have to create an identity source, you must create an identity connector.</p> <p><a href="https://tools.google.com/dlpage/dirsync/">Google Cloud Directory Sync (GCDS)</a> is an example of an identity connector. This identity connector maps user and group information from Microsoft's Active Directory to Cloud Directory along with the user attributes that may represent their identity in other systems.</p> <h2 id="sync_identities_using_the_rest_api" data-text="Sync identities using the REST API" tabindex="-1">Sync identities using the REST API</h2> <p>Use the <a href="https://developers.google.com/admin-sdk/directory/v1/reference/users/update"><code translate="no" dir="ltr">update</code></a> method to sync identities using the REST API.</p> <h2 id="remap" data-text="Remapping identities" tabindex="-1">Remapping identities</h2> <p>After remapping an item's identity to another identity, you must reindex items for the new identity to take hold. For example,</p> <ul> <li>if you try to remove a mapping from a user or remap it to another user, the original mapping is still preserved until you reindex.</li> <li>If you delete a mapped group that is present in an item ACL, and then create a new group with the same <code translate="no" dir="ltr">groupKey</code>, the new group doesn't provide access to the item until the item is reindexed.</li> </ul> <devsite-hats-survey class="nocontent" hats-id="vuPFkdRyz0eGRuQsCn30VLq5XqxM" listnr-id="717201"></devsite-hats-survey> </div> <devsite-recommendations display="in-page" hidden yield> </devsite-recommendations> <devsite-thumb-rating position="footer"> </devsite-thumb-rating> <devsite-feedback position="footer" project-name="Cloud Search" product-id="717201" bucket="cloud-search" context="" version="t-devsite-webserver-20241114-r00-rc02.464922260396498922" data-label="Send Feedback Button" track-type="feedback" track-name="sendFeedbackLink" track-metadata-position="footer" class="nocontent" project-feedback-url="https://issuetracker.google.com/issues/new?component=1134311&template=1640548" project-icon="https://www.gstatic.com/images/branding/product/1x/google_cloud_search_64dp.png" project-support-url="https://developers.google.com/cloud-search/support" > <button> Send feedback </button> </devsite-feedback> <devsite-recommendations id="recommendations-link" yield></devsite-recommendations> <div class="devsite-floating-action-buttons"> </div> </article> <devsite-content-footer class="nocontent"> <p>Except as otherwise noted, the content of this page is licensed under the <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 License</a>, and code samples are licensed under the <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 License</a>. For details, see the <a href="https://developers.google.com/site-policies">Google Developers Site Policies</a>. Java is a registered trademark of Oracle and/or its affiliates.</p> <p>Last updated 2024-11-14 UTC.</p> </devsite-content-footer> <devsite-notification > </devsite-notification> <div class="devsite-content-data"> <template class="devsite-thumb-rating-feedback"> <devsite-feedback position="thumb-rating" project-name="Cloud Search" product-id="717201" bucket="cloud-search" context="" version="t-devsite-webserver-20241114-r00-rc02.464922260396498922" data-label="Send Feedback Button" track-type="feedback" track-name="sendFeedbackLink" track-metadata-position="thumb-rating" class="nocontent" project-feedback-url="https://issuetracker.google.com/issues/new?component=1134311&template=1640548" project-icon="https://www.gstatic.com/images/branding/product/1x/google_cloud_search_64dp.png" project-support-url="https://developers.google.com/cloud-search/support" > <button> Need to tell us more? </button> </devsite-feedback> </template> <template class="devsite-content-data-template"> [[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2024-11-14 UTC."],[[["Google Cloud Search access control relies on Google accounts and requires all item ACLs to resolve to valid Google user or group IDs."],["Identity sources bridge the gap between identity systems by defining a custom user field to store external IDs and enabling the mapping of external IDs to Google accounts."],["When repositories use external IDs or define groups for access control that don't correspond to Google Workspace groups, identity sources are necessary."],["Identity connectors, such as Google Cloud Directory Sync (GCDS), are used to map external IDs from enterprise identities to internal Google identities used by Google Cloud Search."],["After remapping an item's identity, you must reindex items for the new identity to take effect in search results and access control."]]],[]] </template> </div> </devsite-content> </main> <devsite-footer-promos class="devsite-footer"> <nav class="devsite-footer-promos nocontent" aria-label="Promotions"> <ul class="devsite-footer-promos-list"> <li class="devsite-footer-promo"> <a href="https://developers.googleblog.com/search/?query=Google+Workspace" class="devsite-footer-promo-title gc-analytics-event" data-category="Site-Wide Custom Events" target="_blank" data-category="Workspace Footer" data-label="Promo - Google Workspace Developers Blog" > <picture> <img class="devsite-footer-promo-icon" src="https://www.gstatic.com/images/branding/product/2x/google_cloud_64dp.png" loading="lazy" alt="Blog"> </picture> <span class="devsite-footer-promo-label"> Blog </span> </a> <div class="devsite-footer-promo-description">Read the Google Workspace Developers blog</div> </li> <li class="devsite-footer-promo"> <a href="https://stackoverflow.com/questions/tagged/google-cloud-search" class="devsite-footer-promo-title gc-analytics-event" data-category="Site-Wide Custom Events" data-category="Workspace Footer" data-label="Promo - Stack Overflow" target="_blank" > <picture> <img class="devsite-footer-promo-icon" src="/static/site-assets/logo-stack-overflow.svg" loading="lazy" alt="Stack Overview"> </picture> <span class="devsite-footer-promo-label"> Stack Overview </span> </a> <div class="devsite-footer-promo-description">Ask questions with the google-cloud-search tag</div> </li> <li class="devsite-footer-promo"> <a href="https://github.com/googleworkspace/cloud-search-samples" class="devsite-footer-promo-title gc-analytics-event" data-category="Site-Wide Custom Events" target="_blank" data-label="Promo - Google Workspace Github" data-category="Workspace Footer" > <picture> <img class="devsite-footer-promo-icon" src="/static/site-assets/logo-github.svg" loading="lazy" alt="Code Samples"> </picture> <span class="devsite-footer-promo-label"> Code Samples </span> </a> <div class="devsite-footer-promo-description">Explore our sample apps or copy them to build your own</div> </li> <li class="devsite-footer-promo"> <a href="/api-client-library" class="devsite-footer-promo-title gc-analytics-event" data-category="Site-Wide Custom Events" target="_blank" data-category="Workspace Footer" data-label="Promo - Client libraries" > <div class="devsite-footer-promo-icon material-icons" aria-hidden="true">file_download</div> <span class="devsite-footer-promo-label"> Client libraries </span> </a> <div class="devsite-footer-promo-description">Download a client library for your preferred language</div> </li> </ul> </nav> </devsite-footer-promos> <devsite-footer-linkboxes class="devsite-footer"> <nav class="devsite-footer-linkboxes nocontent" aria-label="Footer links"> <ul class="devsite-footer-linkboxes-list"> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Google Workspace for Developers</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="/workspace" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Linkbox - Platform overview"data-category="Workspace Footer"> Platform overview </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/workspace/products" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-category="Workspace Footer"data-label="Linkbox - Developer products"> Developer products </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/workspace/support" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Linkbox - Developer support"data-category="Workspace Footer"> Developer support </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/workspace/terms" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Linkbox - Terms of Service"data-category="Workspace Footer"> Terms of Service </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Tools</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="https://admin.google.com/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-category="Workspace Footer"data-label="Linkbox - Admin console"target="admin-console"> Admin console </a> </li> <li class="devsite-footer-linkbox-item"> <a href="https://script.google.com/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-category="Workspace Footer"data-label="Linkbox - Apps Script Dashboard"target="_blank"> Apps Script Dashboard </a> </li> <li class="devsite-footer-linkbox-item"> <a href="https://console.cloud.google.com/workspace-api" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" target="console"data-category="Workspace Footer"data-label="Linkbox - Google Cloud console"> Google Cloud console </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/workspace/explore" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Linkbox - APIs Explorer"data-category="Workspace Footer"> APIs Explorer </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Connect</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="https://developers.googleblog.com/search/?query=Google+Workspace" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Linkbox - Blog"data-category="Workspace Footer"target="_blank"> Blog </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/workspace/newsletters" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Linkbox - Newsletter"data-category="Workspace Footer"> Newsletter </a> </li> <li class="devsite-footer-linkbox-item"> <a href="https://twitter.com/workspacedevs" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Linkbox - X (Twitter)"target="_blank"data-category="Workspace Footer"> X (Twitter) </a> </li> <li class="devsite-footer-linkbox-item"> <a href="https://www.youtube.com/channel/UCUcg6az6etU_gRtZVAhBXaw" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Linkbox - YouTube"target="_blank"data-category="Workspace Footer"> YouTube </a> </li> </ul> </li> </ul> </nav> </devsite-footer-linkboxes> <devsite-footer-utility class="devsite-footer"> <div class="devsite-footer-utility nocontent"> <nav class="devsite-footer-sites" aria-label="Other Google Developers websites"> <a href="https://developers.google.com/" class="devsite-footer-sites-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Google Developers Link"> <picture> <img class="devsite-footer-sites-logo" src="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/developers/images/lockup-google-for-developers.svg" loading="lazy" alt="Google Developers"> </picture> </a> <ul class="devsite-footer-sites-list"> <li class="devsite-footer-sites-item"> <a href="//developer.android.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Android Link" > Android </a> </li> <li class="devsite-footer-sites-item"> <a href="//developer.chrome.com/home" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Chrome Link" > Chrome </a> </li> <li class="devsite-footer-sites-item"> <a href="//firebase.google.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Firebase Link" > Firebase </a> </li> <li class="devsite-footer-sites-item"> <a href="//cloud.google.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Google Cloud Platform Link" > Google Cloud Platform </a> </li> <li class="devsite-footer-sites-item"> <a href="//ai.google.dev/" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Google AI Link" > Google AI </a> </li> <li class="devsite-footer-sites-item"> <a href="/products" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer All products Link" > All products </a> </li> </ul> </nav> <nav class="devsite-footer-utility-links" aria-label="Utility links"> <ul class="devsite-footer-utility-list"> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="/terms/site-terms" data-category="Site-Wide Custom Events" data-label="Footer Terms link" > Terms </a> </li> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="//policies.google.com/privacy" data-category="Site-Wide Custom Events" data-label="Footer Privacy link" > Privacy </a> </li> <li class="devsite-footer-utility-item glue-cookie-notification-bar-control"> <a class="devsite-footer-utility-link gc-analytics-event" href="#" data-category="Site-Wide Custom Events" data-label="Footer Manage cookies link" aria-hidden="true" > Manage cookies </a> </li> <li class="devsite-footer-utility-item devsite-footer-utility-button"> <span class="devsite-footer-utility-description">Sign up for the Google for Developers newsletter</span> <a class="devsite-footer-utility-link gc-analytics-event" href="/newsletter/subscribe" data-category="Site-Wide Custom Events" data-label="Footer Subscribe link" > Subscribe </a> </li> </ul> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="de" >Deutsch</a> </li> <li role="presentation"> <a role="menuitem" lang="es" >Español</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="fr" >Français</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="it" >Italiano</a> </li> <li role="presentation"> <a role="menuitem" lang="pl" >Polski</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="vi" >Tiếng Việt</a> </li> <li role="presentation"> <a role="menuitem" lang="tr" >Türkçe</a> </li> <li role="presentation"> <a role="menuitem" lang="ru" >Русский</a> </li> <li role="presentation"> <a role="menuitem" lang="he" >עברית</a> </li> <li role="presentation"> <a role="menuitem" lang="ar" >العربيّة</a> </li> <li role="presentation"> <a role="menuitem" lang="fa" >فارسی</a> </li> <li role="presentation"> <a role="menuitem" lang="hi" >हिंदी</a> </li> <li role="presentation"> <a role="menuitem" lang="bn" >বাংলা</a> </li> <li role="presentation"> <a role="menuitem" lang="th" >ภาษาไทย</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_tw" >中文 – 繁體</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> </nav> </div> </devsite-footer-utility> <devsite-panel></devsite-panel> <devsite-concierge data-info-panel data-ai-panel data-api-explorer-panel > </devsite-concierge> </section></section> <devsite-sitemask></devsite-sitemask> <devsite-snackbar></devsite-snackbar> <devsite-tooltip ></devsite-tooltip> <devsite-heading-link></devsite-heading-link> <devsite-analytics> <script type="application/json" analytics>[{"dimensions": {"dimension5": "en", "dimension4": "Cloud Search", "dimension3": false, "dimension6": "en", "dimension1": "Signed out", "dimension11": false}, "gaid": "UA-24532603-1", "metrics": {"ratings_count": "metric2", "ratings_value": "metric1"}, "purpose": 1}]</script> <script type="application/json" tag-management>{"at": "True", "ga4": [{"id": "G-272J68FCRF", "purpose": 1}, {"id": "G-YYP88VSJWR", "purpose": 0}], "ga4p": [{"id": "G-272J68FCRF", "purpose": 1}], "gtm": [], "parameters": {"internalUser": "False", "language": {"machineTranslated": "False", "requested": "en", "served": "en"}, "pageType": "article", "projectName": "Cloud Search", "signedIn": "False", "tenant": "developers", "recommendations": {"sourcePage": "", "sourceType": 0, "sourceRank": 0, "sourceIdenticalDescriptions": 0, "sourceTitleWords": 0, "sourceDescriptionWords": 0, "experiment": ""}, "experiment": {"ids": ""}}}</script> </devsite-analytics> <devsite-badger></devsite-badger> <script nonce="+OCZ+i8OpuARog3ce7sfXsyHSQW1HK"> (function(d,e,v,s,i,t,E){d['GoogleDevelopersObject']=i; t=e.createElement(v);t.async=1;t.src=s;E=e.getElementsByTagName(v)[0]; E.parentNode.insertBefore(t,E);})(window, document, 'script', 'https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/developers/js/app_loader.js', '[1,"en",null,"/js/devsite_app_module.js","https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625","https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/developers","https://developers-dot-devsite-v2-prod.appspot.com",null,null,["/_pwa/developers/manifest.json","https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/images/video-placeholder.svg","https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/developers/images/favicon-new.png","https://fonts.googleapis.com/css?family=Google+Sans:400,500|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"],1,null,[1,6,8,12,14,17,21,25,50,52,63,70,75,76,80,87,91,92,93,97,98,100,101,102,103,104,105,107,108,109,110,112,113,117,118,120,122,124,125,126,127,129,130,131,132,133,134,135,136,138,140,141,147,148,149,151,152,156,157,158,159,161,163,164,168,169,170,179,180,182,183,186,191,193,196],"AIzaSyAP-jjEJBzmIyKR4F-3XITp8yM9T1gEEI8","AIzaSyB6xiKGDR5O3Ak2okS4rLkauxGUG7XP0hg","developers.google.com","AIzaSyAQk0fBONSGUqCNznf6Krs82Ap1-NV6J4o","AIzaSyCCxcqdrZ_7QMeLCRY20bh_SXdAYqy70KY",null,null,null,["Experiments__reqs_query_experiments","MiscFeatureFlags__enable_view_transitions","DevPro__enable_developer_subscriptions","Cloud__enable_cloud_shell","Concierge__enable_concierge_restricted","MiscFeatureFlags__emergency_css","Analytics__enable_clearcut_logging","TpcFeatures__enable_required_headers","Profiles__enable_public_developer_profiles","Cloud__enable_cloud_dlp_service","Significatio__enable_by_tenant","Profiles__require_profile_eligibility_for_signin","Search__enable_dynamic_content_confidential_banner","Profiles__enable_developer_profiles_callout","Cloud__enable_cloudx_experiment_ids","MiscFeatureFlags__enable_firebase_utm","EngEduTelemetry__enable_engedu_telemetry","Profiles__enable_release_notes_notifications","CloudShell__cloud_code_overflow_menu","Cloud__enable_free_trial_server_call","Cloud__enable_cloud_facet_chat","Concierge__enable_concierge","Profiles__enable_completecodelab_endpoint","Profiles__enable_recognition_badges","Search__enable_suggestions_from_borg","Profiles__enable_dashboard_curated_recommendations","Search__enable_ai_eligibility_checks","Profiles__enable_page_saving","Cloud__enable_cloud_shell_fte_user_flow","DevPro__enable_cloud_innovators_plus","MiscFeatureFlags__enable_project_variables","MiscFeatureFlags__enable_explain_this_code","Search__enable_page_map","Profiles__enable_complete_playlist_endpoint","Search__enable_ai_search_summaries_restricted","Cloud__enable_legacy_calculator_redirect","MiscFeatureFlags__developers_footer_dark_image","Profiles__enable_profile_collections","Profiles__enable_awarding_url","CloudShell__cloud_shell_button","Search__enable_ai_search_summaries","Cloud__enable_cloudx_ping","BookNav__enable_tenant_cache_key","MiscFeatureFlags__developers_footer_image","TpcFeatures__enable_mirror_tenant_redirects","Cloud__enable_llm_concierge_chat","Concierge__enable_pushui","MiscFeatureFlags__enable_variable_operator"],null,null,"AIzaSyBLEMok-5suZ67qRPzx0qUtbnLmyT_kCVE","https://developerscontentserving-pa.clients6.google.com","AIzaSyCM4QpTRSqP5qI4Dvjt4OAScIN8sOUlO-k","https://developerscontentsearch-pa.clients6.google.com",1,4,null,"https://developerprofiles-pa.clients6.google.com",[1,"developers","Google for Developers","developers.google.com",null,"developers-dot-devsite-v2-prod.appspot.com",null,null,[1,1,[1],null,null,null,null,null,null,null,null,[1],null,null,null,null,null,null,[1],[1,null,null,[1,20],"/recommendations/information"],null,null,null,[1,1,1],[1,1,null,1,1]],null,[null,null,null,null,null,null,"/images/lockup-new.svg","/images/touchicon-180-new.png",null,null,null,null,1,null,null,null,null,null,null,null,null,1,null,null,null,"/images/lockup-dark-theme-new.svg",[]],[],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[6,1,14,15,20,22,23,29,32,36],null,[[null,null,null,[3,7,10,2,39,17,4,32,24,11,12,13,34,15,25],null,null,[1,[["docType","Choose a content type",[["Tutorial",null,null,null,null,null,null,null,null,"Tutorial"],["Guide",null,null,null,null,null,null,null,null,"Guide"],["Sample",null,null,null,null,null,null,null,null,"Sample"]]],["product","Choose a product",[["Android",null,null,null,null,null,null,null,null,"Android"],["ARCore",null,null,null,null,null,null,null,null,"ARCore"],["ChromeOS",null,null,null,null,null,null,null,null,"ChromeOS"],["Firebase",null,null,null,null,null,null,null,null,"Firebase"],["Flutter",null,null,null,null,null,null,null,null,"Flutter"],["Assistant",null,null,null,null,null,null,null,null,"Google Assistant"],["GoogleCloud",null,null,null,null,null,null,null,null,"Google Cloud"],["GoogleMapsPlatform",null,null,null,null,null,null,null,null,"Google Maps Platform"],["GooglePay",null,null,null,null,null,null,null,null,"Google Pay & Google Wallet"],["GooglePlay",null,null,null,null,null,null,null,null,"Google Play"],["Tensorflow",null,null,null,null,null,null,null,null,"TensorFlow"]]],["category","Choose a topic",[["AiAndMachineLearning",null,null,null,null,null,null,null,null,"AI and Machine Learning"],["Data",null,null,null,null,null,null,null,null,"Data"],["Enterprise",null,null,null,null,null,null,null,null,"Enterprise"],["Gaming",null,null,null,null,null,null,null,null,"Gaming"],["Mobile",null,null,null,null,null,null,null,null,"Mobile"],["Web",null,null,null,null,null,null,null,null,"Web"]]]]]],[1,1],null,1],[[["UA-24532603-1"],["UA-22084204-5"],null,null,["UA-24532603-5"],null,null,[["G-272J68FCRF"],null,null,[["G-272J68FCRF",2]]],[["UA-24532603-1",2]],null,[["UA-24532603-5",2]],null,1],[[5,4],[16,13],[11,8],[13,10],[3,2],[6,5],[12,9],[14,11],[1,1],[15,12],[4,3]],[[2,2],[1,1]]],null,4,null,null,null,null,null,null,null,null,null,null,null,null,null,"developers.devsite.google"],null,"pk_live_5170syrHvgGVmSx9sBrnWtA5luvk9BwnVcvIi7HizpwauFG96WedXsuXh790rtij9AmGllqPtMLfhe2RSwD6Pn38V00uBCydV4m"]') </script> <devsite-a11y-announce></devsite-a11y-announce> </body> </html>