Verwendung der Azure CLI für offline Vorgänge in Azure Local

In diesem Artikel wird erläutert, wie Sie die Azure Command-Line Interface (CLI) und ihre Erweiterungen für getrennte Vorgänge für Azure Local installieren und konfigurieren. Sie bietet eine Übersicht über CLI, unterstützte Versionen, Installationsschritte und das Einrichten der CLI für getrennte Vorgänge.

Informationen zu Azure CLI

CLI ist eine vielseitige, plattformübergreifende Befehlszeilenschnittstelle, mit der Sie Azure-Ressourcen für lokale getrennte Azure-Vorgänge erstellen und verwalten können. Weitere Informationen finden Sie unter Was ist Azure CLI.

Unterstützte Versionen für CLI und Erweiterung

Die für Azure Local-Vorgänge im getrennten Modus unterstützte Version der Azure CLI ist 2.81.0. Siehe Azure CLI Release-Hinweise. Führen Sie Folgendes aus az version, um die installierte Version zu überprüfen:

az version  

Weitere Informationen finden Sie unter Azure CLI-Befehle.

Installieren der Azure-Befehlszeilenschnittstelle

So installieren Sie die 32-Bit-Version von CLI:

  1. Laden Sie Version 2.78.0 herunter.
  2. Installieren Sie die CLI lokal auf Linux-, macOS- oder Windows-Computern.

Hinweis

Die unterstützte Version der Azure CLI für Azure Local-Vorgänge im getrennten Modus ist 2.81.0. Installieren Sie für lokale Azure-Knoten die 32-Bit-Azure CLI, um Bereitstellungsfehler zu vermeiden. Verwenden Sie die 64-Bit-Azure CLI auf Clientcomputern.

Konfigurieren von Zertifikaten für Azure CLI

Um CLI zu verwenden, müssen Sie dem Stammzertifikat der Zertifizierungsstelle (CA) auf Ihrem Computer vertrauen.

Für getrennte Vorgänge:

  1. Erfahren Sie mehr über die Public Key-Infrastruktur (PKI) für Azure Local mit getrennten Vorgängen.
  2. Richten Sie die Zertifikatvertrauensstellung für Azure CLI über PowerShell ein.

