作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
在Linux上设置自定义工具或脚本来保存SSH日志可能很繁琐,而且容易出错.
工程师可以使用 rootsh, 屏幕, 或其他实用程序记录用户活动,但如果用户权限设置不正确, 熟练的用户可以擦除审计日志以掩盖其踪迹. 另一种选择是在内核级别设置日志记录, 但这方面所需的专业知识并不常见.
值得庆幸的是,有一种方法可以记录用户活动,而无需编写任何内容 Linux command! 我们需要这些服务:
让我们看看如何设置它们.
启动EC2实例通常相当容易, 但是在启动期间必须完成一个关键任务:我们需要将我角色附加到实例, 否则,我们将无法实现本文末尾详述的预期结果.
我们与EC2实例关联的我角色必须具有内置的 AmazonSSMManagedInstanceCore 政策,加上本政策(作为内联或客户管理的附件):
{
“版本”:“2012-10-17”,
“声明”:[
{
“行动”(
“日志:CreateLogStream”,
“日志:DescribeLogStreams”,
“日志:DescribeLogGroups”,
“日志:PutLogEvents”
],
“效应”:“允许”,
“资源”:“*”
}
]
}
除了我角色,我们通常使用以下EC2实例配置:
我们可以开始设置公里,而不必等待EC2实例启动.
我们需要一个公里密钥,如果我们想要传递给CloudWatch的所有会话日志被加密存储. 让我们转到公里服务并创建一个密钥.
我们建议分配一名管理员,这样密钥就可以由AWS帐户根用户以外的用户管理, 但如果其他人不需要访问, 我们可以跳过步骤3.
这里我们选择我用户“admin”作为密钥管理员,但我们可以自由选择任何用户或角色. 我们还可以选择禁用管理员的密钥删除权限.
我们不会为这个密钥分配任何用户,因为我们希望这个密钥仅由CloudWatch日志服务用于SSH日志加密和解密操作.
在评论页面, 我们需要更改kms生成的密钥策略,因为它不包括CloudWatch日志使用密钥的权限. 我们将用这个政策来代替它:
{
“版本”:“2012-10-17”,
“声明”:[
{
"Sid": "启用我用户权限",
“效应”:“允许”,
“主要”:{
:“AWS攻击:AWS:我::ACCOUNT_ID:根”
},
“行动”:“公里:*”,
“资源”:“*”
},
{
"Sid": "允许密钥管理员访问",
“效应”:“允许”,
“主要”:{
:“AWS攻击:AWS:我::ACCOUNT_ID:用户/用户名”
},
“行动”(
“公里:创建*”,
公里:描述*”,
公里:启用*”,
公里:*”列表,
公里:*”,
公里:更新*”,
“公里:撤销*”,
公里:禁用*”,
公里:*”,
公里:删除*”,
公里:TagResource”,
公里:UntagResource”,
公里:ScheduleKeyDeletion”,
“公里:CancelKeyDeletion”
],
“资源”:“*”
},
{
“Sid”:“允许访问CloudWatch日志”,
“效应”:“允许”,
“主要”:{
“服务”:“日志.地区.amazonaws.com”
},
“行动”(
公里:加密”,
公里:解密”,
“公里:ReEncrypt *”,
“公里:GenerateDataKey *”,
“公里:DescribeKey”
],
“资源”:“*”,
"条件":{
" ArnLike ": {
公里:EncryptionContext: aws:日志:攻击”:“在攻击:aws:日志:地区:ACCOUNT_ID: *”
}
}
}
]
}
确保替换所有占位符:
ACCOUNT_ID
成为我们的AWS账户ID.用户名
为步骤3中选择的管理员用户名. 如果我们选择退出这一步,这里我们删除第二个语句块(带有 "Sid": "允许密钥管理员访问"
).地区
成为我们将服务部署到(e)的区域标识码.g., us-west-1
).有了这些,公里准备好了.
接下来,我们需要一个CloudWatch日志组(和/或S3桶-见下文),SSM代理可以发送SSH会话日志. 我们来创建它.
注意公里密钥ARN字段:在公里部分的步骤5中创建密钥之后,AWS为我们提供了这里所需的值.
(如果我们之前没有将正确的策略关联到公里密钥, 允许CloudWatch日志服务使用该密钥, 此时,我们将收到一个与公里键相关的错误.)
用于使用S3存储活动日志,而不是cloudwatch日志, 我们需要将这些权限作为一个单独的策略添加到EC2实例配置文件中(或者手动将它们与我们可能需要关联的其他权限组合在一起):
{
“版本”:“2012-10-17”,
“声明”:[
{
“效应”:“允许”,
“行动”(
“s3: propertynames”
],
“资源”:“在攻击:aws: s3::: BUCKET_NAME / *”
},
{
“效应”:“允许”,
“行动”(
“s3: GetEncryptionConfiguration”
],
“资源”:“*”
},
{
“效应”:“允许”,
“行动”:“公里:GenerateDataKey”,
“资源”:“*”
}
]
}
在上面的代码片段中,一定要替换 BUCKET_NAME
占位符.
现在我们已经设置了存储日志的地方——cloudwatch日志, S3桶, 或者两者都有——我们已经准备好进入SSH会话了.
这是最后一个关键步骤, 我们在哪里配置对Linux机器的安全访问,以便进行SSH会话监控和日志记录. 我们将从会话管理器仪表板开始.
在仪表盘上, 单击右上角“启动会话”框中的白色“配置首选项”按钮以启用会话记录.
在Preferences页面上, 我们会找到很多可以探索的部分, 但我们的重点是将SSH会话日志流式传输到CloudWatch或S3,以便我们快速查看Linux机器内发生的事情.
就在“CloudWatch日志”一节之后, 有一个“S3日志”部分,我们可以在其中选择存储桶.
配置SSH日志记录后, 我们可以SSH到我们的Linux机器并执行一些命令来查看活动是否被捕获.
那么,让我们开始一个会话. 在同一页面上,我们会发现一个“会话”选项卡,我们可以开始一个会话. 点击“启动会话”按钮将会给我们一个可以启动会话的EC2机器列表:
如果我们没有在列表中看到EC2 Linux实例, 我们应该检查它是否处于运行状态,并且具有我们之前描述的与它关联的我权限.
如果我们收到一个错误,说我们的EC2机器上安装的SSM代理版本不支持流式CloudWatch日志, 别担心. 有一个无痛的方法可以解决这个问题.
要更新SSM代理,我们需要导航到 运行命令 在左边的面板 AWS系统经理 服务.
一旦我们到了那里, 我们可以点击橙色的“运行命令”按钮, 指向一个新的页面,我们可以在那里填写一些参数.
我们从选择开始 AWS-UpdateSSMAgent 从列表中.
一旦选中,我们将向下滚动,直到看到“Targets”部分. 在这里,我们需要选择要在其上更新SSM代理的EC2实例, 然后点击“运行”按钮. 这将把我们送到一个页面,在那里我们可以监控更新的进度.
代理更新不会超过5分钟. 一旦完成,我们应该能够在会话管理器中创建一个会话.
此时,我们应该启动了一个SSH会话.
执行一些命令后, 让我们导航到CloudWatch日志日志组(或S3存储桶), (未显示),并确认该活动正在被记录.
现在我们有了一个设置, 启用静态加密, 记录在我们的Linux机器上发出的每一个命令.
事实上, 每一个 命令可能比我们想要的要多:在会话期间提供或生成的任何秘密都将记录在CloudWatch或S3中,并且任何具有所需权限的人都可以看到. 为了防止这种情况,我们可以使用 stty -echo; read passwd; stty echo;
对于我们需要在会话期间提供的每个秘密.
会话管理器是一个有用的工具,可以在不打开端口22的情况下远程访问AWS中的虚拟机. 事实上, 如果我们使用端口转发或直接SSH连接,我们就不能以这种方式生成SSH日志, 随着 会话管理器文档 笔记.
尽管如此, 将会话管理器与会话日志相结合是控制和监视虚拟机活动的一个健壮的解决方案. 此外,我们不收取使用会话管理器服务的费用. 我们只需要为我们的EC2实例和CloudWatch日志或存储日志的S3桶付费.
对于喜欢视频教程的读者,我已经详细介绍了一个非常相似的过程 在YouTube上.
SSH (Secure Shell)用于即使在不安全的网络上也能安全地访问其他计算机, 由于客户端和服务器之间的通信是加密的. 它还用于通过SFTP协议向服务器传输文件或从服务器传输文件, 它在底层使用SSH. SSH在默认情况下监听端口22.
有多种方法可以找到活动的SSH会话,包括命令w、who和“ss” | grep ssh”. 使用AWS系统管理器,可以在会话管理器控制台或通过终端中的“AWS ssm description -sessions -state Active”查看它们. |
AWS监测日志是一个完全托管的日志聚合服务. 您可以查询、监控、过滤和触发条件告警.g.,当超过10%的HTTP请求接收到5xx错误码时. 此外,CloudWatch日志 Insights还以有用的条形图、线形图和堆叠面积图的形式呈现日志数据.
AWS我负责对向AWS资源发出的请求进行身份验证和授权. 它同时支持RBAC和ABAC授权模型. 在RBAC中,权限是根据作业角色授予的. 在ABAC中,权限是基于属性e授予的.g.,根据标记为主体分配权限.
Amazon EC2(弹性计算云)允许开发人员在云中启动虚拟机. 本质上是高度可扩展的, EC2允许实例在几分钟内从1vCPU增加到20vcpu,反之亦然. 实例可以使用Intel、AMD或ARM处理器,并在Linux、Windows或macOS上运行工作负载.
EC2实例是云中的虚拟机, 用于运行工作负载,而无需管理底层硬件, 但仍然提供对计算资源的完全控制. EC2提供了广泛的处理器, OSs, 以及用于运行从小型web应用程序到大型SAP HANA数据库的存储空间.
世界级的文章,每周发一次.
世界级的文章,每周发一次.