Partager via


Installer Azure CLI sur Azure Stack Hub

Vous pouvez installer Azure CLI pour gérer Azure Stack Hub avec des machines Windows ou Linux. Cet article vous guide tout au long des étapes d’installation et de configuration d’Azure CLI.

Installation de l’interface de ligne de commande Azure

  1. Connectez-vous à votre station de travail de développement et installez l’interface CLI. Azure Stack Hub nécessite la version 2.0 ou ultérieure d’Azure CLI.

    Important

    En raison d’une CVE affectant les versions d’Azure CLI antérieures à la version 2.40.0, il n’est plus recommandé d’utiliser Azure CLI 2.29.2 pour AD FS dans Azure Stack Hub. Vous pouvez effectuer une mise à jour vers Azure CLI 2.40.0 ou version ultérieure. Toutefois, les clients AD FS peuvent rencontrer des problèmes avec les commandes Azure CLI qui interagissent avec les points de terminaison Microsoft Graph. Cela est dû au fait que Microsoft Graph n’est pas pris en charge pour AD FS. Pour obtenir des solutions de contournement aux problèmes de Microsoft Graph, consultez la section Problèmes connus généraux .

  2. Vous pouvez installer l’interface CLI en suivant les étapes décrites dans l’article Installer Azure CLI .

  3. Pour vérifier si l’installation a réussi, ouvrez une fenêtre d’invite de commandes ou de terminal et exécutez la commande suivante :

    az --version
    

    Vous devez voir la version d’Azure CLI et d’autres bibliothèques dépendantes installées sur votre ordinateur.

    Azure CLI sur l’emplacement Python d’Azure Stack Hub

  4. Prenez note de l’emplacement Python de l’interface CLI.

Ajouter un certificat

Exportez, puis importez le certificat Azure Stack Hub pour les systèmes intégrés déconnectés. Pour les systèmes intégrés connectés, le certificat étant signé publiquement, cette étape n’est pas nécessaire.

Se connecter avec Azure CLI

Cette section vous guide tout au long de la configuration de l’interface CLI si vous utilisez Microsoft Entra ID comme service de gestion des identités et utilisez l’interface CLI sur un ordinateur Windows.

Se connecter à Azure Stack Hub

  1. Inscrivez votre environnement Azure Stack Hub en exécutant la az cloud register commande.

  2. Inscrivez votre environnement. Utilisez les paramètres suivants lors de l’exécution az cloud register:

    Valeur Exemple : Descriptif
    Nom de l’environnement AzureStackUser Utiliser AzureStackUser pour l’environnement utilisateur. Si vous êtes opérateur, spécifiez AzureStackAdmin.
    Point de terminaison Resource Manager https://management.contoso.onmicrosoft.com ResourceManagerUrl dans les systèmes intégrés est : https://management.<region>.<fqdn>/. Si vous avez une question sur le point de terminaison système intégré, contactez votre opérateur cloud.
    Point de terminaison de stockage local.contoso.onmicrosoft.com Pour un système intégré, utilisez un point de terminaison pour votre système.
    Suffixe keyvault .vault.contoso.onmicrosoft.com Pour un système intégré, utilisez un point de terminaison pour votre système.
    ID de ressource de graphe Active Directory du point de terminaison https://graph.microsoft.com/ ID de ressource Active Directory.
    az cloud register `
        -n <environmentname> `
        --endpoint-resource-manager "https://management.<region>.<fqdn>" `
        --suffix-storage-endpoint "<fqdn>" `
        --suffix-keyvault-dns ".vault.<fqdn>" 
    

    Pour plus d’informations, consultez la commande Register dans la documentation de référence d’Azure CLI.

  3. Définissez l’environnement actif à l’aide des commandes suivantes.

    az cloud set -n <environmentname>
    
  4. Mettez à jour la configuration de votre environnement pour utiliser le profil de version des API propre à Azure Stack Hub. Pour mettre à jour la configuration, exécutez la commande suivante :

    az cloud update --profile 2020-09-01-hybrid
    
  5. Connectez-vous à votre environnement Azure Stack Hub à l’aide de la az login commande.

    Vous pouvez vous connecter à l’environnement Azure Stack Hub à l’aide de vos informations d’identification utilisateur ou avec un principal de service (SPN) fourni par votre opérateur cloud.

    • Connectez-vous en tant qu’utilisateur :

    Vous pouvez spécifier directement le nom d’utilisateur et le mot de passe dans la commande az login, ou vous authentifier avec un navigateur. Vous devez vous authentifier à l’aide d’un navigateur si votre compte a activé l’authentification multifacteur :

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

    Remarque

    Si votre compte d’utilisateur a activé l’authentification multifacteur, utilisez la az login commande sans fournir le -u paramètre. L’exécution de cette commande vous donne une URL et un code que vous devez utiliser pour l’authentification.

    • Connectez-vous en tant que principal de service :

      Avant de vous connecter, créez un principal de service via le portail Azure ou l’interface CLI et attribuez-lui un rôle. À présent, connectez-vous à l’aide de la commande suivante :

      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. Vérifiez que votre environnement est correctement défini et que votre environnement est le cloud actif :

    az cloud list --output table
    

    Vous devez voir que votre environnement est répertorié et IsActive est true. Par exemple:

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

Tester la connectivité

Avec tout ce qui est configuré, utilisez l’interface CLI pour créer des ressources dans Azure Stack Hub. Par exemple, vous pouvez créer un groupe de ressources pour une application et ajouter une machine virtuelle. Utilisez la commande suivante pour créer un groupe de ressources nommé « MyResourceGroup » :

az group create -n MyResourceGroup -l local

Si le groupe de ressources est créé avec succès, la commande précédente génère les propriétés suivantes de la ressource nouvellement créée :

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

Problèmes connus généraux

Le correctif général pour la plupart des problèmes consiste à utiliser la az rest commande qui utilise le contexte Azure Stack actuel pour effectuer un appel d’API REST pour la commande associée au problème. Les solutions de contournement de la liste des problèmes suivants peuvent généralement être adaptées à d’autres problèmes Azure CLI tant que ces problèmes sont causés par Azure CLI et non par des fournisseurs de ressources Azure Stack Hub ou d’autres services Azure Stack Hub.

Problèmes liés à Microsoft Graph

Il s’agit des problèmes Connus de Microsoft Graph pour Azure CLI 2.40.0 ou ultérieur, pour Azure Stack Hub. Cela affecte principalement les environnements AD FS, car ils ne prennent pas en charge Microsoft Graph.

  • az keyvault create interagit avec Microsoft Graph. Voici un exemple de solution de contournement pour AD FS. Principalement, la solution de contournement utilise Azure AD Graph pour récupérer des informations utilisateur telles que celles objectId de 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
    

    Pour plus d’informations sur l’API REST Key Vault, consultez la référence de l’API REST Key Vault.

Autres problèmes

Les problèmes suivants ne sont pas limités aux versions ou plages spécifiques de versions d’Azure CLI.

  • az role assignment create n’est actuellement pas pris en charge par Azure CLI pour Azure Stack Hub en raison d’un ancien problème d’API. La solution de contournement suivante est requise pour Microsoft Entra ID ou 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"
    

    Pour plus d’informations sur l’API REST d’attribution de rôle, consultez l’article sur les attributions de rôles.

Étapes suivantes