Настройка Terraform в Azure Cloud Shell с помощью Bash
Terraform поддерживает определение, предварительный просмотр и развертывание облачной инфраструктуры. С помощью Terraform можно создавать файлы конфигурации с применением синтаксиса HCL. Синтаксис HCL позволяет указать поставщика облачных служб, например Azure, и элементы, составляющие облачную инфраструктуру. После создания файлов конфигурации создается план выполнения, который позволяет предварительно просматривать изменения инфраструктуры до их развертывания. После проверки изменений примените план выполнения для развертывания инфраструктуры.
В этой статье представлены варианты для аутентификации в Azure для использования с Terraform.
Вы узнаете, как выполнять следующие задачи:
- настраивать Cloud Shell;
- отображать текущую учетную запись Azure;
- описывать общие сценарии аутентификации Terraform и Azure;
- выполнять аутентификацию с помощью учетной записи Майкрософт из Cloud Shell (с помощью Bash или PowerShell);
- выполнять аутентификацию с помощью учетной записи Майкрософт из Windows (с помощью Bash или PowerShell);
- создавать субъект-службу с помощью Azure CLI;
- Создание субъекта-службы с помощью Azure PowerShell
- указывать учетные данные субъекта-службы в переменных среды;
- указывать учетные данные субъекта-службы в блоке поставщика Terraform.
1. Настройка среды
- Подписка Azure. Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем начинать работу.
2. Открытие Cloud Shell
Если у вас уже открыт сеанс Cloud Shell, вы можете перейти к следующему разделу.
Откройте портал Azure в браузере.
При необходимости войдите в подписку Azure и измените каталог Azure.
Откройте Cloud Shell.
Если вы ранее не использовали Cloud Shell, настройте параметры среды и хранилища.
Выберите среду командной строки.
3. Установка последней версии Terraform в Azure Cloud Shell
Cloud Shell автоматически обновляется до последней версии Terraform. Однако обновления приходят в течение нескольких недель после выпуска. В этой статье показано, как скачать и установить текущую версию Terraform.
Определите версию Terraform, используемую в Cloud Shell.
terraform version
Если версия Terraform, установленная в Cloud Shell, не является самой актуальной, появится сообщение о том, что версия Terraform устарела.
Если вы хорошо работаете с указанной версией, перейдите к следующему разделу. В противном случае выполните следующие действия.
Перейдите на страницу загрузки Terraform.
Прокрутите вниз до ссылки загрузки Linux.
Наведите указатель мыши на ссылку 64-разрядная. Эта ссылка предназначена для последней 64-разрядной версии LINUX AMD, которая подходит для Cloud Shell.
Скопируйте URL-адрес.
Выполните
curl
, заменив текст заполнителя URL-адресом из предыдущего шага.curl -O <terraform_download_url>
Распакуйте файл .
unzip <zip_file_downloaded_in_previous_step>
Создайте каталог с именем
bin
, если его не существует.mkdir bin
Переместите файл
terraform
в каталогbin
.mv terraform bin/
Закройте и перезапустите Cloud Shell.
Убедитесь, что скачанная версия Terraform находится первой по пути.
terraform version
4. Проверка подписки Azure по умолчанию
При входе на портал Azure с помощью учетной записи Майкрософт используется подписка Azure по умолчанию для такой учетной записи.
Terraform автоматически выполняет аутентификацию с использованием сведений из подписки Azure по умолчанию.
Выполните команду az account show, чтобы проверить текущую учетную запись Майкрософт и подписку Azure.
az account show
Все изменения, внесенные с помощью Terraform, находятся в отображаемой подписке Azure. Если это необходимо, пропустите инструкции в оставшейся части этой статьи.
5. Аутентификация Terraform в Azure
Сценарии проверки подлинности Terraform и Azure
Terraform поддерживает проверку подлинности в Azure только с помощью Azure CLI. Проверка подлинности с помощью Azure PowerShell не поддерживается. Поэтому, хотя вы можете использовать модуль Azure PowerShell при работе с Terraform, сначала необходимо пройти проверку подлинности в Azure с помощью Azure CLI.
В этой статье объясняется, как выполнить проверку подлинности Terraform в Azure в следующих сценариях. Дополнительные сведения о вариантах проверки подлинности Terraform в Azure см. в статье Проверка подлинности с помощью Azure CLI.
- Проверка подлинности с помощью учетной записи Майкрософт с помощью Cloud Shell (с помощью Bash или PowerShell)
- Проверка подлинности с помощью учетной записи Майкрософт с помощью Windows (с помощью Bash или PowerShell)
- Проверка подлинности с помощью субъекта-службы:
- Если у вас нет субъекта-службы, создайте его.
- Выполните проверку подлинности в Azure с помощью переменных среды или блока поставщика Terraform
Проверка подлинности в Azure с помощью учетной записи Майкрософт
Учетная запись Майкрософт — это имя пользователя (связанное с электронной почтой и его учетными данными), которое используется для входа в службы Майкрософт , например Azure. Учетную запись Майкрософт можно связать с одной или несколькими подписками Azure, при этом по умолчанию используется одна из этих подписок.
Ниже показано, как:
- Войдите в Azure в интерактивном режиме с помощью учетной записи Майкрософт
- Вывод списка связанных подписок Azure учетной записи (включая подписку по умолчанию)
- Задайте текущую подписку.
Откройте командную строку, которая имеет доступ к Azure CLI.
Запустите az login без параметров и следуйте инструкциям для входа в Azure.
az login
Основные моменты:
- После успешного входа отображается список подписок Azure,
az login
связанных с учетной записью Майкрософт, вошедшего в систему, включая подписку по умолчанию.
- После успешного входа отображается список подписок Azure,
Чтобы подтвердить текущую подписку Azure, выполните команду az account show.
az account show
Чтобы просмотреть все имена и идентификаторы подписок Azure для конкретной учетной записи Майкрософт, выполните команду az account list.
az account list --query "[?user.name=='<microsoft_account_email>'].{Name:name, ID:id, Default:isDefault}" --output Table
Основные моменты:
- Замените заполнитель
<microsoft_account_email>
адресом электронной почты учетной записи Майкрософт, список подписок Azure которой нужно получить. - С помощью учетной записи live ( например, Hotmail или Outlook) может потребоваться указать полный адрес электронной почты. Например, если ваш адрес электронной почты —
admin@hotmail.com
, может потребоваться заменить заполнитель адресомlive.com#admin@hotmail.com
.
- Замените заполнитель
Чтобы использовать определенную подписку Azure, выполните команду az account set.
az account set --subscription "<subscription_id_or_subscription_name>"
Основные моменты:
- Замените заполнитель
<subscription_id_or_subscription_name>
идентификатором или именем подписки, которую вы хотите использовать. - При вызове
az account set
не отобразятся результаты переключения на указанную подписку Azure. Однако с помощьюaz account show
можно убедиться, что текущая подписка Azure изменилась. - Если выполнить команду
az account list
из предыдущего шага, вы увидите, что подписка Azure по умолчанию была изменена на подписку, указанную вaz account set
.
- Замените заполнитель
Создание субъекта-службы
Разрешения для автоматизированных средств, которые развертывают или используют службы Azure (такие как Terraform), всегда должны быть ограничены. Вместо того, чтобы приложения входили в систему как полностью привилегированный пользователь, Azure предлагает субъекты-службы.
Наиболее распространенным шаблоном является интерактивный вход в Azure, создание субъекта-службы, тестирование субъекта-службы, а затем использование этого субъекта-службы для последующей проверки подлинности (интерактивно или из скриптов).
Чтобы создать субъект-службу, войдите в Azure. После проверки подлинности в Azure с помощью учетной записи Майкрософт вернитесь сюда.
Если вы создаете субъект-службу из Git Bash, задайте переменную среды
MSYS_NO_PATHCONV
. (Этот шаг не нужен, если вы используете Cloud Shell.)export MSYS_NO_PATHCONV=1
Основные моменты:
- Переменную среды
MSYS_NO_PATHCONV
можно задать глобально (для всех сеансов терминала) или локально (только для текущего сеанса). Так как создание субъекта-службы часто не является тем, что вы делаете, пример задает значение для текущего сеанса. Чтобы задать эту переменную среды глобально, добавьте параметр в файл~/.bashrc
.
- Переменную среды
Чтобы создать субъект-службу, выполните команду az ad sp create-for-rbac.
az ad sp create-for-rbac --name <service_principal_name> --role Contributor --scopes /subscriptions/<subscription_id>
Основные моменты:
<service-principal-name>
можно заменить пользовательским именем среды или полностью опустить параметр. Если параметр не задан, имя субъекта-службы создается на основе текущей даты и времени.- После успешного выполнения
az ad sp create-for-rbac
отображает несколько значений. ЗначенияappId
,password
иtenant
используются на следующем шаге. - Пароль невозможно извлечь, если он утерян. Следовательно, пароль нужно хранить в надежном месте. Если вы забыли пароль, можно сбросить учетные данные субъекта-службы.
- В рамках этой статьи используется субъект-служба с ролью Участник. Дополнительные сведения о ролях контроль доступа на основе ролей (RBAC) см. в статье RBAC: встроенные роли.
- Выходные данные, полученные в результате создания субъекта-службы, включают конфиденциальные учетные данные. Убедитесь, что эти учетные данные не включены в код, или проверьте учетные данные в системе управления версиями.
- Дополнительные сведения о параметрах при создании субъекта-службы с помощью Azure CLI см. в статье "Создание субъекта-службы Azure с помощью Azure CLI".
указывать учетные данные субъекта-службы в переменных среды;
После создания субъекта-службы можно указать его учетные данные в Terraform с помощью переменных среды.
Измените файл
~/.bashrc
, добавив следующие переменные среды.export ARM_SUBSCRIPTION_ID="<azure_subscription_id>" export ARM_TENANT_ID="<azure_subscription_tenant_id>" export ARM_CLIENT_ID="<service_principal_appid>" export ARM_CLIENT_SECRET="<service_principal_password>"
Чтобы выполнить скрипт
~/.bashrc
, выполните командуsource ~/.bashrc
(или ее сокращенный эквивалент. ~/.bashrc
). Можно также выйти и повторно открыть Cloud Shell для автоматического запуска скрипта.. ~/.bashrc
После установки переменных среды можно проверить их значения следующим образом:
printenv | grep ^ARM*
Основные моменты:
- Как и в случае с любой переменной среды, для доступа к значению подписки Azure из скрипта Terraform используйте следующий синтаксис:
${env.<environment_variable>}
. Например, чтобы получить доступ к значениюARM_SUBSCRIPTION_ID
, укажите${env.ARM_SUBSCRIPTION_ID}
. - Создание и применение планов выполнения Terraform вносит изменения в подписку Azure, связанную с субъектом-службой. Этот факт иногда может вводить в заблуждение, если вы выполнили вход в одну подписку Azure, а переменные среды указывают на вторую подписку Azure. Рассмотрим следующий пример. Предположим, у вас есть две подписки Azure: SubA и SubB. Если текущая подписка Azure — SubA (определена через
az account show
), а переменные среды указывают на SubB, любые внесенные Terraform изменения будут применены в SubB. Поэтому вам нужно войти в подписку SubB, чтобы выполнить команды Azure CLI или Azure PowerShell для просмотра изменений.
указывать учетные данные субъекта-службы в блоке поставщика Terraform.
Блок поставщика Azure определяет синтаксис, позволяющий указать сведения о проверке подлинности в подписке Azure.
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~>2.0"
}
}
}
provider "azurerm" {
features {}
subscription_id = "<azure_subscription_id>"
tenant_id = "<azure_subscription_tenant_id>"
client_id = "<service_principal_appid>"
client_secret = "<service_principal_password>"
}
# Your code goes here
Внимание
Возможность указывать учетные данные подписки Azure в файле конфигурации Terraform может пригодиться, особенно при тестировании. Однако не рекомендуется хранить учетные данные в виде текстового файла, который может просматриваться ненадежными лицами.
Устранение неполадок с Terraform в Azure
Устранение распространенных проблем при использовании Terraform в Azure
Следующие шаги
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по