为 Application Load Balancer 启用访问日志
在为负载均衡器启用访问日志时,您必须指定负载均衡器将在其中存储日志的 S3 存储桶的名称。存储桶必须具有为 Elastic Load Balancing 授予写入存储桶的权限的存储桶策略。
步骤 1:创建 S3 存储桶
在启用访问日志时,您必须为访问日志指定 S3 存储桶。您可以使用现有存储桶,也可以创建专门用于访问日志的存储桶。存储桶必须满足以下要求。
要求
-
存储桶必须位于与负载均衡器相同的区域中。该存储桶和负载均衡器可由不同的账户拥有。
-
您指定的前缀不得包含
AWSLogs
。我们会在您指定的存储桶名称和前缀后添加以AWSLogs
开头的文件名部分。 -
唯一支持的服务器端加密选项是 Amazon S3 托管密钥 (SSE-S3) 有关更多信息,请参阅 Amazon S3 托管的加密密钥 (SSE-S3)。
使用 Amazon S3 控制台创建 S3 存储桶。
-
通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
选择 Create bucket (创建存储桶)。
-
在 Create a bucket (创建存储桶) 页上,执行以下操作:
-
对于存储桶名称,请输入存储桶的名称。此名称在 Amazon S3 内所有现有存储桶名称中必须唯一。在某些区域,可能对存储桶名称有其他限制。有关更多信息,请参阅 《Amazon Simple Storage Service 用户指南》中的存储桶限制。
-
对于 Amazon 区域,选择在其中创建负载均衡器的区域。
-
对于默认加密,选择 Amazon S3 托管式密钥(SSE-S3)。
-
选择创建桶。
-
步骤 2:将策略附加到 S3 存储桶
S3 存储桶必须具有为 Elastic Load Balancing 授予将访问日志写入存储桶的权限的存储桶策略。存储桶策略是 JSON 语句的集合,这些语句以访问策略语言编写,用于为存储桶定义访问权限。每个语句都包括有关单个权限的信息并包含一系列元素。
如果您正在使用具有附加策略的现有存储桶,则可以将 Elastic Load Balancing 访问日志的语句添加到该策略。如果您这样做,则建议您评估生成的权限集,以确保它们适用于需要具有对访问日志的存储桶的访问权的用户。
可用的存储桶策略
您将使用的存储桶策略取决于 Amazon Web Services 区域和可用区类型。以下每个可展开的部分都包含一种存储桶策略以及有关何时使用该策略的信息。
该策略向指定的日志传送服务授予权限。将此策略用于以下区域的可用区和本地区中的负载均衡器:
亚太地区(海得拉巴)
亚太地区(墨尔本)
欧洲(西班牙)
欧洲(苏黎世)
中东(阿联酋)
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logdelivery.elasticloadbalancing.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::
bucket-name
/prefix
/AWSLogs/aws-account-id
/*" } ] }
该策略向指定的 Elastic Load Balancing 账户 ID 授予权限。将此策略用于以下所列区域的可用区或本地区中的负载均衡器。
{ "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
/*" } ] }
将 elb-account-id
替换为用于所在区域 Elastic Load Balancing 的 Amazon Web Services 账户 的 ID:
-
中国(北京)– 638102146993
-
中国(宁夏)– 037604701340
以下策略向指定的日志传送服务授予权限。将此策略用于 Outposts 区域中的负载均衡器。
{ "Effect": "Allow", "Principal": { "Service": "logdelivery.elb.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" } } }
使用 Amazon S3 控制台将访问日志的存储桶策略附加到您的存储桶
通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
选择存储桶的名称以打开其详细信息页面。
-
选择 Permissions(权限),然后选择 Bucket policy(存储桶策略)、Edit(编辑)。
-
更新存储桶策略以授予所需权限。
-
选择 Save changes(保存更改)。
步骤 3:配置访问日志
使用以下过程配置访问日志,以捕获日志文件并将其传输到 S3 存储桶。
要求
您的存储桶必须满足第 1 步中描述的要求,并且必须附加第 2 步中描述的存储桶策略。
使用控制台启用访问日志
通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/
。 -
在导航窗格中,选择负载均衡器。
-
选择您的负载均衡器的名称以打开其详细信息页面。
-
在属性选项卡上,选择编辑。
-
在编辑负载均衡器属性页面上,执行以下操作:
-
对于监控,打开访问日志。
-
选择浏览 S3 并选择存储桶。或者,输入 S3 存储桶的位置,包括任何前缀。
-
选择 Save changes(保存更改)。
-
使用 Amazon CLI 启用访问日志
使用 modify-load-balancer-attributes 命令。
管理保存访问日志的 S3 存储桶
要删除您配置用于访问日志的存储桶,请确保首先禁用访问日志。否则,如果在一个不属于您的 Amazon Web Services 账户 中创建了具有相同名称和必要的存储桶策略的新存储桶,Elastic Load Balancing 会将您的负载均衡器的访问日志写入这个新存储桶。
步骤 4:确认存储桶权限
在为负载均衡器启用访问日志后,Elastic Load Balancing 将验证 S3 存储桶,并创建测试文件以确保存储桶策略指定所需权限。您可以使用 Amazon S3 控制台验证是否已创建测试文件。测试文件不是实际的访问日志文件;它不包含示例记录。
验证 Elastic Load Balancing 是否在 S3 存储桶中创建了测试文件
通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
选择您指定用于访问日志的存储桶的名称。
-
导航到测试文件
ELBAccessLogTestFile
,该文件位于以下位置:my-bucket
/prefix
/AWSLogs/123456789012
/ELBAccessLogTestFile
问题排查
如果您遇到访问被拒绝错误,则可能的原因如下:
-
存储桶策略没有为 Elastic Load Balancing 授予将访问日志写入存储桶的权限。
-
存储桶使用不支持的服务器端加密选项。该存储段必须使用 Amazon S3 托管密钥(SSE-S3)。