为 Classic Load Balancer 启用访问日志 - Elastic Load Balancing

为 Classic Load Balancer 启用访问日志

要为负载均衡器启用访问日志,您必须指定负载均衡器将在其中存储日志的 Amazon S3 存储桶的名称。您还必须将一个存储桶策略附加到此存储桶,该策略向 Elastic Load Balancing 授予写入存储桶的权限。

重要

该存储桶与您的负载均衡器必须位于同一区域。该存储桶可由与拥有负载均衡器的账户不同的账户拥有。

步骤 1:创建 S3 存储桶

您可以使用 Amazon S3 控制台来创建 S3 存储桶。如果您已有存储桶并要使用它存储访问日志,请跳过此步骤,并转到 步骤 2:将策略附加到 S3 存储桶 以向 Elastic Load Balancing 授予将日志写入存储桶的权限。

提示

如果您将使用控制台启用访问日志,则可跳过此步骤,并让 Elastic Load Balancing 为您创建具有所需权限的存储桶。如果您将使用 AWS CLI 启用访问日志,则必须创建存储桶并自行授予所需权限。

Requirements

  • 存储桶必须位于与负载均衡器相同的区域中。

  • 需要使用 Amazon S3 托管加密密钥 (SSE-S3)。不支持其他加密选项。

使用 Amazon S3 控制台创建 S3 存储桶。

  1. 通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 选择 Create bucket (创建存储桶)

  3. Create a bucket (创建存储桶) 页上,执行以下操作:

    1. 对于存储桶名称,输入存储桶的名称。此名称在 Amazon S3 内所有现有存储桶名称中必须唯一。在某些区域,可能对存储桶名称有其他限制。有关更多信息,请参阅 Amazon Simple Storage Service 开发人员指南中的存储桶限制

    2. 对于区域,选择在其中创建负载均衡器的区域。

    3. 选择创建

步骤 2:将策略附加到 S3 存储桶

创建或标识 S3 存储桶后,您必须将策略附加到存储桶。存储桶策略是 JSON 语句的集合,这些语句以访问策略语言编写,用于为存储桶定义访问权限。每个语句都包括有关单个权限的信息并包含一系列元素。

如果存储桶具有附加的策略,您可以将 Elastic Load Balancing 访问日志的语句添加到该策略。如果您这样做,则建议您评估生成的权限集,以确保它们适用于需要具有对访问日志的存储桶的访问权的用户。

提示

如果您将使用控制台启用访问日志,则可跳过此步骤,并让 Elastic Load Balancing 为您创建具有所需权限的存储桶。

