Enterprise AI Agent Environment Design Notes Part 2: Implementing SharePoint ACL and Permission Controls

First Published:
Last Updated:

This article is Part 2 of a three-part series on designing enterprise AI agent environments.

Disclaimer: This article reflects the author's personal research and synthesis of publicly available information as of 2025–2026. It represents a general architectural perspective based on the author's individual viewpoint. Every organization has its own internal circumstances, use cases, and existing system landscape, so the approaches described here are not universally applicable. Errors may be present. When evaluating implementation options, always consult the official documentation from each cloud provider and make decisions appropriate to your own organization's context.

1. Introduction — What Part 2 Covers

In Part 1, we compared the AI agent platforms of the three major cloud providers and mapped out each one's strengths.

Part 2 dives deep into what I consider the most critical topic in this series: carrying SharePoint ACLs (access control lists) through to AI agents. This is a concern that tends to be overlooked when building enterprise AI agent environments, yet it carries major implications both technically and from a compliance standpoint.

2. Propagating SharePoint ACLs to AI Agents — The Biggest Technical Challenge

Imagine you've built an AI chatbot that searches internal documents and answers questions. The worst-case scenario is this: the AI surfaces content from documents the user should never have been allowed to see. HR evaluation forms leaking to general staff. M&A-related confidential documents becoming searchable by everyone in the company. This is both a technical failure and a serious compliance violation.

During the proof-of-concept phase, access control tends to get pushed to "we'll handle it later." But for production environments, permission controls must be built into the design from the very beginning.

2.1 ACL Support Comparison Across Four Services

So how do the cloud services actually handle this problem? The comparison table below gives you the full picture.
AspectMS365 Copilot AgentMicrosoft FoundryAmazon Bedrock AgentCoreGoogle Cloud (Gemini Enterprise)
SharePoint ACL auto-inheritance◎ Fully native○ Path A: equivalent / △ Path B: partial✕ Not supported△ Via Gemini Enterprise (periodic sync)
SharePoint group support○ Path A / ✕ Path B✕ Not supported
Entra ID authenticationNativeNative (OBO)○ AgentCore Identity○ Workforce Identity Federation
LLM choice✕ GPT only◎ 11,000+ models◎ Claude/Llama, etc.◎ Gemini/Claude, etc. 200+
Customizability△ No-code/Low-code◎ Code-first◎ Code-first◎ Code-first
Teams integration◎ Native✕ Not with SharePoint Tool✕ Custom implementation✕ Custom implementation
VNET/VPC isolation○ (VPC-SC, free)
License cost$30/user/monthAzure pay-as-you-go (+Path A requires Copilot license)AWS pay-as-you-goGCP pay-as-you-go
ACL freshnessReal-timePath A: Real-time / Path B: Indexer-dependentN/AID sync: 30min–7d / Entity sync: 3h–7d (real-time sync is Preview)

2.2 ACL Fidelity Ranking

If we reorganize the table above through the lens of "ACL fidelity," the ranking shakes out like this:
SharePoint ACL fidelity ranking
SharePoint ACL fidelity ranking

What this ranking reveals is a clear tradeoff: ACL quality and customizability/cost pull in opposite directions. The top two options — with the most complete ACL support — require Copilot licenses and come at significant cost. Everything below has some limitation, but costs less. The right choice comes down to balancing your organization's confidentiality requirements against its budget.

2.3 ACL Limitations in Amazon Bedrock AgentCore

For organizations that run primarily on AWS, this is important to know. AWS official documentation explicitly states the following limitation:
"All data that you sync from your data source becomes available to anyone with bedrock:Retrieve permissions to retrieve the data. This can also include any data with controlled data source permissions."
In other words, once content is crawled from SharePoint, ACL information is discarded. Anyone with the bedrock:Retrieve IAM permission can search across all documents. This is not a bug — it's by design.

