W poniższym artykule przedstawię sposób na połączenie się z instancją EC2 na AWS, która działa w prywatnym subnecie i dotychczas główną opcją połączenia się z nią, było wykorzystanie bastion host.
Jakiś czas temu AWS wprowadziło EC2 Instance Connect Endpoint. Dzięki temu rozwiązaniu, możemy połączyć się z naszą instancją nie tworząc specjalnie bastion hostu.
1. Zanim zaczniemy
Zanim zaczniemy tworzyć endpoint, do tego zadania potrzebujemy kilku rzeczy:
- Skonfigurowane AWS CLI na komputerze lokalnym
- Skonfigurowaną sieć VPC, aby miała prywatny subnet
- Utworzoną instancję EC2, która uruchomiona jest w powyższym subnecie
2. Security Group dla Endpointu oraz instancji
Odnośnie konfiguracji Security Group dla instancji EC2 oraz endpointu, odeślę do dokumentacji, ponieważ AWS rekomenduje kilka sposobów, więc każdy może dobrać odpowiednie dla siebie. Link do SG https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/eice-security-groups.html
3. Tworzymy EC2 Instance Connect Endpoint
W pierwszej kolejności, musimy utworzyć endpoint dla naszego prywtnego subnetu, robimy to przy pomocy polecenia
aws ec2 create-instance-connect-endpoint --region eu-cetral-1 --subnet-id subnet-0123456789example
Oczywiście, należy wpisać swój region od subnet ID 🙂 Po wykonaniu powyższego polecenia, dostaniemy w zwrotce kilka wartości, jedną z nich będzie InstanceConnectEndpointId, skopiujmy to sobie, bo będzie to nam potrzebne za chwilę.
4. Łączenie przez SSH do wybranej instacji
Połączenie przez SSH do instancji, którą mamy w prywatnym subnecie jest wręcz identyczne jak normalnie łączenie przez ssh, z tą różnicą, że musimy przekazać dodatkową opcję. Tak więc, aby połączyć się z naszą instancją, wykonujemy poniższe polecenie
ssh -i klucz-ssh.pem uzytkownik@prywatne_ip -o ProxyCommand='aws ec2-instance-connect open-tunnel --instance-id id_instancji'
Efektem powyższego polecenia, powinno być połączenie się przez SSH z naszą instancją 🙂
6. Usunięcie endpointu
Jeżeli nie potrzebujemy już dalej endpointu, możemy go usunąć w prosty sposób, wykonując poniższe polecenie
aws ec2 delete-instance-connect-endpoint --instance-connect-endpoint-id endpoint_id
Co prawda krótki artykuł, ale mam nadzieję, że przydatny, ponieważ dzięki Instance Endpoint nie musimy się bawić w tworzenie i utrzymywanie bastion hostów.