Wählen Sie eine der folgenden Python-Vertrauensstellungsoptionen aus:

  • Option 1: Verwenden des Betriebssystemvertrauensspeichers (empfohlen). Installieren Sie ein Python-Modul, mit dem Python den Os Trust Store verwenden kann.

    • Führen Sie dieses Windows-Beispiel in PowerShell aus, um das Pip-system-certs-Modul in der Python-Umgebung zu installieren, die mit Azure CLI gebündelt ist. Ersetzen Sie die Beispielpfade durch den tatsächlichen Pfad ihres Systems.

      & "C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\python.exe" -m pip install pip-system-certs
      
    • Wenn Ihr Client das Stammzertifikat nicht importiert hat, verwenden Sie diesen Befehl, um es zu importieren.

      $applianceRootCertFile = "C:\AzureLocalDisconnectedOperations\applianceRoot.cer"
      Import-Certificate -FilePath $applianceRootCertFile -CertStoreLocation Cert:\LocalMachine\Root -Confirm:$false
      
  • Option 2: Aktualisieren Sie die PEM-Datei , die von der Azure CLI-Installation verwendet wird.

    Hier ist ein Beispiel für ein PowerShell-Skript:

    # Define the helper method
    function UpdatePythonCertStore
    {
        [CmdletBinding()]
        param (
            [Parameter(Mandatory = $false)]
            [ValidateScript({Test-Path $_})]
            [string]
            $ApplianceRootCertPath = "$env:APPDATA\Appliance\applianceRoot.cer"
        )
    
        Write-Verbose "[START] Updating CLI cert store with Appliance root cert at $ApplianceRootCertPath"
        $cerFile = $ApplianceRootCertPath
        Write-Verbose "Updating Python cert store with $cerFile"
    
        # C:\Program Files\Microsoft SDKs\Azure\CLI2
        $azCli2Path = Split-Path -Path (Split-Path -Path (Get-Command -Name az).Source -Parent) -Parent
        $pythonCertStore = "${azCli2Path}\Lib\site-packages\certifi\cacert.pem"
    
         Write-Verbose "Python cert store location $pythonCertStore"
    
        $root = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new()
    
        if(Test-Path $cerFile)
        {
            $root.Import($cerFile)
            Write-Verbose "$(Get-Date) Extracting required information from the cert file"
            $md5Hash    = (Get-FileHash -Path $cerFile -Algorithm MD5).Hash.ToLower()
            $sha1Hash   = (Get-FileHash -Path $cerFile -Algorithm SHA1).Hash.ToLower()
            $sha256Hash = (Get-FileHash -Path $cerFile -Algorithm SHA256).Hash.ToLower()
            $issuerEntry  = [string]::Format("# Issuer: {0}", $root.Issuer)
            $subjectEntry = [string]::Format("# Subject: {0}", $root.Subject)
            $labelEntry   = [string]::Format("# Label: {0}", $root.Subject.Split('=')[-1])
            $serialEntry  = [string]::Format("# Serial: {0}", $root.GetSerialNumberString().ToLower())
            $md5Entry     = [string]::Format("# MD5 Fingerprint: {0}", $md5Hash)
            $sha1Entry    = [string]::Format("# SHA1 Fingerprint: {0}", $sha1Hash)
            $sha256Entry  = [string]::Format("# SHA256 Fingerprint: {0}", $sha256Hash)
            $certText = (Get-Content -Path $cerFile -Raw).ToString().Replace("`r`n","`n")
            $rootCertEntry = "`n" + $issuerEntry + "`n" + $subjectEntry + "`n" + $labelEntry + "`n" + `
                                $serialEntry + "`n" + $md5Entry + "`n" + $sha1Entry + "`n" + $sha256Entry + "`n" + $certText
            Write-Verbose "Adding the certificate content to Python Cert store"
            Add-Content $pythonCertStore $rootCertEntry
            Write-Verbose "Python Cert store was updated to allow the Azure Stack CA root certificate"
        }
        else
        {
            $errorMessage = "$cerFile required to update CLI was not found."
            Write-Verbose "ERROR: $errorMessage"
            throw "UpdatePythonCertStore: $errorMessage"
        }
    
        Write-Verbose "[END] Updating CLI cert store"
    }
    
    # Run the helper method in PowerShell:
    UpdatePythonCertStore -ApplianceRootCertPath C:\AzureLocalDisconnectedOperations\applianceRoot.cer
    

Einrichten der Azure CLI für getrennte Vorgänge

Führen Sie die folgenden Schritte aus, um Azure CLI für getrennte Vorgänge in Azure Local einzurichten:

  1. Führen Sie die Get-ApplianceAzCliCloudConfig Funktion aus, um die JSON-Datei zu generieren, die die erforderlichen Cloudendpunkte enthält.

    Hier ist ein Beispiel für ein PowerShell-Skript, das Sie ausführen können:

    function Get-ApplianceAzCliCloudConfig
    {
        [CmdletBinding()]
        [OutputType([String])]
        param (
        [Parameter(Position = 0, Mandatory = $true)]
        [string]
        $fqdn,
        [Parameter(Position = 1, Mandatory = $false)]
        [string]
        $exportToFile
        )
    
    $cloudConfig = @"
    {
        "suffixes":  {
                        "keyvaultDns":  ".vault.autonomous.cloud.private",
                        "storageEndpoint":  "autonomous.cloud.private",
                        "acrLoginServerEndpoint":  ".edgeacr.autonomous.cloud.private"
                    },
        "endpoints":  {
                        "activeDirectory":  "https://login.autonomous.cloud.private/adfs",
                        "activeDirectoryGraphResourceId":  "https://graph.autonomous.cloud.private",
                        "resourceManager":  "https://armmanagement.autonomous.cloud.private",
                        "microsoftGraphResourceId":  "https://graph.autonomous.cloud.private",
                        "activeDirectoryResourceId":  "https://armmanagement.autonomous.cloud.private"
                    }
    }
    "@ -replace "autonomous.cloud.private", $fqdn
    
    if ($exportToFile)
    {
        $cloudConfig | Set-Content -Path "$exportToFile"
    }
    return $cloudConfig
    } 
    

    Verwenden Sie diese Hilfsmethode, um die Endpunkte abzurufen und eine CloudConfig-Datei für CLI zu erstellen:

    az config set core.enable_broker_on_windows=false
    az config set core.instance_discovery=false
    $fqdn = "autonomous.cloud.private"
    $cloudConfigJson = Get-ApplianceAzCliCloudConfig -fqdn $fqdn
    
    # Write the content to a file cloudConfig.json
    $cloudConfigJson | Out-File -FilePath cloudConfig.json
    

    Hier ist ein Beispiel für Inhalte in der cloudconfig.json-Datei :

    { 
        "suffixes":  {
                      "keyvaultDns":  ".vault.autonomous.cloud.private",
                      "storageEndpoint":  "autonomous.cloud.private",
                      "acrLoginServerEndpoint":  ".edgeacr.autonomous.cloud.private"
                  },
         "endpoints":  {
                       "activeDirectory":  "https://login.autonomous.cloud.private/adfs",
                       "activeDirectoryGraphResourceId":  "https://graph.autonomous.cloud.private",
                       "resourceManager":  "https://armmanagement.autonomous.cloud.private",
                       "microsoftGraphResourceId":  "https://graph.autonomous.cloud.private",
                       "activeDirectoryResourceId":  "https://armmanagement.autonomous.cloud.private"
                   }
    }
    
  2. Registrieren Sie die Cloudkonfiguration mit CLI mithilfe der cloudConfig.json-Datei .

    az cloud register -n 'azure.local' --cloud-config '@cloudconfig.json'
    az cloud set -n azure.local
    

Erweiterungen für Azure CLI

Azure CLI-Erweiterungen sind Python-Räder, die als CLI-Befehle ausgeführt werden, aber nicht mit CLI ausgeliefert werden. Mit Erweiterungen können Sie auf experimentelle Befehle und Vorabversionen zugreifen und eigene CLI-Schnittstellen erstellen. Wenn Sie eine Erweiterung zum ersten Mal verwenden, erhalten Sie eine Aufforderung zur Installation.

Führen Sie den folgenden Befehl aus, um eine Liste der verfügbaren Erweiterungen abzurufen:

az extension list-available --output table  

Weitere Informationen finden Sie unter Installieren und Verwalten von Azure CLI-Erweiterungen.

Führen Sie den folgenden Befehl aus, um eine bestimmte Version einer Erweiterung zu installieren:

az extension add --name anextension --version 1.0.0

In der folgenden Tabelle sind die CLI-Erweiterungen aufgeführt, die von azure Local disconnected Operations, der maximalen unterstützten Erweiterungsversion und Installationsinformationen unterstützt werden.

Getrennte Betriebsdienste Erweiterungen Maximale Unterstützte Erweiterungsversion Installationsinformationen
Arc-fähige Server az Connected Machine 1.1.0 az connectedmachine
Kubernetes-Cluster mit Azure Arc-Unterstützung. az connectedk8s

az k8s-erweiterung

az k8s-configuration

az customlocation
connectedk8s: 1.6.2

k8s-Erweiterung: 1.7.0

k8sconfiguration: 2.0.0

customlocation: 0.1.4
az connectedk8s

az k8s-erweiterung

az k8s-Konfigurationsfluss

az customlocation
Azure-Lokale VMs, aktiviert durch Azure Arc az arcappliance

az k8s-erweiterung

az customlocation

az stack-hci-vm
arcappliance: 1.7.1

k8s-Erweiterung: 1.7.0

customlocation: 0.1.4

stack-hci-vm: 1.12.0
Aktivieren von Azure VM-Erweiterungen mit CLI

Behandeln von Problemen mit der VM-Erweiterung von Arc-fähigen Servern
Azure Kubernetes Service (AKS) Arc auf Azure Lokal az arcappliance

az k8s-erweiterung

az customlocation

az stack-hci-vm

az aksarc
arcappliance: 1.7.1

k8s-Erweiterung: 1.7.0

customlocation: 0.1.4

stack-hci-vm: 1.12.0

aksarc: 1.2.23
Erstellen von Kubernetes-Clustern mit Azure CLI
Azure Lokaler Ressourcenanbieter Arcappliance

k8s-Erweiterung

benutzerdefinierter Standort

stack-hci-vm

connectedk8s

stack-hci
arcappliance: 1.7.1

k8s-Erweiterung: 1.7.0

customlocation: 0.1.4

stack-hci-vm: 1.12.0

connectedk8s: 1.6.2

stack-hci: 1.1.0
Installieren und Verwalten von Azure CLI-Erweiterungen
Azure Container Registry (Registrierungsdienst für Container von Azure) Integriert
Azure-Richtlinie Integriert Schnellstart: Erstellen einer Richtlinienzuweisung zum Identifizieren nicht kompatibler Ressourcen mithilfe der Azure CLI
Azure Key Vault (ein Dienst zur sicheren Verwaltung kryptografischer Schlüssel) Integriert Schnellstartanleitung: Erstellen eines Key Vaults mit der Azure CLI

Anhang

Azure-Abonnement erstellen (bei getrennten Operationen)

Führen Sie den folgenden Befehl aus, um ein Azure-Abonnement für Offline-Vorgänge zu erstellen:

az account alias create --name 'aliasName’ --billing-scope '/providers/Microsoft.Billing/billingAccounts/defaultaccount' --display-name 'displayName' --workload 'Production' 

Wenn Sie einen anderen Besitzer als den aktuellen Benutzer angeben möchten, übergeben Sie den subscriptionOwnerId Parameter und verwenden Sie az restdiesen.

Ein Beispiel:

$ownerId='<Owner ID>'
az rest --method put --uri "/providers/Microsoft.Subscription/aliases/aliastest?api-version=2021-10-01" --headers content-type="application/json" --body '{\"properties\": {\"displayName\": \"User Subscription 1\", \"workload\": \"Production\", \"billingScope\": \"/providers/Microsoft.Billing/billingAccounts/defaultaccount\", \"additionalProperties\":{\"subscriptionOwnerId\":\"'+$ownerId+'\"}}}' 

Erstellen eines Dienstprinzipals für die Knotenregistrierung

Verwenden Sie das Operatorkonto, um einen Dienstprinzipal für den Arc-Initialisierungsvorgang jedes lokalen Azure-Knotens zu erstellen. Für bootstrap ist die Rolle "Besitzer" auf Abonnementebene erforderlich.

Um den Dienstprinzipal zu erstellen, führen Sie die folgenden Schritte aus:

  1. Konfigurieren Sie CLI auf Ihrem Clientcomputer, und führen Sie diesen Befehl aus:

    $subscriptionName = 'Starter subscription'
    $resourcegroup = 'azurelocal-disconnected-operations'
    $appname = 'azlocalclusapp'      
    az cloud set -n 'azure.local'
    az login      
    az account set --subscription $subscriptionName
    $subscriptionId = az account show --query id --output tsv
    $rg = (az group create -n $resourcegroup -l autonomous)| ConvertFrom-Json  
    az ad sp create-for-rbac -n $appname --role Owner --scopes "/subscriptions/$($subscriptionId)"  
    

    Hier ist eine Beispielausgabe:

    {  
      "appId": "<AppId>",  
      "displayName": "azlocalclusapp",  
      "password": "<RETRACTED>",  
      "tenant": "<RETRACTED>"  
    }
    
  2. Kopieren Sie die AppID und das Kennwort , um sie in der Befehlszeilenautomatisierung zu verwenden. Melden Sie sich mit diesem Dienstprinzipal anstelle eines interaktiven Anmelde- oder Gerätecodes an.

Problembehandlung bei Azure CLI

Führen Sie CLI-Befehle mit dem --debug Parameter aus, um detaillierte Protokolle und eine Stapelablaufverfolgung zu erhalten, um Probleme mit Azure CLI zu beheben. Wenn der Client Ihrer Stammzertifizierungsstelle nicht vertraut, können Anforderungen an private Cloud-Endpunkte mit SSL- oder Verbindungsfehlern fehlschlagen.