Instalace Azure CLI ve službě Azure Stack Hub

Azure CLI můžete nainstalovat pro správu služby Azure Stack Hub na počítačích s Windows nebo Linuxem. Tento článek vás provede postupem instalace a nastavení Azure CLI.

Instalace rozhraní příkazového řádku Azure CLI

  1. Přihlaste se k pracovní stanici pro vývoj a nainstalujte rozhraní příkazového řádku. Azure Stack Hub vyžaduje Azure CLI verze 2.0 nebo novější.

    Důležité

    Kvůli cve , který ovlivňuje azure CLI verze starší než 2.40.0, se už nedoporučuje používat Azure CLI 2.29.2 pro službu AD FS ve službě Azure Stack Hub. Můžete provést aktualizaci na Azure CLI 2.40.0 nebo novější. Zákazníci služby AD FS ale můžou narazit na problémy s příkazy Azure CLI, které komunikují s koncovými body Microsoft Graphu. Důvodem je to, že Služba AD FS nepodporuje Microsoft Graph. Alternativní řešení problémů s Microsoft Graphem najdete v části Obecné známé problémy .

  2. Rozhraní příkazového řádku můžete nainstalovat pomocí postupu popsaného v článku Instalace Azure CLI .

  3. Pokud chcete ověřit, jestli instalace proběhla úspěšně, otevřete okno terminálu nebo příkazového řádku a spusťte následující příkaz:

    az --version
    

    Měla by se zobrazit verze Azure CLI a dalších závislých knihoven, které jsou nainstalované na vašem počítači.

    Azure CLI ve službě Azure Stack Hub v umístění Pythonu

  4. Poznamenejte si umístění Pythonu rozhraní příkazového řádku.

Přidání certifikátu

Exportujte a pak importujte certifikát služby Azure Stack Hub pro odpojené integrované systémy a sadu ASDK. U připojených integrovaných systémů je certifikát veřejně podepsaný a tento krok není nutný. Pokyny najdete v tématu Nastavení certifikátů pro Azure CLI ve sadě Azure Stack Development Kit.

Připojení pomocí Azure CLI

Tato část vás provede nastavením rozhraní příkazového řádku, pokud používáte Microsoft Entra ID jako službu správy identit a používáte rozhraní příkazového řádku na počítači s Windows.

Připojení ke službě Azure Stack Hub

  1. Pokud používáte ASDK, důvěřujte kořenovému certifikátu certifikační autority služby Azure Stack Hub. Pokyny najdete v tématu Důvěryhodnost certifikátu.

  2. Spuštěním az cloud register příkazu zaregistrujte prostředí služby Azure Stack Hub.

  3. Zaregistrujte své prostředí. Při spuštění az cloud registerpříkazu použijte následující parametry:

    Hodnota Příklad Description
    Název prostředí AzureStackUser Použijte AzureStackUser pro uživatelské prostředí. Pokud jste operátor, zadejte AzureStackAdmin.
    koncový bod Resource Manager https://management.contoso.onmicrosoft.com ResourceManagerUrl v ASDK je: https://management.local.azurestack.external/ResourceManagerUrl v integrovaných systémech je: https://management.<region>.<fqdn>/ Pokud máte dotaz týkající se koncového bodu integrovaného systému, obraťte se na operátora cloudu.
    Koncový bod úložiště local.contoso.onmicrosoft.com local.azurestack.external je pro ASDK. V případě integrovaného systému použijte koncový bod pro váš systém.
    Přípona trezoru klíčů .vault.contoso.onmicrosoft.com .vault.local.azurestack.external je pro ASDK. V případě integrovaného systému použijte koncový bod pro váš systém.
    ID prostředku služby Active Directory graph koncového bodu https://graph.windows.net/ Identifikátor prostředku služby Azure Active Directory.
    az cloud register `
        -n <environmentname> `
        --endpoint-resource-manager "https://management.<region>.<fqdn>" `
        --suffix-storage-endpoint "<fqdn>" `
        --suffix-keyvault-dns ".vault.<fqdn>" 
    

    Referenční informace k příkazu register najdete v referenční dokumentaci k Azure CLI.

  4. Pomocí následujících příkazů nastavte aktivní prostředí.

    az cloud set -n <environmentname>
    
  5. Aktualizujte konfiguraci prostředí tak, aby používalo profil verze rozhraní API specifické pro službu Azure Stack Hub. Pokud chcete aktualizovat konfiguraci, spusťte následující příkaz:

    az cloud update --profile 2020-09-01-hybrid
    
  6. Přihlaste se k prostředí služby Azure Stack Hub pomocí az login příkazu .

    K prostředí služby Azure Stack Hub se můžete přihlásit pomocí přihlašovacích údajů uživatele nebo pomocí instančního objektu (SPN), který vám poskytl operátor cloudu.

    • Přihlaste se jako uživatel:

      Uživatelské jméno a heslo můžete zadat buď přímo v příkazu az login , nebo provést ověření pomocí prohlížeče. Pokud má váš účet povolené vícefaktorové ověřování, musíte to udělat:

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

      Poznámka

      Pokud má váš uživatelský účet povolené vícefaktorové ověřování, použijte az login příkaz bez zadání parametru -u . Spuštěním tohoto příkazu získáte adresu URL a kód, které musíte použít k ověření.

    • Přihlaste se jako instanční objekt:

      Před přihlášením vytvořte instanční objekt prostřednictvím Azure Portal nebo rozhraní příkazového řádku a přiřaďte mu roli. Teď se přihlaste pomocí následujícího příkazu:

      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>
      
  7. Ověřte, že je vaše prostředí správně nastavené a že je to aktivní cloud.

        az cloud list --output table
    

    Měli byste vidět, že vaše prostředí je uvedené a Hodnota IsActive je true. Příklad:

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

