Freigeben über


Installieren von Azure CLI im Azure Stack Hub

Sie können die Azure CLI installieren, um Azure Stack Hub mit einem Windows- oder Linux-Computer zu verwalten. Dieser Artikel führt Sie durch die Schritte zum Installieren und Einrichten der Azure CLI.

Installieren der Azure-Befehlszeilenschnittstelle

  1. Melden Sie sich bei Ihrer Entwicklungsarbeitsstation an, und installieren Sie CLI. Azure Stack Hub erfordert Version 2.0 oder höher von Azure CLI.

    Von Bedeutung

    Aufgrund einer CVE , die sich auf Azure CLI-Versionen vor 2.40.0 auswirkt, wird nicht mehr empfohlen, Azure CLI 2.29.2 für AD FS im Azure Stack Hub zu verwenden. Sie können auf Azure CLI 2.40.0 oder höher aktualisieren. Ad FS-Kunden können jedoch Probleme mit Azure CLI-Befehlen haben, die mit Microsoft Graph-Endpunkten interagieren. Dies liegt daran, dass Microsoft Graph für AD FS nicht unterstützt wird. Problemumgehungen zu Microsoft Graph-Problemen finden Sie im Abschnitt "Allgemeine bekannte Probleme ".

  2. Sie können die CLI mithilfe der im Artikel "Installieren der Azure CLI " beschriebenen Schritte installieren.

  3. Um zu überprüfen, ob die Installation erfolgreich war, öffnen Sie ein Terminal- oder Eingabeaufforderungsfenster, und führen Sie den folgenden Befehl aus:

    az --version
    

    Sie sollten die Version von Azure CLI und andere abhängige Bibliotheken sehen, die auf Ihrem Computer installiert sind.

    Azure CLI am Standort Azure Stack Hub Python

  4. Notieren Sie sich den Python-Speicherort der CLI.

Hinzufügen eines Zertifikats

Exportieren Und importieren Sie dann das Azure Stack Hub-Zertifikat für getrennte integrierte Systeme. Bei verbundenen integrierten Systemen ist das Zertifikat öffentlich signiert, und dieser Schritt ist nicht erforderlich.

Herstellen einer Verbindung mit Azure CLI

Dieser Abschnitt führt Sie durch die Einrichtung von CLI, wenn Sie Microsoft Entra ID als Identitätsverwaltungsdienst verwenden und CLI auf einem Windows-Computer verwenden.

Herstellen einer Verbindung mit Azure Stack Hub

  1. Registrieren Sie Ihre Azure Stack Hub-Umgebung, indem Sie den az cloud register Befehl ausführen.

  2. Registrieren Sie Ihre Umgebung. Verwenden Sie beim Ausführen az cloud registerdie folgenden Parameter:

    Wert Beispiel BESCHREIBUNG
    Umgebungsname AzureStackUser Wird für die Benutzerumgebung verwendet AzureStackUser . Wenn Sie Operator sind, geben Sie AzureStackAdminan.
    Resource Manager-Endpunkt https://management.contoso.onmicrosoft.com Der ResourceManagerUrl in integrierten Systemen lautet: https://management.<region>.<fqdn>/. Wenn Sie eine Frage zum integrierten Systemendpunkt haben, wenden Sie sich an Ihren Cloudbetreiber.
    Speicherendpunkt local.contoso.onmicrosoft.com Verwenden Sie für ein integriertes System einen Endpunkt für Ihr System.
    Keyvault-Suffix .vault.contoso.onmicrosoft.com Verwenden Sie für ein integriertes System einen Endpunkt für Ihr System.
    Ressourcen-ID der Endpunkt-Active Directory-Graph-Ressource https://graph.microsoft.com/ Die Active Directory-Ressourcen-ID.
    az cloud register `
        -n <environmentname> `
        --endpoint-resource-manager "https://management.<region>.<fqdn>" `
        --suffix-storage-endpoint "<fqdn>" `
        --suffix-keyvault-dns ".vault.<fqdn>" 
    

    Weitere Informationen finden Sie im Registrierungsbefehl in der Azure CLI-Referenzdokumentation.

  3. Legen Sie die aktive Umgebung mithilfe der folgenden Befehle fest.

    az cloud set -n <environmentname>
    
  4. Aktualisieren Sie Ihre Umgebungskonfiguration so, dass das spezifische API-Versionsprofil für Azure Stack Hub verwendet wird. Führen Sie den folgenden Befehl aus, um die Konfiguration zu aktualisieren:

    az cloud update --profile 2020-09-01-hybrid
    
  5. Melden Sie sich mit dem az login Befehl bei Ihrer Azure Stack Hub-Umgebung an.

    Sie können sich mit Ihren Benutzeranmeldeinformationen oder einem Von Ihrem Cloudoperator bereitgestellten Dienstprinzipal (SPN) bei der Azure Stack Hub-Umgebung anmelden.

    • Melden Sie sich als Benutzer an:

    Sie können entweder den Benutzernamen und das Kennwort direkt im Befehl az login eingeben oder die Authentifizierung über einen Browser ausführen. Sie müssen sich mit einem Browser authentifizieren, wenn Ihr Konto die mehrstufige Authentifizierung aktiviert hat:

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

    Hinweis

    Wenn Ihr Benutzerkonto die mehrstufige Authentifizierung aktiviert hat, verwenden Sie den az login Befehl, ohne den -u Parameter bereitzustellen. Wenn Sie diesen Befehl ausführen, erhalten Sie eine URL und einen Code, den Sie für die Authentifizierung verwenden müssen.

    • Melden Sie sich als Dienstprinzipal an:

      Bevor Sie sich anmelden, erstellen Sie einen Dienstprinzipal über das Azure-Portal oder die CLI, und weisen Sie ihm eine Rolle zu. Melden Sie sich jetzt mit dem folgenden Befehl an:

      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. Überprüfen Sie, ob Ihre Umgebung ordnungsgemäß festgelegt ist und dass Ihre Umgebung die aktive Cloud ist:

    az cloud list --output table
    

    Sie sollten sehen, dass Ihre Umgebung aufgeführt ist und IsActive ist true. Beispiel:

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

