Использование сервисного аккаунта с профилем OS Login для управления ВМ с помощью Ansible
Чтобы управлять виртуальными машинами с помощью Ansible
Кроме этого, такая конфигурация позволяет временно повышать привилегии этой учетной записи путем назначения сервисному аккаунту дополнительных ролей. Например, для использования директивы become
в задачах Ansible потребуется временно назначить сервисному аккаунту роль compute.osAdminLogin
.
Чтобы настроить сервисный аккаунт для управления ВМ с помощью Ansible:
- Подготовьте облако к работе.
- Создайте сервисный аккаунт с SSH-ключом в профиле OS Login.
- Настройте Ansible для работы от имени сервисного аккаунта.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Подготовьте окружение
-
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра
--folder-name
или--folder-id
. -
Создайте виртуальную машину из публичного образа с включенным доступом по OS Login, например, Ubuntu 22.04 LTS OS Login.
-
В настройках вашей организации включите доступ по OS Login при помощи SSH-ключей.
-
Установите
Ansible.
Необходимые платные ресурсы
В стоимость поддержки создаваемой в руководстве инфраструктуры входят:
- плата за постоянно запущенную виртуальную машину (см. тарифы Yandex Compute Cloud);
- плата за использование публичного IP-адреса (см. тарифы Yandex Virtual Private Cloud).
Создайте сервисный аккаунт с SSH-ключом в профиле OS Login
-
Создайте сервисный аккаунт
my-ansible-sa
и назначьте ему рольcompute.osLogin
. -
Создайте пару 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
. -
Добавьте созданный SSH-ключ в профиль OS Login сервисного аккаунта
my-ansible-sa
:CLIyc 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
.
- дата окончания действия ключа в формате ISO 8601
Результат:
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-ключ с неограниченным сроком действия небезопасно.
-
-
Проверьте возможность входа на ВМ с помощью профиля 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 может подключаться к виртуальной машине от имени созданного сервисного аккаунта. Для этого создайте Inventory-файл и проверьте его с помощью Ansible-модуля ansible.builtin.ping
:
-
Создайте файл
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.
-
Запустите 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-ключом, ограниченным по времени действия.
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы: