Blog
Wie man sich bei EC2-Instanzen ohne SSH anmeldet

In früheren Beiträgen haben wir Ihnen gezeigt, wie Sie ein privates Schlüsselpaar bereitstellen, mit dem Sie sich bei einer
EC2-Instanz anmelden können. Seit September 2018 unterstützt der AWS Session Manager die Anmeldung bei jeder Instanz direkt von der Kommandozeile aus ohne SSH. In diesem
Blog zeigen wir Ihnen, wie Sie dies mit CloudFormation konfigurieren können.
Um sich mit dem AWS Session Manager bei einer EC2-Instanz anzumelden, müssen Sie drei Dinge tun:
* Installieren Sie den AWS SSM-Agenten
* Erteilen Sie dem Sitzungsmanager Berechtigungen
* Aktivieren Sie die Audit-Protokollierung
Installieren Sie den AWS SSM-Agent
Wir sind faul und verwenden eine Amazon Linux-basierte Instanz, auf der der Agent bereits installiert ist. Für andere
AMIs konsultieren Sie bitte die Dokumentation.
In CloudFormation fügen wir die Instanz hinzu:
Parameters:
AmiId:
Type: 'AWS::SSM::Parameter::Value<aws::EC2::Image::Id>'
Default: '/aws/service/ami-amazon-linux-latest/amzn-ami-hvm-x86_64-gp2'
Resources:
Instance:
Type: 'AWS::EC2::Instance'
Properties:
ImageId: !Ref 'AmiId'
IamInstanceProfile: !Ref 'IamInstanceProfile'
Berechtigungen für Sitzungsmanager erteilen
Der Agent benötigt die folgenden Berechtigungen, um den Sitzungsmanager zu aktivieren:
- Effect: Allow
Action:
- ssmmessages:CreateControlChannel
- ssmmessages:CreateDataChannel
- ssmmessages:OpenControlChannel
- ssmmessages:OpenDataChannel
Resource: '*'
- Effect: Allow
Action:
- s3:GetEncryptionConfiguration
Resource: '*'
Um die Dinge klein und einfach zu halten, verknüpfen wir die Rolle AmazonEC2RoleforSSM mit dem Instanzprofil, das
die oben genannten Berechtigungen enthält:
InstanceRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Statement:
- Effect: Allow
Principal:
Service:
- ec2.amazonaws.com
Action:
- sts:AssumeRole
Path: /
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AmazonEC2RoleforSSM
Audit-Protokollierung einschalten
Mit AWS Session Manager können Sie die Sitzungsprotokolle entweder auf S3, CloudWatch oder auf beiden speichern.
Um die Audit-Protokollierung zu aktivieren, müssen Sie ein SSM-Dokument mit dem Namen SSM-SessionManagerRunShell erstellen:
SessionManagerPreferences:
Type: Custom::SSMDocument
Properties:
Name: SSM-SessionManagerRunShell
DocumentType: Session
Content: !Sub >
{ "schemaVersion": "1.0",
"content": "Session Manager Preferences",
"sessionType": "Standard_Stream",
"inputs": {
"s3BucketName": "${SessionLogBucket}",
"s3KeyPrefix": "",
"s3EncryptionEnabled": false,
"cloudWatchLogGroupName": "${SessionLogGroup}",
"cloudWatchEncryptionEnabled": false
}
}
Beachten Sie, dass wir einen benutzerdefinierten CloudFormation-Anbieter erstellen mussten, um das Dokument zu erstellen, da die standardmäßige
CloudFormation-Ressource keine Angabe des Dokumentnamens zulässt.
eine Sitzung beginnen
Nach der Bereitstellung können Sie sich bei Ihrer Instanz anmelden, indem Sie Folgendes eingeben:
$ aws ssm start-session --target <instance-id>
Demo
Die vollständige CloudFormation-Vorlage finden Sie auf github. Um
zu testen, geben Sie ein:
$ git clone https://github.com/binxio/blog-login-to-ec2-instances-without-ssh
$ cd blog-login-to-ec2-instances-without-ssh
$ make
create demo in default VPC vpc-12313137, subnets subnet-privatea,subnet-privateb,subnet-privatec using security group sg-default.
{
"StackId": "arn:aws:cloudformation:eu-central-1:111111111111:stack/ec2-session-manager/207b6890-26dc-11e9-b214-021298c8e4cc"
}
[
"aws ssm start-session --target i-0c25d8bf100a5d1da",
"aws logs get-log-events --log-group-name ec2-session-manager-SessionLogGroup-L9G8VSLL6XCK --log-stream-name $SESSION_ID",
"aws s3 cp s3://ec2-session-manager-sessionlogbucket-q8c1pz8q6u6g/$SESSION_ID.log -"
]
kopieren Sie den ausgegebenen Befehl start-session:
$ aws ssm start-session --target i-12311231123132
Starting session with SessionId: mvanholsteijn-0d9ce5dd2172522f7
sh-4.2$ sudo tail /var/log/amazon/ssm/*.log
Mit der Aktion ssm:StartSession können Sie Benutzern den Start einer Sitzung ausdrücklich erlauben oder verweigern.
Sitzungsprotokoll anzeigen
Um das Sitzungsprotokoll von s3 anzuzeigen, geben Sie ein:
SESSION_ID=mvanholsteijn-0d9ce5dd2172522f7
aws s3 cp s3://ec2-session-manager-sessionlogbucket-q8c1pz8q6u6g/$SESSION_ID.log -
Nach dem Beenden der Sitzung dauert es einige Minuten, bis das Protokoll erscheint.
Fazit
Der AWS Session Manager vereinfacht die Anmeldung bei jeder Ihrer EC2-Instanzen, auf denen der
SSM-Agent installiert ist, ohne SSH. Er erspart Ihnen die Komplizierung Ihrer
Infrastruktur mit Benutzer- und SSH-Schlüsselverwaltung. Sobald die Unterstützung für Tunneling verfügbar ist,
können wir uns von dem Konzept eines Bastion Hosts verabschieden.
Wenn Sie sich weiterhin mit SSH anmelden möchten, empfehlen wir Ihnen den Blog über die Bereitstellung eines privaten Schlüsselpaars.
Verfasst von

Mark van Holsteijn
Mark van Holsteijn is a senior software systems architect at Xebia Cloud-native solutions. He is passionate about removing waste in the software delivery process and keeping things clear and simple.
Unsere Ideen
Weitere Blogs
Contact



