Аутентификация в облачной инфраструктуре через Terraform

Опубликовано

На все данные актуальны

В этой инструкции мы настроим Terraform для работы с облачной инфраструктурой Сервер Молл Cloud через провайдер OpenStack. Получим пароль пользователя облачной инфраструктуры и OpenRC-файл с параметрами подключения, настроим провайдер и проверим аутентификацию в выбранном проекте.

Дополнительные параметры подключения описаны в документации провайдера OpenStack в Terraform Registry.

Предварительные требования

  1. У вас должна быть учётная запись в личном кабинете Сервер Молл Cloud. О регистрации см. инструкцию ”Регистрация аккаунта”.
  2. Услуга «Облачная инфраструктура» должна быть заказана и готова к работе. Как получить услугу, см. в инструкции ”Как заказать облачную инфраструктуру”.
  3. На компьютере должен быть установлен Terraform. Чтобы проверить, установлен ли он, выполните команду: terraform version. Если Terraform установлен, команда выведет его версию. В противном случае установите его по инструкции “Установка Terraform”.

I. Получение пароля из панели управления услугой

Для подключения нужен пароль пользователя облачной инфраструктуры из реквизитов услуги. Получите его в личном кабинете Сервер Молл Cloud.

  1. Войдите в личный кабинет. Порядок входа описан в инструкциях:
    1. ”Вход в панель управления” для входа без двухфакторной аутентификации.
    2. ”Вход в панель управления с использованием 2FA” для входа с двухфакторной аутентификацией.
  2. Выберите пункт главного меню “Услуги”.
    Откроется страница “Продукты/услуги”.
  3. Выберите нужную услугу облачной инфраструктуры. Откроется панель управления этой услугой.


    Вы перейдёте на панель управления услугой "Облачная инфраструктура".
  1. В разделе “Management Panel” найдите строку “Password” и нажмите кнопку копирования с изображением двух листов бумаги. При наведении на неё отображается подсказка “Click to copy”.


    Пароль будет скопирован в буфер обмена. Успешное копирование подтверждается сообщением “The data has been successfully copied to the clipboard”.
    Этот пароль потребуется при загрузке параметров подключения в разделе III.

II. Получение OpenRC-файла

OpenRC-файл содержит адрес API, сведения о пользователе, проекте и доменах, а также параметры региона. В варианте “Тип пароля” пароль запрашивается при вы

полнении файла и не записывается в него автоматически.

  1. Войдите в облачную консоль. Порядок входа описан в инструкции “Вход в панель управления облачной инфраструктурой”. Убедитесь, что выбран проект, с которым вы собираетесь работать через Terraform.
  2. Нажмите на иконку пользователя в правом верхнем углу облачной консоли.


    Откроется выпадающее меню действий пользователя.
  3. В открывшемся меню выберите “Получить файл OpenRC” (Get OpenRC file).


    Откроется окно “Получить файл OpenRC”
  4. В окне “Получить файл OpenRC” откройте список “Тип”.
  1. Выберите “Тип пароля”.
  2. Нажмите “OK”.


    Откроется диалоговое окно для сохранения OpenRC-файла.
  3. Сохраните OpenRC-файл локально.
    Данные из этого файла потребуется при загрузке параметров подключения в разделе III.

III. Настройка провайдера и параметров подключения

Файлы конфигурации Terraform имеют расширение .tf и создаются в формате обычного текста в кодировке UTF-8. Для редактирования подойдут:

  • Windows: VS Code, Notepad++, Sublime Text или IntelliJ IDEA;
  • macOS: VS Code, Sublime Text, IntelliJ IDEA, Vim или Nano;
  • Linux: VS Code, Sublime Text, IntelliJ IDEA, Vim, Nano, Gedit или Kate.

