会话管理器概述

  • Session Manager 是一项完全托管的 AWS Systems Manager 功能,可让您通过基于浏览器的交互式一键式 shell 或 AWS CLI 管理您的 Amazon EC2 实例。

  • Session Manager 提供安全且可审计的实例管理,无需打开入站端口、维护堡垒主机或管理 SSH 密钥。

  • Session Manager 还可以轻松遵守要求对实例的受控访问、严格的安全实践以及包含实例访问详细信息的完全可审计日志的公司政策,同时仍为最终用户提供对您的 Amazon EC2 的简单的一键式跨平台访问实例。

建筑学

1

2

会话管理器的工作原理

  • 管理员用户通过 IAM 角色和策略进行身份验证。

  • 如果身份验证成功,则可以通过 AWS 管理控制台或 AWS CLI 访问 SSM 会话管理器(需要会话管理器 CLI 插件)。

  • 在每个 EC2 实例上运行的代理连接到系统管理器端点并在实例上执行命令。

  • 通过会话管理器执行的任何操作都会记录在 CloudTrail 上。可选:会话输出可以转发到 CloudWatch 日志和/或 S3 存储桶(异常端口转发操作日志不会被推送到 cloudwatch 日志和 s3 存储桶)。

主要好处

  • Systems Manager 组件可靠且高度可用(AWS 控制台、AWS CLI、SSM 终端节点)。

  • 会话管理器可以利用多因素身份验证(通过执行 IAM 策略)。

  • 集中访问 EC2 实例并精细控制谁可以在特定实例上启动会话。

  • 不再需要为 EC2 实例打开入站 SSH 连接端口。

  • 可以移除 Jump 或 Bastion 主机以提高安全性并节省成本。

  • 不需要为 EC2 实例部署和管理 ssh 密钥。

根据 IAM 用户记录了* 个会话。日志包括执行的命令、输出、命令执行的时间等等。

  • 个命令输出可以存储在 S3 中。

  • 命令输出可以转发到 CloudWatch 日志并生成警报作为对不良行为的响应。

  • 完全支持 AWS 中的日志记录和审计功能(CloudTrail、S3、CloudWatch 日志)。 (异常端口转发动作日志不会被推送到cloudwatch日志和s3 bucket)

要求

_ SSM 代理安装 _

SSM 代理应安装在每个 Ec2 实例或具有管理访问权限的本地计算机中。

互联网

SSM 代理需要与 AWS API 通信,此通信使用标准 HTTPS 端口。因为代理总是启动通信,所以不需要允许任何入站规则。

系统管理器 IAM 设置

SSM 需要一个实例配置文件角色,该角色应与每个 EC2 实例相关联。此外,混合环境需要 IAM 服务角色。

限制

a) 默认情况下,AWS Session Manager 无法传输文件。

b) 对于 Windows,不支持 RDP(可以使用端口转发)并且“运行方式”功能不可用。

c) 会话管理器与本地系统兼容,但需要高级本地实例层(需要付费)。

d) 会话管理器不是原生的 ssh 服务,大多数可以与 ssh 一起工作的工具都不支持。

Session Manager 的 IAM 策略示例

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:StartSession"
            ],
            "Resource": "arn:aws:ec2:*:*:instance/*",
            "Condition": {
                "StringEquals": {
                    "ssm:resourceTag/tag_key":[
                        "tag_value"
                    ]    
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetConnectionStatus",
                "ssm:DescribeSessions",
                "ssm:DescribeInstanceProperties",
                "ec2:DescribeInstances"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:TerminateSession"
            ],
            "Resource": [
                 "arn:aws:ssm:*:*:session/${aws:username}-*"
             ]
         }
    ]
}

进入全屏模式 退出全屏模式

您可以为 Session Manager 设置 IAM 最终用户和管理员策略。

[https://docs.aws.amazon.com/systems-manager/latest/userguide/getting-started-restrict-access-quickstart.html]

您还可以单独限制对特定实例的访问或基于标签进行限制,仅终止其特定会话,允许对所有会话进行完全访问。

[https://docs.aws.amazon.com/systems-manager/latest/userguide/getting-started-restrict-access-examples.html]

推荐设置

为 Linux 实例启用“运行方式”支持

  • 默认情况下,使用在托管实例上创建的系统生成的 ssm-user 帐户的凭据启动会话。

  • 您可以改为使用操作系统帐户的凭据启动会话。您可以通过标记 IAM 用户或角色或在 Session Manager 首选项中指定操作系统用户名来执行此操作。

  • 此设置允许使用指定操作系统用户的凭据启动会话,而不是使用 System Manager 代理 (ssm-user) 生成的默认凭据。

  • 启用此选项时,会话管理器按如下方式检查访问:

一个。如果启动会话的用户或角色已被标记为“SSMSessionRunAS”键,则会话管理器将检查该键的值是否作为操作系统用户存在于被选为目标的 EC2 实例中。如果存在,将使用该用户,否则将拒绝连接。

湾。如果启动会话的用户或角色未使用“SSMSesisonRunAS”键标记,则会话管理器将使用在 AWS 账户的会话管理器首选项中指定的操作系统用户名。

运行身份支持始终阻止使用实例上的 ssm-user 帐户启动会话。

[https://docs.aws.amazon.com/systems-manager/latest/userguide/session-preferences-run-as.html]

管理帐户权限

当支持会话管理器的 SSM 代理版本在实例上启动时,它会创建一个具有 root 或管理员权限的用户帐户,称为 ssm-user。

如果要阻止 Session Manager 用户在实例上运行管理命令,可以更新其 ssm-user 权限。您还可以在删除这些权限后恢复这些权限。

您可以在 Linux 或 Windows 实例上禁用或启用 ssm-user 账户 sudo 权限。

[https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started-ssm-user-permissions.html]

配置会话管理器以使用 AWS KMS 密钥加密

为客户端计算机和托管实例之间传输的数据提供额外保护。

配置会话管理器以创建和发送会话历史日志

  • 条日志可以存储在 Simple Storage Service (Amazon S3) 存储桶和/或 Amazon CloudWatch 日志组中。存储的日志数据可用于日志记录和审计目的,甚至用于创建安全警报。

会话管理器设置

会话管理器允许与 AWS 上的安全服务进行多种集成,最相关的如下所列:

CloudTrail

通过会话管理器 API 执行的任何操作都会记录在 CloudTrail 中。诸如 StartSession 之类的 API 操作可以很容易地通过 SNS 生成安全警报,或者作为会话活动的结果触发 AWS 上的另一个操作(lambda 函数或 SSM 运行命令就是很好的例子)。

简单的存储服务

作为可选功能,会话管理器可以将会话输出存储在 S3 上以供进一步审核。此选项还允许运行 lambda 函数,每次将会话输出存储在特定存储桶上时都可以触发这些函数。 Lambda 可以分析会话输出并执行任何所需的操作。

CloudWatch 日志

另一个可以为 Session Manager 存储会话输出日志的服务是 CloudWatch。此选项对于基于不良行为创建安全警报特别有用。通过利用过滤器和指标,CloudWatch 日志可以在任何用户尝试执行禁止的命令或对 ssh/powershell 会话执行任何受限操作时做出反应并生成警报。

3

您可以通过 AWS Cli 在所选 AWS 区域中为您的账户创建 Session Manager 首选项。可以使用 JSON 文件并运行 SSM 文档 SSM-SessionManagerRunShell 创建会话管理器首选项。看看下面的步骤。

[https://docs.aws.amazon.com/systems-manager/latest/userguide/getting-started-create-preferences-cli.html]

通过控制台做同样的事情 -

[https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-logging-auditing.html#session-manager-logging-auditing-cloudwatch-logs]

Linux实例设置权限的方式。

[https://www.linux.com/tutorials/how-manage-users-groups-linux/]

使用运行命令“UpdateSSMAgent”或发送命令 SSM 操作来执行文档以更新您的 SSM 代理 -

aws ssm send-command --instance-ids i-1234a i-1234b — document-name “AWS-UpdateSSMAgent”

进入全屏模式 退出全屏模式

如何使用会话管理器

会话管理器用户要求

联邦

您需要使用您的应用程序的 SAML 角色为所需帐户联合。此角色应附加必要的策略以使用 ssm 启动会话。

SSM代理

必须在目标实例上安装 2.3.68.0 或更高版本。

AWS CLI(可选)

需要使用 AWS CLI 启动会话(而不是使用 AWS Manager 控制台),必须在本地计算机上安装 CLI 版本 1.16.12 或更高版本(为所有受支持系统安装 AWS CLI 的说明)。

此外,必须安装 Session Manager 插件以启动或终止 EC2 实例上的会话。该插件可以安装在受支持的 Microsoft Windows、macOS、Linux 和 Ubuntu Server 版本上。

会话管理器插件

在 Linux 上安装会话管理器插件

一个。下载 Session Manager 插件 RPM 包:

64-bit:
curl “https://s3.amazonaws.com/session-manager-downloads/plugin/latest/linux_64bit/
session-manager-plugin.rpm” -o “session-manager-plugin.rpm”

32-bit:
curl “https://s3.amazonaws.com/session-manager-downloads/plugin/latest/linux_32bit/
session-manager-plugin.rpm” -o “session-manager-plugin.rpm”

进入全屏模式 退出全屏模式

湾。运行安装命令:

sudo yum install -y session-manager-plugin.rpm

进入全屏模式 退出全屏模式

C。验证安装是否成功运行 session-manager-plugin 命令。如果安装成功,则返回以下消息:

会话管理器插件安装成功。使用 AWS CLI 启动会话。

在 macOS 上安装会话管理器插件

一个。下载捆绑的安装程序:

curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac/
sessionmanager-bundle.zip" -o "sessionmanager-bundle.zip"

进入全屏模式 退出全屏模式

b.解压包:

unzip sessionmanager-bundle.zip

进入全屏模式 退出全屏模式

C。运行安装命令:

sudo ./sessionmanager-bundle/install -i /usr/local/sessionmanagerplugin -b /usr/local/bin/session-manager-plugin

进入全屏模式 退出全屏模式

在 Windows 上安装会话管理器插件

一个。要使用 EXE 安装程序安装 Session Manager 插件,请使用以下 URL 下载安装程序:

[https://s3.amazonaws.com/session-manager-downloads/plugin/latest/windows/SessionManagerPluginSetup.exe]

湾。运行下载的安装程序并按照屏幕上的说明进行操作。

C。将安装位置框留空以将插件安装到默认目录:

C:\%PROGRAMFILES%\Amazon\SessionManagerPlugin\bin\

进入全屏模式 退出全屏模式

d。验证安装是否成功。

开始会话(控制台)

有权使用 System Manager 的用户可以直接在 AWS 管理控制台中启动会话:

一个。在导航窗格中,选择会话管理器。在 AWS Systems Manager 主页中,选择 Session Manager 菜单。

湾。选择要启动连接的目标实例,应列出所有由 SSM 管理的实例。

C。选择开始会话。

d。如果连接成功,将打开 bash 命令 (Linux) 或 PowerShell 命令 (Windows)。

启动会话 (AWS CLI)

要使用 AWS CLI 启动会话,请运行以下命令:

aws ssm start-session — target instance-id

进入全屏模式 退出全屏模式

Instance-id 表示配置为与 AWS Systems Manager 及其会话管理器功能一起使用的实例的 ID。例如:i-02573cafcfEXAMPLE。

注意:要使用 AWS CLI 运行会话命令,还必须在本地计算机上安装 Session Manager 插件。

开始会话(端口转发)

一个。端口转发会话可用于在 Windows 实例上启动 RDP 会话。要启动端口转发会话,请从 CLI 运行以下命令:

Linux 示例

aws ssm start-session — target Instance-id — document-name AWS-StartPortForwardingSession — parameters ‘{“portNumber”:[“3389”],”localPortNumber”:[“12345”]}’

进入全屏模式 退出全屏模式

Windows 示例

aws ssm start-session — target Instance-id — document-name AWSS-tartPortForwardingSession — parameters ‘“portNumber”=[“3389”], “localPortNumber”=[“12345”]’

进入全屏模式 退出全屏模式

Instance-id 表示配置为与 AWS Systems Manager 一起使用的实例的 ID。例如:i-08dbf6bb51edqew34。

PortNumber 表示应将流量重定向到的实例上的远程端口。例如:3389 在 Windows 上使用 RDP。

LocalPortNumber 表示客户端上应将流量重定向到的本地端口。例如:56789。任何服务/工具都可以通过本地实例访问此端口。

湾。要达到 RDP,您可以运行:

mstsc /v localhost:LocalPortNumber

进入全屏模式 退出全屏模式

凭据验证后,应打开 RPD 会话。

启动会话 (SSH)

笔记:

要使用 SSH 启动会话,您的目标实例必须配置为支持 SSH 连接。

运行以下命令以使用 SSH 启动会话:

ssh -i /path/my-key-pair.pem username@instance-id

进入全屏模式 退出全屏模式

小费:

当您使用 SSH 启动会话时,您可以使用以下命令格式将本地文件复制到目标实例。

scp -i /path/my-key-pair.pem /path/SampleFile.txt username@instance-id:~
scp -i /path/my-key-pair.pem /path/SampleFile.txt ec2-user@instance-id:SampleFile.txt

进入全屏模式 退出全屏模式

**通过 ProxyCommand SSH **

在要使用 SSH 连接到托管实例的本地计算机上,执行以下操作:

  • 确保安装了 1.1.23.0 或更高版本的 Session Manager 插件。

  • 更新 SSH 配置文件以启用运行代理命令,该命令启动 Session Manager 会话并通过连接传输所有数据。

  • 对于 RDS,您需要确保在 EC2 实例上打开端口 22,因为这是通过 SSH 而不是 AWS SSM 会话管理器进行连接的。

Linux

  • SSH 配置文件通常位于 ~/.ssh/config。

  • 在本地机器的配置文件中添加以下内容:

# SSH over Session Manager 
host i-* mi-*     
ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"

进入全屏模式 退出全屏模式

视窗

  • SSH 配置文件通常位于 C:\Users\username.ssh\config

  • 在本地机器的配置文件中添加以下内容:

# SSH over Session Manager 
host i-* mi-*     
ProxyCommand C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters portNumber=%p"

进入全屏模式 退出全屏模式

笔记:

如果您想对 EC2 实例执行 ssh,请记住您正在尝试通过 Internet 访问私有子网。因此,如果要在本地环境(cli/ssh)中使用 SSM,则需要在本地子网和所需区域的 SSM DNS 之间打开防火墙。

故障排除

您可以在您的实例中检查以下路径中的 ssm 代理日志。

/var/log/amazon/ssm/

进入全屏模式 退出全屏模式

您可以在本地以下路径中检查会话管理器插件日志。

/usr/local/sessionmanagerplugin/logs/

进入全屏模式 退出全屏模式

出于调试目的,您可以启用日志记录,如下所示。

[https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html#install-plugin-configure-logs]

有用的命令供参考

cli to ec2:
linux:
aws ssm start-session — target i-09b77018836663333
win: 
aws ssm start-session — target i-006d98bcda883e569
cli to ec2 using ssm port forwarding:
linux:
aws ssm start-session — target i-09b77013336667733 — document-name AWS-StartPortForwardingSession — parameters ‘{“portNumber”:[“22”],”localPortNumber”:[“9008”]}’
win:
aws ssm start-session — target i-006d98b23a88c2569 — document-name AWS-StartPortForwardingSession — parameters ‘{“portNumber”:[“3389”],”localPortNumber”:[“9009”]}’
cli to rds using ssm port forwarding:
<Not Supported>
ssh to ec2 without keypair:
ssh ec2-user@i-09b770132336667733
ssh to ec2 with keypair:
ssh -i key ec2-user@i-09b77238836667733
ssh to ec2 using local port forwarding:
ssh -nNT -L 9000:localhost:80 ec2-user@i-09b77032836667733
ssh to rds via ec2 using local port forwarding:
ssh -nNT -L 9011:<db-host>:3306 ec2-user@i-09b770182116667733

进入全屏模式 退出全屏模式

用户认证

4

技术工作流程

5

端到端自动化

6

这种方法将提供端到端自动化,以在 Linux EC2 中安装 System Manager 代理,并使用 AWS Lambda 将实例配置文件附加到 Windows 和 Linux 机器。

Logo

更多推荐