Einrichten von Zertifikaten für die Azure CLI in Azure Stack Hub oder im Azure Stack Development Kit

Mit den Schritten in diesem Artikel können Sie die Azure-Befehlszeilenschnittstelle (Azure CLI) zum Verwalten von ASDK-Ressourcen (Azure Stack Development Kit) über Linux-, Mac- und Windows-Clientplattformen einrichten. Sie können diese Schritte auch ausführen, wenn Sie ein integriertes Azure Stack Hub-System in einer nicht verbundenen Umgebung verwenden oder wenn Ihre Zertifikate nicht von einer Zertifizierungsstelle im Programm für vertrauenswürdige Stammzertifizierungsstellen ausgestellt werden.

Dieser Artikel befasst sich mit dem Abrufen Ihrer Zertifikate und dem Einrichten der Vertrauensstellung auf Ihrem Remoteverwaltungscomputer. Informationen zum Installieren der Azure CLI und zum Herstellen einer Verbindung mit Ihrer Umgebung finden Sie unter Installieren der Azure CLI in Azure Stack Hub.

Vorbereiten für Azure CLI

Sie benötigen das Zertifizierungsstellen-Stammzertifikat für Azure Stack Hub, um die Azure CLI auf Ihrem Entwicklungscomputer verwenden zu können. Sie verwenden das Zertifikat, um Ressourcen über die CLI zu verwalten.

  • Das Azure Stack Hub-Zertifizierungsstellen-Stammzertifikat ist erforderlich, wenn Sie die CLI auf einer Arbeitsstation außerhalb der Azure Stack Hub-Umgebung nutzen.

  • Der Endpunkt der VM-Aliase stellt einen Alias (z. B. „UbuntuLTS“ oder „Win2012Datacenter“) bereit. Dieser Alias verweist beim Bereitstellen von VMs als einzelner Parameter auf einen Herausgeber, ein Angebot, eine SKU und die Version eines Image.

In den folgenden Abschnitten wird beschrieben, wie Sie diese Werte abrufen.

Exportieren des Zertifizierungsstellen-Stammzertifikats für Azure Stack Hub

Exportieren Sie das Zertifizierungsstellen-Stammzertifikat. Exportieren Sie das ASDK-Stammzertifikat wie folgt im PEM-Format:

  1. Rufen Sie den Namen Ihres Azure Stack Hub-Stammzertifikats ab:

    1. Melden Sie sich beim Portal für Azure Stack Hub-Benutzer oder Azure Stack Hub-Administratoren an.
    2. Wählen Sie das Schlosssymbol in der Adressleiste des Browsers aus.
    3. Wählen Sie im Popupfenster Verbindung ist sicher aus.
    4. Wählen Sie im Fenster „Zertifikat“ die Registerkarte Zertifizierungspfad aus.
    5. Notieren Sie sich den Namen Ihres Azure Stack Hub-Stammzertifikats, z. B. *.<locale>.<FQDN>.

    Azure Stack Hub-Stammzertifikat

  2. Erstellen Sie in Azure Stack Hub eine Windows-VM.

  3. Melden Sie sich bei dem virtuellen Computer an, öffnen Sie eine PowerShell-Eingabeaufforderung mit erhöhten Rechten, und führen Sie dann das folgende Skript aus:

      $label = "*.<locale>.<FQDN> from step 1"
      Write-Host "Getting certificate from the current user trusted store with subject CN=$label"
      $root = Get-ChildItem Cert:\CurrentUser\Root | Where-Object Subject -eq "CN=$label" | select -First 1
      if (-not $root)
      {
          Write-Error "Certificate with subject CN=$label not found"
          return
      }
    
    Write-Host "Exporting certificate"
    Export-Certificate -Type CERT -FilePath root.cer -Cert $root
    
  4. Für Linux ist auch der folgende Befehl erforderlich:

    export REQUESTS_CA_BUNDLE=~/.local/lib/python3.9/site-packages/certifi/cacert.pem
    # RECOMMENDED: set the env var automatically for your subsequent sessions
    echo 'export REQUESTS_CA_BUNDLE=~/.local/lib/python3.9/site-packages/certifi/cacert.pem' >> ~/.bash_profile
    
  5. Kopieren Sie das Zertifikat auf Ihren lokalen Computer.

Einrichten des Endpunkts für den VM-Alias

