运维必看:如何用AWS CLI快速实现EC2登录事件监控?

101 阅读6分钟

引言:为什么大家需要关注EC2的“门禁”记录?

大家好,在云计算的世界里,AWS EC2就像我们应用的“家”,为我们的服务提供了稳定可靠的运行环境。但是,大家是否曾想过,谁在什么时候“进出”过我们家的“大门”?每一次用户登录,尤其是通过SSH的访问,都是一个关键的安全事件。

对于运维和开发同学来说,实时监控这些登录事件至关重要。它不仅是安全审计的基本要求,更是快速发现未授权访问、暴力破解等潜在威胁的第一道防线。很多人可能会问,CloudWatch默认不是监控EC2吗?没错,但它默认监控的是CPU、网络、磁盘等性能指标,而不是实例内部的操作系统日志,比如SSH登录记录。

那么,如何才能让CloudWatch“看懂”EC2内部的日志呢?答案就是 CloudWatch Agent。今天,我们就来聊聊如何通过几条AWS CLI命令,快速部署CloudWatch Agent,将EC2的登录日志集中管理并设置告警,真正做到“事前预警,事后可追溯”。

Screenshot 2025-06-28 at 13.32.07.png

核心思路:让CloudWatch Agent成为我们的“日志快递员”

要实现我们的目标,逻辑非常简单:

  1. 授权:首先,EC2实例需要有权限将日志发送给CloudWatch。我们通过创建一个IAM角色并授予相应权限来实现。
  2. 安装:在EC2实例上安装CloudWatch Agent。
  3. 配置:告诉Agent需要收集哪个日志文件(例如SSH登录日志),以及送到CloudWatch的哪个位置。
  4. 启动:启动Agent,开始日志的实时“快递”。
  5. 监控:在CloudWatch中查看日志并设置告警。

接下来,我们将一步步用AWS CLI来完成这个过程。

实战操作:三步搞定EC2登录监控

前提条件:

  • 我们已经安装并配置好了AWS CLI。
  • 我们有一台正在运行的EC2实例(本文以Amazon Linux 2为例)。

第一步:为EC2配置IAM角色(授权)

这是最关键也是最容易被忽略的一步。直接在EC2上配置Access Key是不安全的做法,最佳实践是使用IAM角色。

  1. 创建IAM角色 该角色需要信任EC2服务,允许EC2实例代入这个角色。

    # 创建一个信任策略文件 trust-policy.json
    echo '{
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": { "Service": "ec2.amazonaws.com"},
          "Action": "sts:AssumeRole"
        }
      ]
    }' > trust-policy.json
    
    # 使用CLI创建角色
    aws iam create-role --role-name EC2-CloudWatch-Agent-Role --assume-role-policy-document file://trust-policy.json
    
  2. 为角色附加策略 我们需要为这个角色附加AWS托管的 CloudWatchAgentServerPolicy 策略,该策略包含了Agent所需的全部权限。

    aws iam attach-role-policy --role-name EC2-CloudWatch-Agent-Role --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy
    
  3. 创建实例配置文件并附加到EC2 最后,将这个角色“穿”在EC2实例上。

    # 创建实例配置文件
    aws iam create-instance-profile --instance-profile-name EC2-CloudWatch-Agent-Profile
    
    # 将角色添加到配置文件
    aws iam add-role-to-instance-profile --instance-profile-name EC2-CloudWatch-Agent-Profile --role-name EC2-CloudWatch-Agent-Role
    
    # 将配置文件关联到我们的EC2实例 (将 "i-xxxxxxxxxxxxxxxxx" 替换为我们的实例ID)
    aws ec2 associate-iam-instance-profile --instance-id i-xxxxxxxxxxxxxxxxx --iam-instance-profile Name=EC2-CloudWatch-Agent-Profile
    

    实用建议:如果我们是创建新实例,可以在启动向导的“高级细节”部分直接选择创建好的IAM实例配置文件,更加方便。

第二步:在EC2上安装和配置Agent

现在,登录到我们的EC2实例,开始安装和配置Agent。

  1. 安装CloudWatch Agent 在Amazon Linux 2上,使用 yum 即可轻松安装。

    sudo yum install amazon-cloudwatch-agent -y
    
  2. 创建Agent配置文件 这是核心环节。我们需要创建一个JSON文件告诉Agent:

    • 监控哪个文件:对于Amazon Linux/CentOS/RHEL,SSH登录日志是 /var/log/secure。对于Debian/Ubuntu,是 /var/log/auth.log
    • 日志叫什么名字:在CloudWatch中创建一个名为 /ec2/ssh-login-logs 的日志组。

    在EC2实例上,创建一个名为 cw-agent-config.json 的文件:

    {
      "agent": {
        "run_as_user": "root"
      },
      "logs": {
        "logs_collected": {
          "files": {
            "collect_list": [
              {
                "file_path": "/var/log/secure",
                "log_group_name": "/ec2/ssh-login-logs",
                "log_stream_name": "{instance_id}"
              }
            ]
          }
        }
      }
    }
    

    实用建议log_stream_name 使用 {instance_id} 是一个非常好的实践,它能自动用实例ID作为日志流名称,方便我们区分不同实例的日志。

第三步:启动Agent并验证

一切就绪,让我们启动Agent,让它开始工作!

  1. 使用配置启动Agent 运行以下命令,它会读取我们的配置文件,并启动Agent服务。

    sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \
    -a fetch-config -m ec2 -c file:./cw-agent-config.json -s
    

    看到 Successfully fetched configamazon-cloudwatch-agent has been started 就表示成功了。

  2. 验证日志

    • 尝试从另一台终端SSH登录到这台EC2。
    • 登录AWS控制台,导航到 CloudWatch > 日志组 (Log Groups)
    • 我们应该能找到名为 /ec2/ssh-login-logs 的日志组。
    • 点击进入,我们会看到以我们的实例ID命名的日志流。其中就记录了刚才的登录事件,例如包含 "Accepted password" 或 "Accepted publickey" 的日志行。

进阶玩法:创建告警

光有日志还不够,我们希望在每次登录时都能收到通知。这可以通过指标筛选器 (Metric Filters)告警 (Alarms) 实现。

  1. 在CloudWatch的 /ec2/ssh-login-logs 日志组页面,点击 “操作” -> “创建指标筛选器”
  2. 筛选模式:输入 "Accepted publickey" OR "Accepted password",这个模式会匹配所有成功的SSH登录事件。
  3. 测试模式:选择我们的日志流,测试一下能否匹配到登录日志。
  4. 分配指标:为这个筛选器创建一个新的指标,例如命名为 SuccessfulSSHLogins
  5. 创建告警:在指标创建完成后,直接点击 “创建警报”
    • 条件:设置为 SuccessfulSSHLogins 指标在 1分钟>= 1 时触发。
    • 操作:配置一个SNS主题,将通知发送到我们的邮箱或手机。

现在,每当有人成功登录我们的EC2,我们都会在几分钟内收到一封告警邮件!

结论

通过AWS CLI和CloudWatch Agent,我们用一种自动化、可复现的方式,快速搭建起了EC2登录事件的监控体系。这个简单的方案为我们提供了一个强大的安全审计和告警能力,将原本“看不见”的系统内部行为,转化为了“看得懂、可告警”的云上数据。

这只是一个开始。我们还可以将这些日志导出到S3进行长期归档,或使用Amazon OpenSearch、Splunk等工具进行更复杂的日志分析和可视化。希望这篇文章能帮助大家轻松加固自己的云上堡垒!