If you need ACL enforcement in an AWS environment, consider the following options:
ApproachACL supportImplementation costConstraints
Amazon Q Business○ SharePoint ACL auto-inheritanceLow (managed)$3–20/user/month (Lite/Pro), fixed LLM
Kendra GenAI Index → Bedrock LLMUserContext ACL filter (partial when integrated with Bedrock KB)Medium (managed retriever)Kendra GenAI Index can be integrated as a managed retriever for Bedrock KB. Supports 43 connector types. For fully reliable ACL filtering, direct use of the Retrieve API or routing through Amazon Q Business is preferable
Bedrock KB + metadata filter△ Pseudo-ACL (custom)HighMust build ACL sync yourself. Leak risk
Bedrock KB as-isLowAll documents visible to all users

2.4 A Fundamental Architectural Difference — Why the Gap Exists

Azure (Path B), GCP, and AWS all follow the same basic pattern — "copy SharePoint content into an index and run RAG queries against it" — but they handle permission information in fundamentally different ways. The diagrams below illustrate exactly where they diverge.
Ingestion Pipelines — How Each Cloud Handles SharePoint ACL
Ingestion Pipelines — How Each Cloud Handles SharePoint ACL

The contrast is stark. Azure and GCP copy content into the index with ACLs attached; AWS copies only the content. This difference in design philosophy is the direct cause of the ACL support gap.

2.5 Permission Control Maturity

Permission Control Maturity
Permission Control Maturity

As a rough heuristic: Foundry Path B gets you "80-point ACL coverage automatically," Gemini Enterprise gets you "60-point ACL coverage with extra setup," and Bedrock KB starts you at zero and requires you to build everything from scratch.

When dealing with confidential documents, having ACL enforced at the platform layer — even imperfectly — dramatically reduces risk. Custom-built ACL implementations may appear to work correctly, but edge-case data leaks are an ever-present threat.

2.6 Sidebar — "Can't we just stand up Azure AD inside an AWS/GCP VPC to close the gap?"

Once you see the ranking above (Foundry Path B ≈80 / Gemini Enterprise ≈60 / Bedrock KB 0), a natural mitigation idea surfaces: "If the problem is Entra ID affinity, what if we deploy Azure AD inside an AWS or GCP VPC and sync the Entra ID content there? Wouldn't Bedrock or Vertex catch up to Foundry?"

This is an intuitive question but the premise is technically incorrect, and the proposed workaround does not actually address the ACL propagation gap. There are three independent reasons.

(1) Entra ID cannot be installed in a VPC in the first place. Entra ID is a global SaaS IDP operated by Microsoft. It cannot be deployed inside any VPC — not AWS's, not GCP's, and not even Azure's own VNET. What can be placed in a VPC is a classical AD DS:
Directory serviceCan be placed in AWS/GCP VPC?Notes
Microsoft Entra IDGlobal SaaS, no VPC deployment possible
Microsoft Entra Domain Services (managed AD DS)Azure-only
Self-managed Windows Server AD DSYou run the EC2/GCE instances yourself
AWS Managed Microsoft AD○ (AWS only)Fully managed AD DS inside the VPC
Google Cloud Managed Service for Microsoft AD○ (GCP only)Fully managed AD DS inside the VPC

With Entra Connect / Entra Cloud Sync, this VPC-resident AD DS can be bridged to Entra ID — but the primary sync direction is AD DS → Entra ID. Writeback from Entra ID to AD DS is limited to password, group-membership, and device writeback; the bulk of Entra ID content does not flow down into an AD DS.

(2) SharePoint ACLs do not live in AD DS — they live in Entra ID + SharePoint Online. This is the crux of why a VPC AD does not solve the problem. The ACL information AI agents need to honor is held in SharePoint Online's own permission store (per-item ACLs, "Limited Access" inheritance, sharing links, etc.), Microsoft 365 groups and Entra ID security groups, and Purview sensitivity labels attached to documents. None of these live in AD DS. Even if you fully sync every user and group into a VPC-resident AD DS, SharePoint-native ACLs and Purview labels will not appear there — which means a fully populated VPC AD DS still leaves Bedrock Knowledge Base and Vertex AI Search without ACL metadata at ingest time, exactly the same problem described in §2.1–§2.4.

