Установка Azure CLI в Azure Stack Hub
Вы можете установить Azure CLI для управления Azure Stack Hub с помощью компьютеров Windows или Linux. В этой статье описаны шаги по установке и настройке Azure CLI.
Установка Azure CLI
Войдите на рабочую станцию разработки и установите CLI. Для работы с Azure Stack Hub требуется Azure CLI версии 2.0 или выше.
Важно!
Из-за cve , влияющего на версии 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 см. в разделе Общие известные проблемы .
Вы можете установить CLI, выполнив действия, описанные в статье Установка Azure CLI.
Чтобы проверить успешность установки, откройте окно терминала или командной строки и выполните следующую команду:
az --version
Отобразятся номера версий Azure CLI и зависимых библиотек, установленных на этом компьютере.
Запишите расположение Python в интерфейсе командной строки.
Добавление сертификата
Экспортируйте и импортируйте сертификат Azure Stack Hub для отключенных интегрированных систем и ASDK. Для подключенных интегрированных систем сертификат подписывается публично, и этот шаг не является обязательным. Инструкции см. в статье Настройка сертификатов для Azure CLI в Пакете средств разработки Azure Stack.
Подключение с помощью Azure CLI
- идентификатор Microsoft Entra в Windows
- AD FS в Windows
- идентификатор Microsoft Entra в Linux
- AD FS Linux
В этом разделе описывается настройка интерфейса командной строки, если вы используете идентификатор Microsoft Entra в качестве службы управления удостоверениями и используете CLI на компьютере с Windows.
Подключение к Azure Stack Hub
Если вы используете ASDK, доверяйте корневому сертификату ЦС Azure Stack Hub. Инструкции см. в разделе Доверие сертификату.
Зарегистрируйте среду Azure Stack Hub, выполнив команду
az cloud register
.Зарегистрируйте среду. При выполнении команды
az cloud register
используйте следующие параметры:Значение Пример Описание Имя среды AzureStackUser Используйте AzureStackUser
для пользовательской среды. Если вы оператор, укажитеAzureStackAdmin
.Конечная точка Resource Manager https://management.contoso.onmicrosoft.com
ResourceManagerUrl в ASDK: https://management.local.azurestack.external/
ResourceManagerUrl в интегрированных системах:https://management.<region>.<fqdn>/
Если у вас есть вопрос о конечной точке интегрированной системы, обратитесь к оператору облака.конечную точку службы хранилища; local.contoso.onmicrosoft.com local.azurestack.external
используется для ASDK. Для интегрированной системы нужно использовать соответствующую конечную точку.Суффикс хранилища ключей .vault.contoso.onmicrosoft.com .vault.local.azurestack.external
используется для ASDK. Для интегрированной системы нужно использовать соответствующую конечную точку.Идентификатор ресурса graph конечной точки Active Directory https://graph.windows.net/ Идентификатор ресурса Active Directory az cloud register ` -n <environmentname> ` --endpoint-resource-manager "https://management.<region>.<fqdn>" ` --suffix-storage-endpoint "<fqdn>" ` --suffix-keyvault-dns ".vault.<fqdn>"
Справочник по команде register можно найти в справочной документации по Azure CLI.
Следующие команды позволяют выбрать активную среду:
az cloud set -n <environmentname>
Укажите в конфигурации среды версию API, специально предназначенную для Azure Stack Hub. Чтобы изменить эту конфигурацию, выполните следующую команду:
az cloud update --profile 2020-09-01-hybrid
Войдите в среду Azure Stack Hub с помощью команды
az login
.Вы можете войти в среду Azure Stack Hub, используя свои учетные данные пользователя или субъект-службу (SPN), предоставленный оператором облака.
Войдите от имени пользователя.
Вы можете указать имя пользователя и пароль непосредственно в команде
az login
или выполнить аутентификацию в браузере. Последнее необходимо сделать, если в вашей учетной записи включена многофакторная проверка подлинности:az login -u "user@contoso.onmicrosoft.com" -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>
Убедитесь, что среда настроена правильно и что ваша среда является активным облаком.
az cloud list --output table
Вы увидите, что ваша среда указана, а IsActive —
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 с помощью CLI. Например, можно создать группу ресурсов для приложения и добавить виртуальную машину. Используйте команду ниже, чтобы создать группу ресурсов с именем 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. Это в первую очередь влияет на среды ADFS, так как она не поддерживает Microsoft Graph.
az keyvault create
взаимодействует с Microsoft Graph. Ниже приведен пример обходного решения для ADFS. В первую очередь обходной путь использует 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
Дополнительные сведения о Key Vault REST API см. в справочнике по REST API Key Vault.
Другие проблемы
Ниже приведены проблемы, не ограничивающиеся конкретными версиями или диапазонами версий Azure CLI.
-
az role assignment create
в настоящее время не поддерживается Azure CLI для Azure Stack Hub из-за старой проблемы с API. Для идентификатора Microsoft Entra или ADFS требуется следующее обходное решение.
Дополнительные сведения о REST API назначения ролей см. в статье о назначениях ролей.# 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"