Session Manager 是什么,能做什么
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。会话管理器用户只需单击并启动一个会话,然后选择一个实例,即可快速开始使用该工具。
您现在可以使用新的基于浏览器的交互式shell和命令行界面(CLI)来管理Windows和Linux实例。 使用Session Manager来管理主机,可以给您的管理带来如下好处:
- 访问控制 – 您使用IAM策略和用户来控制对实例的访问,而不需要分发SSH密钥。您可以使用IAM的日期条件运算符限制对所需时间/维护窗口的访问。
- 可审计性 – 可以将命令和响应记录到Amazon CloudWatch和S3存储桶。您可以安排在新会话启动时收到SNS通知。
- 交互性 – 命令在完全交互式bash(Linux)或PowerShell(Windows)环境中同步执行
- 编程和脚本 – 您可以从控制台以及命令行( aws ssm … )或通过会话管理器API的方式来启动会话。
在EC2实例上运行的SSM代理必须能够连接到会话管理器的公共端点。您可以设置NAT Gateway,以允许在你的VPC的私有子网中(无Internet访问或公共IP地址)中运行的实例连接到会话管理器。
以下详细试用过程:
一、赋予System Manager 对实例可执行操作的权限:
默认情况下,Systems Manager 没有在您的实例上执行操作的权限。您必须通过使用 IAM 实例配置文件来授予访问权限。实例配置文件是一个容器,可在启动时将 IAM 角色信息传递给 Amazon EC2 实例。
1.1 创建一个EC2实例:ID:为:i-xxxxxxxxxx
1.2 创建一个角色:
在 IAM->角色->创建角色(role-test):1. 选择受信任实体的类型:AWS产品;2. 选择将要使用此角色的服务:EC2
-->Attach权限策略:选择 AmazonEC2RoleforSSM
1.3 把角色(role-test)附加到EC2(i-xxxxxxxxxx)中 ;
二、配置用户对 Systems Manager 的访问权限
2.1 访问资源组:您必须向您的 IAM 用户账户、组或角色添加 resource-groups:* 权限实体
IAM->策略->创建新策略->JSON ,填入如下权限后-保存为:policy-test
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:StartSession"
],
"Resource": [
"arn:aws-cn:ec2:*:*:instance/i-xxxxxxxxxx"
]
},
{
"Effect": "Allow",
"Action": [
"ssm:TerminateSession"
],
"Resource": [
"arn:aws-cn:ssm:*:*:session/${aws-cn:username}-*"
]
}
]
}
上面策略,限定只能使用 启动一个(ssm session)和终止自己启动的(ssm session) 并只能在实例(instance/i-xxxxxxxxxx,请替换为真实的instance ID)使用,如果你还需要ssm其他功能,可以相应设置其他权限;
2.2 在IAM中创建组:group-test,IAM->选择组(group-test)->添加权限->直接附加现有策略 ->选:policy-test
2.3 在IAM中创建用户:user-test,把你的帐号加入group-test组中(注意:你的帐号只分配凭证就行,不需要设置密码,如果需要登录web控制,才需要设置密码)。
到目前为止,我们可以使用aws cli 启动一个session了。
三、安装aws cli 以及设置aws 凭证
需要 Python 2.6.5 或更高版本,以下使用 pip 安装。
$ sudo pip install awscli
安装最新版本的 AWS CLI。
$ sudo pip install --upgrade awscli
使用 aws --version 验证新版本。
$ aws --version
aws-cli/1.16.67 Python/3.7.1 Linux/4.14.77-81.59.amzn2.x86_64 botocore/1.12.57
配置aws cli:
$ aws configure
AWS Access Key ID [None]: xxxxxx
AWS Secret Access Key [None]: xxxxxxxxxxxxxxxxxxxxxx
Default region name [None]: cn-north-1
Default output format [None]:
四、为 AWS CLI 安装 Session Manager Plugin
LINUX 安装方法:
4.1 下载:
curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/linux_64bit/session-manager-plugin.rpm" -o "session-manager-plugin.rpm"
4.2 安装:
sudo yum install -y session-manager-plugin.rpm
4.3 验证安装
$ session-manager-plugin
Session-Manager-Plugin is installed successfully. Use AWSCLI to start a session.
五、启动SSM Session
# aws ssm start-session --target i-xxxxxxxxxx
Starting session with SessionId: user-test-xxxxab2b33333333
sh-4.2$
sh-4.2$ ls /tmp
这样,你以及通过SSM登录上EC2(i-xxxxxxxxxx),并不需要ssh。
六、记录会话数据
你启动session后,所有对ec2执行的命令以及返回的结果,可以记录在CloudWatch Logs中。
6.1 在CloudWatch中新建日志组:session-logs
6.2 在System Manager 的会话管理器中启用日志流(日志组选择:session-logs)
6.3 然后,你启动ssm session 后,执行的所有操作,在CloudWatch的日志组(session-logs)都可以查到:
7、其他
7.1 禁用或启用 ssm-user 账户管理权限
当支持 Session Manager 的某个 SSM 代理版本在实例上启动时,它会创建一个名为 ssm-user 的具有根或管理员权限的用户账户。在 Linux 计算机上,此账户添加到 /etc/sudoers。
使用命令行修改 ssm-user sudo 权限
7.1.1 连接到实例并运行以下命令:
sudo cd /etc/sudoers.d
7.1.2 打开名为 ssm-agent-users 的文件进行编辑。
7.1.3 要删除 sudo 访问权限,请删除以下行:
ssm-user ALL=(ALL) NOPASSWD:ALL
-或者-
要恢复 sudo 访问权限,请添加以下行:
ssm-user ALL=(ALL) NOPASSWD:ALL
7.1.4 保存文件。
7.2 . 配置ec2 的安全组:
入站:取消所有规则
出站:
1. 开放tcp/udp 53端口
2. 开放tcp/443 端口 (因为需要此端口访问aws ssm服务器)
3. 开放tcp/6443 连接k8s的端口以及只允许k8s master IP(如果你想只允许访问k8s API);
参考:
https://amazonaws-china.com/cn/blogs/china/session-manager-register-ec2/?nc1=b_rp
https://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/session-manager.html