Menyiapkan sertifikat untuk Azure CLI di Azure Stack Hub atau Azure Stack Development Kit

Ikuti langkah-langkah dalam artikel ini untuk menyiapkan Azure Command-Line Interface (CLI) untuk mengelola sumber daya Azure Stack Development Kit (ASDK) dari platform klien Linux, Mac, dan Windows. Anda juga dapat mengikuti langkah-langkah ini jika Anda menggunakan sistem terintegrasi Azure Stack Hub di lingkungan yang terputus koneksinya atau jika sertifikat Anda tidak dikeluarkan oleh CA dalam program akar tepercaya.

Artikel ini membahas cara mendapatkan sertifikat dan memercayainya di mesin manajemen jarak jauh. Untuk menginstal Azure CLI dan menyambungkan ke lingkungan Anda, lihat Menginstal Azure CLI di Azure Stack Hub.

Bersiap untuk Azure CLI

Anda memerlukan sertifikat akar CA untuk Azure Stack Hub untuk menggunakan Azure CLI pada mesin pengembangan Anda. Anda menggunakan sertifikat untuk mengelola sumber daya melalui CLI.

  • Sertifikat root Azure Stack Hub CA diperlukan jika Anda menggunakan CLI dari workstation di luar lingkungan Azure Stack Hub.

  • Titik akhir alias mesin virtual menyediakan alias, seperti "UbuntuLTS" atau "Win2012Datacenter". Alias ini merujuk penerbit gambar, penawaran, SKU, dan versi sebagai parameter tunggal saat menyebarkan VM.

Bagian berikut menjelaskan cara mendapatkan nilai-nilai ini.

Mengekspor sertifikat akar Azure Stack Hub CA

Mengekspor sertifikat akar CA. Untuk mengekspor sertifikat akar ASDK dalam format PEM:

  1. Dapatkan nama Azure Stack Hub Root Cert Anda:

    1. Masuk ke portal Azure Stack Hub User atau Azure Stack Hub Administrator.
    2. Pilih kunci di bilah alamat browser.
    3. Di jendela pop-up, pilih Koneksi aman.
    4. Di jendela Sertifikat, pilih tab Jalur Sertifikasi.
    5. Catat nama Azure Stack Hub Root Cert Anda, misalnya, *.<locale>.<FQDN>

    Sertifikat Akar Azure Stack Hub

  2. Membuat VM Windows di Azure Stack Hub.

  3. Masuk ke VM, buka perintah PowerShell yang ditinggikan, lalu jalankan skrip berikut:

      $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. Untuk Linux, perintah berikut juga diperlukan:

    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. Salin sertifikat ke mesin lokal Anda.

Menyiapkan titik akhir alias mesin virtual

Anda dapat menyiapkan titik akhir yang dapat diakses publik yang menghosting file alias VM. File alias VM adalah file JSON yang memberikan nama umum untuk gambar. Anda menggunakan nama saat menyebarkan VM sebagai parameter Azure CLI.

  1. Jika Anda menerbitkan gambar kustom, catat informasi penerbit, penawaran, SKU, dan versi yang Anda tentukan selama penerbitan. Jika itu adalah gambar dari marketplace, Anda dapat melihat informasi dengan menggunakan cmdlet Get-AzureVMImage.

  2. Unduh file sampel dari GitHub.

  3. Buat akun penyimpanan di Azure Stack Hub. Setelah selesai, buat kontainer blob. Tetapkan kebijakan akses ke "publik."

  4. Unggah file JSON ke kontainer baru. Setelah selesai, Anda dapat melihat URL blob. Pilih nama blob lalu pilih URL dari properti blob.

Memercayai sertifikat

Untuk menggunakan Azure CLI dengan ASDK, Anda harus mempercayai sertifikat akar CA di mesin jarak jauh Anda.

  1. Temukan lokasi sertifikat pada komputer Anda. Lokasi dapat bervariasi bergantung tempat Anda telah menginstal Python.

  2. Untuk menemukan lokasi, buka perintah CMD atau perintah PowerShell yang ditinggikan lalu ketik: az --version. Versi dan lokasi python muncul di perintah.

    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. Ubah ke direktori tempat Python telah diinstal oleh Azure CLI. Misalnya, menggunakan lokasi di langkah 2, cd "C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\.

  4. Ketik perintah berikut:

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

    Tindakan ini akan mengembalikan jalur lokasi sertifikat di mesin Anda. Jalur khusus ini bergantung pada OS Anda dan versi Python yang telah diinstal. Contohnya:

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

    Catat lokasi sertifikat. Anda akan menggunakan jalur di langkah berikutnya.

  5. Percayai sertifikat akar Azure Stack Hub CA dengan menambahkannya ke sertifikat Python yang sudah ada.

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

Untuk petunjuk tentang cara menginstal dan menyambungkan dengan Azure CLI lihat Menginstal Azure CLI di Azure Stack Hub.

Langkah berikutnya

Menginstal Azure CLI di Azure Stack Hub