Testen der Konnektivität

Wenn alles eingerichtet ist, verwenden Sie CLI, um Ressourcen innerhalb von Azure Stack Hub zu erstellen. Sie können beispielsweise eine Ressourcengruppe für eine App erstellen und einen virtuellen Computer hinzufügen. Verwenden Sie den folgenden Befehl, um eine Ressourcengruppe namens "MyResourceGroup" zu erstellen:

az group create -n MyResourceGroup -l local

Wenn die Ressourcengruppe erfolgreich erstellt wird, gibt der vorherige Befehl die folgenden Eigenschaften der neu erstellten Ressource aus:

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

Allgemeine bekannte Probleme

Die allgemeine Lösung für die meisten Probleme besteht darin, den az rest Befehl zu verwenden, der den aktuellen Azure Stack-Kontext verwendet, um einen REST-API-Aufruf für den zugehörigen Befehl mit dem Problem zu erstellen. Die Problemumgehungen in der folgenden Problemliste können in der Regel für andere Azure CLI-Probleme angepasst werden, solange diese Probleme durch Azure CLI und nicht durch Azure Stack Hub-Ressourcenanbieter oder andere Azure Stack Hub-Dienste verursacht werden.

Microsoft Graph-Probleme

Dies sind die bekannten Microsoft Graph-Probleme für Azure CLI 2.40.0 oder höher für Azure Stack Hub. Dies betrifft in erster Linie AD FS-Umgebungen, da sie Microsoft Graph nicht unterstützen.

  • az keyvault create interagiert mit Microsoft Graph. Im Folgenden sehen Sie eine Beispielumgehung für AD FS. In erster Linie verwendet die Problemumgehung Azure AD Graph, um Benutzerinformationen wie z. B. die objectId Statt von Microsoft Graph abzurufen.

    # 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
    

    Weitere Informationen zur Key Vault-REST-API finden Sie in der Referenz zur Key Vault-REST-API.

Andere Probleme

Es folgen Probleme, die nicht auf bestimmte Versionen oder Bereiche von Versionen von Azure CLI beschränkt sind.

  • az role assignment create wird derzeit nicht von Azure CLI für Azure Stack Hub aufgrund eines alten API-Problems unterstützt. Die folgende Problemumgehung ist für Microsoft Entra ID oder AD FS erforderlich.

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

    Weitere Informationen zur REST-API für rollenzuweisungen finden Sie im Artikel zu Rollenzuweisungen.

Nächste Schritte