为 Application Load Balancer 启用运行状况检查日志 - ELB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

为 Application Load Balancer 启用运行状况检查日志

为负载均衡器启用运行状况检查日志时,必须指定负载均衡器将存储日志的 S3 存储桶的名称。存储桶必须具有授予 ELB 写入存储桶的权限的存储桶策略。

步骤 1:创建 S3 存储桶

启用运行状况检查日志时,必须为运行状况检查日志指定 S3 存储桶。您可以使用现有的存储桶,也可以创建专门用于运行状况检查日志的存储桶。存储桶必须满足以下要求。

要求
  • 存储桶必须位于与负载均衡器相同的区域中。该存储桶和负载均衡器可由不同的账户拥有。

  • 唯一支持的服务器端加密选项是 Amazon S3 托管密钥 (SSE-S3) 有关更多信息,请参阅 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 S3 用户指南》中的存储桶限制

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

    3. 对于默认加密,选择 Amazon S3 托管式密钥(SSE-S3)

    4. 选择 创建存储桶

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

您的 S3 存储桶必须具有存储桶策略,该策略授予 ELB 将运行状况检查日志写入存储桶的权限。存储桶策略是 JSON 语句的集合,这些语句以访问策略语言编写,用于为存储桶定义访问权限。每个语句都包括有关单个权限的信息并包含一系列元素。

如果您使用的是已附加策略的现有存储桶,则可以将 ELB 运行状况检查日志的语句添加到策略中。如果您这样做,我们建议您评估生成的权限集,以确保它们适用于需要访问存储桶以获取运行状况检查日志的用户。

