Jak połączyć się za pomocą Session Manager?
Minimalne kroki do połączenia
Agent SSM
Przygotuj instancję lub AMI z zainstalowanym agentem SSM lub użyj jednej z tej listy:
Ręczna instalacja agenta SSM na instancjach EC2 z systemem Linux
Przykład dla CentOS Stream:
#Zasób globalny:
sudo dnf install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
#Region specyficzny: us-east-1
sudo dnf install -y https://s3.us-east-1.amazonaws.com/amazon-ssm-us-east-1/latest/linux_amd64/amazon-ssm-agent.rpm
sudo systemctl status amazon-ssm-agent
sudo systemctl enable amazon-ssm-agent
sudo systemctl start amazon-ssm-agent
Przykład dla Ubuntu 20.10:
sudo snap install amazon-ssm-agent --classic
sudo snap list amazon-ssm-agent
sudo snap start amazon-ssm-agent
sudo snap services amazon-ssm-agent
Więcej informacji:
Profil instancji IAM
Utwórz profil instancji IAM dla Systems Manager i przypisz rolę IAM do instancji (https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html)
Tworzenie profilu instancji:
Ważne:
- Gdy tworzysz role dla EC2, profil instancji jest tworzony automatycznie.
- Jeśli tworzysz role za pomocą AWS CLI, profil instancji nie jest tworzony. Musisz go utworzyć ręcznie.
Jak to wygląda w AWS CLI?
Potrzebujesz polityki zaufania dla roli:
cat <<EOT >> Role-Trust-Policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
EOT
Następnie musisz utworzyć rolę z niezbędnymi politykami, profil instancji i przypisać rolę do profilu instancji:
aws iam create-role --role-name Role-SSM-instance --assume-role-policy-document file://Role-Trust-Policy.json
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore --role-name Role-SSM-instance
aws iam create-instance-profile --instance-profile-name SSM
aws iam add-role-to-instance-profile --role-name Role-SSM-instance --instance-profile-name Role-SSM-instance
Możesz zobaczyć wynik:
aws iam list-instance-profiles
Teraz możemy przypisać profil instancji IAM do instancji:
aws ec2 associate-iam-instance-profile --instance-id INSTANCE_ID --iam-instance-profile Name=SSM
Więcej informacji:
- Role IAM i profil instancji: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html
- Profil instancji: https://docs.aws.amazon.com/cli/latest/reference/iam/create-instance-profile.html
Zezwolenie na ruch HTTPS w grupie zabezpieczeń
Grupa zabezpieczeń dodana do punktu końcowego VPC musi zezwalać na ruch przychodzący HTTPS (port 443) z zasobów w Twoim VPC, które komunikują się z usługą. W grupie zabezpieczeń dla EC2 nie musimy zezwalać na ruch HTTPS tylko po to, aby ustanowić połączenie z Session Manager.
Grupa zabezpieczeń musi zezwalać na ruch przychodzący HTTPS (port 443) z zasobów w Twoim VPC, które komunikują się z usługą.
Przykład dla AWS CLI:
aws ec2 authorize-security-group-ingress \
--group-id sg-ID-Security-Group \
--protocol tcp \
--port 443 \
--source-group sg-1a2b3c4d
Więcej informacji:
Łączenie się z instancją
Konsola zarządzania AWS
Aby rozpocząć sesję (konsola Amazon EC2)
- Otwórz konsolę Amazon EC2 na https://console.aws.amazon.com/ec2/.
- W panelu nawigacyjnym wybierz "Instancje".
- Wybierz instancję i kliknij "Połącz".
- Wybierz metodę połączenia "Session Manager".
- Kliknij "Połącz".
Więcej informacji:
- Rozpoczęcie sesji: https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html
Interfejs wiersza poleceń AWS
Musisz użyć tego polecenia z lokalnej instancji lub CloudShell:
aws ssm start-session --target instance-id
Więcej informacji:
- Rozpoczęcie sesji: https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-starthtml#sessions-start-cli
- CloudShell: https://aws.amazon.com/cloudshell/
Włączanie logowania sesji do S3 i CloudWatch z szyfrowaniem
Możesz rejestrować polecenia i szczegóły sesji w koszu Amazon S3 lub grupie dzienników CloudWatch Logs. Skonfiguruj sesje na stronie preferencji Session Manager dla logowania do CloudWatch lub S3.
Ważne:
-
Każde polecenie wraz z wynikiem jest rejestrowane.
-
Dzienniki są zbierane tylko dla połączeń Session Manager.
-
Strumień logów jest oddzielny dla każdej sesji w CloudWatch i zawiera czas wykonania polecenia.
-
Dzienniki są rejestrowane w czasie rzeczywistym w CloudWatch.
-
W S3 widzimy osobne pliki dla każdej sesji.
-
Dzienniki są rejestrowane po zakończeniu sesji na S3.
-
W S3 nie mamy informacji o czasie wykonania polecenia, tylko czas rozpoczęcia i zakończenia sesji.
Więcej informacji:
- Logowanie aktywności sesji: https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-logging.html
Co musimy zrobić?
- Ogólne
- Utwórz klucz KMS do szyfrowania i ustaw politykę klucza, aby udzielić uprawnień roli IAM, która będzie używana do logowania sesji.
- Zaktualizuj politykę IAM, która umożliwia dostęp do kosza S3 i CloudWatch Logs w celu logowania sesji.
- S3
- Utwórz kosz S3 do przechowywania dzienników sesji z szyfrowaniem.
- W ustawieniach Session Manager włącz "Wyślij dzienniki sesji do S3" i "Wybierz nazwę kosza z listy". Możesz wymusić szyfrowanie.
- CloudWatch
- Utwórz grupę dzienników CloudWatch do przechowywania dzienników sesji z szyfrowaniem.
- Zaktualizuj politykę IAM, która umożliwia dostęp do kosza S3 i CloudWatch Logs w celu logowania sesji i używania klucza KMS.
- W ustawieniach Session Manager włącz "Logowanie do CloudWatch", wybierz "Stream session logs" i "Wybierz nazwę grupy dzienników z listy". Możesz wymusić szyfrowanie.
Dodatkowe sposoby konfiguracji preferencji Session Manager:
- AWS CLI
{
"schemaVersion": "1.0",
"description": "Document to hold regional settings for Session Manager",
"sessionType": "Standard_Stream",
"inputs": {
"s3BucketName": "bucket-s3-logs-sessionmanager",
"s3KeyPrefix": "ec2session",
"s3EncryptionEnabled": true,
"cloudWatchLogGroupName": "EC2Session",
"cloudWatchEncryptionEnabled": true,
"cloudWatchStreamingEnabled": true,
"kmsKeyId": "",
"runAsEnabled": false,
"runAsDefaultUser": "",
"idleSessionTimeout": "",
"maxSessionDuration": "",
"shellProfile": {
"windows": "",
"linux": ""
}
}
}
aws ssm update-document --name "SSM-SessionManagerRunShell" --content "file://SessionManagerRunShell.json" --document-version "\$LATEST"
- CloudFormation z CustomResources. Przygotowanie funkcji Lambda i uruchomienie jej. (w tym konfiguracja w szablonie