Подключение amazon.aws.aws_ssm — подключение к экземплярам EC2 через AWS Systems Manager
Примечание
Этот подключаемый модуль подключения входит в коллекцию amazon.aws (версия 11.3.0).
Возможно, эта коллекция уже установлена, если вы используете пакет ansible. Она не входит в ansible-core. Чтобы проверить, установлена ли она, выполните ansible-galaxy collection list.
Для установки используйте: ansible-galaxy collection install amazon.aws. Для использования этого подключаемого модуля подключения требуются дополнительные компоненты. Подробнее см. в разделе Требования.
Чтобы использовать его в плейбуке, укажите: amazon.aws.aws_ssm.
Добавлено в community.aws 1.0.0
Краткое описание
- Этот подключаемый модуль подключения позволяет Ansible выполнять задачи на экземпляре EC2 через сеанс AWS SSM.
Требования
Следующие компоненты должны быть установлены на локальном управляющем узле, который использует это подключение.
- На удалённом экземпляре EC2 должен быть запущен агент AWS Systems Manager (SSM Agent). https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started.html
- На управляющей машине должен быть установлен подключаемый модуль AWS Session Manager. https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html
- На удалённом экземпляре EC2 Linux должен быть установлен curl.
- Удалённому экземпляру EC2 Linux и управляющему узлу требуется сетевое подключение к S3.
- Удалённому экземпляру не требуются учётные данные IAM для S3. Этот модуль создаёт на управляющем узле предварительно подписанный URL для S3, а затем передаёт его целевому узлу через SSM, указывая ему загружать файлы из S3 и отправлять их в S3 с помощью
curl. - Управляющему узлу необходимы разрешения IAM на загрузку, скачивание и удаление файлов в указанном бакете S3. К ним относятся `s3:GetObject`, `s3:PutObject`, `s3:ListBucket`, `s3:DeleteObject` и `s3:GetBucketLocation`.
Параметры
Параметр | Комментарии |
|---|---|
access_key_id string добавлено в amazon.aws 1.3.0 | Ключ доступа STS для подключения через session-manager. Конфигурация:
|
bucket_endpoint_url string добавлено в amazon.aws 5.3.0 | URL конечной точки S3 бакета, используемого для передачи файлов. Конфигурация:
|
bucket_name string | Имя бакета S3, используемого для передачи файлов. Конфигурация:
|
bucket_sse_kms_key_id string добавлено в amazon.aws 2.2.0 | Идентификатор ключа KMS для шифрования объектов с помощью Конфигурация:
|
bucket_sse_mode string добавлено в amazon.aws 2.2.0 | Режим шифрования на стороне сервера для загрузки файлов в бакет S3, используемый для передачи файлов. Варианты:
Конфигурация:
|
instance_id string | Идентификатор экземпляра EC2. Конфигурация:
|
plugin string | Задаёт расположение двоичного файла session-manager-plugin. Поддержка переменной окружения добавлена в версии 9.1.0. Сначала подключаемый модуль проверяет Конфигурация:
|
profile string добавлено в amazon.aws 1.5.0 | Задаёт используемый профиль AWS. Конфигурация:
|
reconnection_retries integer | Количество попыток подключения. По умолчанию: Конфигурация:
|
region string | Регион, в котором находится экземпляр EC2. По умолчанию: Конфигурация:
|
s3_addressing_style string добавлено в amazon.aws 5.2.0 | Стиль адресации при использовании URL S3. Если бакет S3 расположен не в том же регионе, что и экземпляр, может потребоваться явно задать стиль адресации «virtual» https://repost.aws/knowledge-center/s3-http-307-response, поскольку это обеспечивает использование определённой конечной точки. Варианты:
Конфигурация:
|
secret_access_key string добавлено в amazon.aws 1.3.0 | Секретный ключ STS для подключения через session-manager. Конфигурация:
|
session_token string добавлено в amazon.aws 1.3.0 | Токен сеанса STS для подключения через session-manager. Конфигурация:
|
ssm_document string добавлено в amazon.aws 5.2.0 | Документ сеанса SSM, используемый при подключении. Чтобы настроить remote_user (если Конфигурация:
|
ssm_timeout integer | Время ожидания подключения в секундах. По умолчанию: Конфигурация:
|
Примечание
Перечисленные выше параметры конфигурации для каждого типа записей (переменная Ansible, переменная окружения и т. д.) имеют приоритет от низкого к высокому. Например, переменная, расположенная ниже в списке, переопределит переменную, расположенную выше. Типы записей также упорядочены по приоритету от низкого к высокому. Например, запись ansible.cfg (расположенная выше в списке) переопределяется переменной Ansible (расположенной ниже в списке).
Примечания
Примечание
- Подключаемый модуль подключения
amazon.aws.aws_ssmне поддерживает использование переменных ``remote_user`` и ``ansible_user`` для настройки удалённого пользователя. Чтобы указать пользователя для выполнения команд, следует использовать параметр ``become_user``. По умолчанию удалённые команды часто выполняются от имени пользователя ``ssm-agent``, однако это также зависит от конфигурации SSM. - Для этого подключаемого модуля требуется бакет S3 для передачи файлов на удалённый экземпляр и обратно. Он необходим даже для модулей, которые явно не передают файлы (например, модулей
shellилиcommand), поскольку Ansible передаёт через S3.pyфайлы самого модуля. - Файлам, передаваемым через S3, присваиваются имена с идентификатором узла EC2 в качестве префикса (например,
i-123abc/). - Файлы в S3 удаляются по завершении выполнения плейбука. Если выполнение плейбука завершится аварийно, файлы могут остаться в бакете. Если в бакете включено управление версиями, файлы сохранятся в истории версий. Если задачи предполагают передачу секретов на удалённый экземпляр или с него (например, в команде
shellили пароля SQL в модулеcommunity.postgresql.postgresql_query), эти пароли будут бессрочно храниться в файлах в S3 в открытом виде и будут видны всем, у кого есть доступ к этому бакету. Поэтому рекомендуется использовать бакет с отключённым или приостановленным управлением версиями. - Файлы в S3 будут удалены, даже если параметр
keep_remote_filesимеет значениеtrue.
Примеры
---
# Wait for SSM Agent to be available on the Instance
- name: Wait for connection to be available
vars:
ansible_connection: aws_ssm
ansible_aws_ssm_bucket_name: nameofthebucket
ansible_aws_ssm_region: us-west-2
# When the S3 bucket isn't in the same region as the Instance
# Explicitly setting the addressing style to 'virtual' may be necessary
# https://repost.aws/knowledge-center/s3-http-307-response
ansible_aws_ssm_s3_addressing_style: virtual
tasks:
- name: Wait for connection
wait_for_connection:
# Stop Spooler Process on Windows Instances
- name: Stop Spooler Service on Windows Instances
vars:
ansible_connection: aws_ssm
ansible_shell_type: powershell
ansible_aws_ssm_bucket_name: nameofthebucket
ansible_aws_ssm_region: us-east-1
tasks:
- name: Stop spooler service
win_service:
name: spooler
state: stopped
# Install a Nginx Package on Linux Instance
- name: Install a Nginx Package
vars:
ansible_connection: aws_ssm
ansible_aws_ssm_bucket_name: nameofthebucket
ansible_aws_ssm_region: us-west-2
tasks:
- name: Install a Nginx Package
yum:
name: nginx
state: present
# Create a directory in Windows Instances
- name: Create a directory in Windows Instance
vars:
ansible_connection: aws_ssm
ansible_shell_type: powershell
ansible_aws_ssm_bucket_name: nameofthebucket
ansible_aws_ssm_region: us-east-1
tasks:
- name: Create a Directory
win_file:
path: C:\Windows\temp
state: directory
---
# Making use of Dynamic Inventory Plugin
# =======================================
# # aws_ec2.yml (Dynamic Inventory - Linux)
# plugin: aws_ec2
# regions:
# - us-east-1
# hostnames:
# - instance-id
# # This will return the Instances with the tag "SSMTag" set to "ssmlinux"
# filters:
# tag:SSMTag: ssmlinux
# -----------------------
- name: install aws-cli
hosts: all
gather_facts: false
vars:
ansible_connection: aws_ssm
ansible_aws_ssm_bucket_name: nameofthebucket
ansible_aws_ssm_region: us-east-1
tasks:
- name: aws-cli
raw: yum install -y awscli
tags: aws-cli
# Alternatively, you can use a tag (eg. Name) as hostname instead of InstanceID.
# However, "ansible_host" must still be set to the instance_id
# =======================================
# # aws_ec2.yml (Dynamic Inventory - Linux)
# plugin: aws_ec2
# regions:
# - us-east-1
# hostnames:
# - tag:Name # will return `tag:Name` for hostname
# compose:
# ansible_host: instance_id # but connection will be done to InstanceID
---
# Execution: ansible-playbook windows.yaml -i aws_ec2.yml
# =====================================================
# # aws_ec2.yml (Dynamic Inventory - Windows)
# plugin: aws_ec2
# regions:
# - us-east-1
# hostnames:
# - instance-id
# # This will return the Instances with the tag "SSMTag" set to "ssmwindows"
# filters:
# tag:SSMTag: ssmwindows
# -----------------------
- name: Create a dir.
hosts: all
gather_facts: false
vars:
ansible_connection: aws_ssm
ansible_shell_type: powershell
ansible_aws_ssm_bucket_name: nameofthebucket
ansible_aws_ssm_region: us-east-1
tasks:
- name: Create the directory
win_file:
path: C:\Temp\SSM_Testing5
state: directory
---
# Execution: ansible-playbook win_file.yaml -i aws_ec2.yml
# The playbook tasks will get executed on the instance ids returned from the dynamic inventory plugin using ssm connection.
# Install a Nginx Package on Linux Instance; with specific SSE CMK used for the file transfer
- name: Install a Nginx Package
vars:
ansible_connection: aws_ssm
ansible_aws_ssm_bucket_name: nameofthebucket
ansible_aws_ssm_region: us-west-2
ansible_aws_ssm_bucket_sse_mode: 'aws:kms'
ansible_aws_ssm_bucket_sse_kms_key_id: alias/kms-key-alias
tasks:
- name: Install a Nginx Package
yum:
name: nginx
state: present
# Install a Nginx Package on Linux Instance; using the specified SSM document
- name: Install a Nginx Package
vars:
ansible_connection: aws_ssm
ansible_aws_ssm_bucket_name: nameofthebucket
ansible_aws_ssm_region: us-west-2
ansible_aws_ssm_document: nameofthecustomdocument
tasks:
- name: Install a Nginx Package
yum:
name: nginx
state: present
---
# Execution: ansible-playbook play.yaml -i ssm_inventory.ini
# =====================================================
# ssm_inventory.ini
# [all]
# linux ansible_aws_ssm_instance_id=i-01234567829abcdef ansible_aws_ssm_region=us-east-1
# [all:vars]
# ansible_connection=amazon.aws.aws_ssm
# ansible_python_interpreter=/usr/bin/python3
# local_tmp=/tmp/ansible-local-ssm-0123456
# ansible_aws_ssm_bucket_name=my-test-bucket
# ansible_aws_ssm_s3_addressing_style=virtual
# -----------------------
# Transfer file and run script on remote host
- name: Transfer file and Run script into SSM manage node
hosts: all
gather_facts: false
tasks:
- name: Create shell script
ansible.builtin.copy:
mode: '0755'
dest: '/tmp/date.sh'
content: |
#!/usr/bin/env bash
date
- name: Execute script from remote host
ansible.builtin.shell:
cmd: '/tmp/date.sh'
Ссылки на коллекцию
© 2012–2018 Michael DeHaan
© 2018–2025 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/projects/ansible/latest/collections/amazon/aws/aws_ssm_connection.html