Поделиться через


Установка Azure CLI в Azure Stack Hub

Azure CLI можно установить для управления Azure Stack Hub с помощью компьютеров Windows или Linux. В этой статье описаны действия по установке и настройке Azure CLI.

Установите Azure CLI

  1. Войдите на рабочую станцию разработки и установите CLI. Для Azure Stack Hub требуется версия 2.0 или более поздняя версия Azure CLI.

    Это важно

    Из-за уязвимости, затрагивающей версии Azure CLI до версии 2.40.0, больше не рекомендуется использовать Azure CLI 2.29.2 для AD FS в Azure Stack Hub. Вы можете обновить Azure CLI 2.40.0 или более поздней версии. Однако клиенты AD FS могут столкнуться с проблемами с командами Azure CLI, взаимодействующими с конечными точками Microsoft Graph. Это связано с тем, что Microsoft Graph не поддерживается для AD FS. Сведения об обходных решениях проблем Microsoft Graph см. в разделе "Общие известные проблемы ".

  2. Вы можете установить интерфейс командной строки, выполнив действия, описанные в статье "Установка Azure CLI ".

  3. Чтобы проверить успешность установки, откройте окно терминала или командной строки и выполните следующую команду:

    az --version
    

    Вы увидите версию Azure CLI и другие зависимые библиотеки, установленные на компьютере.

    Расположение Python для Azure CLI на Azure Stack Hub

  4. Запишите расположение Python в интерфейсе командной строки.

Добавление сертификата

Экспортируйте и импортируйте сертификат Azure Stack Hub для отключенных интегрированных систем. Для подключенных интегрированных систем сертификат публично подписан, и этот шаг не нужен.

Подключение к Azure CLI

В этом разделе описывается настройка интерфейса командной строки, если вы используете идентификатор Microsoft Entra в качестве службы управления удостоверениями и используете ИНТЕРФЕЙС командной строки на компьютере Windows.

Подключение к Azure Stack Hub

  1. Зарегистрируйте среду Azure Stack Hub, выполнив az cloud register команду.

  2. Зарегистрируйте среду. Используйте следующие параметры для запуска az cloud register.

    Ценность Пример Описание
    Имя среды AzureStackUser Используйте AzureStackUser для пользовательской среды. Если вы оператор, укажите AzureStackAdmin.
    Конечная точка Resource Manager https://management.contoso.onmicrosoft.com ResourceManagerUrl в интегрированных системах: https://management.<region>.<fqdn>/ Если у вас есть вопрос об интегрированной конечной точке системы, обратитесь к оператору облака.
    конечную точку службы хранилища; local.contoso.onmicrosoft.com Для интегрированной системы используйте конечную точку для вашей системы.
    Суффикс Keyvault .vault.contoso.onmicrosoft.com Для интегрированной системы используйте конечную точку для вашей системы.
    Идентификатор ресурса Graph для конечной точки Active Directory https://graph.microsoft.com/ Идентификатор ресурса Active Directory.
    az cloud register `
        -n <environmentname> `
        --endpoint-resource-manager "https://management.<region>.<fqdn>" `
        --suffix-storage-endpoint "<fqdn>" `
        --suffix-keyvault-dns ".vault.<fqdn>" 
    

    Дополнительные сведения см. в справочной документации по Azure CLI в команде register.

  3. Задайте активную среду с помощью следующих команд.

    az cloud set -n <environmentname>
    
  4. Укажите в конфигурации среды версию API, специально предназначенную для Azure Stack Hub. Чтобы изменить эту конфигурацию, выполните следующую команду:

    az cloud update --profile 2020-09-01-hybrid
    
  5. Войдите в среду Azure Stack Hub с помощью az login команды.

    Вы можете войти в среду Azure Stack Hub с помощью учетных данных пользователя или предоставленного вам оператором облака диспетчера службы.

    • Войдите как пользователь:

    Вы можете указать имя пользователя и пароль непосредственно в команде az login или выполнить аутентификацию в браузере. Необходимо пройти проверку подлинности с помощью браузера, если у учетной записи включена многофакторная проверка подлинности:

    az login -u "[email protected]" -p 'Password123!' --tenant contoso.onmicrosoft.com
    

    Замечание

    Если у учетной записи пользователя включена многофакторная проверка подлинности, используйте az login команду без предоставления -u параметра. Выполнение этой команды предоставляет URL-адрес и код, который необходимо использовать для проверки подлинности.

    • Войдите в качестве сервисного принципала:

      Перед входом создайте сервисный принципал в портале Azure или через CLI и назначьте ему роль. Теперь выполните вход с помощью следующей команды:

      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. Убедитесь, что ваша среда настроена правильно и что ваша среда является активным облаком:

    az cloud list --output table
    

    Вы должны увидеть, что ваша среда указана в списке и активнаtrue. Рассмотрим пример.

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

Проверка подключения

После настройки используйте интерфейс командной строки для создания ресурсов в Azure Stack Hub. Например, можно создать группу ресурсов для приложения и добавить виртуальную машину. Используйте следующую команду, чтобы создать группу ресурсов с именем MyResourceGroup:

az group create -n MyResourceGroup -l local

Если группа ресурсов создана успешно, предыдущая команда выводит следующие свойства только что созданного ресурса:

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

Общие известные проблемы

Общее исправление большинства проблем — использовать az rest команду, использующую текущий контекст Azure Stack, чтобы вызвать REST API для связанной команды с проблемой. Обходные пути в следующем списке проблем, как правило, можно адаптировать для других проблем Azure CLI, если эти проблемы вызваны Azure CLI, а не поставщиками ресурсов Azure Stack Hub или другими службами Azure Stack Hub.

Проблемы с Microsoft Graph

Это известные проблемы Microsoft Graph для Azure CLI 2.40.0 или более поздней версии для Azure Stack Hub. Это в первую очередь влияет на среды AD FS, так как они не поддерживают Microsoft Graph.

  • az keyvault create взаимодействует с Microsoft Graph. Ниже приведен пример обходного решения для AD FS. В первую очередь обходное решение использует Azure AD Graph для получения сведений о пользователе, таких как objectId , а не 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
    

    Дополнительные сведения о REST API Key Vault см. в справочнике по REST API Key Vault.

Другие проблемы

Ниже приведены проблемы, не связанные с определенными версиями или диапазонами версий Azure CLI.

  • az role assignment create в настоящее время не поддерживается Azure CLI для Azure Stack Hub из-за старой проблемы с API. Для Microsoft Entra ID или 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"
    

    Дополнительные сведения о REST API назначения ролей см. в статье о назначениях ролей.

Дальнейшие шаги