Настройка сертификатов для Azure CLI в Azure Stack Hub или пакете средств разработки Azure Stack

Следуйте приведенным здесь инструкциям, чтобы настроить интерфейс командной строки Azure (CLI) для управления ресурсами Пакета средств разработки Azure Stack (ASDK) на клиентских платформах Linux, Mac и Windows. Эти действия также можно выполнить, если вы используете интегрированную систему Azure Stack Hub в отключенной среде или если сертификаты не выдаются ЦС в доверенной корневой программе.

В этой статье рассматривается получение сертификатов и доверие к ним на удаленном компьютере управления. Сведения об установке Azure CLI и подключении к среде см. в статье Установка Azure CLI в Azure Stack Hub.

Подготовка к использованию Azure CLI

Для использования Azure CLI на компьютере разработки требуется корневой сертификат ЦС для Azure Stack Hub. Этот сертификат используется для управления ресурсами с помощью CLI.

  • Корневой сертификат ЦС Azure Stack Hub требуется, если вы используете CLI с рабочей станции за пределами среды Azure Stack Hub.

  • Конечная точка псевдонимов виртуальной машины предоставляет псевдоним, например UbuntuLTS или Win2012Datacenter. Этот псевдоним ссылается на издателя образа, предложение, номер SKU и версию в качестве одного параметра при развертывании виртуальных машин.

В разделах ниже описано, как получить эти значения.

Экспорт корневого сертификата ЦС Azure Stack Hub

Экспортируйте корневой сертификат ЦС. Чтобы экспортировать корневой сертификат ASDK в формате PEM:

  1. Получите имя корневого сертификата Azure Stack Hub, выполнив следующее.

    1. Войдите на портал администрирования Azure Stack Hub или пользователя Azure Stack Hub.
    2. Выберите блокировку в адресной строке браузера.
    3. Во всплывающем окне выберите Подключение безопасно.
    4. В окне Сертификат выберите вкладку Путь сертификации .
    5. Запишите имя корневого сертификата Azure Stack Hub, например: *.<locale>.<FQDN>

    Корневой сертификат Azure Stack Hub

  2. Создайте виртуальную машину Windows в Azure Stack Hub.

  3. Войдите на виртуальную машину, откройте командную строку PowerShell с повышенными правами и выполните следующий скрипт:

      $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. Для Linux также требуется следующая команда:

    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. Скопируйте сертификат на локальный компьютер.

Настройка конечной точки псевдонима виртуальной машины

Вы можете настроить общедоступную конечную точку с файлом псевдонимов виртуальных машин. В файле псевдонимов виртуальных машин хранится общее имя образа в JSON-формате. Имя будет использоваться при развертывании виртуальной машины в качестве параметра Azure CLI.

  1. Когда вы публикуете пользовательский образ, запишите сведения об издателе, предложении, номере SKU и версии, которые указываете во время публикации. Если используется образ из Marketplace, вы можете просмотреть эти сведения с помощью командлета Get-AzureVMImage.

  2. Скачайте образец файла с сайта GitHub.

  3. Создайте учетную запись хранения в Azure Stack Hub. Затем создайте контейнер BLOB-объектов. Установите для политики доступа значение public.

  4. Отправьте JSON-файл в только что созданный контейнер. После этого просмотрите URL-адрес большого двоичного объекта. Выберите имя большого двоичного объекта, затем из панели свойств большого двоичного объекта — URL-адрес.

Доверие сертификату

Чтобы использовать Azure CLI с ASDK, необходимо доверять корневому сертификату ЦС на удаленном компьютере.

  1. Найдите расположение сертификата на своем компьютере. Это расположение зависит от того, куда вы установили Python.

  2. Чтобы найти расположение, откройте запрос CMD или запрос PowerShell с повышенными привилегиями и введите : az --version. В командной строке появятся сведения о версии и расположении Python.

    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. Перейдите в каталог, в котором Azure CLI установил Python. Например, используя расположение на шаге 2, . cd "C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\

  4. Введите следующую команду:

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

    При этом возвращается путь к расположению сертификата на компьютере. Конкретный путь зависит от операционной системы и установленной версии Python. Пример:

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

    Запомните расположение сертификата. Вы будете использовать путь на следующем шаге.

  5. Чтобы настроить доверие для корневого сертификата ЦС Azure Stack Hub, добавьте его к существующему сертификату 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"
    

Инструкции по установке и подключению с помощью Azure CLI см. в статье Установка Azure CLI в Azure Stack Hub.

Дальнейшие действия

Установка Azure CLI в Azure Stack Hub