Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Истории успеха
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • AI Studio
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Истории успеха
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Практические руководства
    • Все руководства
    • Разграничение прав доступа для групп пользователей
    • Приглашение нового пользователя и назначение ролей
    • Создание L7-балансировщика с профилем безопасности Smart Web Security через Ingress-контроллер Application Load Balancer
    • Централизованная публикация в интернете и защита приложений от DDoS
    • Базовая настройка SWS
    • Экстренная защита сервисов в Application Load Balancer от DDoS на уровне L7
    • Передача логов с виртуальной машины в Cloud Logging
    • Запись логов балансировщика в PostgreSQL
    • Безопасное хранение паролей для GitLab CI в виде секретов Yandex Lockbox
    • Сервисный аккаунт с профилем OS Login для управления ВМ с помощью Ansible
    • Передача логов с Container Optimized Image в Cloud Logging
    • Добавление HTML-страницы для работы SmartCaptcha
    • Настройка алертов в Monitoring
    • Загрузка аудитных логов в MaxPatrol SIEM
    • Загрузка аудитных логов в SIEM Splunk
    • Загрузка аудитных логов в SIEM ArcSight
    • Шифрование для бакета Object Storage на стороне сервера
    • Шифрование секретов в HashiCorp Terraform
    • Управление ключами KMS с HashiCorp Terraform
    • Auto Unseal в HashiCorp Vault
    • Передача логов кластера Managed Service for Greenplum® в Yandex Cloud Logging

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

  • Перед началом работы
  • Подготовьте окружение
  • Необходимые платные ресурсы
  • Создайте сервисный аккаунт с SSH-ключом в профиле OS Login
  • Настройте Ansible для работы от имени сервисного аккаунта
  • Как удалить созданные ресурсы
  1. Безопасность
  2. Сервисный аккаунт с профилем OS Login для управления ВМ с помощью Ansible

Использование сервисного аккаунта с профилем OS Login для управления ВМ с помощью Ansible

Статья создана
leitosama
Улучшена
mmerihsesh
Обновлена 21 апреля 2025 г.
  • Перед началом работы
    • Подготовьте окружение
    • Необходимые платные ресурсы
  • Создайте сервисный аккаунт с SSH-ключом в профиле OS Login
  • Настройте Ansible для работы от имени сервисного аккаунта
  • Как удалить созданные ресурсы

Чтобы управлять виртуальными машинами с помощью Ansible, вы можете использовать сервисный аккаунт, для которого создан профиль OS Login c SSH-ключом. Такая конфигурация позволит иметь отдельную учетную запись для управления ВМ через Ansible с возможностью отзыва SSH-ключа по времени или вручную.

Кроме этого, такая конфигурация позволяет временно повышать привилегии этой учетной записи путем назначения сервисному аккаунту дополнительных ролей. Например, для использования директивы become в задачах Ansible потребуется временно назначить сервисному аккаунту роль compute.osAdminLogin.

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

  1. Подготовьте облако к работе.
  2. Создайте сервисный аккаунт с SSH-ключом в профиле OS Login.
  3. Настройте Ansible для работы от имени сервисного аккаунта.

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

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

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

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

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

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

Подготовьте окружениеПодготовьте окружение

  1. Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.

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

  2. Создайте виртуальную машину из публичного образа с включенным доступом по OS Login, например, Ubuntu 22.04 LTS OS Login.

  3. В настройках вашей организации включите доступ по OS Login при помощи SSH-ключей.

  4. Установите Ansible.

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

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

  • плата за постоянно запущенную виртуальную машину (см. тарифы Yandex Compute Cloud);
  • плата за использование публичного IP-адреса (см. тарифы Yandex Virtual Private Cloud).

