Witajcie, to jest pierwszy artykuł z AWS (Amazon Web Services) ale na pewno będzie ich więcej. Z artykułu dowiesz się co krok po kroku trzeba zrobić żeby móc używać ‘Session Managera’. Dokumentacja którą znalazłem na stronach AWS była dla mnie mało czytelna i rozrzucona w kilku miejscach. Gdy udało mi się uruchomić usługę Session Manager w AWS to postanowiłem zebrać wszystkie wiadomości razem i spisać co od początku do końca trzeba zrobić.
Co to jest Session Manager?
Session Manager to taka funkcja na AWS umożliwiająca połączenie się z posiadanymi maszynami bez otwierania portów. Na linuksowych maszynach możemy wykonywać polecenia w konsoli za pomocą przeglądarki, podkreślę to jeszcze raz bez otwierania jakichkolwiek portów nawet ssh.
Połączenie może być bezpieczniejsze jeśli utworzymy w AWS kluczyk i będziemy je szyfrować. Logi z takiego połączenia mogą być bezpośrednio zapisywane w S3 albo Cloud Watch i także mogą być szyfrowane.
Dzięki temu że konsola otwiera nam się w przeglądarce nie potrzebujemy żadnych dodatkowych narzędzi. Co ważniejsze dzięki temu może być uruchomiona na dowolnym sprzęcie Windows, Linux, czy macOS.
Dzięki IAM możemy w prosty i przejrzysty sposób decydować którzy użytkownicy/grupy mają dostęp do maszyny.
Szyfrowanie połączenia
Na początek dodamy kluczyk do KMS, który będzie służył do szyfrowania połączenia za aktualnie używając TLS 1.2 . Jeśli nie chcesz szyfrować połączenia, albo masz już utworzony klucz, to możesz pominąć tą sekcję, chociaż wysoce zalecam żeby stworzyć nowy dedykowany klucz tylko do tego celu.
Klikamy na ‘Create key‘, wybieramy symetryczny, potem podajemy nazwę i zalecam wpisanie opisu bez polskich znaków.
Teraz wybieramy osoby które będą mogły zarządzać kluczem i go usunąć, jeśli tylko zaznaczymy checkbox na dole. W kolejnym oknie wybierzemy osoby które będą mogły używać klucza, zalecam nic w nim nie wpisywać. W ostatnim okienku wyświetli się polityka w której nic nie musimy zmieniać. Zatwierdzamy na Finish i klucz się utworzy.
Gdy klucz będzie gotowy otwieramy go i kopiujemy nazwę ARN, która już niedługo będzie nam potrzebna.
Tworzenie Polityki
Otwieramy IAM i tworzymy nową politykę. Wybieramy zakładkę JSON i wklejamy poniższą zawartość. Trzeba tylko zamienić wartość ‘key-name‘ na nazwę ARN naszego klucza którą kopiowaliśmy w poprzednim kroku. Warto zwrócić uwagę czy nie dodały nam się jakieś puste znaki przed, albo za nazwą naszego klucza.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssmmessages:CreateControlChannel",
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:OpenDataChannel"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetEncryptionConfiguration"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"kms:Decrypt"
],
"Resource": "key-name"
}
]
}
Po zatwierdzeniu przechodzimy do kolejnego okna w którym podajemy nazwę polityki (ja wpisałem “SessionManagerPermissions”) którą tworzymy i jej opis bez polskich znaków.
Tworzenie Roli
Teraz naszą politykę przypiszemy do EC2. Dzięki temu będziemy mogli ją wybrać w dowolnej maszynie i zezwolić na połączenie za pomocą Session Managera. Ponieważ polityka zawierała klucz nasze połączenie będzie mogło być szyfrowane.
Przypisujemy utworzoną wcześniej politykę, jeśli chcemy nadajemy tagi, a w ostatnim oknie podajemy nazwę (ja użyłem nazwy “Session_Manager_connect”) i opis.
System Manager
Zmiana ustawień System Manager. Żeby móc połączyć się bezpiecznie z naszymi wirtualnymi maszynami należy otworzyć System Manager, a następnie otworzyć Session manager i wybrać “Preferences”.
Klikamy na EDIT i możemy zaznaczyć opcję ‘Enable KMS encryption’ oraz ‘Select a KMS key‘, teraz możemy z rozwijanego menu wybrać nasz klucz.
Przypisywanie Roli
Teraz możemy przypisać utworzoną wcześniej rolę IAM do maszyn na których chcemy jej używać. Wystarczy otworzyć EC2 zaznaczyć jedną interesującą nas instancję kliknąć na Actions , Security i wybrać Modify IAM role. Z rozwijanej listy wybieramy naszą rolę IAM i zatwierdzamy.
To generalnie powinno być już wszystko. W nowszych obrazach systemów operacyjnych usługa Session manager jest dodawana automatycznie. Po upływie ok 15 minut powinniśmy móc się połączyć z maszyną za pomocą Session managera. Wystarczy otworzyć interesującą nas wirtualną maszynę, kliknąć na connect wybrać Session Manager i kliknąć Connect.
Możemy także połączyć się nie z poziomu EC2, ale System Manager. Wystarczy otworzyć Session Manager, kliknąć na Start session i wybrać jedną maszynę z listy.
Problemy
Jeśli zdarzy się, że z jakiegoś powodu nadal nie można się połączyć to problemem przy starszych wersjach systemu może być usługa session-manager. Najlepiej jest się zalogować na naszą wirtualną maszynę i sprawdzić czy usługa jest włączona, albo w ogóle zainstalowana. Poniżej kilka komend które pomogą w diagnozie:
###### Ręczna instalacja Session Manager on Ubuntu Server 14 ######
status amazon-ssm-agent
mkdir /tmp/ssm
cd /tmp/ssm
wget https://s3.eu-west-1.amazonaws.com/amazon-ssm-eu-west-1/latest/debian_amd64/amazon-ssm-agent.deb
sudo dpkg -i amazon-ssm-agent.deb
status amazon-ssm-agent
sudo start amazon-ssm-agent
###### Ręczna instalacja Session Manager on Ubuntu Server 16 ######
sudo systemctl status amazon-ssm-agent
mkdir /tmp/ssm
cd /tmp/ssm
wget https://s3.eu-west-1.amazonaws.com/amazon-ssm-eu-west-1/latest/debian_amd64/amazon-ssm-agent.deb
sudo dpkg -i amazon-ssm-agent.deb
sudo systemctl status amazon-ssm-agent
sudo systemctl enable amazon-ssm-agent
###### Ręczna instalacja Session Manager on Ubuntu Server 20 /18 /16 ######
# install agent
snap install amazon-ssm-agent --classic
systemctl start snap.amazon-ssm-agent.amazon-ssm-agent.service
systemctl status snap.amazon-ssm-agent.amazon-ssm-agent.service
systemctl stop snap.amazon-ssm-agent.amazon-ssm-agent.service
snap list amazon-ssm-agent
Na maszynie powinna być tylko jedna usługa amazon-ssm-agent zainstalowana albo za pomocą dpkg albo snap.
Jeśli macie problem z połączeniem zalecam też sprawdzenie czasu. Podczas połączenia sprawdzany jest znacznik czasu w podpisie i porównywany z aktualnym, dzięki temu ogranicza to ilość czasu przez którą możliwy jest atak. Jeśli zegar ma większą różnicę niż kilka minut to połączenie kończy się błędem.
Na ubuntu można zaktualizować czas np za pomocą :
sudo ntpdate pool.ntp.org
Logi od AWS Session Manager znajdują się na linuxie zazwyczaj w katalogu /var/log/amazon/ssm. Natomiast w Windowsie znajdziecie je zazwyczaj w katalogu %PROGRAMDATA%\Amazon\SSM\Logs.
Więcej informacji znajdziecie w dokumentacji AWS https://docs.aws.amazon.com/systems-manager/latest/userguide/agent-install-ubuntu.html
To był pierwszy artykuł na temat Session Manager w AWS czyli Amazon Web Services, mam nadzieję że był przydatny. Na pewno napiszę więcej artykułów związanych z AWS, a wszystkie znajdziecie w kategorii AWS.
Wow, super wpis:)
Proszę pisz więcej na temat AWS, bo ciężko znaleźć coś po polsku o tym w internetach
Cześć Dawid, miło słyszeć, że podobał Ci się artykuł. Na pewno powstaną następne dotyczące AWS.
Możliwość komentowania została wyłączona.