Testování připojení

Když je všechno nastavené, můžete pomocí rozhraní příkazového řádku vytvářet prostředky ve službě Azure Stack Hub. Můžete například vytvořit skupinu prostředků pro aplikaci a přidat virtuální počítač. Pomocí následujícího příkazu vytvořte skupinu prostředků s názvem MyResourceGroup:

az group create -n MyResourceGroup -l local

Pokud se skupina prostředků úspěšně vytvoří, výstupem předchozího příkazu budou následující vlastnosti nově vytvořeného prostředku:

{
  "id": "/subscriptions/84edee99-XXXX-4f5c-b646-5cdab9759a03/resourceGroups/RGCL11",
  "location": "local",
  "name": "RGCLI1",
  " properties ": {
    "provisioningState": "Succeeded"
  },
  "tags ": null
}

Obecné známé problémy

Obecnou opravou většiny problémů je použití az rest příkazu, který používá aktuální kontext služby Azure Stack, k volání rozhraní REST API pro příkaz přidružený k problému. Alternativní řešení v následujícím seznamu problémů je obecně možné přizpůsobit pro jiné problémy Azure CLI, pokud tyto problémy nejsou způsobené Azure CLI, a ne poskytovateli prostředků Azure Stack Hub nebo jinými službami Azure Stack Hub.

Problémy s Microsoft Graphem

Toto jsou známé problémy s Microsoft Graphem pro Azure CLI 2.40.0 nebo novější pro službu Azure Stack Hub. To má vliv především na prostředí služby AD FS, protože nepodporuje Microsoft Graph.

  • az keyvault create komunikuje s Microsoft Graphem. Následuje příklad alternativního řešení pro službu AD FS. Alternativní řešení primárně používá Azure AD Graph k načtení informací o uživateli, jako objectId je například místo Microsoft Graphu.

    # 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
    

    Další informace o rozhraní REST API Key Vault najdete v referenčních informacích k rozhraní KEY VAULT REST API.

Další problémy

Níže jsou uvedené problémy, které se neomezují pouze na konkrétní verze nebo rozsahy verzí Azure CLI.

  • az role assignment create Azure CLI pro službu Azure Stack Hub v současné době nepodporuje kvůli starému problému s rozhraním API. Pro id Microsoft Entra i ad fs vyžaduje následující alternativní řešení.
    # 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"
    
    Další informace o rozhraní REST API pro přiřazení rolí najdete v článku přiřazení rolí.

Další kroky