Partilhar via


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

Siga as etapas neste artigo para configurar a CLI (Interface de Linha de Comando) do Azure para gerenciar recursos do Azure Stack Development Kit (ASDK) a partir de plataformas de cliente Linux, Mac e Windows. Você também pode seguir estas etapas se estiver usando um sistema integrado Azure Stack Hub em um ambiente desconectado ou se seus certificados não forem emitidos por uma CA no programa de raízes confiáveis.

Este artigo aborda como obter seus certificados e confiar neles em sua máquina de gerenciamento remoto. Para instalar a CLI do Azure e conectar-se ao seu ambiente, consulte Instalar a CLI do Azure no Azure Stack Hub.

Preparar para a CLI do Azure

Você precisa do certificado raiz da CA para o Azure Stack Hub para usar a CLI do Azure em sua máquina de desenvolvimento. Você usa o certificado para gerenciar recursos por meio da CLI.

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

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

As seções a seguir descrevem como obter esses valores.

Exportar o certificado raiz da CA do Azure Stack Hub

Exporte o certificado raiz da autoridade de certificação. Para exportar o certificado raiz ASDK no formato PEM:

  1. Obtenha o nome do seu Certificado Raiz do Hub do Azure Stack:

    1. Entre no usuário do Azure Stack Hub ou no portal do administrador do Azure Stack Hub.
    2. Selecione o cadeado na barra de endereço do navegador.
    3. Na janela pop-up, selecione A conexão é segura.
    4. Na janela Certificado, selecione a guia Caminho de certificação .
    5. Anote o nome do seu Azure Stack Hub Root Cert, por exemplo, *.<locale>.<FQDN>

    Certificado raiz do Azure Stack Hub

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

  3. Entre na VM, abra um prompt do PowerShell com privilégios elevados e 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, o seguinte comando também é necessário:

    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 a máquina local.

Configurar o ponto de extremidade de alias da máquina virtual

Você pode configurar um ponto de extremidade acessível publicamente que hospeda um arquivo de alias de VM. O arquivo de alias da VM é um arquivo JSON que fornece um nome comum para uma imagem. Você usa o nome quando implanta uma VM como um parâmetro da CLI do Azure.

  1. Se você publicar uma imagem personalizada, anote as informações de editor, oferta, SKU e versão especificadas durante a publicação. Se for uma imagem do marketplace, você poderá exibir as informações usando o Get-AzureVMImage cmdlet.

  2. Baixe o arquivo de exemplo do GitHub.

  3. Crie uma conta de armazenamento no Azure Stack Hub. Quando isso for feito, crie um contêiner de blob. Defina a política de acesso como "pública".

  4. Carregue o arquivo JSON para o novo contêiner. Quando isso for feito, você poderá visualizar a URL do blob. Selecione o nome do blob e, em seguida, selecione o URL nas propriedades do blob.

Confiar no certificado

Para usar a CLI do Azure com o ASDK, você deve confiar no certificado raiz da CA em sua máquina remota.

  1. Encontre o local do certificado na sua máquina. O local pode variar dependendo de onde você instalou o Python.

  2. Para localizar o local, abra um prompt CMD ou um prompt do PowerShell elevado e digite: az --version. A versão e o local do python aparecem no 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. Mude para o diretório onde a CLI do Azure instalou o Python. Por exemplo, usando o local na etapa 2, cd "C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\.

  4. Escreva o seguinte comando:

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

    Isso retornará o caminho do local do certificado em sua máquina. Seu caminho específico depende do seu sistema operacional e da versão do Python que você instalou. Por exemplo:

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

    Anote o local do certificado. Você usará o caminho na próxima etapa.

  5. Confie no certificado raiz da CA do Azure Stack Hub anexando-o 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 conectar-se com a CLI do Azure, consulte Instalar a CLI do Azure no Azure Stack Hub.

Próximos passos

Instalar a CLI do Azure no Azure Stack Hub