Compartir a través de


Instalación de la CLI de Azure en Azure Stack Hub

Puede instalar la CLI de Azure para administrar Azure Stack Hub con máquinas Windows o Linux. En este artículo se describen los pasos para instalar y configurar la CLI de Azure.

Instalación de la CLI de Azure

  1. Inicie sesión en la estación de trabajo de desarrollo e instale la CLI. Azure Stack Hub requiere la versión 2.0 o posterior de la CLI de Azure.

    Importante

    Debido a un CVE que afecta a las versiones de la CLI de Azure anteriores a la versión 2.40.0, ya no se recomienda usar la CLI de Azure 2.29.2 para AD FS en Azure Stack Hub. Puede actualizar a la CLI de Azure 2.40.0 o posterior. Sin embargo, los clientes de AD FS pueden encontrar problemas con los comandos de la CLI de Azure que interactúan con los puntos de conexión de Microsoft Graph. Esto se debe a que Microsoft Graph no es compatible con AD FS. Para obtener soluciones alternativas a los problemas de Microsoft Graph, consulte la sección Problemas conocidos generales .

  2. Puede instalar la CLI mediante los pasos descritos en el artículo Instalación de la CLI de Azure .

  3. Para comprobar si la instalación se realizó correctamente, abra una ventana del terminal o del símbolo del sistema y ejecute el siguiente comando:

    az --version
    

    Debería ver la versión de la CLI de Azure y otras bibliotecas dependientes instaladas en el equipo.

    CLI de Azure en la ubicación de Python de Azure Stack Hub

  4. Tome nota de la ubicación de Python de la CLI.

Agregar certificado

Exporte e importe el certificado de Azure Stack Hub para los sistemas integrados desconectados. En el caso de los sistemas integrados, el certificado está firmado públicamente y este paso no es necesario.

Conexión con la CLI de Azure

Esta sección le guiará a través de la configuración de la CLI si usa el identificador de Microsoft Entra como servicio de administración de identidades y usa la CLI en un equipo Windows.

Conexión a Azure Stack Hub

  1. Registre el entorno de Azure Stack Hub mediante la ejecución del az cloud register comando .

  2. Registre su entorno. Use los parámetros siguientes al ejecutar az cloud register:

    Importancia Ejemplo Descripción
    Nombre del entorno AzureStackUser Use AzureStackUser para el entorno de usuario. Si es operador, especifique AzureStackAdmin.
    Punto de conexión de Resource Manager https://management.contoso.onmicrosoft.com ResourceManagerUrl en sistemas integrados es: https://management.<region>.<fqdn>/. Si tiene alguna pregunta sobre el punto de conexión del sistema integrado, póngase en contacto con el operador de nube.
    Punto de conexión de Storage local.contoso.onmicrosoft.com Para un sistema integrado, use un punto de conexión para el sistema.
    Sufijo keyvault .vault.contoso.onmicrosoft.com Para un sistema integrado, use un punto de conexión para el sistema.
    Id. de recurso del grafo de Active Directory de punto de conexión https://graph.microsoft.com/ Identificador de recurso de Active Directory.
    az cloud register `
        -n <environmentname> `
        --endpoint-resource-manager "https://management.<region>.<fqdn>" `
        --suffix-storage-endpoint "<fqdn>" `
        --suffix-keyvault-dns ".vault.<fqdn>" 
    

    Para más información, consulte el comando register en la documentación de referencia de la CLI de Azure.

  3. Establezca el entorno activo mediante los siguientes comandos.

    az cloud set -n <environmentname>
    
  4. Actualice la configuración del entorno para usar el perfil de la versión de API específico de Azure Stack Hub. Para actualizar la configuración, ejecute el comando siguiente:

    az cloud update --profile 2020-09-01-hybrid
    
  5. Inicie sesión en el entorno de Azure Stack Hub mediante el az login comando .

    Puede iniciar sesión en el entorno de Azure Stack Hub con sus credenciales de usuario o con una entidad de servicio (SPN) proporcionada por el operador en la nube.

    • Inicie sesión como usuario:

    puede especificar el nombre de usuario y la contraseña directamente en el comando az login o autenticarse utilizando un explorador. Debe autenticarse mediante un explorador si la cuenta tiene habilitada la autenticación multifactor:

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

    Nota:

    Si la cuenta de usuario tiene habilitada la autenticación multifactor, use el az login comando sin proporcionar el -u parámetro . Al ejecutar este comando se proporciona una dirección URL y un código que debe usar para autenticarse.

    • Inicie sesión como entidad de servicio:

      Antes de iniciar sesión, cree una entidad de servicio a través de Azure Portal o la CLI y asígnele un rol. Ahora, inicie sesión con el siguiente comando:

      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. Compruebe que el entorno está configurado correctamente y que el entorno es la nube activa:

    az cloud list --output table
    

    Debería ver que el entorno aparece y IsActive es true. Por ejemplo:

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

Prueba de la conectividad

Con todo configurado, use la CLI para crear recursos en Azure Stack Hub. Por ejemplo, puede crear un grupo de recursos para una aplicación y agregar una máquina virtual. Use el siguiente comando para crear un grupo de recursos denominado "MyResourceGroup":

az group create -n MyResourceGroup -l local

Si el grupo de recursos se crea correctamente, el comando anterior genera las siguientes propiedades del recurso recién creado:

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

Problemas conocidos generales

La corrección general de la mayoría de los problemas consiste en usar el az rest comando que usa el contexto actual de Azure Stack para realizar una llamada a la API REST para el comando asociado con el problema. Por lo general, las soluciones alternativas de la lista de problemas siguientes se pueden adaptar a otros problemas de la CLI de Azure siempre que estos problemas se deban a la CLI de Azure y no a proveedores de recursos de Azure Stack Hub u otros servicios de Azure Stack Hub.

Problemas de Microsoft Graph

Estos son los problemas conocidos de Microsoft Graph para la CLI de Azure 2.40.0 o posterior para Azure Stack Hub. Esto afecta principalmente a los entornos de AD FS, ya que no admiten Microsoft Graph.

  • az keyvault create interactúa con Microsoft Graph. A continuación se muestra una solución alternativa de ejemplo para AD FS. Principalmente, la solución alternativa usa Azure AD Graph para recuperar información de usuario como , objectId en lugar 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
    

    Para más información sobre la API REST de Key Vault, consulte la referencia de la API rest de Key Vault.

Otros problemas

Los siguientes son problemas no limitados a versiones o intervalos específicos de versiones de la CLI de Azure.

  • az role assignment create actualmente no es compatible con la CLI de Azure para Azure Stack Hub debido a un problema de API anterior. Se requiere la siguiente solución alternativa para microsoft Entra ID o 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"
    

    Para más información sobre la API REST de asignación de roles, consulte el artículo Asignaciones de roles.

Pasos siguientes