Configurazione dei certificati per l'interfaccia della riga di comando di Azure nell'hub di Azure Stack o in Azure Stack Development Kit

Seguire la procedura descritta in questo articolo per configurare l'interfaccia della riga di comando di Azure Command-Line per gestire le risorse di Azure Stack Development Kit (ASDK) dalle piattaforme client Linux, Mac e Windows. È anche possibile seguire questa procedura se si usa un hub di Azure Stack di sistema integrato in un ambiente disconnesso o se i certificati non vengono rilasciati da un'autorità di certificazione nel programma radice attendibile.

Questo articolo illustra come ottenere i certificati e considerarli attendibili nel computer di gestione remota. Per installare l'interfaccia della riga di comando di Azure e connettersi all'ambiente, vedere Installare l'interfaccia della riga di comando di Azure nell'hub di Azure Stack.

Preparare l'interfaccia della riga di comando di Azure

Per usare l'interfaccia della riga di comando di Azure nel computer di sviluppo, è necessario il certificato radice della CA per l'hub di Azure Stack. Usare il certificato per gestire le risorse tramite l'interfaccia della riga di comando.

  • Il certificato radice ca dell'hub di Azure Stack è necessario se si usa l'interfaccia della riga di comando da una workstation all'esterno dell'ambiente dell'hub di Azure Stack.

  • L'endpoint alias della macchina virtuale fornisce un alias, ad esempio "UbuntuLTS" o "Win2012Datacenter". Questo alias fa riferimento a un editore di immagini, a un'offerta, a SKU e a una versione come singolo parametro durante la distribuzione di macchine virtuali.

Le sezioni seguenti descrivono come ottenere questi valori.

Esportare il certificato radice della CA dell'hub di Azure Stack

Esportare il certificato radice della CA. Per esportare il certificato radice ASDK in formato PEM:

  1. Ottenere il nome del certificato radice dell'hub di Azure Stack:

    1. Accedere all'utente dell'hub di Azure Stack o al portale di amministrazione dell'hub di Azure Stack.
    2. Selezionare il blocco nella barra degli indirizzi del browser.
    3. Nella finestra popup selezionare Connessione sicura.
    4. Nella finestra Certificato selezionare la scheda Percorso certificazione .
    5. Prendere nota del nome del certificato radice dell'hub di Azure Stack, ad esempio *.<locale>.<FQDN>

    Certificato radice dell'hub di Azure Stack

  2. Creare una macchina virtuale Windows nell'hub di Azure Stack.

  3. Accedere alla macchina virtuale, aprire un prompt di PowerShell con privilegi elevati e quindi eseguire lo script seguente:

      $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. Per Linux, è necessario anche il comando seguente:

    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. Copiare il certificato nel computer locale.

Configurare l'endpoint alias della macchina virtuale

È possibile configurare un endpoint accessibile pubblicamente che ospita un file alias della macchina virtuale. Il file alias della macchina virtuale è un file JSON che fornisce un nome comune per un'immagine. Il nome viene usato quando si distribuisce una macchina virtuale come parametro dell'interfaccia della riga di comando di Azure.

  1. Se si pubblica un'immagine personalizzata, prendere nota delle informazioni sull'editore, sull'offerta, sullo SKU e sulla versione specificate durante la pubblicazione. Se si tratta di un'immagine dal marketplace, è possibile visualizzare le informazioni usando il Get-AzureVMImage cmdlet .

  2. Scaricare il file di esempio da GitHub.

  3. Creare un account di archiviazione nell'hub di Azure Stack. Al termine, creare un contenitore BLOB. Impostare i criteri di accesso su "public".

  4. Caricare il file JSON nel nuovo contenitore. Al termine, è possibile visualizzare l'URL del BLOB. Selezionare il nome del BLOB e quindi selezionare l'URL dalle proprietà del BLOB.

Considerare attendibile il certificato

Per usare l'interfaccia della riga di comando di Azure con ASDK, è necessario considerare attendibile il certificato radice della CA nel computer remoto.

  1. Trovare il percorso del certificato nel computer. Il percorso può variare a seconda della posizione in cui è stato installato Python.

  2. Per trovare il percorso, aprire un prompt cmd o un prompt di PowerShell con privilegi elevati e digitare: az --version. La versione e il percorso python vengono visualizzati nel prompt.

    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. Passare alla directory in cui l'interfaccia della riga di comando di Azure ha installato Python. Ad esempio, usando il percorso nel passaggio 2, cd "C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\.

  4. Digitare il comando seguente:

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

    Verrà restituito il percorso del percorso del certificato nel computer. Il percorso specifico dipende dal sistema operativo e dalla versione di Python installata. Ad esempio:

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

    Prendere nota del percorso del certificato. Il percorso verrà usato nel passaggio successivo.

  5. Considerare attendibile il certificato radice ca dell'hub di Azure Stack aggiungendolo al certificato Python esistente.

    $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"
    

Per istruzioni sull'installazione e la connessione con l'interfaccia della riga di comando di Azure, vedere Installare l'interfaccia della riga di comando di Azure nell'hub di Azure Stack.

Passaggi successivi

Installare l'interfaccia della riga di comando di Azure nell'hub di Azure Stack