Spec-Zone.ru › Ansible

Подключение 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.

Конфигурация:

  • Переменная окружения: AWS_ACCESS_KEY_ID
  • Переменная: ansible_aws_ssm_access_key_id

bucket_endpoint_url

string

добавлено в amazon.aws 5.3.0

URL конечной точки S3 бакета, используемого для передачи файлов.

Конфигурация:

  • Переменная: ansible_aws_ssm_bucket_endpoint_url

bucket_name

string

Имя бакета S3, используемого для передачи файлов.

Конфигурация:

  • Переменная: ansible_aws_ssm_bucket_name

bucket_sse_kms_key_id

string

добавлено в amazon.aws 2.2.0

Идентификатор ключа KMS для шифрования объектов с помощью bucket_sse_mode=aws:kms. В противном случае игнорируется.

Конфигурация:

  • Переменная: ansible_aws_ssm_bucket_sse_kms_key_id

bucket_sse_mode

string

добавлено в amazon.aws 2.2.0

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

Варианты:

  • "AES256"
  • "aws:kms"

Конфигурация:

  • Переменная: ansible_aws_ssm_bucket_sse_mode

instance_id

string

Идентификатор экземпляра EC2.

Конфигурация:

  • Переменная: ansible_aws_ssm_instance_id

plugin

string

Задаёт расположение двоичного файла session-manager-plugin.

Поддержка переменной окружения добавлена в версии 9.1.0.

Сначала подключаемый модуль проверяет '/usr/local/bin/session-manager-plugin' как путь по умолчанию к модулю SSM. Если файл там отсутствует, он ищет session-manager-plugin в переменной окружения PATH. Добавлено в версии 9.1.0.

Конфигурация:

  • Переменная окружения: AWS_SESSION_MANAGER_PLUGIN
  • Переменная: ansible_aws_ssm_plugin

profile

string

добавлено в amazon.aws 1.5.0

Задаёт используемый профиль AWS.

Конфигурация:

  • Переменная окружения: AWS_PROFILE
  • Переменная: ansible_aws_ssm_profile

reconnection_retries

integer

Количество попыток подключения.

По умолчанию: 3

Конфигурация:

  • Переменная: ansible_aws_ssm_retries

region

string

Регион, в котором находится экземпляр EC2.

По умолчанию: "us-east-1"

Конфигурация:

  • Переменная окружения: AWS_REGION
  • Переменная окружения: AWS_DEFAULT_REGION
  • Переменная: ansible_aws_ssm_region

s3_addressing_style

string

добавлено в amazon.aws 5.2.0

Стиль адресации при использовании URL S3.

Если бакет S3 расположен не в том же регионе, что и экземпляр, может потребоваться явно задать стиль адресации «virtual» https://repost.aws/knowledge-center/s3-http-307-response, поскольку это обеспечивает использование определённой конечной точки.

Варианты:

  • "path"
  • "virtual"
  • "auto" ← (по умолчанию)

Конфигурация:

  • Переменная: ansible_aws_ssm_s3_addressing_style

secret_access_key

string

добавлено в amazon.aws 1.3.0

Секретный ключ STS для подключения через session-manager.

Конфигурация:

  • Переменная окружения: AWS_SECRET_ACCESS_KEY
  • Переменная: ansible_aws_ssm_secret_access_key

session_token

string

добавлено в amazon.aws 1.3.0

Токен сеанса STS для подключения через session-manager.

Конфигурация:

  • Переменная окружения: AWS_SESSION_TOKEN
  • Переменная: ansible_aws_ssm_session_token

ssm_document

string

добавлено в amazon.aws 5.2.0

Документ сеанса SSM, используемый при подключении.

Чтобы настроить remote_user (если become=False, можно использовать документ сеанса SSM и задать параметры runAsEnabled и runAsDefaultUser. См. также https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-schema.html

Конфигурация:

  • Переменная: ansible_aws_ssm_document

ssm_timeout

integer

Время ожидания подключения в секундах.

По умолчанию: 60

Конфигурация:

  • Переменная: ansible_aws_ssm_timeout

Примечание

Перечисленные выше параметры конфигурации для каждого типа записей (переменная 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'

Авторы

  • Pat Sharkey (@psharkey)
  • HanumanthaRao MVL (@hanumantharaomvl)
  • Gaurav Ashtikar (@gau1991)

Ссылки на коллекцию

  • Отслеживание проблем
  • Репозиторий (исходный код)
  • Связь

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API