Sie können einen öffentlich zugänglichen Endpunkt einrichten, der eine VM-Aliasdatei hostet. Bei der VM-Aliasdatei handelt es sich um eine JSON-Datei, die einen allgemeinen Namen für ein Image bereitstellt. Sie verwenden den Namen, wenn Sie eine VM bereitstellen, als Azure CLI-Parameter.

  1. Wenn Sie ein benutzerdefiniertes Image veröffentlichen, notieren Sie sich die während der Veröffentlichung angegebenen Informationen zu Herausgeber, Angebot, SKU und Version. Wenn es sich um ein Image aus dem Marketplace handelt, können Sie die Informationen mithilfe des Get-AzureVMImage-Cmdlets anzeigen.

  2. Laden Sie die Beispieldatei von GitHub herunter.

  3. Erstellen Sie ein Speicherkonto in Azure Stack Hub. Erstellen Sie anschließend einen Blobcontainer. Legen Sie die Zugriffsrichtlinie auf „Öffentlich“ fest.

  4. Laden Sie die JSON-Datei in den neuen Container hoch. Wenn das erledigt ist, können Sie die URL des Blobs anzeigen. Wählen Sie den Blobnamen aus, und wählen Sie dann die URL in den „Blob-Eigenschaften“ aus.

Vertrauen des Zertifikats

Sie müssen das Zertifizierungsstellen-Stammzertifikat auf Ihrem Remotecomputer als vertrauenswürdig konfigurieren, um die Azure CLI mit dem ASDK zu verwenden.

  1. Suchen Sie den Speicherort des Zertifikats auf Ihrem Computer. Der Speicherort kann je nachdem, wo Sie Python installiert haben, variieren.

  2. Öffnen Sie eine Eingabeaufforderung oder eine PowerShell-Eingabeaufforderung mit erhöhten Rechten, und geben Sie den folgenden Befehl ein, um den Speicherort zu ermitteln: az --version. Die Version und der Python-Speicherort werden in der Eingabeaufforderung angezeigt.

    azure-cli                         2.30.0
    
    core                              2.30.0
    telemetry                          1.0.6
    
    Python location 'C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\python.exe'
    Extensions directory 'C:\Users\username\.azure\cliextensions'
    
    Python (Windows) 3.8.9 (tags/v3.8.9:a743f81, Apr  6 2021, 13:22:56) [MSC v.1928 32 bit (Intel)]
    
    Legal docs and information: aka.ms/AzureCliLegal
    
    Your CLI is up-to-date.
    
    Please let us know how we are doing: https://aka.ms/azureclihats
    and let us know if you're interested in trying out our newest features: https://aka.ms/CLIUXstudy
    
  3. Wechseln Sie in das Verzeichnis, in dem Azure CLI Python installiert hat. Verwenden Sie beispielsweise den Speicherort in Schritt 2, cd "C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\.

  4. Geben Sie folgenden Befehl ein:

    .\python -c "import certifi; print(certifi.where())"
    

    Dadurch wird der Pfad des Zertifikatspeicherorts auf Ihrem Computer zurückgegeben. Der Pfad hängt davon ab, welches BS Sie verwenden und welche Python-Version installiert ist. Beispiel:

    C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\lib\site-packages\certifi\cacert.pem
    

    Notieren Sie sich den Speicherort des Zertifikats. Der Pfad wird im nächsten Schritt benötigt.

  5. Stufen Sie das Zertifizierungsstellen-Stammzertifikat für Azure Stack Hub als vertrauenswürdig ein, indem Sie es an das vorhandene Python-Zertifikat anfügen.

    $cerFile = "<Fully qualified path to the cer certificate exported from `
    your Azure Stack Hub and saved. For example: C:\Users\user1\Downloads\root.cer"
    $pythonCertStore = <result from step 4>
    
    $cerDir = Split-Path -Parent $cerFile
    $pemFile = "$cerDir\root.pem"
    Write-Host "Converting certificate to PEM format at $pemFile"
    certutil -encode $cerFile $pemFile
    $root = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
    $root.Import($pemFile)
    
    # X509Certificate2.Thumbprint calculates SHA1 hash of the public key. You can get sha1 of the pem file by using openssl, 
    # e.g. openssl x509 -noout -fingerprint -sha1 -inform pem -in ./root.pem
    # Alternatively, 'Get-FileHash' gives the same value (without ':') for the corresponding cer file
    # Since the thumbprint is a unique value for the certificate, it is commonly used to find a particular certificate in a certificate store
    Write-Host "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 $pemFile -Raw).ToString().Replace("`r`n","`n")
    
    $rootCertEntry = "`n" + $issuerEntry + "`n" + $subjectEntry + "`n" + $labelEntry + "`n" + `
    $serialEntry + "`n" + $md5Entry + "`n" + $sha1Entry + "`n" + $sha256Entry + "`n" + $certText
    
    Write-Host "Adding the certificate content to Python Cert store"
    Add-Content $pythonCertStore $rootCertEntry
    
    Write-Host "Python Cert store was updated to allow the Azure Stack Hub CA root certificate"
    

Anweisungen zum Installieren und Herstellen einer Verbindung mit der Azure CLI finden Sie unter Installieren der Azure CLI in Azure Stack Hub.

Nächste Schritte

Installieren der Azure CLI in Azure Stack Hub