将策略语句附加到存储桶

  1. 通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 选择存储桶。选择 Permissions,然后再选择 Bucket Policy

  3. 如果要创建新的存储桶策略,请将这整个策略文档复制到策略编辑器中,然后将占位符替换为存储桶的名称和前缀、Elastic Load Balancing 的 AWS 账户的 ID(基于负载均衡器所在的区域)以及您自己的 AWS 账户的 ID。如果您正在编辑现有存储桶策略,请仅复制策略文档中的新语句(Statement 元素的 [ 和 ] 之间的文本)。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::elb-account-id:root" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::bucket-name/prefix/AWSLogs/your-aws-account-id/*" }, { "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::bucket-name/prefix/AWSLogs/your-aws-account-id/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } }, { "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::bucket-name" } ] }

    下表包含要在存储桶策略中使用的账户 ID。

    区域 区域名称 Elastic Load Balancing 账户 ID
    us-east-1 美国东部 (弗吉尼亚北部) 127311923021
    us-east-2 美国东部 (俄亥俄) 033677994240
    us-west-1 美国西部 (加利福尼亚北部) 027434742980
    us-west-2 美国西部 (俄勒冈) 797873946194
    af-south-1 非洲(开普敦) 098369216593
    ca-central-1 加拿大 (中部) 985666609251
    eu-central-1 欧洲(法兰克福) 054676820928
    eu-west-1 欧洲(爱尔兰) 156460612806
    eu-west-2 欧洲(伦敦) 652711504416
    eu-south-1 欧洲(米兰) 635631232127
    eu-west-3 欧洲(巴黎) 009996457667
    eu-north-1 欧洲(斯德哥尔摩) 897822967062
    ap-east-1 亚太地区(香港) 754344448648
    ap-northeast-1 亚太地区 (东京) 582318560864
    ap-northeast-2 亚太地区 (首尔) 600734575887
    ap-northeast-3 亚太地区(大阪) 383597477331
    ap-southeast-1 亚太地区 (新加坡) 114774131450
    ap-southeast-2 亚太地区 (悉尼) 783225319266
    ap-south-1 亚太地区 (孟买) 718504428378
    me-south-1 中东(巴林) 076674570225
    sa-east-1 南美洲(圣保罗) 507241528517
    us-gov-west-1* AWS GovCloud(美国西部) 048591011584
    us-gov-east-1* AWS GovCloud(美国东部) 190560391635
    cn-north-1* 中国(北京) 638102146993
    cn-northwest-1* 中国 (宁夏) 037604701340

    * 这些区域需要单独的账户。有关更多信息,请参阅 AWS GovCloud (US-West)China (Beijing)

  4. 选择 Save

步骤 3:启用访问日志

您可以使用 AWS Management Console或 AWS CLI 启用访问日志。请注意,在使用控制台启用访问日志时,您可以让 Elastic Load Balancing 为您创建带负载均衡器写入存储桶所需权限的存储桶。

使用以下示例捕获日志并每 60 分钟 (默认间隔) 将日志传输到 S3 存储桶一次。

使用控制台为负载均衡器启用访问日志

  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格上的 LOAD BALANCING 下,选择 Load Balancers

  3. 选择您的负载均衡器。

  4. 描述选项卡上,选择配置访问日志

  5. Configure Access Logs 页面上,执行以下操作:

    1. 选择 Enable access logs

    2. Interval 保留为默认设置 60 minutes

    3. 对于 S3 Location,键入 S3 存储桶的名称,包括前缀 (例如,my-loadbalancer-logs/my-app)。您可以指定现有存储桶的名称或新存储桶名称。

    4. (可选) 如果存储桶不存在,请选择 Create this location for me。您必须指定在 Amazon S3 中的所有现有存储桶名称中唯一的名称,并遵循 DNS 命名约定。有关更多信息,请参阅 Amazon Simple Storage Service 开发人员指南中的存储桶命名规则

    5. 选择 Save

使用 AWS CLI 为负载均衡器启用访问日志

首先,创建一个 .json 文件,该文件使 Elastic Load Balancing 能够捕获日志并每 60 分钟将这些日志传输到您为日志创建的 S3 存储桶一次:

{ "AccessLog": { "Enabled": true, "S3BucketName": "my-loadbalancer-logs", "EmitInterval": 60, "S3BucketPrefix": "my-app" } }

要启用访问日志,请在 modify-load-balancer-attributes 命令中指定 .json 文件,如下所示:

aws elb modify-load-balancer-attributes --load-balancer-name my-loadbalancer --load-balancer-attributes file://my-json-file.json

以下为响应示例:

{ "LoadBalancerAttributes": { "AccessLog": { "Enabled": true, "EmitInterval": 60, "S3BucketName": "my-loadbalancer-logs", "S3BucketPrefix": "my-app" } }, "LoadBalancerName": "my-loadbalancer" }

步骤 4:验证负载均衡器是否在 S3 存储桶中创建了测试文件

在启用负载均衡器的访问日志之后,Elastic Load Balancing 会验证 S3 存储桶并创建测试文件。您可以使用 S3 控制台验证是否已创建测试文件。

验证 Elastic Load Balancing 是否在 S3 存储桶中创建了测试文件

  1. 通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 选择您的 S3 存储桶。

  3. 导航到您指定用于访问日志记录的存储桶,然后查找 ELBAccessLogTestFile。例如,如果使用控制台创建存储桶和存储桶策略,则路径如下:

    my-bucket/prefix/AWSLogs/123456789012/ELBAccessLogTestFile

管理保存访问日志的 S3 存储桶

启用访问日志记录之后,要删除存有访问日志的存储桶,请确保首先禁用访问日志记录。否则,如果在一个不属于您的 AWS 账户中创建了具有相同名称和必要的存储桶策略的新存储桶,Elastic Load Balancing 会将您的负载均衡器的访问日志写入这个新存储桶。