(3) The identity-layer affinity is already solved — the gap is in the connector layer. AWS Bedrock AgentCore Identity and GCP Workforce Identity Federation already federate directly with Entra ID over OIDC/SAML. There is no identity-layer gap that a VPC AD could fill. The gap that makes Foundry Path B score ≈80 while Bedrock KB scores 0 is at the connector / ingestion layer — specifically, how SharePoint ACLs are propagated into the retrieval index. That is a function of the SharePoint connector design (Bedrock KB discards ACL at crawl time by design; Gemini Enterprise preserves it with periodic sync lag), not of where a directory service happens to sit.
AspectDoes a VPC-resident AD DS help?Reason
SharePoint ACL propagationACLs live in SPO/Entra ID, not AD DS
Purview sensitivity labelsLabel metadata is not synced to AD DS
IdP federation with AWS/GCP runtimes✕ (not needed)Already solved via OIDC/SAML to Entra ID directly
Kerberos/NTLM for domain-joined Windows workloadsBut this is unrelated to AI-agent ACL
SQL Server Windows authenticationClassical on-prem-style workload, not agent-layer
Closing the Foundry Path B ↔ Bedrock KB gapRoot cause is the connector, not the IdP

Bottom line: the ACL propagation gap is a connector problem, not an IdP problem. If stronger ACL parity on AWS is required, the realistic path is Amazon Q Business or Kendra GenAI Index (which do preserve SharePoint ACLs by design); on GCP, Gemini Enterprise's SharePoint connector with its known sync-lag trade-offs; or the hybrid pattern covered in Part 3 — Azure as the ACL enforcement layer, AWS/GCP as inference or multimodal complements.

3. Microsoft Foundry's SharePoint Connection — A Deep Dive into Path A and Path B

Now that the importance of ACL should be clear, let's take a closer look at the two connection methods Azure offers (Path A and Path B). Despite similar-sounding names, they differ significantly in architecture, cost structure, and ACL rigor.

3.1 Path A: Remote (via Copilot Retrieval API)

Foundry Path A — Remote (via Copilot Retrieval API)
Foundry Path A — Remote (via Copilot Retrieval API)

Path A is a "leave data in SharePoint and fetch it in real time at query time" approach. When the agent processes a query, it invokes the SharePoint Tool, which calls the Microsoft 365 Copilot Retrieval API on behalf of the user (On-Behalf-Of). Because SharePoint itself enforces permissions, ACLs are inherited in full.

Advantages:
  • Full ACL inheritance (same API as MS365 Copilot)
  • SharePoint group support
  • Sensitivity label (Purview) support
  • Real-time ACL reflection

Constraints:
  • Cannot be used when publishing to Teams (OBO and managed identity conflict)
  • Only one SharePoint tool per agent (Preview limitation)
  • Restricted to the same Entra tenant
  • Requires an M365 Copilot license per user (the biggest cost barrier — though a pay-as-you-go (PAYG) model is available in Preview that does not require licenses for every user. Even under PAYG, at least one M365 Copilot license must exist in the tenant. PAYG also does not support user-level data sources such as OneDrive)

3.2 Path B: Indexed (via Azure AI Search)

Foundry Path B — Indexed (via Azure AI Search)
Foundry Path B — Indexed (via Azure AI Search)

Path B is a "pre-copy SharePoint content into Azure AI Search and apply ACL filters at search time" approach. Since it does not require a Copilot license and runs on pay-as-you-go pricing, it is significantly more cost-effective than Path A.

Group types supported for ACL:
  • Entra security groups: ○
  • M365 groups: ○
  • Mail-enabled security groups: ○
  • SharePoint native groups: ✕ Not supported (a notable gotcha)

Advantages:
  • No M365 Copilot license required (Azure pay-as-you-go only)
  • Stable search performance (content is pre-indexed)

Constraints:
  • No SharePoint group support (Entra groups only)
  • ACL freshness depends on indexer run frequency
  • ACL entry limit per file: 1,000
  • When chunking (split skill) is used, ACL properties must be explicitly mapped to each chunk

3.3 Path A vs. Path B Comparison

