Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Key Management Service
  • Начало работы
    • Все руководства
    • Шифрование секретов в Managed Service for Kubernetes
    • Подпись и проверка Docker-образов в Managed Service for Kubernetes
    • Управление ключами KMS с HashiCorp Terraform
    • Шифрование секретов в HashiCorp Terraform
    • Auto Unseal в HashiCorp Vault
    • Безопасная передача пароля в скрипт инициализации
    • Шифрование для бакета Object Storage на стороне сервера
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • Вопросы и ответы
  • Обучающие курсы

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

  • Перед началом работы
  • Необходимые платные ресурсы
  • Создайте сервисный аккаунт
  • Создайте ключ KMS
  • Создайте секрет
  • Создайте ВМ
  • Авторизуйтесь в ОС Windows
  • Как удалить созданные ресурсы
  1. Практические руководства
  2. Безопасная передача пароля в скрипт инициализации

Безопасная передача пароля в скрипт инициализации

Статья создана
Yandex Cloud
Улучшена
Обновлена 29 апреля 2025 г.
  • Перед началом работы
    • Необходимые платные ресурсы
  • Создайте сервисный аккаунт
  • Создайте ключ KMS
  • Создайте секрет
  • Создайте ВМ
  • Авторизуйтесь в ОС Windows
  • Как удалить созданные ресурсы

При создании виртуальной машины из образа с операционной системой Windows вы можете использовать скрипт инициализации. Например, в скрипте можно задать логин и пароль администратора и других пользователей системы. Чтобы защитить чувствительные данные, вместо явного указания в скрипте используйте возможности сервиса Yandex Lockbox и ключи Yandex Key Management Service.

В данном руководстве вы создадите ВМ с ОС Windows используя скрипт инициализации, в котором логины и пароли пользователей системы будут получены из сервиса Yandex Lockbox.

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

  1. Создайте сервисный аккаунт
  2. Создайте ключ KMS
  3. Создайте секрет
  4. Создайте ВМ
  5. Авторизуйтесь в ОС Windows

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

Перед началом работыПеред началом работы

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

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

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

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

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

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

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

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

Консоль управления
CLI
API
  1. В консоли управления выберите каталог, в котором хотите создать сервисный аккаунт.
  2. В списке сервисов выберите Identity and Access Management.
  3. Нажмите кнопку Создать сервисный аккаунт.
  4. Введите имя сервисного аккаунта, например, win-secret-sa.
  5. Нажмите кнопку Создать.

По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.

Выполните команду для создания сервисного аккаунта, указав имя win-secret-sa:

yc iam service-account create --name win-secret-sa

Где name — имя сервисного аккаунта.

Результат:

id: ajehr0to1g8b********
folder_id: b1gv87ssvu49********
created_at: "2024-03-15T09:03:11.665153755Z"
name: win-secret-sa

Чтобы создать сервисный аккаунт, воспользуйтесь вызовом gRPC API ServiceAccountService/Create или методом create для ресурса ServiceAccount REST API.

Создайте ключ KMSСоздайте ключ KMS

  1. Создайте ключ шифрования:

    Консоль управления
    CLI
    Terraform
    API
    1. В консоли управления выберите каталог, в котором будет создан ключ.
    2. Выберите сервис Key Management Service.
    3. На панели слева выберите Симметричные ключи.
    4. Нажмите Создать ключ и задайте атрибуты ключа:
      • Имя — win-secret-key.
      • Алгоритм шифрования — AES-256.
      • Для остальных параметров оставьте значения по умолчанию.
    5. Нажмите Создать.

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

    Выполните команду:

    yc kms symmetric-key create \
      --name win-secret-key \
      --default-algorithm aes-256
    

    Где:

    • --name — имя ключа.
    • --default-algorithm — алгоритм шифрования: aes-128, aes-192 или aes-256.

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

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

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

    Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.

    Чтобы создать новый ключ:

    1. Опишите в конфигурационном файле параметры ресурса yandex_kms_symmetric_key:

      resource "yandex_kms_symmetric_key" "key-a" {
        name                = "<имя_ключа>"
        description         = "<описание_ключа>"
        default_algorithm   = "AES_128"
        rotation_period     = "8760h"
        deletion_protection = true
        lifecycle {
          prevent_destroy = true
        }
      }
      

      Где:

      • name — имя ключа. Формат имени:

        • длина — от 2 до 63 символов;
        • может содержать строчные буквы латинского алфавита, цифры и дефисы;
        • первый символ — буква, последний — не дефис.
      • description — описание ключа.

      • default_algorithm — алгоритм шифрования. Возможные значения: AES-128, AES-192 или AES-256.

      • rotation_period — период ротации (частота смены версии ключа по умолчанию). Чтобы создать ключ без автоматической ротации, не указывайте параметр rotation_period.

      • deletion_protection — защита от удаления ключа. Чтобы создать ключ без защиты от удаления, не указывайте параметр deletion_protection.

      • lifecycle.prevent_destroy — защита от удаления ключа при выполнении команд Terraform. Чтобы создать ключ без такой защиты, не указывайте блок lifecycle.

      Важно

      Удаление ключа KMS равносильно уничтожению всех зашифрованных с его помощью данных — без ключа восстановить данные не получится. Параметр deletion_protection и блок lifecycle необходимы, чтобы обезопасить ключ от удаления (например, командой terraform destroy).

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

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

      terraform validate
      

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

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

      terraform plan
      

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

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

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

      После этого в указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления или с помощью команд CLI:

      yc kms symmetric-key list
      

    Воспользуйтесь методом REST API create для ресурса SymmetricKey или вызовом gRPC API SymmetricKeyService/Create.

  2. Назначьте сервисному аккаунту win-secret-sa роль kms.keys.encrypterDecrypter:

    Консоль управления
    CLI
    API
    1. На странице ключа перейдите на вкладку Права доступа.
    2. Перейдите на вкладку Права доступа.
    3. Найдите аккаунт win-secret-sa в списке и нажмите значок .
    4. Нажмите кнопку Изменить роли.
    5. В открывшемся диалоге нажмите кнопку Добавить роль и выберите роль kms.keys.encrypterDecrypter.

    Выполните команду:

    yc resource-manager folder add-access-binding <идентификатор_каталога> \
       --role kms.keys.encrypterDecrypter \
       --subject serviceAccount:<идентификатор_сервисного_аккаунта>
    

    Чтобы назначить сервисному аккаунту роль на каталог, воспользуйтесь методом REST API setAccessBindings для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/SetAccessBindings.

