Delen via


Toegang krijgen tot een particulier virtueel netwerk vanuit een Bicep-implementatiescript

Met Microsoft.Resources/deploymentScripts versie 2023-08-01kunt u implementatiescripts uitvoeren in privénetwerken met een aantal extra configuraties:

  • Maak een door de gebruiker toegewezen beheerde identiteit en geef deze op in de identity eigenschap. Zie Identiteit om de identiteit toe te wijzen.

  • Maak een opslagaccount in het privénetwerk en geef het implementatiescript op voor het gebruik van het bestaande opslagaccount. Zie Een bestaand opslagaccount gebruiken voor meer informatie. Er is een extra configuratie vereist voor het opslagaccount:

    1. Open het opslagaccount in Azure Portal.
    2. Selecteer in het linkermenu Toegangsbeheer (IAM) en selecteer vervolgens het tabblad Roltoewijzingen .
    3. Voeg de rol Inzender voor opslagbestandsgegevens toe aan de door de gebruiker toegewezen beheerde identiteit.
    4. Selecteer in het linkermenu onder Beveiliging en netwerken de optie Netwerken en selecteer vervolgens Firewalls en virtuele netwerken.
    5. Selecteer Ingeschakeld in geselecteerde virtuele netwerken en IP-adressen.
    6. Voeg onder Virtuele netwerken een subnet toe. In de volgende schermopname heet het subnet dspvnVnet.
    7. Selecteer onder Uitzonderingen Azure-services toestaan in de lijst met vertrouwde services voor toegang tot dit opslagaccount.

    Schermopname van selecties voor het configureren van een opslagaccount voor toegang tot een privénetwerk.

In het volgende Bicep-bestand ziet u hoe u de omgeving configureert voor het uitvoeren van een implementatiescript:

@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'
  }
}

U kunt het volgende Bicep-bestand gebruiken om de implementatie te testen:

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'
  }
}

Volgende stappen

In dit artikel hebt u geleerd hoe u toegang krijgt tot een particulier virtueel netwerk. Zie voor meer informatie: