Best practices for multi-project isolation on shared Microsoft Foundry platform (BYO Storage, Cosmos DB, AI Search) — how are enterprises handling this?

Shibily Abdul Shukoor 0 Reputation points
2026-07-21T07:03:44.9333333+00:00

Context

We are rolling out Microsoft Foundry as a centralized, shared AI platform for our enterprise (regulated industry, strict InfoSec governance, single-tenant Azure). The design covers two environments — PREPROD and PROD — and multiple business use cases will onboard over time (e.g., proj-uc01, proj-uc02, proj-uc03).

The Foundry deployment follows Microsoft's Standard Agent Setup with BYO resources:

  • Foundry Account with User-Assigned Managed Identity + Customer-Managed Key (CMK)
  • BYO Azure Storage for uploaded files
  • BYO Azure Cosmos DB (NoSQL) for agent thread/message/entity storage
  • BYO Azure AI Search for Foundry IQ knowledge bases and vector store
  • Private networking (private endpoints, no public exposure)

The concern

For cost efficiency in PREPROD, we want to share the BYO Storage, Cosmos DB, and AI Search across projects under a single Foundry Account. However, we need to guarantee per-project isolation so that:

  • Data from proj-uc01 is not readable by proj-uc02 (and vice versa)
  • Knowledge bases created in one project are not accessible or discoverable from another
  • Users granted to proj-uc02 cannot list or interact with proj-uc01 agents, KBs, or data

While validating the shared-services model, we've hit several architectural gaps that we would like community input on:

1. Cosmos DB — readMetadata at account root

The new Foundry UI/data proxy requires the project MI to have Microsoft.DocumentDB/databaseAccounts/readMetadata at Cosmos account scope (/), not just at the database or container scope. This means every project MI can enumerate other projects' containers within the shared enterprise_memory database. Data reads are still blocked by container-scoped RBAC, but metadata leakage is unavoidable in a shared Cosmos account.

Q: Is dedicated Cosmos DB per project the only clean solution today, or is there a way to hide other projects' containers?

2. AI Search — service-level RBAC granularity

Azure AI Search RBAC (Search Service Contributor, Search Index Data Contributor) is applied at the service level, not the index level. A shared AI Search service means any user with Search Service Contributor can theoretically discover indexes belonging to other projects.

Q: How are others achieving per-project index isolation on a shared AI Search?

3. Foundry IQ knowledge bases visibility

We observed that Knowledge Bases created in proj-uc01 are still visible from proj-uc02 in the Foundry portal, even though users only have Foundry User + Foundry Project Manager on their own project. This appears to be a current limitation where KBs are stored at the AI Search service level, not scoped by project.

Q: Is Microsoft planning KB-level RBAC? What are enterprises doing today to prevent cross-project KB visibility?

4. Foundry Account role inheritance

Assigning Foundry User at the Foundry Account scope (which is often needed for account-level operations like playground file uploads and connection resolution) inherits to all projects under that account, breaking project isolation.

Q: What is the recommended pattern to allow account-level operations without granting cross-project access? Deny assignments, ABAC on Cognitive Services accounts, or is separate Foundry Accounts per project the only real answer?

5. enterprise_memory database name is fixed

The Foundry capability host creates a hard-coded database called enterprise_memory in the BYO Cosmos account. Two projects sharing the same Cosmos account share this database (with per-workspace container suffixes). This means backup/restore, throughput, and disaster recovery all become shared blast radiuses.

Q: Any documented pattern to override the database name, or is this a Microsoft platform decision that customers cannot change?

What we've tried / considered

Approach Isolation strength Cost Comment
One shared Foundry Account, shared BYO for all projects Weak Lowest Isolation only at container/index name level; metadata leakage
One shared Foundry Account, dedicated BYO per project Strong Medium Cosmos DB minimum spend per project (3000 RU/s); AI Search minimum ~$75/month per instance

Our current thinking is:

  • PREPROD: Shared Foundry Account + shared BYO resources, per-project separation via container-scoped RBAC + index naming + monitoring
  • PROD: Shared Foundry Account + dedicated BYO Cosmos/Search/Storage per project, or dedicated Foundry Account per business unit for regulated data

What we're asking the community

  1. Are shared BYO resources across Foundry projects a supported pattern for enterprise workloads? Or is Microsoft's guidance implicitly one-Foundry-Account-and-one-set-of-BYO-per-project?

How are your organizations handling project isolation on shared platforms? Especially around Cosmos DB readMetadata and AI Search service-level RBAC.

  1. For Foundry IQ, is there any way to prevent cross-project KB visibility today, or is the recommended pattern to use dedicated AI Search per project?

Roadmap intel: Is Microsoft planning:

  • Configurable enterprise_memory database naming
    • KB-level RBAC in Foundry IQ
      • Project-scoped Foundry roles that don't need account-scope inheritance
        • Index-level RBAC (GA) on AI Search
        Real-world architecture references: Are there any customer stories, reference architectures, or Microsoft-published patterns for multi-project Foundry at scale that we may have missed? (We've reviewed the standard 41-standard-agent-setup and 17-private-network-standard-user-assigned-identity-agent-setup Bicep/Terraform samples — none explicitly address multi-project shared BYO patterns.)

Environment details (for context)

  • Regions: Foundry and its supporting components (CosmosDB, AI Search & Storage Account) in Sweden Central
  • Foundry setup: Standard agent, UAI + CMK, private endpoints
  • BYO: Storage v2 (shared key disabled), Cosmos DB NoSQL, AI Search Standard tier
  • Tenant: Single Entra tenant, hub-and-spoke network
  • Projects planned: 3–5 initially in PREPROD, potentially 10+ in PROD over 12–18 months

Any input from Microsoft product engineers, MVPs, or fellow architects who have deployed Foundry at scale would be highly appreciated. Even partial answers or "here's what we did" comments are welcome. Happy to share our final architecture back with the community once we settle on a pattern.

Thanks in advance.

Microsoft Foundry
Microsoft Foundry

A unified Azure platform for creating and managing AI models, agents, and applications with built‑in enterprise security, monitoring, and governance

0 comments No comments

1 answer

Sort by: Most helpful
  1. Tehreem Farooqi 80 Reputation points
    2026-07-23T07:15:25.08+00:00

    Hey @Shibily Abdul Shukoor , I cannot comment on roadmap or future developments from Microsoft but given my experience, I can guide on your questions from standard practices we follow and according to Microsoft's guidance.

    For this type of enterprise Foundry rollout, I would separate cost-sharing from security isolation.

    A shared Foundry Account with shared BYO Storage, Cosmos DB, and Azure AI Search can work for PREPROD, sandbox, and projects that sit inside the same trust boundary. It should not be treated as a hard isolation boundary for regulated production workloads.

    For production workloads that need independent security and operational boundaries, use a dedicated Foundry resource and dedicated Cosmos DB, Azure AI Search, and Storage dependencies for the workload or defined security boundary. Sharing should be a documented exception for workloads that intentionally share the same identity, administrators, network policy, capacity, recovery objectives, and incident blast radius.

    1. Are shared BYO resources across Foundry projects a supported pattern?

    Yes, shared BYO resources can be used, but they should be used carefully.

    For PREPROD, a shared Foundry Account with shared BYO resources is a reasonable cost-optimization pattern if the projects are part of the same trust boundary. Use separate project managed identities, scoped RBAC, naming conventions, diagnostics, monitoring, and written risk acceptance.

    For PROD, shared BYO resources should not be the default for unrelated regulated workloads. Even when data-plane access is restricted, shared backing services still create metadata visibility, shared administration, shared capacity, shared backup/restore, shared failover, and shared incident-response concerns.

    The better production pattern is to create dedicated BYO resource sets per workload, business unit, data-classification zone, or other clearly defined security boundary.

    2. Is the right model one Foundry Account and one BYO set per project?

    Not always.

    The right model depends on the isolation requirement:

    • If projects are low-risk, internal, and in the same trust boundary, one Foundry Account with shared BYO resources can be acceptable.
    • If projects belong to different business units, data classifications, regulatory scopes, recovery objectives, or operational ownership models, use dedicated BYO resources.
    • If users must not even see other projects, connections, knowledge bases, or account-level objects, use separate Foundry Accounts as well.

    A practical enterprise model is:

    • PREPROD: one shared Foundry Account and shared BYO resources, only for projects inside the same trust boundary.
    • PROD, normal regulated workloads: shared Foundry Account only if project visibility is acceptable, with dedicated BYO resources per workload or security boundary.
    • PROD, high-sensitivity workloads: dedicated Foundry Account and dedicated BYO resources per business unit, legal entity, or regulated workload.

    A Foundry project is not always the right isolation-cell size. The better boundary is the workload or group of projects that intentionally share identity, administrators, network policy, capacity, recovery objectives, and incident blast radius.

    3. Cosmos DB readMetadata: is dedicated Cosmos DB per project the only clean solution?

    For strict Azure resource-level and operational isolation, use a dedicated Cosmos DB account per security boundary.

    A shared Cosmos DB account can still provide project-level data-access isolation through project-specific containers and scoped permissions. That can protect the actual thread, message, and entity data stored in project-specific containers.

    However, shared Cosmos DB does not provide clean independent boundaries for metadata confidentiality, account administration, throughput and capacity, backup and restore, failover, monitoring, or incident blast radius.

    The reported account-root readMetadata behavior should be validated against the exact deployed role definitions and API calls. If testing confirms that one project identity can enumerate container names or database structures belonging to other projects, there is no clean documented mechanism to hide those names inside the same Cosmos DB account. In that case, separate Cosmos DB accounts are required for metadata confidentiality.

    For PREPROD, this may be acceptable if the risk is documented.

    For PROD, use dedicated Cosmos DB accounts per workload or security boundary when any of the following matter:

    • Container/database names should not be visible across projects.
    • Backup and restore must be independent.
    • RU/s consumption must be isolated.
    • Failover and disaster recovery must be isolated.
    • Incident blast radius must be contained.
    • Audit and compliance evidence must be clean.

    4. How should per-project AI Search isolation be handled?

    Azure AI Search now supports per-index scope for Search Index Data Reader and Search Index Data Contributor. This can restrict direct document and query operations against a specific index.

    However, this does not provide full service or search-object isolation.

    Search Service Contributor remains a service-level object-management role. It can manage search objects at the service level, and where Foundry Standard Agent Setup requires the project managed identity to have Search Service Contributor and Search Index Data Contributor on the Search service, separate Foundry projects using one shared Search service should not be considered strongly isolated at the search-object management layer.

    This distinction matters because:

    • Human users should not receive Search Service Contributor unless they are platform administrators.
    • Project managed identities may still need broader Search permissions because of the current Standard Agent Setup requirements.
    • Therefore, a shared Search service can be acceptable for PREPROD or same-trust workloads, but not for strong isolation between regulated projects.

    For PREPROD, the shared Search pattern can work if the controls are strict:

    • Do not grant Search Service Contributor to ordinary project users.
    • Recognize that project managed identities may still have service-wide Search object-management permissions.
    • Disable API-key authentication where all required Foundry, deployment, and operational workflows support Microsoft Entra authentication.
    • Otherwise, tightly restrict and monitor key access.
    • Restrict Search administration roles to the platform team.
    • Enforce index naming, tagging, logging, and monitoring.
    • Apply document-level or query-time access filtering where content permissions matter.

    For PROD, use dedicated Azure AI Search services per workload or security boundary where index names, knowledge bases, vectors, retrieval configuration, or indexed content are sensitive.

    5. Foundry IQ knowledge bases: how should cross-project visibility be handled?

    Do not rely on shared Azure AI Search for strict Foundry IQ knowledge-base isolation.

    Foundry IQ uses Azure AI Search knowledge bases and associated search objects. If multiple Foundry projects use the same Search service, knowledge-base visibility and search-object management can be difficult to separate cleanly.

    There are two different isolation concerns:

    • Content authorization: whether a user can retrieve unauthorized documents.
    • Object visibility: whether a user can see that another project’s knowledge base, index, or related search object exists.

    Document-level access control and permission-aware retrieval can help with content authorization. They do not fully solve the object-visibility concern.

    There is no project-scoped RBAC boundary for Azure AI Search knowledge-base object management that should be treated as a hard confidentiality control across Foundry projects sharing the same Search service.

    For PREPROD, shared Search with strict naming, RBAC, and monitoring can be acceptable.

    For PROD, use dedicated Azure AI Search per workload or security boundary when knowledge-base discoverability matters.

    6. About roadmap items

    Do not base the architecture on future roadmap assumptions.

    Design the platform using the controls available today:

    • Treat enterprise_memory as platform-defined.
    • Treat Foundry IQ KB isolation as dependent on the Search service boundary.
    • Treat Azure AI Search index-scoped data roles as useful for data-plane access, but not equivalent to full service isolation.
    • Treat Search Service Contributor as a service-level object-management role.
    • Treat Foundry Account scope as a real administrative and visibility boundary.
    • Treat shared BYO resources as shared operational blast-radius domains.

    If stronger KB-level RBAC, configurable Cosmos database naming, stronger project-scoped account behavior, or stronger Search object isolation becomes available later, the architecture can be simplified later. For now, production isolation should be designed around Azure resource boundaries, not roadmap expectations.

    7. Foundry Account role inheritance: what should be done?

    Apply separate permission models to human users and the project managed identity.

    Human developers should normally receive project-scoped Foundry roles and only the minimum parent-resource visibility required. Project administrators should receive management roles only for the projects they own. Runtime callers should receive the narrowest agent or project-level consumer role that works.

    The project managed identity is different. It must receive the supporting-resource permissions required by Standard Agent Setup, and some of those permissions are broader than project scope. That means the main isolation exposure may come from the managed identity and supporting-resource permissions, not only from human user permissions.

    Use this pattern:

    • Platform administrators get account/resource-scope administrative roles.
    • Project leads get Foundry Project Manager on the Foundry resource.
    • Developers get project-scope Foundry User access where possible.
    • Agent callers get the narrowest agent or project-level consumer role that works.
    • The project managed identity gets the required Standard Agent Setup permissions on Storage, Cosmos DB, and Azure AI Search.
    • Platform automation identities are managed separately and reviewed regularly.

    Do not assign Foundry User at the parent Foundry resource merely as a blanket fix for portal, upload, or connection failures. Identify the specific operation and required action, then assign the role at the narrowest supported scope.

    If a required capability genuinely cannot operate without inherited parent-resource access, and that inherited access exposes other projects, then the Foundry Account boundary is too broad. In that case, split the Foundry Account by business unit, regulated workload, or security boundary.

    Deny assignments should not be the primary design pattern. They make the platform harder to operate and harder to troubleshoot. The cleaner solution is to align Foundry Account boundaries with real trust boundaries.

    8. Is enterprise_memory configurable?

    There is currently no documented supported option to override the enterprise_memory database name; therefore, design as though it is platform-defined.

    If multiple projects share one Cosmos DB account, they also share the same platform-defined database structure and the same operational blast radius. Per-container RBAC can reduce data-access risk, but it does not give clean operational isolation.

    For PREPROD, sharing may be acceptable.

    For PROD, use dedicated Cosmos DB accounts per isolation boundary if backup/restore, throughput, failover, monitoring, incident response, or compliance separation matter.

    9. What about shared BYO Storage?

    Shared Storage should be treated the same way as shared Cosmos DB and shared Azure AI Search: it can work for PREPROD or same-trust workloads, but it is still one administrative and operational boundary.

    Container-scoped Blob Data roles can protect blob contents, but a shared Storage account still creates shared concerns around:

    • Account-level management permissions.
    • Container enumeration.
    • Network and firewall configuration.
    • Private endpoints.
    • Lifecycle policies.
    • Diagnostics and logging.
    • Deletion and recovery.
    • Account-level compromise or misconfiguration.
    • Offboarding and cleanup.
    • Backup and restore ownership.

    For PREPROD, shared Storage can be acceptable with clear controls and no regulated production data.

    For PROD, use separate Storage accounts where metadata, networking, policy, monitoring, deletion, recovery, or administrative control must be independently governed.

    10. Are there Microsoft templates or reference architectures for this?

    You have already found the available resources by Microsoft relevant to your solution. I don't believe there are any more specific architectures available directly by Microsoft. Use those as building blocks, but do not treat them as a complete multi-project shared-BYO isolation blueprint.

    The safest production format would be:

    • Microsoft provides templates for deploying secure Foundry environments with BYO dependencies.
    • Microsoft provides samples for standard setup, private networking, Terraform/Bicep deployment, and ACL-aware retrieval.
    • For strict multi-project isolation, the architecture should still use dedicated Azure resource boundaries.

    For the environment described — regulated industry, private endpoints, CMK, single Entra tenant, Sweden Central, 3–5 PREPROD projects and 10+ PROD projects — I would use this model:

    PREPROD

    Use:

    • One shared Foundry Account.
    • Shared BYO Storage.
    • Shared Cosmos DB.
    • Shared Azure AI Search.
    • Separate project managed identities.
    • Cosmos DB permissions scoped as tightly as the deployed setup supports.
    • Azure AI Search index-scoped data roles where useful for human or application access.
    • No ordinary project-user Search Service Contributor.
    • Recognition that project managed identities may require service-level Search permissions under Standard Agent Setup.
    • Disable API-key authentication where all required workflows support Microsoft Entra authentication; otherwise, tightly restrict and monitor key access.
    • No real regulated production data in PREPROD.
    • Strong naming, tagging, diagnostics, and monitoring.
    • Automated cross-project negative-access tests.
    • Azure Activity Log and resource log alerts for unexpected index, container, or blob operations.
    • Workload-level quotas and cost alerts.
    • Documented recovery ownership.
    • Documented deletion and offboarding procedures.
    • Periodic role-assignment drift checks.
    • Written risk acceptance for metadata visibility, service-wide managed identity permissions, and shared blast radius.

    Shared PREPROD resources are acceptable only when all projects are within the same trust boundary and the organization explicitly accepts that shared Search project managed identities may have service-wide object-management capabilities.

    PROD

    Use:

    • Dedicated Storage per workload or security boundary.
    • Dedicated Cosmos DB per workload or security boundary.
    • Dedicated Azure AI Search per workload or security boundary.
    • Shared Foundry Account only when account-level visibility is acceptable.
    • Dedicated Foundry Accounts where project visibility, connection visibility, role inheritance, or KB visibility must be isolated.

    The isolation cell does not need to be one resource set for every small project. It should be one dedicated resource set per regulated workload, business/data-classification boundary, or group of projects that intentionally share identity, administrators, network policy, capacity, recovery objectives, and incident blast radius.

    Was this answer helpful?

    0 comments No comments

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.