Создайте сервисный аккаунт с SSH-ключом в профиле OS LoginСоздайте сервисный аккаунт с SSH-ключом в профиле OS Login

  1. Создайте сервисный аккаунт my-ansible-sa и назначьте ему роль compute.osLogin.

    Примечание

    При создании сервисного аккаунта для него будет автоматически создан профиль OS Login по умолчанию. Имя пользователя (логин) в профиле OS Login по умолчанию формируется для сервисного аккаунта c добавлением префикса yc-sa- к имени сервисного аккаунта: yc-sa-<имя_сервисного_аккаунта>.

  2. Создайте пару SSH-ключей типа ed25519, которые сервисный аккаунт будет использовать для подключения к виртуальным машинам:

    ssh-keygen \
      -t ed25519 \
      -f <путь>/id_yc-sa-my-ansible-sa
    

    Где: -f — имя создаваемого SSH-ключа и путь к директории, в которую будут сохранены файлы с закрытой и открытой частями ключа. Например, -f /home/user/ansible-key/id_yc-sa-my-ansible-sa.

    В результате в заданной директории будут созданы 2 файла SSH-ключа: id_yc-sa-my-ansible-sa и id_yc-sa-my-ansible-sa.pub.

  3. Добавьте созданный SSH-ключ в профиль OS Login сервисного аккаунта my-ansible-sa:

    CLI
    yc organization-manager oslogin user-ssh-key create \
      --name <имя_ключа> \
      --organization-id <идентификатор_организации> \
      --subject-id <идентификатор_сервисного_аккаунта> \
      --data "<публичный_SSH-ключ>" \
      --expires-at <срок_действия_ключа>
    
    

    Где:

    • --name — имя загружаемого ключа, например, ssh-my-ansible-sa.

    • --organization-id — идентификатор организации, к которой относится сервисный аккаунт my-ansible-sa.

    • --subject-id — идентификатор сервисного аккаунта, в профиль которого добавляется SSH-ключ.

    • --data — содержимое файла с публичной частью SSH-ключа (id_yc-sa-my-ansible-sa.pub).

    • --expires-at — срок действия загружаемого ключа. Необязательный параметр. Если параметр не задан, у ключа будет неограниченный срок действия.

      Значение может задаваться в двух форматах:

      • дата окончания действия ключа в формате ISO 8601, например, YYYY-MM-DDT00:00:00Z;
      • срок действия ключа в часах и минутах, например 1h или 3h30m.

    Результат:

    id: bpfejaidgt9u********
    subject_id: ajeqdl8mdv12********
    data: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOra4Rg9OpwS5cozMHDGpdp6ug/jYUnWtTFD********
    name: ssh-my-ansible-sa
    fingerprint: SHA256:gkEtFdaTmT7PK4/fCrZqnSjFDBsvLeNfkAR********
    organization_id: bpfaidqca8vd********
    created_at: "2024-06-21T10:10:11.946355750Z"
    expires_at: "2024-06-21T20:10:11.380653492Z"
    

    Подробнее о команде yc organization-manager oslogin user-ssh-key create читайте в справочнике CLI.

    Совет

    В целях безопасности рекомендуется периодически ротировать SSH-ключи. Использовать SSH-ключ с неограниченным сроком действия небезопасно.

  4. Проверьте возможность входа на ВМ с помощью профиля OS Login сервисного аккаунта:

    ssh yc-sa-my-ansible-sa@<IP-адрес_ВМ> -i <путь_к_закрытому_SSH-ключу>
    

    Где:

    • <IP-адрес_ВМ> — публичный IP-адрес виртуальной машины с включенным доступом по OS Login.
    • <путь_к_закрытому_SSH-ключу> — путь к файлу, содержащему закрытую часть созданного ранее SSH-ключа. Например, /home/user/ansible-key/id_yc-sa-my-ansible-sa.

Настройте Ansible для работы от имени сервисного аккаунтаНастройте Ansible для работы от имени сервисного аккаунта

Убедитесь, что Ansible может подключаться к виртуальной машине от имени созданного сервисного аккаунта. Для этого создайте Inventory-файл и проверьте его с помощью Ansible-модуля ansible.builtin.ping:

  1. Создайте файл inventory.ini с группой yc :

    [yc:vars]
    ansible_connection=ssh
    ansible_user=yc-sa-my-ansible-sa
    ansible_ssh_private_key_file=<путь_к_закрытому_SSH-ключу>
    
    [yc]
    <IP-адрес_ВМ>
    

    Где:

    • <путь_к_закрытому_SSH-ключу> — путь к файлу, содержащему закрытую часть созданного ранее SSH-ключа. Например, /home/user/ansible-key/id_yc-sa-my-ansible-sa.
    • <IP-адрес_ВМ> — публичный IP-адрес виртуальной машины с включенным доступом по OS Login.
  2. Запустите Ansible с модулем ansible.builtin.ping:

    ansible -i inventory.ini -m ping yc
    

    Результат:

    158.160.**.*** | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
    }
    

Соединение с ВМ установлено. Теперь вы можете управлять виртуальными машинами с помощью Ansible от имени сервисного аккаунта с профилем OS Login и SSH-ключом, ограниченным по времени действия.

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

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

  1. Удалите виртуальную машину.
  2. При необходимости удалите сервисный аккаунт.

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

Предыдущая
Terraform
Следующая
Обзор
Проект Яндекса
© 2025 ООО «Яндекс.Облако»