Создайте секретСоздайте секрет

Создайте секрет в сервисе Yandex Lockbox и сохраните в нем логины и пароли пользователей, для которых будут созданы учетные записи в ОС Windows.

Важно

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

  • быть не короче восьми символов;
  • не содержать в себе имени учетной записи;
  • содержать знаки минимум трех из четырех групп:
    • латинские заглавные буквы (A-Z);
    • латинские строчные буквы (a-z);
    • цифры (0-9);
    • неалфавитные символы (!, ?, %, $, # и т. д.).
Консоль управления
CLI
Terraform
API
  1. В консоли управления выберите каталог, в котором будет создан секрет.
  2. В списке сервисов выберите Lockbox.
  3. Нажмите кнопку Создать секрет.
  4. В поле Имя введите имя секрета: win-secret.
  5. В поле Ключ KMS укажите ключ win-secret-key.
  6. В блоке Версия:
    • В поле Ключ введите логин для администратора Administrator.
    • В поле Значение введите пароль для администратора.
  7. При желании, добавьте еще пользователей. Для этого нажмите кнопку Добавить ключ/значение и введите логин и пароль для следующего пользователя.
  8. Нажмите кнопку Создать.
  1. Выполните команду:

    yc lockbox secret create \
       --name win-secret \
       --kms-key-id <идентификатор_ключа> \
       --payload "[{'key': 'Administrator', 'text_value': '<пароль_администратора>'},{'key': 'user1', 'text_value': '<пароль_пользователя>'}]" \
       --cloud-id <идентификатор_облака> \
       --folder-id <идентификатор_каталога>
    

    Где:

    • --name — имя секрета. Обязательный параметр.
    • --kms-key-id — идентификатор ключа KMS.
    • --description — описание секрета. Необязательный параметр.
    • --payload — содержимое секрета в виде массива формата YAML или JSON.
    • --cloud-id — идентификатор облака, в котором будет создан секрет.
    • --folder-id — идентификатор каталога, в котором будет создан секрет.

Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.

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

    resource "yandex_lockbox_secret" "win_secret" {
       name                = "<имя_секрета>"
       folder_id           = "<идентификатор_каталога>"
       kms_key_id          = "<идентификатор_ключа_шифрования>"
    }
    resource "yandex_lockbox_secret_version" "win_secret_version" {
      secret_id = yandex_lockbox_secret.win_secret.id
      entries {
        key        = "Administrator"
        text_value = "<пароль_администратора>"
      }
      entries {
        key        = "user1"
        text_value = "<пароль_пользователя>"
      }
    }
    

    Где:

    • name — имя секрета. Обязательный параметр.
    • folder_id — идентификатор каталога в котором будет создан секрет. Необязательный параметр.
    • kms_key_id — идентификатор ключа шифрования Key Management Service. Указанный ключ Key Management Service используется для шифрования секрета.
    • entries — содержимое секрета.

    Примечание

    Рекомендуется использовать ресурс yandex_lockbox_secret_version_hashed, он хранит в состоянии Terraform значения в хешированном виде. Поддержка ресурса yandex_lockbox_secret_version остается.

    Более подробную информацию о ресурсе yandex_lockbox_secret_version_hashed см. в документации провайдера.

    Важно

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

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

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

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

      terraform validate
      

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

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

      terraform plan
      

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

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

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

Чтобы создать секрет, воспользуйтесь методом REST API create для ресурса Secret или вызовом gRPC API SecretService/Create.

  1. Назначьте сервисному аккаунту win-secret-sa роль lockbox.payloadViewer:

    Консоль управления
    CLI
    API
    1. На странице секрета перейдите на вкладку Права доступа.
    2. Перейдите на вкладку Права доступа.
    3. Найдите аккаунт win-secret-sa в списке и нажмите значок .
    4. Нажмите кнопку Изменить роли.
    5. В открывшемся диалоге нажмите кнопку Добавить роль и выберите роль lockbox.payloadViewer.

    Выполните команду:

    yc resource-manager folder add-access-binding <идентификатор_каталога> \
       --role lockbox.payloadViewer \
       --subject serviceAccount:<идентификатор_сервисного_аккаунта>
    

    Чтобы назначить сервисному аккаунту роль на каталог, воспользуйтесь методом REST API setAccessBindings для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/SetAccessBindings.

Создайте ВМСоздайте ВМ

Создайте ВМ с ОС Windows и учетными записями администратора и пользователей.

  1. Создайте файл init.ps1 и сохраните в него код:

    #ps1
    
    # logging
    Start-Transcript -Path "$$ENV:SystemDrive\provision.txt" -IncludeInvocationHeader -Force
    "Bootstrap script started" | Write-Host
    
    # SECRET'S ID:
    $$SecretID = "<secret_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$$
    
  2. В файле init.ps1 замените <secret_id> на реальный идентификатор секрета, в котором вы сохранили учетные записи пользователей.

  3. Создайте ВМ:

    Консоль управления
    CLI
    1. В консоли управления откройте каталог, в котором будет создана ВМ.

    2. Справа сверху нажмите кнопку Создать ресурс и выберите Виртуальная машина.

    3. В блоке Образ загрузочного диска выберите образ с ОС Windows.

    4. В блоке Расположение выберите зону доступности, в которой будет находиться ВМ.

    5. В блоке Общая информация задайте имя ВМ, например, win-test.

    6. В блоке Дополнительно укажите данные для доступа на ВМ:

      • Выберите сервисный аккаунт win-secret-sa.
      • Разрешите доступ к серийной консоли.
    7. В блоке Метаданные:

      • В поле Ключ укажите user-data.
      • В поле Значение вставьте содержимое файла init.ps1.
    8. Нажмите кнопку Создать ВМ.

    Выполните команду:

    yc compute instance create --name win-test --hostname windows10 --zone ru-central1-a --create-boot-disk image-id=<imade_id> --cores 2 --core-fraction 100 --memory 4 --metadata-from-file user-data=init.ps1  --network-interface subnet-name=<subnet_name>,nat-ip-version=ipv4 --service-account-name win-test-sa --platform standard-v3
    

    Где:

    • imade_id — идентификатор образа с ОС Windows.
    • subnet_name — имя подсети в каталоге, в которой вы хотите разместить ВМ.

    Примечание

    Команды yc compute instance create | create-with-container | update | add-metadata поддерживают подстановку в метаданные ВМ значений переменных окружения. Эти значения, заданные в ключе user-data в формате $<имя_переменной>, в момент выполнения команды Yandex Cloud CLI будут подставлены в метаданные ВМ из переменных окружения среды, в которой выполняется команда.

    Чтобы изменить такое поведение, не подставлять значение переменной из среды выполнения команды CLI и передать в метаданные ВМ имя переменной в формате $<имя_переменной>, используйте синтаксис с двумя символами доллара. Например: $$<имя_переменной>.

    Подробнее см. в разделе Особенности передачи переменных окружения в метаданных через CLI.

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

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

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

  2. Выберите сервис Compute Cloud.

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

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

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

    SAC>
    
  6. Просмотрите список открытых каналов:

    SAC>ch
    Channel List
    
    (Use "ch -?" for information on using channels)
    
    # Status  Channel Name
    0 (AV)    SAC
    1 (AV)    Cmd0001
    
  7. Чтобы перейти на канал нажмите сочетание клавиш 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.
    
  8. Нажмите Enter и последовательно введите:

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

    C:\Windows\system32>
    

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

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

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

  • Удалите ВМ.
  • Удалите секрет
  • Удалите ключ.

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

Предыдущая
Auto Unseal в HashiCorp Vault
Следующая
Шифрование для бакета Object Storage на стороне сервера
Проект Яндекса
© 2025 ООО «Яндекс.Облако»