Yandex Cloud
Поиск
Связаться с экспертомПопробовать бесплатно
  • Кейсы
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
  • Marketplace
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Искусственный интеллект
    • Безопасность
    • Инструменты DevOps
    • Бессерверные вычисления
    • Управление ресурсами
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Калькулятор цен
    • Тарифы
    • Акции и free tier
  • Кейсы
  • Документация
  • Блог
Создавайте контент и получайте гранты!Готовы написать своё руководство? Участвуйте в контент-программе и получайте гранты на работу с облачными сервисами!
Подробнее о программе
Проект Яндекса
© 2026 ООО «Яндекс.Облако»
Практические руководства
    • Все руководства
      • Обзор
      • Консоль управления, CLI, API
      • Terraform
    • Развертывание Active Directory
    • Развертывание Microsoft Exchange
    • Развертывание Remote Desktop Services
    • Развертывание группы доступности Always On с внутренним сетевым балансировщиком
    • Развертывание Remote Desktop Gateway
    • Подключение бакета как диска в Windows

В этой статье:

  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Создайте инфраструктуру
  • Авторизуйтесь в ОС Windows
  • Как удалить созданные ресурсы
  1. Продукты Microsoft в Yandex Cloud
  2. Безопасная передача пароля в скрипт инициализации
  3. Terraform

Безопасная передача пароля в скрипт инициализации с помощью Terraform

Статья создана
Yandex Cloud
Улучшена
kvendingoldo
Обновлена 12 мая 2026 г.
  • Подготовьте облако к работе
    • Необходимые платные ресурсы
  • Создайте инфраструктуру
  • Авторизуйтесь в ОС Windows
  • Как удалить созданные ресурсы

Чтобы создать ВМ и защитить конфиденциальную информацию в скрипте инициализации с помощью Terraform:

  1. Подготовьте облако к работе.
  2. Создайте инфраструктуру.
  3. Авторизуйтесь в ОС Windows.

Если созданные ресурсы вам больше не нужны, удалите их.

Подготовьте облако к работеПодготовьте облако к работе

Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь.
  2. На странице Yandex Cloud Billing убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака.

Подробнее об облаках и каталогах.

Необходимые платные ресурсыНеобходимые платные ресурсы

В стоимость поддержки инфраструктуры входит:

  • плата за постоянно запущенные ВМ (см. тарифы Yandex Compute Cloud);
  • плата за использование образа (зависит от образа);
  • плата за использование ключа KMS (см. тарифы KMS);
  • плата за использование секрета (см. тарифы Yandex Lockbox).

Создайте инфраструктуруСоздайте инфраструктуру

Terraform позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.

Terraform распространяется под лицензией Business Source License, а провайдер Yandex Cloud для Terraform — под лицензией MPL-2.0.

Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform или в зеркале.

Для создания инфраструктуры с помощью Terraform:

  1. Установите Terraform, получите данные для аутентификации и укажите источник для установки провайдера Yandex Cloud (раздел Настройте провайдер, шаг 1).

  2. Подготовьте файлы с описанием инфраструктуры:

    Готовая конфигурация
    Вручную
    1. Клонируйте репозиторий с конфигурационными файлами.

      git clone https://github.com/yandex-cloud-examples/yc-secured-password.git
      
    2. Перейдите в директорию с репозиторием. В ней должны появиться файлы:

      • yc-secured-password.tf — конфигурация создаваемой инфраструктуры.
      • script.tpl — шаблон скрипта создания учетных записей администратора и пользователей.
      • yc-secured-password.auto.tfvars — файл с пользовательскими данными.
    1. Создайте папку для конфигурационных файлов.
    2. Создайте в папке:
      1. Конфигурационный файл yc-secured-password.tf:

        yc-secured-password.tf
        # Настройка провайдера
        
        terraform {
          required_providers {
            yandex = {
              source  = "yandex-cloud/yandex"
              version = ">= 0.47.0"
            }
          }
        }
        
        provider "yandex" {
          folder_id = var.folder_id
        }
        
        # Объявление переменных для конфиденциальных параметров
        
        variable "zone" {
          type = string
        }
        
        variable "folder_id" {
          type = string
        }
        
        variable "admin_pass" {
          type = string
          sensitive = true
        }
        
        variable "username" {
          type = string
        }
        
        variable "user_pass" {
          type = string
          sensitive = true
        }
        
        variable "image_family" {
          type = string
        }
        
        # Создание облачной сети и подсети
        
        resource "yandex_vpc_network" "network-1" {
          name = "win-network"
        }
        
        # Создание подсети
        
        resource "yandex_vpc_subnet" "subnet-a" {
          name           = "win-subnet"
          zone           = var.zone
          v4_cidr_blocks = ["192.168.1.0/24"]
          network_id     = yandex_vpc_network.network-1.id
        }
        
        # Создание группы безопасности
        
        resource "yandex_vpc_security_group" "vm-sg" {
          name        = "vm_security_group"
          network_id  = yandex_vpc_network.network-1.id
          egress {
            protocol       = "ANY"
            description    = "any"
            from_port      = 0
            to_port        =  65535
            v4_cidr_blocks = ["0.0.0.0/0"]
          }
          ingress {
            protocol       = "TCP"
            description    = "ext-http"
            v4_cidr_blocks = ["0.0.0.0/0"]
            port           = 80
          } 
          ingress {
            protocol       = "TCP"
            description    = "ext-https"
            v4_cidr_blocks = ["0.0.0.0/0"]
            port           = 443
          }
        
          ingress {
            protocol       = "TCP"
            description    = "ext-https"
            v4_cidr_blocks = ["0.0.0.0/0"]
            port           = 3389
          }
        }
        
        # Создание сервисного аккаунта
        
        resource "yandex_iam_service_account" "my-sa" {
          name = "win-secret-sa"
        }
        
        # Назначение прав сервисному аккаунту
        
        resource "yandex_resourcemanager_folder_iam_member" "view-keys" {
          folder_id = var.folder_id
          role      = "kms.keys.encrypterDecrypter"
          member    = "serviceAccount:${yandex_iam_service_account.my-sa.id}"
        }
        
        resource "yandex_resourcemanager_folder_iam_member" "view-payload" {
          folder_id = var.folder_id
          role      = "lockbox.payloadViewer"
          member    = "serviceAccount:${yandex_iam_service_account.my-sa.id}"
        }
        
        # Создание симметричного KMS-ключа шифрования
        
        resource "yandex_kms_symmetric_key" "key-a" {
          name                = "win-secret-key"
          default_algorithm   = "AES_128"
          rotation_period     = "8760h"
        }
        
        # Создание секрета
        
        resource "yandex_lockbox_secret" "win_secret" {
            name                = "win-secret"
            folder_id           = var.folder_id
            kms_key_id          = yandex_kms_symmetric_key.key-a.id
        }
        
        # Создание версии секрета
        
        resource "yandex_lockbox_secret_version_hashed" "win_secret_version" {
          secret_id = yandex_lockbox_secret.win_secret.id
          key_1        = "Administrator"
          text_value_1 = var.admin_pass
          key_2        = var.username
          text_value_2 = var.user_pass
        }
        
        # Создание загрузочного диска для ВМ
        
        data "yandex_compute_image" "default" {
          family = var.image_family
        }
        
        resource "yandex_compute_disk" "boot-disk" {
          type     = "network-ssd"
          zone     = var.zone
          size     = "100"
          image_id = data.yandex_compute_image.default.id
        }
        
        # Создание ВМ
        
        resource "yandex_compute_instance" "my-vm" {
          name               = "win-test"
          platform_id        = "standard-v2"
          zone               = var.zone
          service_account_id = yandex_iam_service_account.my-sa.id
        
          resources {
            cores  = "2"
            memory = "4"
          }
        
          boot_disk {
            disk_id = yandex_compute_disk.boot-disk.id
          }
        
          network_interface {
            subnet_id          = yandex_vpc_subnet.subnet-a.id
            nat                = true
            security_group_ids = ["${yandex_vpc_security_group.vm-sg.id}"]
          }
        
          metadata = {
            serial-port-enable = 1
            user-data = templatefile("script.tpl", { MYSECRET_ID = yandex_lockbox_secret.win_secret.id })
          } 
        }
        
      2. script.tpl — шаблон скрипта создания учетных записей администратора и пользователей:

        script.tpl
        #ps1
        
        # logging
        Start-Transcript -Path "$ENV:SystemDrive\provision2.txt" -IncludeInvocationHeader -Force
        "Bootstrap script started" | Write-Host
        
        # SECRET'S ID:
        $SecretID = "${MYSECRET_ID}"
        
        [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
        $SecretURL = "https://payload.lockbox.api.cloud.yandex.net/lockbox/v1/secrets/$SecretID/payload"
        
        "Secret ID is $SecretID"
        "Payload URL is $SecretURL"
        
        $YCToken = (Invoke-RestMethod -Headers @{'Metadata-Flavor'='Google'} -Uri "http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token").access_token
        if (!$YCToken) {
           throw "Service Account doesn't connected to VM. Please, add Service account with roles lockbox.payloadViewer and kms.key.encryptorDecryptor to VM and try again."
        }
        
        # Creating parameters for REST-invokations
        $Headers = @{
           Authorization="Bearer $YCToken"
        }
        
        $Params = @{
           Uri = $SecretURL
           Method = "GET"
           Headers = $Headers
        }
        
        # Getting secret via REST invoke
        $Secret = Invoke-RestMethod @Params
        $SecretAdministratorPlainTextPassword = $Secret.entries[0].textValue
        
        # inserting value's from terraform
        if (-not [string]::IsNullOrEmpty($SecretAdministratorPlainTextPassword)) {
           "Set local administrator password" | Write-Host
           $SecretAdministratorPassword = $SecretAdministratorPlainTextPassword | ConvertTo-SecureString -AsPlainText -Force
           # S-1-5-21domain-500 is a well-known SID for Administrator
           # https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/security-identifiers-in-windows
           $Administrator = Get-LocalUser | Where-Object -Property "SID" -like "S-1-5-21-*-500"
           $Administrator | Set-LocalUser -Password $SecretAdministratorPassword
        }
        
        # Creating new users if any
        if($Secret.entries.count -gt 1) {
           foreach($User in $Secret.entries[1..($Secret.entries.count-1)]){
              $SecretUserPassword = $User.textValue | ConvertTo-SecureString -AsPlainText -Force
              New-LocalUser -Name $User.key -Password $SecretUserPassword -FullName $User.key
              Add-LocalGroupMember -Group Users -Member $User.key
              Add-LocalGroupMember -Group "Remote Desktop Users" -Member $User.key
           }
        }
        
        "Bootstrap script ended" | Write-Host
        
      3. Файл с пользовательскими данными yc-secured-password.auto.tfvars:

        zone         = "<зона_доступности>"
        folder_id    = "<идентификатор_каталога>"
        admin_pass   = "<пароль_администратора>"
        username     = "<имя_пользователя>"
        user_pass    = "<пароль_пользователя>"
        image_family = "<семейство_образа>"
        

    Более подробную информацию о параметрах используемых ресурсов в Terraform см. в документации провайдера:

    • Облачная сеть — yandex_vpc_network.
    • Подсеть — yandex_vpc_subnet.
    • Группа безопасности — yandex_vpc_security_group.
    • Сервисный аккаунт — yandex_iam_service_account.
    • Назначение прав — yandex_resourcemanager_folder_iam_member.
    • Симметричный ключ шифрования — yandex_kms_symmetric_key.
    • Секрет — yandex_lockbox_secret.
    • Версия секрета — yandex_lockbox_secret_version_hashed.
    • Образ — yandex_compute_image.
    • Диск — yandex_compute_disk.
    • Виртуальная машина — yandex_compute_instance.
  3. В файле yc-secured-password.auto.tfvars задайте пользовательские параметры:

    • zone — зона доступности.

    • folder_id — идентификатор каталога.

    • admin_pass — пароль администратора.

      Важно

      При выборе пароля обязательно соблюдайте требования к безопасности пароля, иначе учетная запись для пользователя не будет создана.
      Пароль должен:

      • быть не короче восьми символов;
      • не содержать в себе имени учетной записи;
      • содержать знаки минимум трех из четырех групп:
        • латинские заглавные буквы (A-Z);
        • латинские строчные буквы (a-z);
        • цифры (0-9);
        • неалфавитные символы (!, ?, %, $, # и т. д.).
    • username — имя пользователя.

    • user_pass — пароль пользователя.

    • image_family — семейство одного из образов ВМ с нужной версией ОС.

  4. Создайте ресурсы:

    1. В терминале перейдите в директорию с конфигурационным файлом.

    2. Проверьте корректность конфигурации с помощью команды:

      terraform validate
      

      Если конфигурация является корректной, появится сообщение:

      Success! The configuration is valid.
      
    3. Выполните команду:

      terraform plan
      

      В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.

    4. Примените изменения конфигурации:

      terraform apply
      
    5. Подтвердите изменения: введите в терминале слово yes и нажмите Enter.

После создания инфраструктуры авторизуйтесь в ОС Windows.

Авторизуйтесь в ОС WindowsАвторизуйтесь в ОС Windows

Чтобы проверить, что данные из секрета были успешно использованы для создания пользователей, авторизуйтесь в ОС виртуальной машины:

  1. В консоли управления выберите каталог, которому принадлежит виртуальная машина.

  2. Перейдите в сервис Compute Cloud.

  3. Выберите виртуальную машину win-test.

  4. Перейдите на вкладку Серийная консоль.

  5. В блоке Серийная консоль выберите COM2 и нажмите кнопку Подключиться. В командной строке отобразится приглашение ввода команд:

    Computer is booting, SAC started and initialized.                               
                                                                                    
    Use the "ch -?" command for information about using channels.                   
    Use the "?" command for general help.                                           
                                                                                    
                                                                                    
    SAC>                                                                            
    EVENT: The CMD command is now available.                                         
    
  6. Просмотрите список открытых каналов:

    SAC>ch
    Channel List
    
    (Use "ch -?" for information on using channels)
    
    # Status  Channel Name
    0 (AV)    SAC
    
  7. При необходимости создайте новый канал с экземпляром командной оболочки:

    SAC>cmd
    The Command Prompt session was successfully launched.
    SAC>
    EVENT:   A new channel has been created.  Use "ch -?" for channel help.
    Channel: Cmd0001
    
  8. Чтобы перейти на канал, нажмите сочетание клавиш ESC + TAB или выполните команду:

    SAC>ch -sn Cmd0001
    Name:                  Cmd0001
    Description:           Command
    Type:                  VT-UTF8
    Channel GUID:          e203fb79-d80d-11ea-87e3-c2679e14957d
    Application Type GUID: 63d02271-8aa4-11d5-bccf-00b0d014a2d0
    
    Press <esc><tab> for next channel.
    Press <esc><tab>0 to return to the SAC channel.
    Use any other key to view this channel.
    
  9. Нажмите Enter и последовательно введите:

    • Имя пользователя.
    • Домен, если вход выполняется под доменной учетной записью. Иначе введите имя хоста либо оставьте пустым.
    • Пароль.
    Please enter login credentials.
    Username: Administrator
    Domain  :
    Password: ***************
    
  10. Если авторизация прошла успешно, запустится экземпляр интерпретатора командной строки:

    C:\Windows\system32>
    

    Успешная авторизация означает, что данные из секрета были использованы при создании виртуальной машины.

Как удалить созданные ресурсыКак удалить созданные ресурсы

Чтобы перестать платить за созданные ресурсы:

  1. Откройте конфигурационный файл yc-secured-password.tf и удалите описание создаваемой инфраструктуры из файла.

  2. Примените изменения:

    1. В терминале перейдите в директорию с конфигурационным файлом.

    2. Проверьте корректность конфигурации с помощью команды:

      terraform validate
      

      Если конфигурация является корректной, появится сообщение:

      Success! The configuration is valid.
      
    3. Выполните команду:

      terraform plan
      

      В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.

    4. Примените изменения конфигурации:

      terraform apply
      
    5. Подтвердите изменения: введите в терминале слово yes и нажмите Enter.

См. такжеСм. также

  • Безопасная передача пароля в скрипт инициализации с помощью консоли управления, CLI или API

Была ли статья полезна?

Предыдущая
Консоль управления, CLI, API
Следующая
Развертывание Active Directory
Создавайте контент и получайте гранты!Готовы написать своё руководство? Участвуйте в контент-программе и получайте гранты на работу с облачными сервисами!
Подробнее о программе
Проект Яндекса
© 2026 ООО «Яндекс.Облако»