Wanneer de API gebruiken
De Admin Console is voldoende voor handmatig beheer van groepen, maar voor geautomatiseerde of grootschalige bewerkingen is de API de juiste keuze. Typische gebruiksscenario's:
- Automatisch groepen aanmaken bij het onboarden van nieuwe afdelingen.
- Groepslidmaatschappen synchroniseren vanuit een HR-systeem.
- Bulk-updates van groepsinstellingen.
- Integreren met Slack, Jira of andere tools die Workspace-groepen als basis gebruiken.
Benodigde API's en scopes
Je hebt twee API's nodig:
Admin SDK Directory API voor het aanmaken, bewerken en verwijderen van groepen en leden.
- Scope:
https://www.googleapis.com/auth/admin.directory.group
Groups Settings API voor geavanceerde instellingen zoals berichtmoderatie, spaminstellingen en toegangsbeleid.
- Scope:
https://www.googleapis.com/auth/apps.groups.settings
Beperk de scopes tot wat je echt nodig hebt. Voor alleen-lezen toegang tot groepen kun je bijvoorbeeld admin.directory.group.readonly gebruiken in plaats van de volledige scope.
Authenticatie instellen
Voor server-naar-server-automatisering gebruik je een service account met domeinbrede delegatie. Het service account doet zich dan voor als een beheerder in je domein.
Service account met domeinbrede delegatie opzetten
- Ga naar console.cloud.google.com.
- Maak een project aan of selecteer een bestaand project.
- Activeer de Admin SDK API en de Groups Settings API onder APIs en Services.
- Maak een service account aan onder IAM en Admin, Serviceaccounts, en download de JSON-sleutel.
- Schakel domeinbrede delegatie in voor het service account en noteer de client-ID.
- Koppel die client-ID in de Admin Console onder Beveiliging, Toegang en gegevensbeheer, API-besturingselementen, Domeinbrede delegatie en voeg de benodigde scopes toe.
Bewaar de JSON-sleutel veilig
De gedownloade sleutel geeft toegang tot je hele domein. Zet hem nooit in versiebeheer, log hem niet, en bewaar hem in een secret manager. Roteer of trek de sleutel in zodra die niet meer nodig is.
Groep aanmaken via de API
Voorbeeld in Python met de Google API Client Library. Let op with_subject, dat is het beheerderaccount waarvoor het service account handelt.
from googleapiclient.discovery import build
from google.oauth2 import service_account
SCOPES = ['https://www.googleapis.com/auth/admin.directory.group']
SERVICE_ACCOUNT_FILE = 'service-account.json'
ADMIN_EMAIL = 'admin@bedrijf.nl'
credentials = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES
).with_subject(ADMIN_EMAIL)
service = build('admin', 'directory_v1', credentials=credentials)
group = {
'email': 'nieuweteam@bedrijf.nl',
'name': 'Nieuw Team',
'description': 'Groep voor het nieuwe projectteam'
}
result = service.groups().insert(body=group).execute()
print(result['id'])
Leden toevoegen
member = {
'email': 'gebruiker@bedrijf.nl',
'role': 'MEMBER'
}
service.members().insert(groupKey='nieuweteam@bedrijf.nl', body=member).execute()
Geldige rollen zijn MEMBER, MANAGER en OWNER.
Groepsinstellingen via de Groups Settings API
groups_settings_service = build('groupssettings', 'v1', credentials=credentials)
settings = {
'whoCanPostMessage': 'ALL_MEMBERS_CAN_POST',
'isArchived': 'true',
'messageModerationLevel': 'MODERATE_NON_MEMBERS'
}
groups_settings_service.groups().update(
groupUniqueId='nieuweteam@bedrijf.nl',
body=settings
).execute()
Apps Script als alternatief
Voor minder technische beheerders is Google Apps Script een toegankelijker alternatief. Via de ingebouwde AdminDirectory-service beheer je groepen zonder zelf een service account te hoeven opzetten:
function maakGroepAan() {
AdminDirectory.Groups.insert({
email: 'scriptgroep@bedrijf.nl',
name: 'Script Groep'
});
}
Apps Script draait met de rechten van de gebruiker die het script uitvoert. Zorg dat die gebruiker een beheerdersrol heeft die groepsbeheer toestaat, en activeer de Admin SDK-service in de scripteditor onder Diensten.
Foutafhandeling en rate-limiting
Veelvoorkomende fouten:
| Statuscode | Betekenis | Vaak de oorzaak |
|---|---|---|
| 403 Forbidden | Geen toestemming | Scopes of domeinbrede delegatie niet correct ingesteld |
| 409 Conflict | Bestaat al | Groep met dat e-mailadres bestaat al |
| 400 Invalid value | Ongeldige invoer | Onjuist e-mailadres of ontbrekend verplicht veld |
| 429 Too many requests | Limiet bereikt | Te veel aanvragen in korte tijd |
Vang 429-fouten op met backoff
Bij een 429-respons stuur je niet direct opnieuw. Gebruik exponentiële backoff: wacht 1 seconde, dan 2, dan 4, met een kleine willekeurige spreiding. Veel Google-clientbibliotheken hebben hiervoor een ingebouwde retry-optie.
Wat zijn de quota van de Directory API?
De standaardlimiet is 2400 aanvragen per minuut per gebruiker per Google Cloud-project. Daarnaast geldt er een aparte limiet van 10 aangemaakte gebruikers per domein per seconde. De exacte, actuele waarden en eventuele operatie-specifieke limieten vind je op de quotapagina in je Cloud Console.
Kan ik via de Admin SDK ook dynamische groepen aanmaken?
Nee. Dynamische groepen, waarvan het lidmaatschap automatisch wordt bepaald via een query, beheer je via de Cloud Identity Groups API met een CEL-expressie. De Admin SDK Directory API werkt alleen met statische groepen waarbij je leden expliciet toevoegt.
Heb ik een dure licentie nodig voor groepsbeheer via de API?
Voor standaard groepsbeheer via de Directory API en Groups Settings API heb je een Workspace-account met beheerdersrechten nodig, zonder specifieke licentietier. Dynamische groepen vereisen wel een hoger plan zoals Enterprise Standard, Enterprise Plus of Cloud Identity Premium.
Kan ik alle groepsinstellingen uit de Admin Console ook via de API zetten?
Vrijwel alle instellingen die je in de Admin Console aanpast, zijn ook via de Groups Settings API beschikbaar, zoals postbeleid, moderatie en archivering. Heel nieuwe of edge-instellingen kunnen soms achterlopen, dus controleer de API-referentie als een veld ontbreekt.
Wat is het verschil tussen een service account en OAuth 2.0 voor deze API's?
Een service account met domeinbrede delegatie gebruik je voor onbeheerde server-naar-server-automatisering, zoals een nachtelijke synchronisatie. OAuth 2.0 met een gebruikersaccount gebruik je wanneer een ingelogde beheerder zelf toestemming geeft, bijvoorbeeld in een webapp.