Bagikan melalui


Mengakses jaringan virtual privat dari skrip penyebaran Bicep

Dengan Microsoft.Resources/deploymentScripts versi 2023-08-01, Anda dapat menjalankan skrip penyebaran di jaringan privat dengan beberapa konfigurasi tambahan:

  • Buat identitas terkelola yang ditetapkan pengguna, dan tentukan di identity properti . Untuk menetapkan identitas, lihat Identitas.

  • Buat akun penyimpanan di jaringan privat, dan tentukan skrip penyebaran untuk menggunakan akun penyimpanan yang ada. Untuk informasi selengkapnya, lihat Menggunakan akun penyimpanan yang sudah ada. Beberapa konfigurasi tambahan diperlukan untuk akun penyimpanan:

    1. Buka akun penyimpanan di portal Azure.
    2. Di menu sebelah kiri, pilih Kontrol Akses (IAM), lalu pilih tab Penetapan peran.
    3. Tambahkan peran Storage File Data Privileged Contributor ke identitas terkelola yang ditetapkan pengguna.
    4. Di menu sebelah kiri, di bawah Keamanan + jaringan, pilih Jaringan, lalu pilih Firewall dan jaringan virtual.
    5. Pilih Diaktifkan dari jaringan virtual dan alamat IP yang dipilih.
    6. Di bawah Jaringan virtual, tambahkan subnet. Dalam cuplikan layar berikut, subnet disebut dspvnVnet.
    7. Di bawah Pengecualian, pilih Izinkan layanan Azure pada daftar layanan tepercaya untuk mengakses akun penyimpanan ini.

    Cuplikan layar pilihan untuk mengonfigurasi akun penyimpanan untuk mengakses jaringan privat.

File Bicep berikut menunjukkan cara mengonfigurasi lingkungan untuk menjalankan skrip penyebaran:

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

Anda dapat menggunakan file Bicep berikut untuk menguji penyebaran:

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

Langkah berikutnya

Dalam artikel ini, Anda mempelajari cara mengakses jaringan virtual privat. Untuk mempelajari selengkapnya: