Блог Amazon Web Services
Использование Amazon EC2 Instance Connect для доступа к вашим EC2-инстансам по SSH
Оригинал статьи: ссылка (Saloni Sonpal, Senior Product Manager – Amazon EC2, AWS)
В июне 2019 года был выпущен Amazon EC2 Instance Connect, новый способ контроля SSH-доступа к вашим EC2-инстансам с использованием AWS Identity and Access Management (IAM). В этом посте мы рассмотрим его подробнее.
Об Amazon EC2 Instance Connect
В то время как инструменты для внедрения «инфраструктуры как кода» (infrastructure as code, IaC), такие как Chef и Puppet, стали распространённым способом для конфигурации серверов, вам всё ещё может иногда потребоваться доступ к инстансам для более тонкой настройки, проверки системных логов или отладки проблем с приложениями. Самый популярный метод подключения к Linux-серверам – это Secure Shell (SSH). Он был создан в 1995 году и сегодня устанавливается по умолчанию практически в каждом дистрибутиве Linux.
Для индивидуальной авторизации пользователей при доступе по SSH часто используются пары SSH-ключей. В результате организациям приходится хранить, передавать и обслуживать эти ключи, а также управлять доступом к ним.
Кроме того, некоторые организации настраивают бастион-хосты (bastion hosts), которые помогают ограничить доступ по сети к другим серверам благодаря использованию единой точки входа. Они добавляют возможность логирования действий, а также предотвращают неправомерный доступ путём добавления дополнительного сетевого слоя, через который осуществляется SSH-доступ. То есть, другие инстансы доступны для подключения по SSH только из бастион-хоста, а не напрямую. С другой стороны, при использовании бастион-хостов возникают и проблемы, которые необходимо решить. Вам нужно обслуживать установленные SSH-ключи пользователей, осуществлять их ротацию, а также обеспечивать бесперебойную и, что более важно, безопасную работу бастион-хоста.
Amazon EC2 Instance Connect упрощает решение подобных проблем и предоставляет следующие преимущества, чтобы помочь вам улучшить общий уровень безопасности:
- Централизованный контроль доступа – вы получаете централизованный контроль доступа к вашим EC2-инстансам с возможностью настройки на уровне пользователей и инстансов. Благодаря использованию политик и объектов IAM больше нет необходимости управлять SSH-ключами или передавать их для распространения по серверам.
- Недолговечные ключи – SSH-ключи не хранятся на самом инстансе и являются эфемерными по своей природе. Инстанс получает к ним доступ только во время подключения от авторизованного пользователя, что упрощает предоставление и отзыв доступа в реальном времени. Это также позволяет вам избежать использования долговечных ключей. Вместо этого вы генерируете одноразовые SSH-ключи каждый раз, когда авторизованный пользователь инициирует подключение, тем самым избегая необходимости отслеживания и обслуживания ключей.
- Возможности аудита – подключения пользователей с использованием EC2 Instance Connect логируются в AWS CloudTrail, что предоставляет необходимую информацию для аудита запросов на подключение.
- Повсеместный доступ – с EC2 Instance Connect вы можете продолжать использовать ваш существующий SSH-клиент. Кроме того, вы можете подключаться к инстансам с использованием нового веб-клиента, который находится в консоли EC2. Это помогает избежать изменений в пользовательском опыте и необходимости менять ваши рабочие процессы и утилиты.
Как работает EC2 Instance Connect
Когда на инстансе включена функциональность EC2 Instance Connect, демон SSH (sshd) на нём настраивается с использованием особого скрипта AuthorizedKeysCommand. Этот скрипт изменяет AuthorizedKeysCommand так, чтобы во время процесса аутентификации по SSH публичные ключи читались из метаданных инстанса.
Публичные SSH-ключи доступны в метаданных инстанса только для одноразового использования в течение 60 секунд. Для того чтобы успешно подключиться к инстансу, вам необходимо сделать это в течение указанного времени. Так как ключи истекают автоматически, вам не нужно отслеживать их или управлять ими напрямую, как вы делали раньше.
Настройка EC2-инстанса для доступа по EC2 Instance Connect
Чтобы начать использовать EC2 Instance Connect, вам нужно в первую очередь настроить существующие инстансы. В настоящий момент EC2 Instance Connect поддерживает Amazon Linux 2 и Ubuntu. Для включения функциональности установите либо RPM, либо Debian-пакет соответственно. В новых инстансах на основе Amazon Linux 2 функциональность EC2 Instance Connect включена по умолчанию, поэтому вы можете подключиться к ним по SSH сразу без какой-либо дополнительной конфигурации.
Для использования функциональности в существующих инстансах сначала осуществите их настройку. В данном примере мы используем инстанс с Amazon Linux 2, запущенный в вашей учётной записи. Шаги, необходимые для настройки Ubuntu, вы можете найти в документации по ссылке Set Up EC2 Instance Connect.
- Подключитесь к инстансу по SSH. В данном примере он использует сравнительно новую версию Amazon Linux 2:
- Используйте команду yum для установки RPM-пакета ec2-instance-connect.
Этот RPM-пакет произведет локальную установку нескольких скриптов и поменяет настройки AuthorizedKeysCommand и AuthorizedKeysCommandUser в файле /etc/ssh/sshd_config. Если вы используете какой-либо инструмент управления конфигурацией для изменения настроек sshd, то сначала установите пакет, а затем добавьте необходимые строки в конфигурацию, как указано в документации.
После установки ec2-instance-connect вы готовы к настройке пользователей и предоставлению им доступа к инстансам.
Настройка пользователей IAM
Вначале необходимо разрешить пользователю IAM отправлять свои SSH-ключи в EC2 Instance Connect. Для этого создайте политику IAM, чтобы вы затем могли назначать её другим пользователям в вашей учетной записи.
- В консоли IAM выберите пункт меню Policies и нажмите Create Policy.
- На странице Create Policy выберите вкладку JSON и вставьте следующий JSON-документ. Замените $REGION и $ACCOUNTID на соответствующие значения:
В качестве значения параметра ec2:osuser введите ec2-user при использовании Amazon Linux 2. Необходимо корректно указать этот параметр, чтобы метаданные были доступны для правильного SSH-пользователя. Более детальную информацию вы можете найти в документации по ссылке Actions, Resources, and Condition Keys for Amazon EC2 Instance Connect Service.
- Нажмите Review Policy.
- На странице Review Policy введите название политики, её описание и нажмите Create Policy.
- После создания политики вы можете назначить её необходимым объектам IAM. Например, создайте новую группу на странице Groups (я назвал мою группу «HostAdmins»).
- На странице Attach Policy во время создания группы выберите только что созданную политику и нажмите Next Step.
- Нажмите Create Group.
- На странице Groups выберите новую группу и нажмите Group Actions, Add Users to Group.
- Выберите одного или нескольких пользователей для добавления в группу и нажмите Add Users.
Теперь ваши пользователи могут использовать EC2 Instance Connect.
Подключение к инстансу с помощью EC2 Instance Connect
После конфигурации инстанса и назначения необходимой политики пользователям, они могут подключиться к инстансам с помощью обычного SSH-клиента, либо напрямую через AWS Management Console.
Чтобы избежать дополнительных шагов при подключении по SSH с использованием EC2 Instance Connect, существует специальная утилита для командной строки. Кроме того, можно воспользоваться веб-интерфейсом в консоли, который осуществляет за вас генерацию и установку SSH-ключа.
Для подключения с использованием SSH-клиента
- Создайте новый приватный и публичный ключи, mynew_key и mynew_key.pub соответственно:
- Для авторизации пользователя и отправки публичного ключа на EC2-инстанс, используйте AWS CLI и команду send-ssh-public-key. Убедитесь, что вы используете самую новую версию AWS CLI, чтобы эта команда была доступна.
- После аутентификации публичный ключ доступен для инстанса через его метаданные в течение 60 секунд. За это время подключитесь к инстансу с использованием соответствующего приватного ключа:
Если по какой-либо причине вы не успеете подключиться за 60 секунд, то увидите следующее сообщение об ошибке:
В таком случае для подключения по SSH снова запустите команду send-ssh-public-key.
Теперь рассмотрим подключение через консоль.
Для подключения из консоли Amazon EC2
- Откройте консоль Amazon EC2.
- В меню слева нажмите Instances, а затем выберите инстанс, к которому необходимо подключиться.
- Нажмите Connect.
- На странице Connect To Your Instance выберите EC2 Instance Connect (browser-based SSH connection), затем нажмите Connect.
Откроется следующее окно терминала. Теперь вы подключены к вашему инстансу по SSH.
Аудит с помощью CloudTrail
Для каждой попытки подключения вы можете увидеть детали соответствующего события. Они включают информацию об ID инстанса, имени пользователя на уровне ОС и публичного ключа. Все эти данные необходимы для подключения по SSH и соответствуют API-вызову SendSSHPublicKey в CloudTrail.
В консоли CloudTrail задайте поиск по событию SendSSHPublicKey.
Если EC2 Instance Connect недавно использовался, то вы увидите записи, соответствующие API-вызовам ваших пользователей для отправки их SSH-ключей на необходимые хосты. Чтобы узнать инстанс, к которому осуществлялось подключение, а также другую полезную для аудита информацию, откройте детали события.
В следующем примере вы можете увидеть JSON-описание события CloudTrail, которое показывает использование команды SendSSHPublicKey:
Если вы настроили сохранение событий CloudTrail из вашей учетной записи в бакет Amazon S3, то вы можете программно скачать эту информацию и провести её аудит. Дополнительную информацию на эту тему вы можете найти в документации по ссылке Getting and Viewing Your CloudTrail Log Files.
Заключение
EC2 Instance Connect предлагает альтернативу стратегиям, включающим сложное управление SSH-ключами, а также предоставляет преимущества встроенного аудита с использованием CloudTrail. Благодаря интеграции с IAM и метаданными инстанса EC2, вы получаете безопасный способ распространения недолговечных SSH-ключей и контроля доступа с использованием политик IAM.
В разработке находятся дополнительные возможности для EC2 Instance Connect. Компания AWS планирует в будущем запустить авторизацию на основе тэгов, что позволит вам использовать тэги внутри условия политики IAM для контроля доступа. Кроме того, планируется по умолчанию включать EC2 Instance Connect в самых популярных дистрибутивах Linux, как это уже сделано в Amazon Linux 2.
EC2 Instance Connect уже доступен без дополнительной оплаты в регионах US East (Ohio и N. Virginia), US West (N. California и Oregon), Asia Pacific (Mumbai, Seoul, Singapore, Sydney и Tokyo), Canada (Central), EU (Frankfurt, Ireland, London, Paris и Stockholm) и South America (São Paulo).