Configurar certificados para a CLI do Azure no Azure Stack Hub ou no Azure Stack Development Kit

Siga os passos neste artigo para configurar a Interface de Command-Line do Azure (CLI) para gerir recursos do Azure Stack Development Kit (ASDK) a partir de plataformas cliente Linux, Mac e Windows. Também pode seguir estes passos se estiver a utilizar um sistema integrado do Azure Stack Hub num ambiente desligado ou se os certificados não forem emitidos por uma AC no programa de raízes fidedignas.

Este artigo aborda a obtenção dos certificados e a confiança dos mesmos no seu computador de gestão remota. Para instalar a CLI do Azure e ligar ao seu ambiente, veja Instalar a CLI do Azure no Azure Stack Hub.

Preparar para a CLI do Azure

Precisa do certificado de raiz da AC para o Azure Stack Hub utilizar a CLI do Azure no seu computador de desenvolvimento. Utilize o certificado para gerir recursos através da CLI.

  • O certificado de raiz da AC do Azure Stack Hub é necessário se estiver a utilizar a CLI de uma estação de trabalho fora do ambiente do Azure Stack Hub.

  • O ponto final de aliases da máquina virtual fornece um alias, como "UbuntuLTS" ou "Win2012Datacenter". Este alias faz referência a um publicador de imagens, oferta, SKU e versão como um único parâmetro ao implementar VMs.

As secções seguintes descrevem como obter estes valores.

Exportar o certificado de raiz da AC do Azure Stack Hub

Exporte o certificado de raiz da AC. Para exportar o certificado de raiz do ASDK no formato PEM:

  1. Obtenha o nome do certificado de raiz do Azure Stack Hub:

    1. Inicie sessão no Portal do Utilizador do Azure Stack Hub ou administrador do Azure Stack Hub.
    2. Selecione o bloqueio na barra de endereço do browser.
    3. Na janela de pop-up, selecione A ligação é segura.
    4. Na janela Certificado, selecione o separador Caminho da Certificação .
    5. Anote o nome do certificado de raiz do Azure Stack Hub, por exemplo, *.<locale>.<FQDN>

    Certificado de Raiz do Azure Stack Hub

  2. Crie uma VM do Windows no Azure Stack Hub.

  3. Inicie sessão na VM, abra uma linha de comandos elevada do PowerShell e, em seguida, execute o seguinte script:

      $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. Para Linux, também é necessário o seguinte comando:

    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. Copie o certificado para o seu computador local.

Configurar o ponto final do alias da máquina virtual

Pode configurar um ponto final acessível publicamente que aloja um ficheiro de alias de VM. O ficheiro de alias da VM é um ficheiro JSON que fornece um nome comum para uma imagem. Utilize o nome quando implementa uma VM como um parâmetro da CLI do Azure.

  1. Se publicar uma imagem personalizada, tome nota do publicador, oferta, SKU e informações de versão que especificou durante a publicação. Se for uma imagem do marketplace, pode ver as informações com o Get-AzureVMImage cmdlet .

  2. Transfira o ficheiro de exemplo a partir do GitHub.

  3. Crie uma conta de armazenamento no Azure Stack Hub. Quando terminar, crie um contentor de blobs. Defina a política de acesso como "pública".

  4. Carregue o ficheiro JSON para o novo contentor. Quando terminar, pode ver o URL do blob. Selecione o nome do blob e, em seguida, selecione o URL nas propriedades do blob.

Confiar no certificado

Para utilizar a CLI do Azure com o ASDK, tem de confiar no certificado de raiz da AC no seu computador remoto.

  1. Localize a localização do certificado no seu computador. A localização pode variar consoante o local onde instalou o Python.

  2. Para localizar a localização, abra uma linha de comandos CMD ou uma linha de comandos elevada do PowerShell e escreva: az --version. A versão e a localização do Python são apresentadas na linha de comandos.

    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. Mude para o diretório onde a CLI do Azure instalou o Python. Por exemplo, com a localização no passo 2, cd "C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\.

  4. Escreva o seguinte comando:

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

    Isto irá devolver o caminho da localização do certificado no seu computador. O seu caminho específico depende do seu SO e da versão do Python que instalou. Por exemplo:

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

    Anote a localização do certificado. Irá utilizar o caminho no próximo passo.

  5. Confie no certificado de raiz da AC do Azure Stack Hub ao anexá-lo ao certificado Python existente.

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

Para obter instruções sobre como instalar e ligar à CLI do Azure, veja Instalar a CLI do Azure no Azure Stack Hub.

Passos seguintes

Instalar a CLI do Azure no Azure Stack Hub