Here's a side-by-side summary of the key differences to help you decide which path fits your needs.
DimensionPath A (Remote)Path B (Indexed)
Data locationRemains in SharePointCopied to Azure AI Search
Data freshnessReal-timeDepends on indexer schedule
ACL enforcementSharePoint native (complete)Entra groups only
Sensitivity labelsApplied as-isPreview support
M365 Copilot licenseRequired per userNot required
SharePoint group supportFull supportNot supported
File format supportSemantic search is limitedBroader format coverage
Implementation complexityLowHigh

A practical rule of thumb: Choose Path B when cost is the priority; choose Path A when ACL strictness is non-negotiable. A two-tier architecture — Path B as the baseline, with Path A applied only to highly sensitive documents — is also a valid option. Weigh your organization's security requirements against its cost constraints and decide accordingly.

3.4 Azure AI Search ACL Security Trimming — Under the Hood

Let's look more closely at how Path B works internally. This feature was added in the Preview API from November 2025 (2025-11-01-preview), and as of April 2026 it is still in Public Preview. For production workloads, re-evaluate after GA.

Ingestion process:
  1. The SharePoint indexer extracts user/group IDs at each permission level
  2. Effective ACLs are computed per file
  3. ACL metadata is stored in the index alongside the content
  4. Configured via indexerPermissionOptions in the data source definition
  5. Required app permissions: Files.Read.All + Sites.FullControl.All (or Sites.Selected)
  6. A managed identity (secretless) configuration is recommended

Query process:
  1. The user's Entra token is sent via the x-ms-query-source-authorization header
  2. Azure AI Search matches the calling Entra principal against stored ACL metadata
  3. Results are automatically trimmed
  4. If ACL evaluation fails, a 5xx error is returned — no partial results are returned under any circumstances

That last point is worth emphasizing. When ACL evaluation fails, the system does not silently fall back to returning all results — it returns an error and nothing else. This reflects a security-first design philosophy.

4. Connecting SharePoint from Google Cloud

Let's also look at what happens when you're connecting to SharePoint from a cloud other than Azure. Google Cloud is not as native an integration as Azure, but it does offer a path to SharePoint ACL inheritance through Gemini Enterprise (formerly Agentspace).

4.1 Connection Methods

Option 1: Gemini Enterprise (Managed)
Gemini Enterprise — SharePoint Connection Flow (GCP)
Gemini Enterprise — SharePoint Connection Flow (GCP)

This approach uses a dedicated SharePoint Online connector that preserves source system ACLs at index creation time. One important constraint: ACL must be enabled when the data store is created and cannot be changed afterward. Sync intervals for identities (permissions) and entities (document content) can be scheduled independently. Identity sync options are: 30 minutes / 1 hour / 3 hours / 6 hours / 12 hours / 1 day / 3 days / 5 days / 7 days. Entity sync options are: 3 hours / 6 hours / 12 hours / 1 day / 3 days / 5 days / 7 days. Real-time sync (via webhook) is also available in Public Preview, allowing change events to be reflected within minutes — though periodic-only sync still introduces lag compared to Azure's near-real-time updates.
Option 2: Vertex AI RAG Engine (For Developers)
ACL functionality is not included by default and requires custom implementation. This option offers more development flexibility, but building permission management adds implementation cost.

4.2 Technical Details of Entra ID Integration

To make SharePoint ACLs work from Google Cloud, an additional configuration layer called Workforce Identity Federation is required.
ItemDetails
Connection protocolSAML 2.0 or OIDC (OIDC recommended)
Group mappingUp to 100 groups (expandable to 400) (confirmed in Google Cloud IAM official documentation)
CostFree (Cloud Logging audit logs billed separately)
MFAEntra ID conditional access policies apply as-is
Setup complexityMedium-High (Azure App Registration + GCP Workforce Pool setup required)

4.3 Caveats

  1. Identity federation overhead: Setting up both Entra ID and Workforce Identity Federation is mandatory. Unlike Azure, this is not a native integration
  2. Periodic sync lag: ID sync can be configured as frequently as every 30 minutes; entity sync as frequently as every 3 hours. Entity sync lag is notable compared to Azure AI Search (which operates on a scale of minutes to hours). Real-time sync (webhook) is available in Public Preview
  3. Group count limit: Group mapping is capped at 100 (expandable to 400). This may not be sufficient for large organizations
  4. Service maturity: SharePoint integration is newer and less mature than Azure AI Search

