Bagikan melalui


Menginstal Azure CLI di Azure Stack Hub

Anda dapat menginstal Azure CLI untuk mengelola Azure Stack Hub dengan komputer Windows atau Linux. Artikel ini memandu Anda tentang langkah-langkah untuk menginstal dan menyiapkan Azure CLI.

Menginstal Azure CLI

  1. Masuk ke stasiun kerja pengembangan Anda dan instal CLI. Azure Stack Hub memerlukan Azure CLI versi 2.0 atau yang lebih baru.

    Penting

    Karena CVE yang memengaruhi versi Azure CLI sebelum 2.40.0, tidak disarankan lagi agar Anda menggunakan Azure CLI 2.29.2 untuk AD FS di Azure Stack Hub. Anda dapat memperbarui ke Azure CLI 2.40.0 atau yang lebih tinggi. Namun, pelanggan AD FS mungkin mengalami masalah dengan perintah Azure CLI yang berinteraksi dengan titik akhir Microsoft Graph. Ini karena Microsoft Graph tidak didukung untuk AD FS. Untuk solusi untuk masalah Microsoft Graph, lihat bagian Masalah umum yang diketahui .

  2. Anda dapat menginstal CLI dengan menggunakan langkah-langkah yang dijelaskan dalam artikel Menginstal Azure CLI .

  3. Untuk memverifikasi apakah penginstalan berhasil, buka terminal atau jendela prompt perintah dan jalankan perintah berikut:

    az --version
    

    Anda akan melihat versi Azure CLI dan pustaka dependen lainnya yang diinstal di komputer Anda.

    Penempatan Python Azure CLI di Azure Stack Hub

  4. Catat lokasi Python CLI.

Menambahkan sertifikat

Ekspor lalu impor sertifikat Azure Stack Hub untuk sistem terintegrasi yang terputus. Untuk sistem terintegrasi yang terhubung, sertifikat ditandatangani secara publik dan langkah ini tidak diperlukan.

Menyambungkan dengan Azure CLI

Bagian ini memandu Anda melalui penyiapan CLI jika Anda menggunakan Microsoft Entra ID sebagai layanan manajemen identitas Anda, dan menggunakan CLI pada mesin Windows.

