实战案例 | 在 AWS 中 为 Application Load Balancer 启用访问日志


  项目需求

某企业部署在 AWS 上的 Web 应用使用 Application Load Balancer(ALB)进行流量分发,为提升安全审计与性能分析能力,需记录所有访问请求的详细信息,包括客户端 IP、请求路径、响应状态码等。传统日志分析依赖应用层埋点,存在数据不完整、维护成本高等问题。通过启用 ALB 访问日志功能,可将原始请求数据直接存储至 Amazon S3 存储桶,为后续安全监控、流量分析和故障排查提供可靠数据源,同时满足合规性要求。

  解决方案

AWS Application Load Balancer 原生支持访问日志功能,通过配置可将日志数据按指定格式写入 S3 存储桶。方案核心步骤包括:创建专用 S3 存储桶并配置权限策略,确保 ALB 服务角色(AWSServiceRoleForElasticLoadBalancing)具备写入权限;在 ALB 控制台中启用访问日志,关联目标存储桶并设置日志前缀与记录间隔(默认每5分钟生成一个日志文件)。此方案无需编写代码,仅需通过 AWS 管理控制台即可完成配置,适合快速部署与运维。

  作业步骤

步骤一:创建 S3 存储桶
登录 AWS 控制台,导航至 S3 服务,点击 创建存储桶。
输入唯一名称(如 alb-access-logs-bucket-${区域}),选择目标区域(与 ALB 相同),取消勾选 阻止所有公共访问(日志存储桶无需公开访问)。
在 对象所有权 中选择 ACL 禁用,确保数据由 IAM 策略控制。
步骤二:配置存储桶权限策略
进入存储桶 权限 选项卡,编辑 存储桶策略,粘贴以下 JSON 策略(替换 ${存储桶名称} 和 ${区域}):
json

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "delivery.logs.amazonaws.com"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::${存储桶名称}/AWSLogs/${AWS 账户 ID}/*",
      "Condition": {
        "StringEquals": {
          "s3:x-amz-acl": "bucket-owner-full-control"
        }
      }
    }
  ]
}

保存策略,确保 ALB 服务角色具备写入权限。
步骤三:启用 ALB 访问日志
导航至 EC2 → 负载均衡器,选择目标 ALB,进入 描述 选项卡。
点击 编辑访问日志,勾选 启用访问日志,选择目标存储桶,输入日志文件前缀(如 ALB/)。
点击 保存,配置立即生效。

  结果验证

1. 日志文件生成检查
等待约5分钟后,访问 S3 存储桶,确认路径 AWSLogs/${AWS 账户 ID}/ALB/ 下生成以 .log.gz 结尾的压缩文件。下载并解压文件,检查日志格式是否包含 timestamp、client_ip、request_path、response_code 等字段。
2. 功能测试验证
通过客户端访问 ALB 监听的域名,触发请求流量。刷新 S3 存储桶,确认新日志文件记录了测试请求的详细信息(如状态码 200 或 404)。使用 Amazon Athena 或 AWS Glue 对日志数据进行查询分析,验证数据可被有效解析。