Сохраняйте конфигурацию как обычный текст, а не как документ Word, LibreOffice или Google Docs. Убедитесь, что имя файла заканчивается на .tf, а не на .tf.txt.

  1. Создайте каталог для конфигураций Terraform.
  1. Создайте файл конфигурации с расширением .tf, например: main.tf.
  2. Создайте в файле конфигурации следующую структуру:
        terraform {
      required_version = ">= 1.6.0, < 2.0.0"
      required_providers {
        openstack = {
          source  = "terraform-provider-openstack/openstack"
          version = "~> 3.4"
        }
      }
    }
    
    variable "os_password" { #По запросу ввести Password из Management Panel
      description = "Пароль OpenStack"
      type        = string
      sensitive   = true   # не выводится в логах plan/apply
    }
    
    provider "openstack" {
      user_name   = "jiirlprb" #OS_USERNAME из OpenRC-файла
      password    = var.os_password
      auth_url    = "https://cli.servermall.ru:5000/v3/"
      region      = "RegionOne"
      domain_name = "smr-domain-2691-6054-6410-1848151580" #OS_USER_DOMAIN_NAME из OpenRC-файла
      tenant_name = "smr-project-2691-6055-6411" #OS_PROJECT_NAME из OpenRC-файла
    }
  3. Откройте скачанный в предыдущем разделе OpenRC-файл.
  4. Замените значения-заполнители в угловых скобках <...> на реальные значения вашего проекта, исключая сами скобки, для следующих параметров:
    <user_name> – имя пользователя облачной инфраструктуры. Замените значением поля OS_USERNAME из OpenRC-файла. Как получить этот файл, описано в разделе II.
    <domain_name> – Имя домена облачной инфраструктуры. Замените значением поля OS_USER_DOMAIN_NAME из OpenRC-файла.
    <tenant_name> – Имя проекта в облачной инфраструктуре. Замените значением поля OS_PROJECT_NAME из OpenRC-файла.

    Результат должен выглядеть примерно следующим образом:
        terraform {
      required_version = ">= 1.6.0, < 2.0.0"
      required_providers {
        openstack = {
          source  = "terraform-provider-openstack/openstack"
          version = "~> 3.4"
        }
      }
    }
    
    variable "os_password" { #По запросу ввести Password из Management Panel
      description = "Пароль OpenStack"
      type        = string
      sensitive   = true   # не выводится в логах plan/apply
    }
    
    provider "openstack" {
      user_name   = "jiirlprb" #OS_USERNAME из OpenRC-файла
      password    = var.os_password
      auth_url    = "https://cli.servermall.ru:5000/v3/"
      region      = "RegionOne"
      domain_name = "smr-domain-2691-6054-6410-1848151580" #OS_USER_DOMAIN_NAME из OpenRC-файла
      tenant_name = "smr-project-2691-6055-6411" #OS_PROJECT_NAME из OpenRC-файла
    }
  5. Сохраните изменения в файле конфигурации.

IV. Проверка аутентификации 

Убедитесь, что введённые учётные данные правильны и Terraform сможет управлять облачной инфраструктурой Peerobyte. Для проверки аутентификации выполните подключение к облаку и запросите ID проекта – успешное получение идентификатора означает, что аутентификация прошла успешно.

Для проверки аутентификации выполните шаги:

  1. Откройте файл конфигурации для редактирования.
  2. Добавьте в него следующие блоки:
        # Получаем данные о существующем проекте в Identity v3 по его имени
    data "openstack_identity_project_v3" "current" {
      name = "smr-project-2691-6055-6411"  #OS_PROJECT_NAME из OpenRC-файла
    }
    
    # Выводим ID найденного проекта
    output "project_id" {
      value = data.openstack_identity_project_v3.current.id  # Уникальный идентификатор проекта
    }
  3. Укажите значение параметра name, заменив плейсхолдер <project_name> значением поля OS_PROJECT_NAME из OpenRC-файла.
  4. Сохраните изменения в файле конфигурации.
  1. Откройте терминал (Windows: PowerShell или CMD; macOS/Linux: Bash, Zsh или другой терминал).
  2. Перейдите в папку, где находится созданный вами файл конфигурации:

    Для Linux и macOS, например:
    cd /home/user/terraform/conf

    Для Windows (PowerShell или CMD), например:
    cd "C:\Program Files\terraform\conf"
  1. Инициализируйте Terraform:
    terraform init

    В случае, если инициализация прошла успешно, вы увидите сообщение:
    Terraform has been successfully initialized!
  1. Проверьте успешность аутентификации:
    terraform plan

    В случае, если аутентификация прошла успешно, вы увидите уникальный идентификатор вашего проекта, например
    project_id = "e905701a98324d3398b5365707905701"
  1. Если аутентификация прошла успешна, то удалите добавленные на шаге 2 блоки, в дальнейшем они не понадобятся. И сохраните внесенные изменения.

Что дальше

Вы можете создать инфраструктуру в облаке, руководствуясь примерами из  инструкции: “Быстрый старт с Terraform”.