该策略向指定的日志传送服务授予权限。

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logdelivery.elasticloadbalancing.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix/AWSLogs/123456789012/*" } ] }

对于 Resource,使用示例策略中显示的格式,输入访问日志所在位置的 ARN。请务必在 S3 存储桶 ARN 的资源路径中,包含该负载均衡器所在账户的账户 ID。这样可以确保只有来自指定账户的负载均衡器才能将访问日志写入 S3 存储桶。

您指定的 ARN 取决于您是否计划在步骤 3 中启用访问日志时包含前缀。

带前缀的 S3 存储桶 ARN 示例

S3 存储桶名称为 amzn-s3-demo-logging-bucket,前缀为 logging-prefix。

arn:aws:s3:::amzn-s3-demo-logging-bucket/logging-prefix/AWSLogs/123456789012/*
不带前缀的 S3 存储桶 ARN 示例

S3 存储桶名称为 amzn-s3-demo-logging-bucket。S3 存储桶 ARN 中没有前缀部分。

arn:aws:s3:::amzn-s3-demo-logging-bucket/AWSLogs/123456789012/*

以前,对于 2022 年 8 月之前可用的区域,我们需要一项政策,向该地区特定的 ELB 账户授予权限。此旧版策略仍然受到支持,但我们建议您将其替换为上述新版策略。当然如果您愿意,也可以继续使用旧版策略(此处未显示)。

为了增强安全性,请使用精确的 S3 存储桶 ARNs。

  • 使用完整的资源路径,而不仅仅是 S3 存储桶 ARN。

  • 包括 S3 存储桶 ARN 的账户 ID 部分。

  • 请勿在 S3 存储桶 ARN 的账户 ID 部分使用通配符(*)。

创建存储桶策略后,使用 Amazon S3 接口(例如 Amazon S3 控制台或 Amazon CLI 命令)将您的存储桶策略附加到 S3 存储桶。

Console
将您的存储桶策略附加到 S3 存储桶
  1. 打开 Amazon S3 控制台,网址为 https://console.aws.amazon.com/s3/

  2. 选择存储桶的名称以打开其详细信息页面。

  3. 选择 Permissions(权限),然后选择 Bucket policy(存储桶策略)、Edit(编辑)。

  4. 更新存储桶策略以授予所需权限。

  5. 选择保存更改

Amazon CLI
将您的存储桶策略附加到 S3 存储桶

使用 put-bucket-policy 命令。在此示例中,存储桶策略已保存到指定的 .json 文件中。

aws s3api put-bucket-policy \ --bucket amzn-s3-demo-bucket \ --policy file://access-log-policy.json

步骤 3:配置运行状况检查日志

使用以下过程配置运行状况检查日志,以捕获日志文件并将其传送到您的 S3 存储桶。

要求

存储桶必须满足第 1 步中所描述的要求,并且必须附加第 2 步中所描述的存储桶策略。如果指定前缀,则前缀不得包含字符串 “AWSLogs”。

管理运行状况检查日志的 S3 存储桶

在删除为运行状况检查日志配置的存储桶之前,请务必禁用运行状况检查日志。否则,如果有一个新的存储桶具有相同的名称和所需的存储桶策略,但是在您不拥有的中创建的,ELB 可能会将您的负载均衡器的运行状况检查日志写入这个新存储桶。 Amazon Web Services 账户

Console
启用运行状况检查日志
  1. 打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择负载均衡器

  3. 选择您的负载均衡器的名称以打开其详细信息页面。

  4. 属性选项卡上,选择编辑

  5. 对于监控,请打开 Healt h Check 日志

  6. 对于 S3 URI,输入日志文件的 S3 URI。您指定的 URI 取决于您是否使用前缀。

    • 带有前缀的 URI:s3://bucket-name/prefix

    • 不带前缀的 URI:s3://bucket-name

  7. 选择保存更改

Amazon CLI
启用运行状况检查日志

使用带有相关属性的modify-load-balancer-attributes命令。

aws elbv2 modify-load-balancer-attributes \ --load-balancer-arn load-balancer-arn \ --attributes \ Key=health_check_logs.s3.enabled,Value=true \ Key=health_check_logs.s3.bucket,Value=amzn-s3-demo-logging-bucket \ Key=health_check_logs.s3.prefix,Value=logging-prefix
CloudFormation
启用运行状况检查日志

更新AWS::ElasticLoadBalancingV2::LoadBalancer资源以包含相关属性。

Resources: myLoadBalancer: Type: 'AWS::ElasticLoadBalancingV2::LoadBalancer' Properties: Name: my-alb Type: application Scheme: internal Subnets: - !Ref subnet-AZ1 - !Ref subnet-AZ2 SecurityGroups: - !Ref mySecurityGroup LoadBalancerAttributes: - Key: "health_check_logs.s3.enabled" Value: "true" - Key: "health_check_logs.s3.bucket" Value: "amzn-s3-demo-logging-bucket" - Key: "health_check_logs.s3.prefix" Value: "logging-prefix"

步骤 4:确认存储桶权限

为您的负载均衡器启用运行状况检查日志后,ELB 会验证 S3 存储桶并创建一个测试文件以确保存储桶策略指定所需的权限。您可以使用 Amazon S3 控制台验证是否已创建测试文件。测试文件不是实际的运行状况检查日志文件;它不包含示例记录。

验证 ELB 是否在您的 S3 存储桶中创建了测试文件
  1. 打开 Amazon S3 控制台,网址为 https://console.aws.amazon.com/s3/

  2. 选择您为运行状况检查日志指定的存储桶的名称。

  3. 导航到测试文件 ELBHealthCheckLogTestFile。位置取决于您是否使用前缀。

    • 带有前缀的位置:amzn-s3-demo-logging-bucketprefix/AWSLogs/123456789012/ELBHealthCheckLogTestFile

    • 没有前缀的位置:amzn-s3-demo-logging-bucket/AWSLogs/123456789012/ELBHealthCheckLogTestFile

问题排查

如果您遇到访问被拒绝错误,则可能的原因如下:

  • 存储桶策略不授予 ELB 向存储桶写入运行状况检查日志的权限。确认您使用的是该区域正确的存储桶策略。确认资源 ARN 使用的存储桶名称与您在启用运行状况检查日志时指定的存储桶名称相同。如果您在启用运行状况检查日志时未指定前缀,请确认资源 ARN 不包含前缀。

  • 存储桶使用不支持的服务器端加密选项。该存储段必须使用 Amazon S3 托管密钥(SSE-S3)。