AWS Session Manager

AWS Session Manager

Session Manager介绍

简单来说,Session Manager有点类似于VMware的控制台功能,你可以通过AWS控制台或者AWS CLI连接到EC2上。下面是一段官方文档介绍:

AWS Systems Manager 会话管理器是一个新的交互式 Shell 和 CLI,有助于提供安全、访问权限受到控制且经过审计的 Windows 和 Linux EC2 实例管理。使用会话管理器,您无需打开入站端口、管理 SSH 密钥或使用堡垒主机。并且登录的主机可以处于公有子网或者私有子网。

借助会话管理器,您可以提高安全性,集中进行访问管理并接收详细的审计。除了无需打开入站端口之外,您还可以结合使用会话管理器与 AWS NAT Gateway,以便登录处于私有子网的EC2主机。通过使用 AWS Identity and Access Management (IAM) 策略,您可以在一个中心位置授予和撤销对实例的访问权限。提供访问权限后,您可以使用 AWS CloudTrail 审计哪个用户访问了实例,并将每个命令记录到 Amazon S3 或 Amazon CloudWatch Logs。会话管理器用户只需单击并启动一个会话,然后选择一个实例,即可快速开始使用该工具。

下载安装ssm-agent

查看ssm-agent的版本

amazon-ssm-agent -version
SSM Agent version: 3.0.529.0

下载安装,或者升级到最新版的ssm-agent

yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm

配置Session Manager

创建一个日志组,用于存放用户的操作日志

image-20210511145202626

编辑会话管理器的参数,设置了20分钟的超时时间,指定日志组。

image-20210511145047028

默认情况下,AWS Systems Manager 没有权限操作你的实例,需要为EC2关联一个IAM角色。至少要为EC2分配AmazonSSMManagedInstanceCore这个内置策略。这里将Systems Manager操作的日志发送到CloudWatch上,所以还要关联一个CloudWatch的权限。

image-20210511135819876

EC2关联IAM角色

image-20210511145709579

可以点击EC2进行连接

image-20210511145812237

也可以进入会话管理器界面启动会话

image-20210511145953713

选中EC2进行连接

image-20210511145956313

通过Session Manager进行登录,默认用户是ssm-user,可以通过 su 命令进行用户切换。

image-20210511150039624

在CloudWatch上查看用户刚才输入的命令以及回显。

image-20210511150313978

image-20210511150317372

授权其他用户通过SSM登录

创建用户,暂时不分配权限

image-20210511152837133

创建策略,这里添加了一个条件,EC2需要添加资源标签SSM:Bastion-EC2,这样可以更精细化的控制用户权限。

image-20210511161314587

策略json文件

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ssm:GetConnectionStatus",
                "ec2:DescribeInstances",
                "ssm:DescribeSessions",
                "ssm:DescribeInstanceProperties"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "ssm:StartSession",
            "Resource": "*",
            "Condition": {
                "StringLike": {
                    "ssm:resourceTag/SSM": "Bastion-EC2"
                }
            }
        }
    ]
}

用户关联权限策略,需要注意的是,修改策略之后,用户需要重新登录才会生效(或者很长时间生效,没有继续测试)。

image-20210511153133663

EC2添加标签键为SSM,值为Bastion-EC2。

image-20210511161341640

使用新用户登录测试

image-20210511153307294

image-20210511153245043

可以在管理员账号下查看日志

image-20210511153458101

这里演示一下实验过程中遇到IAM授权问题如何解决,例如SSM-User直接点击EC2进行连接会有下面报错,发现是没有ssm:DescribeInstanceInformation授权,那么就可以在策略里面添加对应的权限。

image-20210511162512818

image-20210511162549049

在策略里面添加对应的权限。

image-20210511162604873

重新连接成功。

image-20210511162612936

image-20210511163533791

参考资料