
Guide for VO Admins#
This guide is for the person who knows who is on the team. It explains how to turn that knowledge into a group structure services can act on.
If you have not read the concept page, read it first - it covers the difference between a group and an allocation, and why “VO” and “Community” mean the same thing.
Is this you?#
You are a VO admin if you can authoritatively answer “who is on this team, and which part of it are they in?” - principal investigators, work-package leads, group leaders, data stewards, task-force coordinators. Anything from a three-person working group to a multiple-hundred-person distributed project.
You do not need to be technical, and you can delegate the clicking
Nothing here requires you to understand federated identity protocols. You will use a web interface that shows people and groups; the URN syntax and protocol plumbing are the other side’s problem.
You may hand day-to-day administration to a project manager, a secretary, a PhD student - whoever. What you cannot delegate is knowing the team, which is the whole reason the system puts you in charge of it.
What you are actually being asked to do#
- Identify the members of your project.
- Structure them into subgroups, where a distinction matters.
- Keep it current as people join, move and leave.
Equally important is what is not your job: deciding what a service grants (you ask, the provider decides), operating the AAI, or managing accounts - users bring their own institutional identities, and you never create, reset or delete anybody’s.
Design first, click later#
Groups are cheap to create and expensive to rename, because their names end up in service configurations you do not control. Spend half an hour with a pen first.
The question to ask about every group you are tempted to create is not “does this reflect how the project is organised?” but:
Does some service treat these people differently from the rest of the team - today, or plausibly soon?
If not, you have invented documentation rather than authorisation. Put it in the project wiki instead.
Do not model your org chart
The common mistake is reproducing the management structure: every work package, task, subtask and steering committee, five levels deep. It feels tidy and nobody maintains it, because most of those groups never make any difference to anything.
Model your access needs. If work packages 2, 3 and 4 use the same
services the same way, they need one group, possibly named researchers.
Designing the group tree#
Groups form a tree: each has one parent, and the top is your VO.
Membership is inherited upwards
A member of cakemaster:data:curators is automatically, by
specification, a member of cakemaster:data and cakemaster. You do
not add them three times, and services are required to understand
this.
The reverse does not hold - being in cakemaster puts you in no
subgroup.
A worked example for a fictional project, cakemaster:
cakemaster the whole project - everyone
├── admins the handful of people who run things
├── researchers Anybody accessing research services
└── data
├── curators may modify the reference dataset
└── consumers may read it
Every group here earns its place. cakemaster is the unit you apply for
resources with, and the natural answer to “is this person on the project
at all?”. data:curators and data:consumers exist because the
repository genuinely distinguishes them. admins exists because some
services need to know who to trust with destructive operations.
Two or three levels is almost always enough; if you are at level five you are modelling the org chart again. Breadth is fine - fifteen sibling work-package groups are easy to reason about - but depth is a smell.
Common patterns, and when to reach for them:
| Pattern | Looks like | Use when |
|---|---|---|
| By work package | wp1, wp2, wp3 |
Work packages really do use different resources |
| By resource class | compute, storage, archive |
Providers differ more than teams do |
| By trust level | members, curators, admins |
The same people, escalating privileges - but see roles below |
Subgroup or role?#
- Use a subgroup for a different set of people doing a different job.
- Use a role for the same set of people, where some hold a
particular standing -
role=manager,role=chair,role=operator.
If setting this up would mean listing the same person in two groups, you wanted a role.
Two specified behaviours that surprise people:
- Holding a role implies membership. Someone with
cakemaster:data:role=manageris already a member ofcakemaster:dataandcakemaster; do not add them again as a plain member. - Roles do not inherit upwards. Being a manager of
cakemaster:datadoes not make you a manager ofcakemaster.
That second point is a feature: it lets you appoint a work-package manager without handing them the whole project.
Naming: what you choose, you keep#
Group names do not stay inside the Community AAI. They are concatenated into entitlement strings that land in service configuration files, log lines, regular expressions, and sometimes POSIX group names on a login node. The name is an interface.
You choose only the tail end:
urn:geant:dfn.de:nfdi.de:nfdi4cake:group:cakemaster:data:curators:role=manager#aai.example.de
└────────── namespace ───────────┘ └lit┘ └─ grp ──┘ └ subgroups ┘ └── role ──┘ └ authority ─┘
└───── chosen by the AAI operator ──────┘└────────────── yours ──────────────┘ └ technical ─┘
- Lowercase, ASCII, no spaces. Spaces are legal but must be
percent-encoded (
%20), making every config file uglier and every regular expression more fragile. Non-ASCII is worse. - Use
-or_between words, consistently. - Name what it is, not who runs it.
wp3stays correct when Anne moves on;annes-groupdoes not. - Name the purpose, not the software.
collaborationtool, notnextcloud. When the software behind it is replaced, the group, the entitlement and every configuration that matches it stay as they are. - Keep it short. These strings get concatenated, logged and truncated.
- Avoid names that are prefixes of each other.
cakemasterandcakemaster-extendedlook fine until a sloppy match grants one to the other.
Think twice before using project names
Project names change, and old ones linger. A name that was retired years ago may still be sitting in a service configuration, a log archive, a POSIX group on a login node, or somebody’s script.
Reusing it for something new is therefore more trouble than it looks: you inherit whatever the old name is still attached to, and anyone reading the records afterwards has to work out which era a given entry belongs to. If a name has had a previous life, pick a different one. If a name needs to stay around for longer, don’t pick a temporary (project) name.
Renaming is expensive
Renaming changes the entitlement. Every service that matched the old string stops matching, and your members lose access until each administrator updates their configuration - a coordinated change across organisations you do not control. Choose carefully the first time.
The namespace itself is registered; the NFDI registry lives at https://www.nfdi.de/persistent-identifiers. Your consortium’s AAI contact will tell you your namespace.
This is the same example taken apart in full - roles, the authority suffix and all - in the service admin guide, if you want to see what your service administrators will be matching on.
The membership lifecycle#
Getting people in. Either self-request with your approval (publish an enrolment link; this scales, and puts data entry on the person who knows their own details) or invitation by email address (better for small, known teams). Most Community AAIs support both.
Either way the new member accepts the VO Acceptable Use Policy. This is not a formality: it is what makes the policy chain hold together, and what providers rely on when accepting members they do not know. Adapt the VO-AUP template rather than writing your own - english ( ), german ( ).
The single highest-value habit in this guide
Set an expiry on membership, and re-confirm annually.
Most Community AAIs expire memberships automatically and prompt for renewal. A yearly pass where each member is actively re-confirmed rather than passively retained catches the people who quietly left eighteen months ago. It costs less than an afternoon a year, and it is the difference between a group that describes your team and one that describes everyone who was ever on it.
Getting people out. Remove departing members promptly, with one caveat.
Removal is fast, but not instantaneous
Membership is carried to services at login or token refresh. So removal takes effect at the user’s next login to each service, when existing sessions and tokens expire (minutes to hours), and not at all, by itself, for things already provisioned locally: a home directory, a checked-out repository, an account created at first login. Services clean those up on their own schedule.
For an ordinary departure this is fine. The AAI is not an emergency stop, so if access has to end at a specific moment, removal alone will not achieve it.
Check what the leaver owns before their account disappears
Some of the group’s data is likely to be sitting under the departing member’s own account: a home directory on a login node, files in a collaboration tool, a repository, a running VM. Removing the membership moves none of it, and when the account is eventually deleted it may be deleted too.
So agree what has to be moved to a shared or successor location, and back up the rest - while the person is still there to say which is which.
Most systems also offer suspension: access stops, membership history is retained. Usually the right tool during an investigation.
If you suspect a security incident#
A compromised account, credentials posted somewhere they should not be, a member behaving in a way that suggests their machine is not theirs any more - none of this is something you are expected to handle by yourself.
Call the security people. That is what they are for.
You do not need to diagnose anything first. If something looks wrong, suspend the membership and contact the security team. A suspicion reported early and turning out to be nothing is a normal, welcome occurrence; a real incident sat on for weeks is not.
DFN-AAI security contact: security@aai.dfn.de, +49-40-808077-590.
They will tell you what is needed, and they coordinate with the other organisations involved so that you do not have to chase individual providers yourself.
The formal process is the Security Incident Response Procedure (SIRP), one of the NFDI policies you signed up to. Practically, it asks you to:
- Suspend first. Suspend the affected membership and preserve what you have - logs, mails, anything that shows what happened. Do not tidy up.
- Follow your own institution’s procedure as well; the SIRP sits alongside it, not instead of it.
- Report within one working day to the security contact above.
- Stay reachable. Incidents cross organisational boundaries, and responses to queries are expected within short notice.
DFN documents the federation-level procedure, including the reporting template, at doku.tid.dfn.de/de:aai:incidentresponse. The underlying trust framework is Sirtfi, which is what lets security teams at different institutions work together on the same incident.
Delegating the work#
If your team or community extends to more than about twenty people, delegate. Appoint a manager per subgroup to approve their own joiners and expire their own leavers; you keep the top level. This is the same delegation principle that got membership out of the service administrators’ hands, applied one level down.
Bus factor
Make sure at least two people can administer the top-level group. A VO with a single admin who changes institution - or simply takes a holiday - is a slow-motion outage for everyone in it.
Policies you have to satisfy#
These exist so providers can accept your members without assessing your project individually.
Policies you must follow:
- VO Membership Management Policy (VOMMP) - what you commit to: accurate membership, handling departures, incident response.
- VO Lifecycle Policy (VOLP) - creation, handover, dormancy, termination. Pay attention to deprovisioning; it is the part everyone forgets.
- Security Incident Response Procedure (SIRP) - what happens when something goes wrong. See above; the short version is that you suspend and report, and the security team takes it from there.
- Top Level Policy - the frame the rest hangs off, and short.
Templates you adapt:
- VO Acceptable Use Policy (VO-AUP) - what your members agree to when they join. english ( ), german ( )
- Privacy Policy Template - for generating your VO Privacy Policy. english ( ), german ( )
The full set, including the policies that apply to other roles, is on the policies and templates page; the VO Administrator page collects the VO-specific ones.
What the four NFDI Community AAIs give you#
NFDI offers AcademicID, didmos, RegApp and Unity. Each consortium settles on one, so you will not be choosing - see the consortium overview for which is which.
All four do what this guide describes: hierarchical VOs and subgroups, roles, membership management, and AARC-G069 entitlements. A structure designed as above works on any of them, and survives a migration.
They differ in the details that shape your daily experience - self-service interface, automation, external data sources, expiry handling, bulk APIs - and those move as the products develop. See the feature matrix rather than a snapshot here that would go stale.
Five questions for your consortium’s AAI contact
- Can members request membership themselves, or do I invite them?
- Can I set an expiry date, and will it prompt for renewal?
- Can I appoint subgroup managers, and what exactly can they do?
- Can I bulk-import a list of people I already have?
- Is there an API, for automating against our project database?
A general authorisation solution is in development
Work is underway within IAM4NFDI on a general authorisation solution giving a consistent way of expressing and evaluating authorisation across services. This page will be updated as details become available.
When groups are not enough: resource capabilities#
Sooner or later a provider says “we can’t do group-based access, but we can switch on a permission per user”. That is a resource capability (see the concept page).
In one line: a group says “this person is on the cakemaster team”; a capability says “this person may read dataset 42”. The first is a fact the service interprets, the second a decision already taken.
You do not normally mint capabilities yourself - the AAI or infrastructure operator issues them under a configured rule. Some Community AAIs let a VO admin drive that rule; ask yours.
Three reasons to keep preferring groups:
- Groups travel; capabilities do not. Change provider and your group comes with you, while the capabilities are worthless.
- Capabilities are arranged per resource, so effort grows with the number of resources instead of staying flat.
- Capabilities hide decisions you did not take. When someone unexpectedly loses access, the answer is no longer in your own membership list.
One case where capabilities are clearly right: per-object access at a
granularity that would explode your group tree. The tell-tale is noticing
you are about to create dataset-42-readers, dataset-43-readers, and so
on. Stop, and ask the provider about capabilities.
Say what you want, not how to build it
Describe the outcome in plain language - “these eight people, read-only, on this dataset, until the end of the project” - and let the provider and the AAI operator decide whether that becomes a group, a capability, or both. That is their design decision.
Talking to service providers#
What to give them:
- The exact entitlement string, copied from the Community AAI, not retyped from memory.
- What the group means, one sentence each. “Everyone on the project” and “the four people who may modify the reference dataset” are very different risk propositions.
- A contact that outlives any individual.
- Expected size and growth, so they can size things.
- Your renewal cadence, so they know how stale membership can get.
What to ask in return: which string did you match, exactly? What does it grant? And what happens when I remove someone - which establishes what you can rely on, given the caveat above.
Nominate the group in the request itself
When you apply for an allocation, name the group in the application. The group is the unit you apply with, and what the provider attaches the grant to. Providers increasingly expect this, and supplying it upfront saves a round trip.
Checklist#
Before you create anything
- [ ] Sketched the structure on paper
- [ ] Every group justified by a real access distinction
- [ ] Decided subgroup vs role for each distinction
- [ ] Names are lowercase, ASCII, descriptive, not personal
- [ ] Depth is two or three levels, not five
Setting up
- [ ] VO created in the consortium’s Community AAI
- [ ] AUP in place and shown at enrolment
- [ ] Enrolment route decided - self-request or invitation
- [ ] Membership expiry configured
- [ ] Subgroup managers appointed
- [ ] A second top-level admin exists
Running it
- [ ] Annual re-confirmation of every member, in the calendar / delegated to CAAI
- [ ] Departures actioned promptly
- [ ] Security contact security@aai.dfn.de noted somewhere you will find it in a hurry
- [ ] Entitlement strings documented for the services that use them
- [ ] Structure reviewed when the project’s resource needs change
See also#
- The VO Concept - the model, and the benefits argument
- Guide for Service Admins - worth skimming to see what you are handing people
- VO Administrator: policies & templates
- Community AAI Software and the Feature Matrix
Last change: Oct 15, 2026 12:30:32