Freigeben über


Zugreifen auf ein privates virtuelles Netzwerk über ein Bicep-Bereitstellungsskript

Mit Version 2023-08-01 von Microsoft.Resources/deploymentScripts können Sie Bereitstellungsskripts in privaten Netzwerken mit einigen zusätzlichen Konfigurationen ausführen:

  • Erstellen Sie eine benutzerseitig zugewiesene verwaltete Identität, und geben Sie sie in der Eigenschaft identity an. Informationen zum Zuweisen der Identität finden Sie unter Identität.

  • Erstellen Sie ein Speicherkonto im privaten Netzwerk, und geben Sie das Bereitstellungsskript für die Verwendung des vorhandenen Speicherkontos an. Weitere Informationen finden Sie unter Verwenden eines vorhandenen Speicherkontos. Für das Speicherkonto sind einige zusätzlichen Konfigurationsschritte erforderlich:

    1. Öffnen Sie das Speicherkonto im Azure-Portal.
    2. Wählen Sie im linken Menü Zugriffssteuerung (IAM) aus, und wählen Sie dann die Registerkarte Rollenzuweisungen aus.
    3. Fügen Sie der benutzerseitig zugewiesenen verwalteten Identität die Rolle Privilegierter Mitwirkender für Speicherdateidaten zu.
    4. Wählen Sie im linken Menü unter Sicherheit + Netzwerk die Option Netzwerk und dann Firewalls und virtuelle Netzwerke aus.
    5. Wählen Sie Aktiviert von ausgewählten virtuellen Netzwerken und IP-Adressen aus.
    6. Fügen Sie unter Virtuelle Netzwerke ein Subnetz hinzu. Im folgenden Screenshot heißt das Subnetz dspvnVnet.
    7. Wählen Sie unter Ausnahmen die Option Allow Azure services on the trusted services list to access this storage account (Für Azure-Dienste aus der Liste vertrauenswürdiger Dienste Zugriff auf dieses Speicherkonto zulassen) aus.

    Screenshot der Auswahl zum Konfigurieren eines Speicherkontos für den Zugriff auf ein privates Netzwerk.

Die folgende Bicep-Datei zeigt, wie Sie die Umgebung für die Ausführung eines Bereitstellungsskripts konfigurieren:

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

Sie können die folgende Bicep-Datei zum Testen der Bereitstellung verwenden:

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

Nächste Schritte

In diesem Artikel haben Sie erfahren, wie Sie auf ein privates virtuelles Netzwerk zugreifen. Weitere Informationen: