Блог Amazon Web Services

Переадресация портов инстансов Amazon EC2 с помощью AWS Systems Manager

Оригинал статьи: ссылка (Sigit Priyanggoro, Sr Partner Solutions Architect и Sruthi Maddineni, Software Development Engineer)

Переадресация портов является полезным способом перенаправления сетевого трафика с одной комбинации IP-адреса и порта на другую. С помощью переадресации портов вы можете получить доступ со своей рабочей станции к инстансу EC2, который находится в приватной подсети.

В этой статье мы рассмотрим сценарий, в котором заказчики предъявляют строгие требования к безопасности инстансов Amazon Elastic Compute Cloud (Amazon EC2) и разрешают только приватные подключения внутри Amazon Virtual Private Cloud (Amazon VPC): то есть, у инстанса есть только приватный IP-адрес без доступа к шлюзу NAT или бастион-хосту.

Как показано на диаграмме ниже, инстанс Amazon EC2 обслуживает внутреннее приложение с веб-интерфейсом, к которому сотрудники, работающие удаленно, должны иметь безопасный доступ. В реализации этого сценария мы используем конечную точку VPC (VPC Endpoint) для AWS Systems Manager, чтобы обеспечить приватное соединение между агентом AWS Systems Manager внутри инстанса и самим сервисом. Затем мы настраиваем AWS Systems Manager Session Manager, чтобы разрешить переадресацию портов между рабочей станцией сотрудника и приватным инстансом Amazon EC2 для обеспечения безопасного доступа к приложению.

Диаграмма, показывающая перенаправление портов инстанса Amazon EC2 с помощью AWS Systems Manager

Изображение 1: Доступ к приватному инстансу Amazon EC2 с помощью перенаправления портов в AWS Systems Manager

Подготовка

В рамках этого обзора мы предполагаем следующее:

  • У вас есть доступ к аккаунту AWS через пользователя или роль AWS Identity and Access Management (IAM);
  • Указанный пользователь или роль IAM может создавать Amazon VPC в вашем аккаунте;
  • Указанный пользователь или роль IAM может создавать инстанс Amazon EC2 в вашем аккаунте;
  • Указанный пользователь или роль IAM имеет доступ к сервису AWS Systems Manager.
Об этой статье
Время на прочтение 10 минут
Уровень Средний (300)
Используемые сервисы Amazon VPCAWS PrivateLinkAWS Systems Manager

Создание Amazon VPC с приватной подсетью

VPC – это изолированная часть облака AWS, в которой можно запускать ресурсы AWS, например, инстансы Amazon EC2. Выполните шаги из инструкции по началу работы, чтобы создать VPC с использованием мастера настройки в консоли AWS. В нашем случае для запуска инстанса необходима только одна приватная подсеть.

Для того, чтобы использовать приватное подключение к Systems Manager при осуществлении запросов по его стандартному DNS-адресу, убедитесь, что на вашем VPC включены атрибуты Enable DNS hostnames и Enable DNS support.

Запуск инстанса Amazon EC2 внутри приватной сети Amazon VPC

Вы можете запустить инстанс с Linux, используя консоль AWS, как описано в инструкции Amazon EC2. В этой статье мы будем использовать образ Amazon Machine Image (AMI) с операционной системой Amazon Linux 2, в котором агент Systems Manager установлен по умолчанию. Узнать, в каких ещё AMI предустановлен агент Systems Manager, можно в его документации.

Создайте инстанс Amazon EC2 в публичной подсети и установите на него веб-сервер по вашему выбору. Для изначальной установки сервера потребуется подключение к интернету. Однако в нашем сценарии необходимо, чтобы инстанс находился в приватной подсети. Воспользуйтесь инструкциями по перемещению инстанса в другую подсеть, чтобы перенести ваш инстанс Amazon EC2 в приватную подсеть.

Конфигурация конечной точки VPC для AWS Systems Manager

Следуйте шагам из документации для создания новых конечных точек:

  • com.amazonaws.region.ssm: конечная точка для сервиса Systems Manager;
  • com.amazonaws.region.ec2messages: используется для вызовов от агента Systems Manager к самом сервису;
  • com.amazonaws.region.ec2: если вы используете Systems Manager для создания снимков дисков с поддержкой VSS, то необходимо создать конечную точку для сервиса EC2. Без неё вызовы для перечисления подключённых томов EBS не смогут выполниться, что приведёт к отказу команды Systems Manager.
  • com.amazonaws.region.ssmmessages: эта конечная точка необходима для подключения к вашим инстансам через защищённый канал данных с использованием Session Manager, который в нашем случае является обязательным требованием для переадресации портов.

Включите приватный DNS для конечных точек

Функциональность приватного DNS для конечных точек связывает приватную зону, содержащую стандартные DNS-адреса сервисов, с вашим Amazon VPC. Таким образом, вы можете осуществлять вызовы к сервису Systems Manager по приватному каналу без необходимости менять используемый публичный DNS-адрес сервиса. Для использования этой функциональности убедитесь, что на вашем VPC включены настройки Enable DNS hostnames и Enable DNS support. Поддержка приватного DNS включена по умолчанию на конечных точках, создаваемых для сервисов AWS.

В следующем примере можно увидеть, как адрес сервиса ssm.us-east-1.amazonaws.com преобразуется в приватный IP-адрес, что позволяет осуществлять управление инстансом Amazon EC2 через Systems Manager несмотря на то, что он расположен внутри приватной подсети.

[ec2-user@ip-10-100-1-52 ~]$ nslookup ssm.us-east-1.amazonaws.com
Server:         10.100.0.2
Address:        10.100.0.2#53
Non-authoritative answer:
Name:   ssm.us-east-1.amazonaws.com
Address: 10.100.254.180
Name:   ssm.us-east-1.amazonaws.com
Address: 10.100.1.176

Регион

Регион представляет собой идентификатор одного из регионов AWS, поддерживаемых сервисом AWS Systems Manager, например, us-east-2 для US East (Ohio). Список всех доступных значений можно увидеть в колонке Region в списке конечных точек AWS Systems Manager в документации.

На следующем изображении показаны все необходимые для переадресации портов конечные точки VPC, созданные в регионе us-east-1 в качестве примера.

Изображение 2: Конечные точки VPC для AWS Systems Manager

Настройка AWS Systems Manager

По умолчанию у AWS Systems Manager нет прав на выполнение каких-либо действий с вашими инстансами. Вы предоставляете доступ с помощью IAM-профиля инстанса, который передаёт информацию о роли IAM в инстанс Amazon EC2 через его мета-данные.

Как только вы настроили необходимые привилегии для AWS Systems Manager, следуйте шагам из документации по мастеру быстрой настройке AWS Systems Manager для конфигурации необходимых ролей IAM и часто используемых возможностей AWS Systems Manager.

Роль AmazonSSMRoleForInstancesQuickSetup необходимо назначить на инстансы Amazon EC2, чтобы у AWS Systems Manager были разрешения для работы с ними.

Изображение 3: Роли IAM, созданные с помощью мастера быстрой настройки AWS Systems Manager

Следуйте инструкциям по настройке профиля инстанса в документации AWS Systems Manager, чтобы проверить или создать необходимый профиль.

Как только настройка AWS Systems Manager завершится, инстансы Amazon EC2 будут зарегистрированы в сервисе. Выполните следующую команду, чтобы убедиться, что установка завершена (в данном примере используются два инстанса Amazon EC2 с приватным доступом, которые управляются через AWS Systems Manager).

sigitp@host-lab:~$ aws ssm get-inventory
{
    "Entities": [
        {
            "Data": {}, 
            "Id": "i-0006803bf97sgtsgt"
        }, 
        {
            "Data": {
                "AWS:InstanceInformation": {
                    "Content": [
                        {
                            "ComputerName": "ip-10-100-1-52.ec2.internal", 
                            "InstanceId": "i-005cc2c4661sgtsgt", 
                            "IpAddress": "10.100.1.52", 
                            "AgentType": "amazon-ssm-agent", 
                            "ResourceType": "EC2Instance", 
                            "AgentVersion": "2.3.1319.0", 
                            "PlatformVersion": "2", 
                            "PlatformName": "Amazon Linux", 
                            "PlatformType": "Linux"
                        }
                    ], 
                    "TypeName": "AWS:InstanceInformation", 
                    "SchemaVersion": "1.0", 
                    "CaptureTime": "2020-07-03T19:29:40Z"
                }
            }, 
            "Id": "i-005cc2c4661sgtsgt"
        }, 
        {
            "Data": {
                "AWS:InstanceInformation": {
                    "Content": [
                        {
                            "ComputerName": "ip-10-100-1-110.ec2.internal", 
                            "InstanceId": "i-0cb65f68833sgtsgt", 
                            "IpAddress": "10.100.1.110", 
                            "AgentType": "amazon-ssm-agent", 
                            "ResourceType": "EC2Instance", 
                            "AgentVersion": "2.3.1319.0", 
                            "PlatformVersion": "2", 
                            "PlatformName": "Amazon Linux", 
                            "PlatformType": "Linux"
                        }
                    ], 
                    "TypeName": "AWS:InstanceInformation", 
                    "SchemaVersion": "1.0", 
                    "CaptureTime": "2020-07-03T19:23:25Z"
                }
            }, 
            "Id": "i-0cb65f68833sgtsgt"
        } 
    ]
}

Доступ к инстансу Amazon EC2 с использованием переадресации портов в Session Manager

Перед выполнением следующих шагов убедитесь, что вы завершили действия по настройке Session Manager, указанные выше. Более подробную информацию вы можете найти в инструкции по началу работы с Session Manager.

Чтобы использовать интерфейс командной строки (AWS CLI) для переадресации портов, необходимо установить расширение для Session Manager. Более подробную информацию можно узнать в документации по установке расширения Session Manager в AWS CLI.

Для создания сессии используйте следующую команду:

aws ssm start-session \
--target instance-id \
--document-name AWS-StartPortForwardingSession \ 
--parameters '{"portNumber":["80"], "localPortNumber":["9090"]}'

Например, ниже показан пример команды AWS CLI для переадресации портов одного из инстансов Amazon EC2:

sigitp@host-lab:~$ aws ssm start-session --target i-005cc2c4661sgtsgt --document-name AWS-StartPortForwardingSession --parameters '{"portNumber":["80"], "localPortNumber":["9090"]}'

Starting session with SessionId: sigit@domain.com-03aaac7aee3sgtsgt
Port 9090 opened for sessionId sigit@domain.com-03aaac7aee3sgtsgt.
Waiting for connections...

После её выполнения откройте веб-браузер и перейдите по адресу localhost:9090, чтобы увидеть ваше веб-приложение:

Изображение 4: доступ к веб-приложению в приватном инстансе Amazon EC2 с использованием переадресации портов в Session Manager

Успешное подключение будет отображено в выводе команды AWS CLI:

sigitp@host-lab:~$ aws ssm start-session --target i-005cc2c4661sgtsgt --document-name AWS-StartPortForwardingSession --parameters '{"portNumber":["80"], "localPortNumber":["9090"]}'

Starting session with SessionId: sigit@domain.com-03aaac7aee3sgtsgt
Port 9090 opened for sessionId sigit@domain.com-03aaac7aee3sgtsgt.
Waiting for connections...

Connection accepted for session sigit@domain.com-0d4eb1bc72esgtsgt.

Очистка

Убедитесь, что вы выключили все инстансы Amazon EC2, которые были созданы во время выполнения примера.

Заключение

В этой статье мы рассказали вам о том, как создать VPC с приватной подсетью и запустить в ней инстанс Amazon EC2 с простым веб-сервером. Затем мы рассмотрели конфигурацию конечной точки VPC (VPC endpoint), мастер быстрой настройки AWS Systems Manager, а в конце воспользовались функциональностью Session Manager для переадресации портов.

Переадресация портов работает для инстансов с Windows и Linux. Она доступна во всех регионах AWS, где доступен сервис AWS Systems Manager. При подключении к инстансам Amazon EC2 нет каких-либо дополнительных затрат, вы платите только за исходящий трафик на вашей конечной точке VPC (VPC endpoint).