Bottom line: When strict SharePoint ACL inheritance is a top requirement, Google Cloud alone is unlikely to fully satisfy it and is better positioned as a complementary component. That said, a hybrid architecture where Azure handles ACL enforcement and GCP handles inference is a compelling option worth considering.

5. Mixed-License Environments: A Coexistence Strategy

We've covered a lot of technical ground, but real-world organizations face a practical constraint: giving every employee the same license tier simply isn't affordable. MS365 Copilot (Enterprise tier, 300+ users) runs $30 per user per month. For a 1,000-person organization, that's $30,000/month — $360,000/year. Worth noting: M365 base license pricing is scheduled to increase from July 1, 2026 (e.g., E3 from $36 to $39/user/month, E5 from $57 to $60/user/month). The Copilot add-on price of $30/user/month is unchanged, but total cost of ownership including the base license will be affected.

So how do you minimize the AI productivity gap when some employees have Copilot licenses and others don't?

5.1 A Sample Coexistence Architecture

Mixed-license coexistence architecture
Mixed-license coexistence architecture

5.2 What You Can and Can't Bridge

The key is to understand precisely which gaps between license tiers are technically bridgeable and which are not.
Bridgeable Gaps
FeatureWith CopilotWithout Copilot (Path B)Gap
SharePoint document search○ (Entra SG only)Small
Internal knowledge Q&ANone
Document summarization / analysis◎ (equivalent when piped through LLM)None
LLM qualityGPT family only (no model choice)Claude etc. also availablePath B may have an edge
Unbridgeable Gaps (Copilot-exclusive features)
FeatureWith CopilotWithout CopilotAlternative
Copilot inside Word/Excel/PPTNo substitute
Outlook summarization / draftingNo substitute
Teams meeting recapNo substitute
Agent access within TeamsSeparate UI as workaround

In short, SharePoint search and knowledge Q&A can often be well covered by the more cost-efficient Path B, but there is no substitute for Copilot features embedded directly inside Microsoft 365 apps.

5.3 Design Considerations

1. Answer consistency: There is a risk that Copilot users and Path B users receive different answers to the same question. When important documents are updated, increase the indexer run frequency or incorporate manual re-syncing into your operational workflow.

2. Unified UI: Consider providing a single chat UI (internal web app) for all employees, with backend logic that detects license status and routes to Path A or Path B accordingly.

5.4 Cost Estimate (1,000-person organization)

ConfigurationMonthly cost
Everyone on Copilot1,000 × $30 = $30,000/month
Mixed (200 on Copilot + 800 on Path B)200 × $30 = $6,000 + Azure AI Search & LLM usage ≈ $6,500–8,000/month

Savings: $22,000–23,500/month, or roughly $270,000/year. One strategy is to concentrate Copilot licenses on roles that derive the most value from built-in Microsoft 365 features — executives, planning, legal — while serving employees whose primary use case is SharePoint search and knowledge Q&A through Path B.

6. Part 2 Summary — What to Read Next

Part 2 covered the biggest technical challenge in enterprise AI agent environments: propagating SharePoint ACLs. We walked through the difference between Azure Foundry Path A and Path B, the constraints of Google Cloud Gemini Enterprise, the ACL limitations of AWS Bedrock KB, and a coexistence strategy for mixed-license environments.

At this point, you should have a solid overall picture of how to approach permission control in practice.

Part 3: Cloud Selection, Cost, and Operational Considerations covers use-case-driven cloud selection, inter-agent communication protocols (MCP/A2A), multi-cloud architectures, TCO comparisons, lock-in mitigation strategies, and practical guidance on operations and monitoring.

7. Related Articles in This Series


This article is based on the author's personal research and synthesis of publicly available information as of 2025–2026, and represents a general architectural perspective. Internal circumstances and use cases vary by organization, so the content here does not apply universally. The article reflects the author's interpretation and reasoning and may contain errors. When evaluating implementation options, always consult official provider documentation and make decisions appropriate to your own organizational context.

References:
Tech Blog with curated related content

Written by Hidekazu Konishi