Session Manager w Amazon Web Services (AWS)

AWS session manager

Last updated on 19 kwietnia, 2021

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.

AWS - KMI create key
AWS - KMI create key symetric
AWS - KMI add key

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.

AWS - KMI create key add admin
AWS - KMI create key add users

Gdy klucz będzie gotowy otwieramy go i kopiujemy nazwę ARN, która już niedługo będzie nam potrzebna.

AWS - KMI key -ARN

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"
        }
    ]
}
AWS - IAM - create policy
AWS - IAM - create policy JSON

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.

AWS - IAM - create policy - name

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.

AWS - IAM - create role
AWS - IAM - create role - chose EC2


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.

AWS - IAM - create role - politics
AWS - IAM - create role -name

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”.

AKS - system manager
AKS - system manager - session manager

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.

AKS - system manager - session manager - preferences

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.

AWS - EC2 modify IAM

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.

AWS - EC2 connect
AWS - EC2 connect 2

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.

AWS - session manager - connect

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.

2 myśli na “Session Manager w Amazon Web Services (AWS)”

  1. Wow, super wpis:)
    Proszę pisz więcej na temat AWS, bo ciężko znaleźć coś po polsku o tym w internetach

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *