Bicep dağıtım betiğinden özel sanal ağa erişme

sürümüyle Microsoft.Resources/deploymentScripts 2023-08-01, dağıtım betiklerini bazı ek yapılandırmalarla özel ağlarda çalıştırabilirsiniz:

  • Kullanıcı tarafından atanan bir yönetilen kimlik oluşturun ve özelliğinde identity belirtin. Kimliği atamak için bkz . Kimlik.

  • Özel ağda bir depolama hesabı oluşturun ve mevcut depolama hesabını kullanmak için dağıtım betiğini belirtin. Daha fazla bilgi için bkz . Mevcut depolama hesabını kullanma. Depolama hesabı için bazı ek yapılandırmalar gereklidir:

    1. Depolama hesabını Azure portalında açın.
    2. Sol menüde Erişim Denetimi (IAM) öğesini ve ardından Rol atamaları sekmesini seçin.
    3. kullanıcı tarafından atanan yönetilen kimliğe Depolama Dosya Verileri Ayrıcalıklı Katkıda Bulunan rolünü ekleyin.
    4. Soldaki menüde, Güvenlik + ağ altında Ağ'ı ve ardından Güvenlik duvarları ve sanal ağlar'ı seçin.
    5. Seçili sanal ağlardan ve IP adreslerinden Etkin'i seçin.
    6. Sanal ağlar'ın altında bir alt ağ ekleyin. Aşağıdaki ekran görüntüsünde alt ağa dspvnVnet adı verilir.
    7. Özel Durumlar'ın altında, güvenilen hizmetler listesindeki Azure hizmetlerinin bu depolama hesabına erişmesine izin ver'i seçin.

    Özel ağa erişmek için depolama hesabı yapılandırma seçimlerinin ekran görüntüsü.

Aşağıdaki Bicep dosyasında, bir dağıtım betiğini çalıştırmak için ortamın nasıl yapılandırılır gösterilmektedir:

@maxLength(10) // Required maximum length, because the storage account has a maximum of 26 characters
param prefix string
param location string = resourceGroup().location
param userAssignedIdentityName string = '${prefix}Identity'
param storageAccountName string = '${prefix}stg${uniqueString(resourceGroup().id)}'
param vnetName string = '${prefix}Vnet'
param subnetName string = '${prefix}Subnet'

resource vnet 'Microsoft.Network/virtualNetworks@2023-05-01' = {
  name: vnetName
  location: location
  properties: {
    addressSpace: {
      addressPrefixes: [
        '10.0.0.0/16'
      ]
    }
    enableDdosProtection: false
    subnets: [
      {
        name: subnetName
        properties: {
          addressPrefix: '10.0.0.0/24'
          serviceEndpoints: [
            {
              service: 'Microsoft.Storage'
            }
          ]
          delegations: [
            {
              name: 'Microsoft.ContainerInstance.containerGroups'
              properties: {
                serviceName: 'Microsoft.ContainerInstance/containerGroups'
              }
            }
          ]
        }
      }
    ]
  }
}

resource subnet 'Microsoft.Network/virtualNetworks/subnets@2023-05-01' existing = {
  parent: vnet
  name: subnetName
}
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    networkAcls: {
      bypass: 'AzureServices'
      virtualNetworkRules: [
        {
          id: subnet.id
          action: 'Allow'
          state: 'Succeeded'
        }
      ]
      defaultAction: 'Deny'
    }
  }
}

resource userAssignedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
  name: userAssignedIdentityName
  location: location
}

resource storageFileDataPrivilegedContributor 'Microsoft.Authorization/roleDefinitions@2022-04-01' existing = {
  name: '69566ab7-960f-475b-8e7c-b3118f30c6bd' // Storage File Data Privileged Contributor
  scope: tenant()
}

resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  scope: storageAccount

  name: guid(storageFileDataPrivilegedContributor.id, userAssignedIdentity.id, storageAccount.id)
  properties: {
    principalId: userAssignedIdentity.properties.principalId
    roleDefinitionId: storageFileDataPrivilegedContributor.id
    principalType: 'ServicePrincipal'
  }
}

Dağıtımı test etmek için aşağıdaki Bicep dosyasını kullanabilirsiniz:

param prefix string

param location string  = resourceGroup().location
param utcValue string = utcNow()

param storageAccountName string
param vnetName string
param subnetName string
param userAssignedIdentityName string

resource vnet 'Microsoft.Network/virtualNetworks@2023-05-01' existing = {
  name: vnetName

  resource subnet 'subnets' existing = {
    name: subnetName
  }
}

resource userAssignedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' existing = {
  name: userAssignedIdentityName
}

resource dsTest 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: '${prefix}DS'
  location: location
  identity: {
    type: 'userAssigned'
    userAssignedIdentities: {
      '${userAssignedIdentity.id}': {}
    }
  }
  kind: 'AzureCLI'
  properties: {
    forceUpdateTag: utcValue
    azCliVersion: '2.52.0'
    storageAccountSettings: {
      storageAccountName: storageAccountName
    }
    containerSettings: {
      subnetIds: [
        {
          id: vnet::subnet.id
        }
      ]
    }
    scriptContent: 'echo "Hello world!"'
    retentionInterval: 'P1D'
    cleanupPreference: 'OnExpiration'
  }
}

Sonraki adımlar

Bu makalede, özel bir sanal ağa erişmeyi öğrendiniz. Daha fazlasını öğrenin: