Example: Team Access with Groups
This walkthrough demonstrates how to use policy tags together with IAM groups and roles to manage data access for team members
Objective
This walkthrough demonstrates how to use policy tags together with IAM groups and roles to manage data access for team members. By assigning a CEL condition to a group's role binding, every user added to the group automatically inherits the correct access level.
Table of Contents
- Scenario
- Step 1: Design the Tag Schema
- Step 2: Create and Bind Policy Tags
- Step 3: Create the IAM Group
- Step 4: Configure the CEL Condition on the Group
- Step 5: Add Users to the Group
- Step 6: Verify Access
- Extending the Setup
Scenario
Your company has a dataset called employee_data containing the following tables:
The salary_details table has an attribute national_id that contains personally identifiable information (PII) and should only be accessible to senior HR staff.
Goal: New team members (newcomers) should be able to access office_locations and team_directory, but not salary_details or performance_reviews. HR staff should access salary data but not see national_id unless they are senior HR.
Step 1: Design the Tag Schema
Create a policy tag key access_level with three values:
Additionally, create a tag key pii with one value:
Step 2: Create and Bind Policy Tags
Create the policy tags access_level (with values general, hr, management) and pii (with value restricted).
Then bind them to data:
Tables office_locations and team_directory have no explicit tags. They inherit access_level: general from the dataset.
Step 3: Create the IAM Group
In the Identity Access Manager, create three groups:
For each group, assign the ADAC Reader role (or the appropriate role that includes Advanced Data Access Control read permissions).
For step-by-step instructions on creating groups and assigning roles, see Groups.
Step 4: Configure the CEL Condition on the Group
For each group's ADAC role binding, set the CEL condition in the IAM. Remember: conditions must follow the gate chain order, dataset → table → attribute.
New Joiners: access to general data only:
This CEL enforces access_level: general at every level. New joiners can access office_locations and team_directory (which inherit general from the dataset) but not salary_details (hr) or performance_reviews (management).
HR Team: access to general + hr data, but NOT PII attributes:
This CEL:
- Dataset level: requires
access_level: general: passes foremployee_data - Table level: allows
generalorhr: passes for all tables exceptperformance_reviews(management) - Attribute level: allows
generalorhrBUT also requires thepiitag to not exist: deniesnational_id(which haspii: restricted)
The !has(PolicyTags.pii) check ensures that any attribute tagged with the pii key is denied, regardless of its value. This is useful for blanket PII protection.
Senior HR: full access to general + hr data including PII:
This CEL is the same as HR Team but without the !has(PolicyTags.pii) restriction. Senior HR can access national_id.
To edit these CEL conditions, navigate to the group's role binding in the IAM and switch to the CEL editor. See Writing CEL Conditions Manually for instructions.
Step 5: Add Users to the Group
When a new team member joins:
- Create their user account in the IAM.
- Assign them the required base roles:
- Organization Level:
Organization Viewer - Project Level:
AM Admin(or the appropriate role for their work)
- Organization Level:
- Add them to the New Joiners group.
That's it. The group's CEL condition automatically grants them access to general-tagged data. No need to configure individual CEL conditions.
When they move to the HR team:
- Remove them from New Joiners.
- Add them to HR Team.
Their access updates immediately: they can now see salary_details (except national_id) in addition to the general tables.
Step 6: Verify Access
Use the Explorer to verify access for a user in each group:
As a New Joiner:
As HR Team member:
As Senior HR:
Extending the Setup
Adding a Management group
To give managers access to performance_reviews, create a Management group with this CEL:
Users in multiple groups
A user can belong to multiple groups. If someone is in both HR Team and Management, they get the union of both groups' permissions. They can access both salary_details and performance_reviews.
When a user belongs to multiple groups, each group's role binding is evaluated independently. If any role binding's CEL condition passes, the user is granted access. This makes multi-group setups additive.
Service accounts
Service accounts can also be added to groups. If you have a reporting pipeline that needs to read general data, add its service account to the New Joiners group rather than configuring individual CEL conditions.
Go further
If you need training or technical assistance to implement our solutions, contact your sales representative or click on this link to get a quote and ask our Professional Services experts for a custom analysis of your project.
Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated Discord channel.
If you need support with your OVHcloud services, create a request in our Help Centre.
Join our community of users.

