Design and Implement a GenAIOps Infrastructure · Topic 1 of 4

Foundry Resources, Projects and Access Control

AI-300 GenAIOps: create Foundry resources and projects per environment, then secure them with managed identities, Azure RBAC roles and Entra ID.

  • 5 min
In a nutshell
  • Resource holds deployments, connections and security settings; the project is the team workspace.
  • Disable local auth to force Entra ID authentication.
  • Use groups, least privilege and the narrowest scope.

What it is

A Microsoft Foundry resource is the top-level Azure resource for AI work. It holds model deployments, shared connections and the settings for networking, identity and security. A project is a child of that resource and is the working space where a team keeps its agents, files, evaluations and project level connections. Apps call a project endpoint.

Identity is controlled by Microsoft Entra ID and Azure RBAC. People and apps get the smallest role that does the job, and apps use managed identities rather than keys.

Foundry resourcedeployments, connections, networkProjectteam workspaceManaged identityapp or projectRBAC roleleast privilege

How it works

Resource and project layout

Design choiceGuidance
One resource per environmentSeparate dev, test and prod resources so quotas, access, networking and deployments stay isolated
One project per team or applicationProjects isolate files, agents and evaluations while sharing the resource's model deployments
Naming and tagsUse a consistent pattern and tags for owner, environment and cost centre
RegionChoose the region for data residency, model availability and quota

Foundry also still supports the older hub based projects, which are built on Azure Machine Learning workspaces. Know that both exist, but new designs start with the Foundry resource and its projects.

Create them with Bicep

param location string = resourceGroup().location
param foundryName string
param projectName string

resource foundry 'Microsoft.CognitiveServices/accounts@2025-06-01' = {
  name: foundryName
  location: location
  kind: 'AIServices'
  sku: { name: 'S0' }
  identity: { type: 'SystemAssigned' }
  properties: {
    allowProjectManagement: true
    customSubDomainName: foundryName
    disableLocalAuth: true
  }
}

resource project 'Microsoft.CognitiveServices/accounts/projects@2025-06-01' = {
  parent: foundry
  name: projectName
  location: location
  identity: { type: 'SystemAssigned' }
  properties: {
    displayName: projectName
    description: 'Customer support assistant'
  }
}

Two properties matter here. allowProjectManagement: true lets the resource hold projects. disableLocalAuth: true turns off API keys so only Entra ID tokens work.

Connect the project to other services

Add connections for services such as Azure AI Search, storage and Application Insights. Prefer connections that authenticate with Entra ID, and grant the project's managed identity the data role it needs on the target (for example Search Index Data Reader on Azure AI Search or Storage Blob Data Reader on storage).

Roles for people

RoleTypical holderWhat it allows
Foundry User (formerly Azure AI User)DevelopersBuild and run in a project: call deployments, use agents, run evaluations (data actions); cannot create projects or accounts
Foundry Project Manager (formerly Azure AI Project Manager)Team leadsManage projects, build in them, and assign Foundry User to others
Foundry Account Owner (formerly Azure AI Account Owner)Platform adminsCreate and manage Foundry accounts and projects and manage models; no build data actions
Reader / Contributor / OwnerGeneral Azure rolesManagement plane access; Contributor and Owner do not by themselves imply the data permissions of Foundry User

Microsoft renamed these roles, so portals and exam items may show either name. The role IDs and permissions did not change. For Foundry work, do not assign roles whose names start with Cognitive Services, except Cognitive Services Usages Reader at subscription scope when users need to see quota.

Assign roles at the narrowest scope that works (project before resource before resource group), to Entra groups rather than individuals, and use Privileged Identity Management for elevated roles.

Managed identities for applications

An app hosted on Azure (App Service, Container Apps, Functions, AKS) gets a system assigned or user assigned managed identity. The code calls the endpoint with DefaultAzureCredential, and that identity holds a role on the Foundry resource or project.

from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient

client = AIProjectClient(
    endpoint="https://<resource>.services.ai.azure.com/api/projects/<project>",
    credential=DefaultAzureCredential(),
)

Use a user assigned identity when several services share one identity or when you need it to exist before the app does. Locally, DefaultAzureCredential uses the developer's own signed in account, so the same code runs everywhere with no keys.

A worked example

A company creates foundry-dev and foundry-prod resources with one project per app. Developers are in an Entra group with Foundry User on the dev project only. The production web app runs with a managed identity that holds Foundry User on foundry-prod, and key based authentication is disabled.

How the exam asks about this

  • "Developers can run and evaluate in a project but cannot manage accounts." Foundry User (formerly Azure AI User) on the project.
  • "The app must call the model with no secret in configuration." Managed identity plus a role assignment.
  • "Isolate production deployments and quota from experiments." Separate Foundry resources per environment.

What to remember for the exam

  • Resource holds deployments, connections and security settings; the project is the team workspace.
  • Disable local auth to force Entra ID authentication.
  • Use groups, least privilege and the narrowest scope.
  • System assigned identities share the lifecycle of the resource; user assigned identities are independent.
  • Grant the project identity data roles on connected services.
Watch out

Owner or Contributor on the Azure resource is not the same as the data permissions needed to build in a project. Assign the Azure AI roles.

Common mistakes

Sharing one resource for dev and prod. Experiments then consume production quota and share access rules.

Distributing API keys. Keys cannot be scoped to a user and are hard to rotate. Use Entra ID.

Granting at subscription scope. It gives access to far more than the team needs.

Check yourself

  • Which role lets a developer build in a project but not manage accounts?

    Foundry User, formerly named Azure AI User.

  • What does disableLocalAuth: true do?

    It disables key based authentication so only Microsoft Entra ID tokens are accepted.

  • Why use separate Foundry resources per environment?

    To isolate access, quota, networking and deployments between dev, test and prod.

Topic 1 of 4 in Design and Implement a GenAIOps Infrastructure

Test yourself on Design and Implement a GenAIOps Infrastructure

The full Microsoft AI-300 question bank has 650 questions, with timed practice exams and an explanation for every answer.

This study guide is independent and is not affiliated with, endorsed by, or sponsored by Microsoft. Vendor names, certification names and exam codes are trademarks of their respective owners and are used for identification only.