Dane użytkownika dla maszyny wirtualnej platformy Azure

Dane użytkownika umożliwiają przekazywanie własnych skryptów lub metadanych do maszyny wirtualnej.

Co to są "dane użytkownika"

Dane użytkownika to zestaw skryptów lub innych metadanych wstawionych do maszyny wirtualnej platformy Azure w czasie aprowizacji. Każda aplikacja na maszynie wirtualnej może uzyskać dostęp do danych użytkownika z usługi Azure Instance Metadata Service (IMDS) po aprowizacji.

Dane użytkownika to nowa wersja danych niestandardowych i oferuje dodatkowe korzyści:

  • Dane użytkownika można pobrać z usługi Azure Instance Metadata Service (IMDS) po aprowizacji.

  • Dane użytkownika są trwałe. Będzie ona dostępna w okresie istnienia maszyny wirtualnej.

  • Dane użytkownika można aktualizować spoza maszyny wirtualnej bez zatrzymywania lub ponownego uruchamiania maszyny wirtualnej.

  • Zapytania dotyczące danych użytkownika można wykonywać za pośrednictwem interfejsu API GET maszyny wirtualnej/zestawu skalowania maszyn wirtualnych z opcją $expand.

Ponadto, jeśli dane użytkownika nie są dodawane w czasie aprowizacji, nadal można dodać je po aprowizacji.

Ostrzeżenie o zabezpieczeniach

Ostrzeżenie

Dane użytkownika nie będą szyfrowane, a żaden proces na maszynie wirtualnej może wykonywać zapytania dotyczące tych danych. Nie należy przechowywać poufnych informacji w danych użytkownika.

Upewnij się, że masz najnowszy interfejs API usługi Azure Resource Manager do korzystania z nowych funkcji danych użytkownika. Zawartość powinna być zakodowana w formacie base64 przed przekazaniem do interfejsu API. Rozmiar nie może przekraczać 64 KB.

Tworzenie danych użytkownika dla maszyny wirtualnej platformy Azure/zestawu skalowania maszyn wirtualnych

Dodawanie danych użytkownika podczas tworzenia nowej maszyny wirtualnej

Użyj tego szablonu usługi Azure Resource Manager, aby utworzyć nową maszynę wirtualną z danymi użytkownika. Jeśli używasz interfejsu API REST, w przypadku pojedynczych maszyn wirtualnych dodaj element "UserData" do sekcji "properties" z żądaniem PUT, aby utworzyć maszynę wirtualną.

{
  "name": "testVM",
  "location": "West US",
  "properties": {
    "hardwareProfile": {
      "vmSize": "Standard_A1"
    },
    "storageProfile": {
      "osDisk": {
        "osType": "Windows",
        "name": "osDisk",
        "createOption": "Attach",
        "vhd": {
          "uri": "http://myaccount.blob.core.windows.net/container/directory/blob.vhd"
        }
      }
    },
    "userData": "c2FtcGxlIHVzZXJEYXRh",
    "networkProfile": { "networkInterfaces" : [ { "name" : "nic1" } ] },
  }
}

Dodawanie danych użytkownika podczas tworzenia nowego zestawu skalowania maszyn wirtualnych

Korzystając z interfejsu API REST, dodaj element "UserData" do sekcji "virtualMachineProfile" z żądaniem PUT podczas tworzenia zestawu skalowania maszyn wirtualnych.

{
  "location": "West US",
  "sku": {
    "name": "Standard_A1",
    "capacity": 1
  },
  "properties": {
    "upgradePolicy": {
      "mode": "Automatic"
    },
    "virtualMachineProfile": {
      "userData": "VXNlckRhdGE=",
      "osProfile": {
        "computerNamePrefix": "TestVM",
        "adminUsername": "TestUserName",
        "windowsConfiguration": {
          "provisionVMAgent": true,
          "timeZone": "Dateline Standard Time"
        }
      },
      "storageProfile": {
        "osDisk": {
          "createOption": "FromImage",
          "caching": "ReadOnly"
        },
        "imageReference": {
          "publisher": "publisher",
          "offer": "offer",
          "sku": "sku",
          "version": "1.2.3"
        }
      },
      "networkProfile": {"networkInterfaceConfigurations":[{"name":"nicconfig1","properties":{"ipConfigurations":[{"name":"ip1","properties":{"subnet":{"id":"vmssSubnet0"}}}]}}]},
      "diagnosticsProfile": {
        "bootDiagnostics": {
          "enabled": true,
          "storageUri": "https://crputest.blob.core.windows.net"
        }
      }
    },
    "provisioningState": 0,
    "overprovision": false,
    "uniqueId": "00000000-0000-0000-0000-000000000000"
  }
}

