Installera Azure CLI på Azure Stack Hub

Du kan installera Azure CLI för att hantera Azure Stack Hub med en Windows- eller Linux-dator. Den här artikeln vägleder dig genom stegen för att installera och konfigurera Azure CLI.

Installera Azure CLI

  1. Logga in på utvecklingsarbetsstationen och installera CLI. Azure Stack Hub kräver version 2.0 eller senare av Azure CLI.

    Viktigt

    På grund av en CVE som påverkar Azure CLI-versioner tidigare än 2.40.0 rekommenderar vi inte längre att du använder Azure CLI 2.29.2 för AD FS i Azure Stack Hub. Du kan uppdatera till Azure CLI 2.40.0 eller senare. AD FS-kunder kan dock stöta på problem med Azure CLI-kommandon som interagerar med Microsoft Graph-slutpunkter. Det beror på att Microsoft Graph inte stöds för AD FS. Lösningar på Microsoft Graph-problem finns i avsnittet Allmänna kända problem .

  2. Du kan installera CLI med hjälp av stegen som beskrivs i artikeln Installera Azure CLI .

  3. Kontrollera om installationen lyckades genom att öppna ett terminal- eller kommandotolkfönster och köra följande kommando:

    az --version
    

    Du bör se versionen av Azure CLI och andra beroende bibliotek som är installerade på datorn.

    Azure CLI på Azure Stack Hub Python-plats

  4. Anteckna CLI:s Python-plats.

Lägga till certifikat

Exportera och importera sedan Azure Stack Hub-certifikatet för frånkopplade integrerade system och för ASDK. För anslutna integrerade system är certifikatet offentligt signerat och det här steget är inte nödvändigt. Anvisningar finns i Konfigurera certifikat för Azure CLI i Azure Stack Development Kit.

Ansluta med Azure CLI

Det här avsnittet beskriver hur du konfigurerar CLI om du använder Microsoft Entra-ID som identitetshanteringstjänst och använder CLI på en Windows-dator.

Ansluta till Azure Stack Hub

  1. Om du använder ASDK:t litar du på Azure Stack Hub CA-rotcertifikatet. Instruktioner finns i Lita på certifikatet.

  2. Registrera din Azure Stack Hub-miljö genom att az cloud register köra kommandot .

  3. Registrera din miljö. Använd följande parametrar när du kör az cloud register:

    Värde Exempel Description
    Miljönamn AzureStackUser Används AzureStackUser för användarmiljön. Om du är operator anger du AzureStackAdmin.
    Resource Manager slutpunkt https://management.contoso.onmicrosoft.com ResourceManagerUrl i ASDK är: https://management.local.azurestack.external/ResourceManagerUrl i integrerade system är: https://management.<region>.<fqdn>/ Om du har en fråga om den integrerade systemslutpunkten kontaktar du molnoperatören.
    Lagringsslutpunkt local.contoso.onmicrosoft.com local.azurestack.external är för ASDK. För ett integrerat system använder du en slutpunkt för systemet.
    Keyvault-suffix .vault.contoso.onmicrosoft.com .vault.local.azurestack.external är för ASDK. För ett integrerat system använder du en slutpunkt för systemet.
    Resurs-ID för Active Directory-slutpunktsdiagram https://graph.windows.net/ Resurs-ID:t för Azure Active Directory.
    az cloud register `
        -n <environmentname> `
        --endpoint-resource-manager "https://management.<region>.<fqdn>" `
        --suffix-storage-endpoint "<fqdn>" `
        --suffix-keyvault-dns ".vault.<fqdn>" 
    

    Du hittar en referens för registerkommandot i Azure CLI-referensdokumentationen.

  4. Ange den aktiva miljön med hjälp av följande kommandon.

    az cloud set -n <environmentname>
    
  5. Uppdatera din miljökonfiguration så att den använder den specifika API-versionsprofilen för Azure Stack Hub. Uppdatera konfigurationen genom att köra följande kommando:

    az cloud update --profile 2020-09-01-hybrid
    
  6. Logga in på din Azure Stack Hub-miljö med hjälp az login av kommandot .

    Du kan logga in på Azure Stack Hub-miljön med dina användarautentiseringsuppgifter eller med ett tjänsthuvudnamn (SPN) som tillhandahålls av molnoperatören.

    • Logga in som användare:

      Du kan antingen ange användarnamnet och lösenordet direkt i kommandot eller autentisera az login med hjälp av en webbläsare. Du måste göra det senare om ditt konto har multifaktorautentisering aktiverat:

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

      Anteckning

      Om ditt användarkonto har multifaktorautentisering aktiverat använder du az login kommandot utan att ange parametern -u . Om du kör det här kommandot får du en URL och en kod som du måste använda för att autentisera.

    • Logga in som tjänstens huvudnamn:

      Innan du loggar in skapar du ett huvudnamn för tjänsten via Azure Portal eller CLI och tilldelar det en roll. Logga nu in med följande kommando:

      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. Kontrollera att din miljö är korrekt inställd och att din miljö är det aktiva molnet.

        az cloud list --output table
    

    Du bör se att din miljö visas och IsActive är true. Exempel:

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

Testa anslutningen

När allt har konfigurerats använder du CLI för att skapa resurser i Azure Stack Hub. Du kan till exempel skapa en resursgrupp för en app och lägga till en virtuell dator. Använd följande kommando för att skapa en resursgrupp med namnet "MyResourceGroup":

az group create -n MyResourceGroup -l local

Om resursgruppen har skapats returnerar föregående kommando följande egenskaper för den nyligen skapade resursen:

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

Allmänna kända problem

Den allmänna korrigeringen az rest för de flesta problem är att använda kommandot som använder den aktuella Azure Stack-kontexten för att göra ett REST API-anrop för det associerade kommandot med problemet. Lösningarna i följande problemlista kan vanligtvis anpassas för andra Azure CLI-problem så länge dessa problem orsakas av Azure CLI och inte Azure Stack Hub-resursprovidrar eller andra Azure Stack Hub-tjänster.

Microsoft Graph-problem

Det här är kända Microsoft Graph-problem för Azure CLI 2.40.0 eller senare för Azure Stack Hub. Detta påverkar främst ADFS-miljöer eftersom det inte stöder Microsoft Graph.

  • az keyvault create interagerar med Microsoft Graph. Följande är ett exempel på en lösning för ADFS. I första hand använder lösningen Azure AD Graph för att hämta användarinformation, objectId till exempel i stället för 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
    

    Mer information om Key Vault REST API finns i Key Vault REST API-referens.

Andra problem

Följande är problem som inte är begränsade till specifika versioner eller intervall av versioner av Azure CLI.

  • az role assignment create stöds för närvarande inte av Azure CLI för Azure Stack Hub på grund av ett gammalt API-problem. Följande lösning krävs för både Microsoft Entra-ID eller ADFS.
    # 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"
    
    Mer information om REST API för rolltilldelning finns i artikeln rolltilldelningar.

Nästa steg