Menyambungkan ke Azure Stack Hub

  1. Daftarkan lingkungan Azure Stack Hub Anda dengan menjalankan az cloud register perintah . Sebelum Anda dapat masuk dengan az login, Azure CLI harus dikonfigurasi untuk menargetkan instans Azure Stack Hub Anda daripada cloud publik Azure default. Pertama, gunakan az cloud register perintah untuk mendaftarkan lingkungan Azure Stack Hub Anda dan tentukan titik akhirnya sehingga CLI tahu di mana harus mengirim permintaan. Setelah itu, Anda dapat mengatur lingkungan lalu menggunakan az login untuk mengautentikasi.

  2. Daftarkan lingkungan Anda. Gunakan parameter berikut saat menjalankan az cloud register:

    Nilai Contoh Deskripsi
    Nama lingkungan AzureStackUser Gunakan AzureStackUser untuk lingkungan pengguna. Jika Anda adalah operator, tentukan AzureStackAdmin.
    Titik akhir Resource Manager https://management.contoso.onmicrosoft.com ResourceManagerUrl dalam sistem terintegrasi adalah: https://management.<region>.<fqdn>/. Jika Anda memiliki pertanyaan tentang titik akhir sistem terintegrasi, hubungi operator cloud Anda.
    Titik akhir penyimpanan local.contoso.onmicrosoft.com Untuk sistem terintegrasi, gunakan titik akhir untuk sistem Anda.
    Akhiran Keyvault .vault.contoso.onmicrosoft.com Untuk sistem terintegrasi, gunakan titik akhir untuk sistem Anda.
    ID sumber daya grafik direktori aktif titik akhir https://graph.microsoft.com/ ID sumber daya Direktori Aktif.
    az cloud register `
        -n <environmentname> `
        --endpoint-resource-manager "https://management.<region>.<fqdn>" `
        --suffix-storage-endpoint "<fqdn>" `
        --suffix-keyvault-dns ".vault.<fqdn>" 
    

    Untuk informasi selengkapnya, lihat perintah register dalam dokumentasi referensi Azure CLI.

  3. Atur lingkungan aktif dengan menggunakan perintah berikut.

    az cloud set -n <environmentname>
    
  4. Perbarui konfigurasi lingkungan Anda untuk menggunakan profil versi API khusus Azure Stack Hub. Untuk memperbarui konfigurasi, jalankan perintah berikut:

    az cloud update --profile 2020-09-01-hybrid
    
  5. Masuk ke lingkungan Azure Stack Hub Anda dengan menggunakan az login perintah .

    Anda dapat masuk ke lingkungan Azure Stack Hub menggunakan kredensial pengguna Anda, atau dengan perwakilan layanan (SPN) yang disediakan untuk Anda oleh operator cloud Anda.

    • Masuk sebagai pengguna:

    Anda dapat menentukan nama pengguna dan kata sandi langsung dalam perintah az login, atau melalui autentikasi dengan menggunakan browser. Anda harus mengautentikasi menggunakan browser jika akun Anda mengaktifkan autentikasi multifaktor:

    az login -u "user@contoso.onmicrosoft.com" -p 'Password123!' --tenant contoso.onmicrosoft.com
    

    Nota

    Jika akun pengguna Anda mengaktifkan autentikasi multifaktor, gunakan az login perintah tanpa menyediakan -u parameter . Menjalankan perintah ini memberi Anda URL dan kode yang harus Anda gunakan untuk mengautentikasi.

    • Masuk sebagai perwakilan layanan:

      Sebelum Anda masuk, buat perwakilan layanan melalui portal Microsoft Azure atau CLI dan tetapkan peran. Sekarang, masuk dengan menggunakan perintah berikut:

      az login `
        --tenant <Azure Active Directory Tenant name. `
                  For example: myazurestack.onmicrosoft.com> `
        --service-principal `
           -u <Application Id of the Service Principal> `
           -p <Key generated for the Service Principal>
      
  6. Verifikasi bahwa lingkungan Anda diatur dengan benar dan bahwa lingkungan Anda adalah cloud aktif:

    az cloud list --output table
    

    Anda akan melihat bahwa lingkungan Anda tercantum dan IsActive adalah true. Contohnya:

    IsActive    Name               Profile
    ----------  -----------------  -----------------
    False       AzureCloud         2020-09-01-hybrid
    False       AzureChinaCloud    latest
    False       AzureUSGovernment  latest
    False       AzureGermanCloud   latest
    True        AzureStackUser     2020-09-01-hybrid
    

Menguji konektivitas

Dengan semua yang disiapkan, gunakan CLI untuk membuat sumber daya dalam Azure Stack Hub. Misalnya, Anda dapat membuat grup sumber daya untuk aplikasi dan menambahkan VM. Gunakan perintah berikut untuk membuat grup sumber daya bernama "MyResourceGroup":

az group create -n MyResourceGroup -l local

Jika grup sumber daya berhasil dibuat, perintah sebelumnya menghasilkan properti berikut dari sumber daya yang baru dibuat:

{
  "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/RGCL11",
  "location": "local",
  "name": "RGCLI1",
  " properties ": {
    "provisioningState": "Succeeded"
  },
  "tags ": null
}

Masalah umum yang diketahui

Perbaikan umum untuk sebagian besar masalah adalah menggunakan az rest perintah yang menggunakan konteks Azure Stack saat ini, untuk melakukan panggilan REST API untuk perintah terkait dengan masalah tersebut. Solusi dalam daftar masalah berikut umumnya dapat diadaptasi untuk masalah Azure CLI lainnya selama masalah ini disebabkan oleh Azure CLI dan bukan penyedia sumber daya Azure Stack Hub atau layanan Azure Stack Hub lainnya.

Masalah Microsoft Graph

Ini adalah masalah Microsoft Graph yang diketahui untuk Azure CLI 2.40.0, atau yang lebih besar, untuk Azure Stack Hub. Ini terutama memengaruhi lingkungan AD FS, karena tidak mendukung Microsoft Graph.

  • az keyvault create berinteraksi dengan Microsoft Graph. Berikut ini adalah contoh solusi alternatif untuk Active Directory Federation Services (AD FS). Terutama, solusinya menggunakan Azure AD Graph untuk mengambil informasi pengguna seperti objectId bukan Microsoft Graph.

    # First, sign into Azure CLI account you want to create the Key Vault from.
    # TODO: change the principal name to name of principal you want to create the key vault with.
    $principalNameLike = "CloudUser*"
    # TODO: change location to your preference.
    $location = "local"
    $aadGraph = az cloud show --query endpoints.activeDirectoryGraphResourceId --output tsv
    $tenantId = az account show --query tenantId --output tsv
    if ($aadGraph[-1] -ne '/')
    {
        $aadGraph += '/'
    }
    $userObject = az rest --method get --url "${aadGraph}${tenantId}/users?api-version=1.6" `
        | ConvertFrom-Json `
        | Select-Object -ExpandProperty value `
        | Where-Object {$_.userPrincipalName -like $principalNameLike}
    $body = '{
      "location": "' + $location + '",
      "properties": {
        "tenantId": "' + $tenantId + '",
        "sku": {
          "family": "A",
          "name": "standard"
        },
        "accessPolicies": [
          {
            "tenantId": "' + $tenantId + '",
            "objectId": "' + $userObject.objectId + '",
            "permissions": {
              "keys": [
                "get",
                "create",
                "delete",
                "list",
                "update",
                "import",
                "backup",
                "restore",
                "recover"
              ],
              "secrets": [
                "get",
                "list",
                "set",
                "delete",
                "backup",
                "restore",
                "recover"
              ],
              "certificates": [
                "get",
                "list",
                "delete",
                "create",
                "import",
                "update",
                "managecontacts",
                "getissuers",
                "listissuers",
                "setissuers",
                "deleteissuers",
                "manageissuers",
                "recover"
              ],
              "storage": [
                "get",
                "list",
                "delete",
                "set",
                "update",
                "regeneratekey",
                "setsas",
                "listsas",
                "getsas",
                "deletesas"
              ]
            }
          }
        ],
        "enabledForDeployment": true,
        "enabledForTemplateDeployment": true
      }
    }'
    $body | Out-File -FilePath (Join-Path -Path "." -ChildPath "body.json")
    $resourceGroupName = "testrg123"
    az group create -n $resourceGroupName -l $location
    $armEndpoint = az cloud show --query endpoints.resourceManager --output tsv
    if ($armEndpoint[-1] -ne '/')
    {
        $armEndpoint += '/'
    }
    $subscriptionId = az account show --query id --output tsv
    $keyVaultName = "testkv123"
    az rest --method put --url "${armEndpoint}subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.KeyVault/vaults/${keyVaultName}?api-version=2016-10-01" --body `@body.json
    # OPTIONAL: test access to the Key Vault.
    # az keyvault secret set --name MySecretName --vault-name $keyVaultName --value MySecret
    

    Untuk informasi selengkapnya tentang REST API Key Vault, lihat referensi REST API Key Vault.

Masalah Lain

Berikut ini adalah masalah yang tidak terbatas pada versi atau rentang versi Azure CLI tertentu.

  • az role assignment create saat ini tidak didukung oleh Azure CLI untuk Azure Stack Hub karena masalah API lama. Langkah berikut diperlukan untuk ID Microsoft Entra atau AD FS.

    # First, sign into account with access to the resource that is being given access or a role to another user.
    # TODO: change the principal name to name of principal you want to assign the role to.
    $principalNameLike = "CloudUser*"
    # TODO: change role name to your preference.
    $roleName = "Owner"
    # TODO: change location to your preference.
    $location = "local"
    $aadGraph = az cloud show --query endpoints.activeDirectoryGraphResourceId --output tsv
    $tenantId = az account show --query tenantId --output tsv
    if ($aadGraph[-1] -ne '/')
    {
        $aadGraph += '/'
    }
    $userObject = az rest --method get --url "${aadGraph}${tenantId}/users?api-version=1.6" `
        | ConvertFrom-Json `
        | Select-Object -ExpandProperty value `
        | Where-Object {$_.userPrincipalName -like $principalNameLike}
    $roleDefinitionId = az role definition list --query "[?roleName=='${roleName}'].id" --output tsv
    $body = @{
        properties = @{
            roleDefinitionId = $roleDefinitionId
            principalId = $userObject.objectId
        }
    }
    $body | ConvertTo-Json | Out-File -FilePath (Join-Path -Path "." -ChildPath "body.json")
    $resourceGroupName = "testrg123"
    az group create -n $resourceGroupName -l $location
    $armEndpoint = az cloud show --query endpoints.resourceManager --output tsv
    if ($armEndpoint[-1] -ne '/')
    {
        $armEndpoint += '/'
    }
    $scope =  az group show --name $resourceGroupName --query id --output tsv
    $guid = (New-Guid).ToString()
    az rest --method put --url "${armEndpoint}${scope}/providers/Microsoft.Authorization/roleAssignments/${guid}?api-version=2015-07-01" --body `@body.json
    # OPTIONAL: test access to the resource group, or use the portal.
    # az login -u <assigned user name> -p <assigned user password> --tenant $tenantId
    # Test a resource creation command in the resource group:
    # az network dns zone create -g $resourceGroupName -n "www.mysite.com"
    

    Untuk informasi selengkapnya tentang REST API penetapan peran, lihat artikel penetapan peran.

Langkah selanjutnya