@@ -30,18 +30,18 @@ Standard Setup Network Secured Steps for main.bicep
3030 'switzerlandnorth'
3131 'norwayeast'
3232])
33- param location string = 'eastus2 '
33+ param location string = 'eastus '
3434
3535@description ('Name for your AI Services resource.' )
3636param aiServices string = 'aiservices'
3737
3838// Model deployment parameters
3939@description ('The name of the model you want to deploy' )
40- param modelName string = 'gpt-4o '
40+ param modelName string = 'gpt-4.1 '
4141@description ('The provider of your model' )
4242param modelFormat string = 'OpenAI'
4343@description ('The version of your model' )
44- param modelVersion string = '2024-11-20 '
44+ param modelVersion string = '2025-04-14 '
4545@description ('The sku of your model deployment' )
4646param modelSkuName string = 'GlobalStandard'
4747@description ('The tokens per minute (TPM) of your model deployment' )
@@ -71,9 +71,6 @@ param agentSubnetName string = 'agent-subnet'
7171@description ('The name of Private Endpoint subnet to create new or existing subnet for private endpoints' )
7272param peSubnetName string = 'pe-subnet'
7373
74- @description ('The name of MCP subnet for user-deployed Container Apps (e.g., MCP servers)' )
75- param mcpSubnetName string = 'mcp-subnet'
76-
7774//Existing standard Agent required resources
7875@description ('Existing Virtual Network name Resource ID' )
7976param existingVnetResourceId string = ''
@@ -87,19 +84,13 @@ param agentSubnetPrefix string = ''
8784@description ('Address prefix for the private endpoint subnet' )
8885param peSubnetPrefix string = ''
8986
90- @description ('Address prefix for the MCP subnet. The default value is 192.168.2.0/24.' )
91- param mcpSubnetPrefix string = ''
92-
9387@description ('The AI Search Service full ARM Resource ID. This is an optional field, and if not provided, the resource will be created.' )
9488param aiSearchResourceId string = ''
9589@description ('The AI Storage Account full ARM Resource ID. This is an optional field, and if not provided, the resource will be created.' )
9690param azureStorageAccountResourceId string = ''
9791@description ('The Cosmos DB Account full ARM Resource ID. This is an optional field, and if not provided, the resource will be created.' )
9892param azureCosmosDBAccountResourceId string = ''
9993
100- @description ('The Microsoft Fabric Workspace full ARM Resource ID. This is an optional field for Fabric private link connectivity.' )
101- param fabricWorkspaceResourceId string = ''
102-
10394//New Param for resource group of Private DNS zones
10495//@description('Optional: Resource group containing existing private DNS zones. If specified, DNS zones will not be created.')
10596//param existingDnsZonesResourceGroup string = ''
@@ -108,11 +99,10 @@ param fabricWorkspaceResourceId string = ''
10899param existingDnsZones object = {
109100 'privatelink.services.ai.azure.com' : ''
110101 'privatelink.openai.azure.com' : ''
111- 'privatelink.cognitiveservices.azure.com' : ''
112- 'privatelink.search.windows.net' : ''
113- 'privatelink.blob.core.windows.net' : ''
114- 'privatelink.documents.azure.com' : ''
115- 'privatelink.analysis.windows.net' : ''
102+ 'privatelink.cognitiveservices.azure.com' : ''
103+ 'privatelink.search.windows.net' : ''
104+ 'privatelink.blob.core.windows.net' : ''
105+ 'privatelink.documents.azure.com' : ''
116106}
117107
118108@description ('Zone Names for Validation of existing Private Dns Zones' )
@@ -123,9 +113,9 @@ param dnsZoneNames array = [
123113 'privatelink.search.windows.net'
124114 'privatelink.blob.core.windows.net'
125115 'privatelink.documents.azure.com'
126- 'privatelink.analysis.windows.net'
127116]
128117
118+
129119var projectName = toLower ('${firstProjectName }${uniqueSuffix }' )
130120var cosmosDBName = toLower ('${aiServices }${uniqueSuffix }cosmosdb' )
131121var aiSearchName = toLower ('${aiServices }${uniqueSuffix }search' )
@@ -137,6 +127,7 @@ var searchPassedIn = aiSearchResourceId != ''
137127var cosmosPassedIn = azureCosmosDBAccountResourceId != ''
138128var existingVnetPassedIn = existingVnetResourceId != ''
139129
130+
140131var acsParts = split (aiSearchResourceId , '/' )
141132var aiSearchServiceSubscriptionId = searchPassedIn ? acsParts [2 ] : subscription ().subscriptionId
142133var aiSearchServiceResourceGroupName = searchPassedIn ? acsParts [4 ] : resourceGroup ().name
@@ -168,11 +159,9 @@ module vnet 'modules-network-secured/network-agent-vnet.bicep' = {
168159 existingVnetResourceGroupName : vnetResourceGroupName
169160 agentSubnetName : agentSubnetName
170161 peSubnetName : peSubnetName
171- mcpSubnetName : mcpSubnetName
172162 vnetAddressPrefix : vnetAddressPrefix
173163 agentSubnetPrefix : agentSubnetPrefix
174164 peSubnetPrefix : peSubnetPrefix
175- mcpSubnetPrefix : mcpSubnetPrefix
176165 existingVnetSubscriptionId : vnetSubscriptionId
177166 }
178167}
@@ -231,20 +220,18 @@ module aiDependencies 'modules-network-secured/standard-dependent-resources.bice
231220 // Cosmos DB Account
232221 cosmosDBResourceId : azureCosmosDBAccountResourceId
233222 cosmosDBExists : validateExistingResources .outputs .cosmosDBExists
234- }
223+ }
235224}
236225
237226resource storage 'Microsoft.Storage/storageAccounts@2022-05-01' existing = {
238227 name : aiDependencies .outputs .azureStorageName
239228 scope : resourceGroup (azureStorageSubscriptionId , azureStorageResourceGroupName )
240229}
241230
231+
242232resource aiSearch 'Microsoft.Search/searchServices@2023-11-01' existing = {
243233 name : aiDependencies .outputs .aiSearchName
244- scope : resourceGroup (
245- aiDependencies .outputs .aiSearchServiceSubscriptionId ,
246- aiDependencies .outputs .aiSearchServiceResourceGroupName
247- )
234+ scope : resourceGroup (aiDependencies .outputs .aiSearchServiceSubscriptionId , aiDependencies .outputs .aiSearchServiceResourceGroupName )
248235}
249236
250237resource cosmosDB 'Microsoft.DocumentDB/databaseAccounts@2024-11-15' existing = {
@@ -259,32 +246,31 @@ resource cosmosDB 'Microsoft.DocumentDB/databaseAccounts@2024-11-15' existing =
259246// 3. Links private DNS zones to the VNet for name resolution
260247// 4. Configures network policies to restrict access to private endpoints only
261248module privateEndpointAndDNS 'modules-network-secured/private-endpoint-and-dns.bicep' = {
262- name : '${uniqueSuffix }-private-endpoint'
263- params : {
264- aiAccountName : aiAccount .outputs .accountName // AI Services to secure
265- aiSearchName : aiDependencies .outputs .aiSearchName // AI Search to secure
266- storageName : aiDependencies .outputs .azureStorageName // Storage to secure
267- cosmosDBName : aiDependencies .outputs .cosmosDBName
268- fabricWorkspaceResourceId : fabricWorkspaceResourceId // Microsoft Fabric workspace (optional)
269- vnetName : vnet .outputs .virtualNetworkName // VNet containing subnets
270- peSubnetName : vnet .outputs .peSubnetName // Subnet for private endpoints
271- suffix : uniqueSuffix // Unique identifier
272- vnetResourceGroupName : vnet .outputs .virtualNetworkResourceGroup
273- vnetSubscriptionId : vnet .outputs .virtualNetworkSubscriptionId // Subscription ID for the VNet
274- cosmosDBSubscriptionId : cosmosDBSubscriptionId // Subscription ID for Cosmos DB
275- cosmosDBResourceGroupName : cosmosDBResourceGroupName // Resource Group for Cosmos DB
276- aiSearchSubscriptionId : aiSearchServiceSubscriptionId // Subscription ID for AI Search Service
277- aiSearchResourceGroupName : aiSearchServiceResourceGroupName // Resource Group for AI Search Service
278- storageAccountResourceGroupName : azureStorageResourceGroupName // Resource Group for Storage Account
279- storageAccountSubscriptionId : azureStorageSubscriptionId // Subscription ID for Storage Account
280- existingDnsZones : existingDnsZones
281- }
282- dependsOn : [
283- aiSearch // Ensure AI Search exists
284- storage // Ensure Storage exists
285- cosmosDB // Ensure Cosmos DB exists
249+ name : '${uniqueSuffix }-private-endpoint'
250+ params : {
251+ aiAccountName : aiAccount .outputs .accountName // AI Services to secure
252+ aiSearchName : aiDependencies .outputs .aiSearchName // AI Search to secure
253+ storageName : aiDependencies .outputs .azureStorageName // Storage to secure
254+ cosmosDBName :aiDependencies .outputs .cosmosDBName
255+ vnetName : vnet .outputs .virtualNetworkName // VNet containing subnets
256+ peSubnetName : vnet .outputs .peSubnetName // Subnet for private endpoints
257+ suffix : uniqueSuffix // Unique identifier
258+ vnetResourceGroupName : vnet .outputs .virtualNetworkResourceGroup
259+ vnetSubscriptionId : vnet .outputs .virtualNetworkSubscriptionId // Subscription ID for the VNet
260+ cosmosDBSubscriptionId : cosmosDBSubscriptionId // Subscription ID for Cosmos DB
261+ cosmosDBResourceGroupName : cosmosDBResourceGroupName // Resource Group for Cosmos DB
262+ aiSearchSubscriptionId : aiSearchServiceSubscriptionId // Subscription ID for AI Search Service
263+ aiSearchResourceGroupName : aiSearchServiceResourceGroupName // Resource Group for AI Search Service
264+ storageAccountResourceGroupName : azureStorageResourceGroupName // Resource Group for Storage Account
265+ storageAccountSubscriptionId : azureStorageSubscriptionId // Subscription ID for Storage Account
266+ existingDnsZones : existingDnsZones
267+ }
268+ dependsOn : [
269+ aiSearch // Ensure AI Search exists
270+ storage // Ensure Storage exists
271+ cosmosDB // Ensure Cosmos DB exists
286272 ]
287- }
273+ }
288274
289275/*
290276 Creates a new project (sub-resource of the AI Services account)
@@ -313,10 +299,10 @@ module aiProject 'modules-network-secured/ai-project-identity.bicep' = {
313299 accountName : aiAccount .outputs .accountName
314300 }
315301 dependsOn : [
316- privateEndpointAndDNS
317- cosmosDB
318- aiSearch
319- storage
302+ privateEndpointAndDNS
303+ cosmosDB
304+ aiSearch
305+ storage
320306 ]
321307}
322308
@@ -338,8 +324,8 @@ module storageAccountRoleAssignment 'modules-network-secured/azure-storage-accou
338324 projectPrincipalId : aiProject .outputs .projectPrincipalId
339325 }
340326 dependsOn : [
341- storage
342- privateEndpointAndDNS
327+ storage
328+ privateEndpointAndDNS
343329 ]
344330}
345331
@@ -383,13 +369,13 @@ module addProjectCapabilityHost 'modules-network-secured/add-project-capability-
383369 projectCapHost : projectCapHost
384370 }
385371 dependsOn : [
386- aiSearch // Ensure AI Search exists
387- storage // Ensure Storage exists
388- cosmosDB
389- privateEndpointAndDNS
390- cosmosAccountRoleAssignments
391- storageAccountRoleAssignment
392- aiSearchRoleAssignments
372+ aiSearch // Ensure AI Search exists
373+ storage // Ensure Storage exists
374+ cosmosDB
375+ privateEndpointAndDNS
376+ cosmosAccountRoleAssignments
377+ storageAccountRoleAssignment
378+ aiSearchRoleAssignments
393379 ]
394380}
395381
@@ -415,9 +401,10 @@ module cosmosContainerRoleAssignments 'modules-network-secured/cosmos-container-
415401 cosmosAccountName : aiDependencies .outputs .cosmosDBName
416402 projectWorkspaceId : formatProjectWorkspaceId .outputs .projectWorkspaceIdGuid
417403 projectPrincipalId : aiProject .outputs .projectPrincipalId
404+
418405 }
419- dependsOn : [
420- addProjectCapabilityHost
421- storageContainersRoleAssignment
406+ dependsOn : [
407+ addProjectCapabilityHost
408+ storageContainersRoleAssignment
422409 ]
423410}
0 commit comments