Microsoft Entra agent user
Create one passwordless agent user with a validated Agent ID parent and explicit governance.
When to invoke
- Give a Microsoft Agent ID agent a user-shaped Entra identity.
- Enable approved mailbox, Teams, group, or organizational-directory scenarios.
- Validate an existing agent user's identity parent.
- Configure an optional manager, usage location, or license.
Prerequisites and context
- Microsoft Entra tenant and an existing Agent ID service identity.
- Least-privilege Graph permission, preferably
AgentIdUser.ReadWrite.IdentityParentedBy.
- Required delegated/admin role and explicit approval for user or license creation.
- Unique UPN and mail nickname; one agent user is allowed per parent identity.
Criteria
identityParentId is the object ID of an agent identity with
servicePrincipalType: ServiceIdentity, not a regular application service principal.
- Agent users have no password; authentication is derived from the parent identity.
userPrincipalName is unique in the tenant.
- Set
usageLocation before assigning a license.
- Manager assignment is optional and uses a valid directory user reference.
Procedure
- Confirm business purpose, data access, lifecycle owner, UPN, manager, and license requirement.
- Read the parent service principal and verify the Agent ID identity type.
- Check whether the parent already has an agent user; stop on the one-to-one constraint.
- Create the agent user with
accountEnabled, displayName, mailNickname, unique UPN, and
identityParentId.
- Optionally assign a manager.
- If licensing is approved, set usage location first, then assign the exact SKU.
- Verify parent linkage, directory identity, lifecycle owner, and expected token/user behavior.
Creation shape:
{
"@odata.type": "#microsoft.graph.agentUser",
"accountEnabled": true,
"displayName": "<display-name>",
"mailNickname": "<alias>",
"userPrincipalName": "<unique-upn>",
"identityParentId": "<agent-identity-object-id>"
}
Output template
## Microsoft Entra agent user result
**Status:** CREATED | READY | BLOCKED
**Parent identity:** <object ID and verified type>
**Agent user:** <object ID/UPN or planned value>
### Governance
- Lifecycle owner: <owner>
- Manager: <assigned/not requested>
- Usage location/license: <result/not requested>
- Permissions used: <Graph permission and role>
### Validation
- Parent type and one-to-one check: <pass/fail>
- Agent user linkage: <pass/fail/not run>
Limits
- Do not use a regular app service principal as the identity parent.
- Do not create passwords, assign privileged admin roles, or add role-assignable groups.
- Do not assign licenses without approval, usage location, and a lifecycle owner.
- Do not promise immediate mailbox, Teams, or org-chart propagation; service provisioning is asynchronous.
Related primitives
| Name |
Type |
Use it when |
azure-role-selector |
skill |
Least-privilege Azure RBAC is also required. |
open-horizons-security-reviewer |
agent |
Identity scope or collaboration data needs independent review. |
foundry-agent-blueprint |
skill |
The user identity belongs to a Foundry agent design. |
Quality gate
References
1---2name: azure-entra-agent-user3description: Designs and provisions a Microsoft Entra agent user linked to an Agent ID identity, including parent validation, least-privilege permissions, optional manager, usage location, licensing, and verification. Use when an agent needs a user-shaped directory identity for collaboration workloads.4---56<!-- Generated from harness/github-copilot/plugins/open-horizons-platform/skills/azure-entra-agent-user/SKILL.md by harness/claude-code/scripts/convert_from_copilot.py. Edit the source, not this file. -->78# Microsoft Entra agent user910Create one passwordless agent user with a validated Agent ID parent and explicit governance.1112## When to invoke1314- Give a Microsoft Agent ID agent a user-shaped Entra identity.15- Enable approved mailbox, Teams, group, or organizational-directory scenarios.16- Validate an existing agent user's identity parent.17- Configure an optional manager, usage location, or license.1819## Prerequisites and context2021- Microsoft Entra tenant and an existing Agent ID service identity.22- Least-privilege Graph permission, preferably `AgentIdUser.ReadWrite.IdentityParentedBy`.23- Required delegated/admin role and explicit approval for user or license creation.24- Unique UPN and mail nickname; one agent user is allowed per parent identity.2526## Criteria2728- `identityParentId` is the object ID of an agent identity with29 `servicePrincipalType: ServiceIdentity`, not a regular application service principal.30- Agent users have no password; authentication is derived from the parent identity.31- `userPrincipalName` is unique in the tenant.32- Set `usageLocation` before assigning a license.33- Manager assignment is optional and uses a valid directory user reference.3435## Procedure36371. Confirm business purpose, data access, lifecycle owner, UPN, manager, and license requirement.382. Read the parent service principal and verify the Agent ID identity type.393. Check whether the parent already has an agent user; stop on the one-to-one constraint.404. Create the agent user with `accountEnabled`, `displayName`, `mailNickname`, unique UPN, and41 `identityParentId`.425. Optionally assign a manager.436. If licensing is approved, set usage location first, then assign the exact SKU.447. Verify parent linkage, directory identity, lifecycle owner, and expected token/user behavior.4546Creation shape:4748```json49{50 "@odata.type": "#microsoft.graph.agentUser",51 "accountEnabled": true,52 "displayName": "<display-name>",53 "mailNickname": "<alias>",54 "userPrincipalName": "<unique-upn>",55 "identityParentId": "<agent-identity-object-id>"56}57```5859## Output template6061```markdown62## Microsoft Entra agent user result6364**Status:** CREATED | READY | BLOCKED65**Parent identity:** <object ID and verified type>66**Agent user:** <object ID/UPN or planned value>6768### Governance69- Lifecycle owner: <owner>70- Manager: <assigned/not requested>71- Usage location/license: <result/not requested>72- Permissions used: <Graph permission and role>7374### Validation75- Parent type and one-to-one check: <pass/fail>76- Agent user linkage: <pass/fail/not run>77```7879## Limits8081- Do not use a regular app service principal as the identity parent.82- Do not create passwords, assign privileged admin roles, or add role-assignable groups.83- Do not assign licenses without approval, usage location, and a lifecycle owner.84- Do not promise immediate mailbox, Teams, or org-chart propagation; service provisioning is asynchronous.8586## Related primitives8788| Name | Type | Use it when |89| --- | --- | --- |90| `azure-role-selector` | `skill` | Least-privilege Azure RBAC is also required. |91| `open-horizons-security-reviewer` | `agent` | Identity scope or collaboration data needs independent review. |92| `foundry-agent-blueprint` | `skill` | The user identity belongs to a Foundry agent design. |9394## Quality gate9596- [ ] Parent is verified as an Agent ID service identity.97- [ ] No existing agent user is linked to the parent.98- [ ] UPN, owner, manager, and license intent are explicit.99- [ ] No password or excessive permission is introduced.100- [ ] Linkage and optional license state are verified without exposing tokens.101102## References103104- [Microsoft Entra Agent ID documentation](https://learn.microsoft.com/entra/agent-id/)