Configuración de certificados para la CLI de Azure en Azure Stack Hub o el Kit de desarrollo de Azure Stack

Siga los pasos de este artículo para configurar la Interfaz de la línea de comandos (CLI) de Azure a fin de administrar los recursos del Kit de desarrollo de Azure Stack (ASKD) de las plataformas de cliente de Linux, Mac y Windows. También puede seguir estos pasos si usa un sistema integrado de Azure Stack Hub en un entorno desconectado, o si los certificados no los emite una entidad de certificación en el programa de raíces de confianza.

En este artículo se explica cómo obtener los certificados y confiar en ellos en el equipo de administración remoto. Para instalar la CLI de Azure y conectarse a su entorno, consulte Instalación de la CLI de Azure en Azure Stack Hub.

Preparativos para la CLI de Azure

Necesita el certificado raíz de CA de Azure Stack Hub para usar la CLI de Azure en la máquina de desarrollo. El certificado se usa para administrar recursos a través de la CLI.

  • El certificado raíz de la entidad de certificación de Azure Stack Hub es necesario si usa la CLI desde una estación de trabajo fuera del entorno de Azure Stack Hub.

  • El punto de conexión de los alias de máquina virtual proporciona un alias, como "UbuntuLTS" o "Win2012Datacenter". Este alias hace referencia a un publicador de imágenes, una oferta, una SKU y una versión como parámetro único al implementar VM.

En las secciones siguientes se explica cómo obtener estos valores.

Exportación del certificado de raíz de la entidad de certificación de Azure Stack Hub

Exporte el certificado raíz de la entidad de certificación. Para exportar el certificado raíz del ASDK en formato PEM:

  1. Obtenga el nombre del certificado raíz de Azure Stack Hub:

    1. Inicie sesión en el portal para usuarios de Azure Stack Hub o para administradores de Azure Stack Hub.
    2. Seleccione el candado en la barra de direcciones del explorador.
    3. En la ventana emergente, seleccione La conexión es segura.
    4. En la ventana Certificado, seleccione la pestaña Ruta de certificación.
    5. Anote el nombre del certificado raíz de Azure Stack Hub, por ejemplo, *.<locale>.<FQDN>.

    Certificado raíz de Azure Stack Hub

  2. Cree una máquina virtual Windows en Azure Stack Hub.

  3. Inicie sesión en la máquina virtual, abra un símbolo del sistema de PowerShell con privilegios elevados y, luego, ejecute el siguiente 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, también se requiere el siguiente 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 el certificado en la máquina local.

Configuración del punto de conexión de alias de máquina virtual

Puede configurar un punto de conexión accesible públicamente que hospede un archivo de alias de máquina virtual. El archivo de alias de máquina virtual es un archivo JSON que proporciona un nombre común para una imagen. Usará este nombre al implementar una máquina virtual como parámetro de la CLI de Azure.

  1. Si publica una imagen personalizada, anote la información del publicador, la oferta, la SKU y la versión que especificó en la publicación. Si es una imagen de Marketplace, la información se puede ver mediante el cmdlet Get-AzureVMImage.

  2. Descargue el archivo de ejemplo de GitHub.

  3. Cree una cuenta de almacenamiento en Azure Stack Hub. Cuando haya terminado, cree un contenedor de blobs. Establezca la directiva de acceso en "público".

  4. Cargue el archivo JSON en el nuevo contenedor. Cuando esté listo, puede ver la dirección URL del blob. Seleccione el nombre del blob y, a continuación, seleccione la dirección URL desde las propiedades del blob.

Confiar en el certificado

Para usar la CLI de Azure con ASDK, debe confiar en el certificado raíz de CA en la máquina remota.

  1. Busque la ubicación del certificado en la máquina. La ubicación puede variar dependiendo de dónde haya instalado Python.

  2. Para buscar la ubicación, abra un símbolo del sistema CMD o un símbolo del sistema de PowerShell con privilegios elevados y escriba: az --version. La versión y la ubicación de Python aparecen en el símbolo del sistema.

    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. Cambie al directorio donde la CLI de Azure ha instalado Python. Por ejemplo, con la ubicación del paso 2, cd "C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\.

  4. Escriba el siguiente comando:

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

    Esto devolverá la ruta de acceso de la ubicación del certificado en la máquina. La ruta de acceso particular dependerá del sistema operativo y de la versión de Python que esté instalada. Por ejemplo:

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

    Tome nota de la ubicación del certificado. Utilizará la ruta de acceso en el paso siguiente.

  5. Para confiar en el certificado raíz de la entidad de certificación de Azure Stack Hub, anéxelo al certificado existente de Python.

    $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 obtener instrucciones sobre la instalación y conexión con la CLI de Azure, consulte Instalación de la CLI de Azure en Azure Stack Hub.

Pasos siguientes

Administración e implementación de recursos en Azure Stack Hub con la CLI de Azure