Pobieranie danych użytkownika

Aplikacje działające na maszynie wirtualnej mogą pobierać dane użytkownika z punktu końcowego IMDS. Aby uzyskać szczegółowe informacje, zobacz przykładowy kod IMDS tutaj.

Klienci mogą pobierać istniejącą wartość danych użytkownika za pośrednictwem interfejsu API REST przy użyciu $expand=punktu końcowego userData (treść żądania może pozostać pusta).

Pojedyncze maszyny wirtualne:

GET "/subscriptions/{guid}/resourceGroups/{RGName}/providers/Microsoft.Compute/virtualMachines/{VMName}?$expand=userData"

Zestaw skalowania maszyn wirtualnych:

GET "/subscriptions/{guid}/resourceGroups/{RGName}/providers/Microsoft.Compute/virtualMachineScaleSets/{VMSSName}?$expand=userData"

Maszyna wirtualna zestawu skalowania maszyn wirtualnych:

GET "/subscriptions/{guid}/resourceGroups/{RGName}/providers/Microsoft.Compute/virtualMachineScaleSets/{VMSSName}/virtualmachines/{vmss instance id}?$expand=userData"

Aktualizowanie danych użytkownika

Za pomocą interfejsu API REST można użyć normalnego żądania PUT lub PATCH, aby zaktualizować dane użytkownika. Dane użytkownika są aktualizowane bez konieczności zatrzymywania lub ponownego uruchamiania maszyny wirtualnej.

PUT "/subscriptions/{guid}/resourceGroups/{RGName}/providers/Microsoft.Compute/ virtualMachines/{VMName}

PATCH "/subscriptions/{guid}/resourceGroups/{RGName}/providers/Microsoft.Compute/ virtualMachines/{VMName}

Właściwość VM.Properties w tych żądaniach powinna zawierać żądane pole UserData w następujący sposób:

"properties": {
        "hardwareProfile": {
          "vmSize": "Standard_D1_v2"
        },
        "storageProfile": {
          "imageReference": {
            "sku": "2016-Datacenter",
            "publisher": "MicrosoftWindowsServer",
            "version": "latest",
            "offer": "WindowsServer"
          },
          "osDisk": {
            "caching": "ReadWrite",
            "managedDisk": {
              "storageAccountType": "StandardSSD_LRS"
            },
            "name": "vmOSdisk",
            "createOption": "FromImage"
          }
        },
        "networkProfile": {
          "networkInterfaces": [
            {
              "id": "/subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/{existing-nic-name}",
              "properties": {
                "primary": true
              }
            }
          ]
        },
        "osProfile": {
          "adminUsername": "{your-username}",
          "computerName": "{vm-name}",
          "adminPassword": "{your-password}"
        },
        "diagnosticsProfile": {
          "bootDiagnostics": {
            "storageUri": "http://{existing-storage-account-name}.blob.core.windows.net",
            "enabled": true
          }
        },
        "userData": "U29tZSBDdXN0b20gRGF0YQ=="
      } 

Uwaga

Jeśli w tym przypadku przekażesz pusty ciąg "userData", dane użytkownika zostaną usunięte.

Dane użytkownika i dane niestandardowe

Dane niestandardowe nadal działają tak samo jak dzisiaj. Pamiętaj, że nie można pobrać danych niestandardowych z usługi IMDS.

Dodawanie danych użytkownika do istniejącej maszyny wirtualnej

Jeśli masz istniejącą maszynę wirtualną/zestaw skalowania maszyn wirtualnych bez danych użytkownika, nadal możesz dodać dane użytkownika do tej maszyny wirtualnej przy użyciu poleceń aktualizowania, zgodnie z opisem w sekcji "Aktualizowanie danych użytkownika". Upewnij się, że wykonasz uaktualnienie do najnowszej wersji interfejsu API usługi Azure Resource Manger.

Następne kroki

Wypróbuj usługę Azure Instance Metadata Service, dowiedz się, jak uzyskać metadane wystąpienia maszyny wirtualnej i dane użytkownika z punktu końcowego.