本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为 Application Load Balancer 启用访问日志
在为负载均衡器启用访问日志时,您必须指定负载均衡器将在其中存储日志的 S3 存储桶的名称。存储桶必须具有为 Elastic Load Balancing 授予写入存储桶的权限的存储桶策略。
步骤 1:创建 S3 存储桶
在启用访问日志时,您必须为访问日志指定 S3 存储桶。您可以使用现有存储桶,也可以创建专门用于访问日志的存储桶。存储桶必须满足以下要求。
要求
-
存储桶必须位于与负载均衡器相同的区域中。该存储桶和负载均衡器可由不同的账户拥有。
-
唯一支持的服务器端加密选项是 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 S3 用户指南》中的存储桶限制。
-
对于 AWS 区域,选择在其中创建负载均衡器的区域。
-
对于默认加密,选择 Amazon S3 托管式密钥(SSE-S3)。
-
选择 创建存储桶 。
-
步骤 2:将策略附加到 S3 存储桶
S3 存储桶必须具有为 Elastic Load Balancing 授予将访问日志写入存储桶的权限的存储桶策略。存储桶策略是 JSON 语句的集合,这些语句以访问策略语言编写,用于为存储桶定义访问权限。每个语句都包括有关单个权限的信息并包含一系列元素。
如果您正在使用具有附加策略的现有存储桶,则可以将 Elastic Load Balancing 访问日志的语句添加到该策略。如果您这样做,则建议您评估生成的权限集,以确保它们适用于需要具有对访问日志的存储桶的访问权的用户。
此策略向日志传输服务授予权限。
-
{ "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/*
AWS GovCloud (US)— 以下示例使用了 ARN 语法。 AWS GovCloud (US) Regions
arn:aws-us-gov: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/*
AWS GovCloud (US)— 以下示例使用了 ARN 语法。 AWS GovCloud (US) Regions
arn:aws-us-gov:s3:::amzn-s3-demo-logging-bucket/AWSLogs/123456789012/*
以前,对于 2022 年 8 月之前可用的区域,我们需要一项政策,向该地区特定的 Elastic Load Balancing 账户授予权限。此旧策略仍受支持,但我们建议您将其替换为上述较新的策略。如果您希望继续使用旧版政策(此处未显示),则可以。
以下是要在 IDs 旧策略中指定的 Elastic Load Balanc Principal
ing 账户供参考。请注意,不在此列表中的地区不支持旧版政策。
-
美国东部(弗吉尼亚州北部)– 127311923021
-
美国东部(俄亥俄州)– 033677994240
-
美国西部(北加利福尼亚)– 027434742980
-
美国西部(俄勒冈州)– 797873946194
-
非洲(开普敦)– 098369216593
-
亚太地区(香港)– 754344448648
-
亚太地区(雅加达)– 589379963580
-
亚太地区(孟买)– 718504428378
-
亚太地区(大阪)– 383597477331
-
亚太地区(首尔)– 600734575887
-
亚太地区(新加坡)– 114774131450
-
亚太地区(悉尼)– 783225319266
-
亚太地区(东京)– 582318560864
-
加拿大(中部)– 985666609251
-
欧洲(法兰克福)– 054676820928
-
欧洲(爱尔兰)– 156460612806
-
欧洲(伦敦)– 652711504416
-
欧洲(米兰)– 635631232127
-
欧洲(巴黎)– 009996457667
-
欧洲(斯德哥尔摩)– 897822967062
-
中东(巴林)– 076674570225
-
南美洲(圣保罗)– 507241528517
-
AWS GovCloud (美国东部)— 190560391635
-
AWS GovCloud (美国西部)— 048591011584
以下策略向指定的日志传送服务授予权限。将此策略用于 Outposts 区域中的负载均衡器。
{ "Effect": "Allow", "Principal": { "Service": "logdelivery.elb.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::
amzn-s3-demo-bucket
/prefix
/AWSLogs/123456789012
/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } }
对于Resource
,使用示例策略中显示的格式,输入访问日志所在位置的 ARN。请务必在 S3 存储桶 ARN 的资源路径中包含负载均衡器账户的账户 ID。这样可以确保只有来自指定账户的负载均衡器才能将访问日志写入 S3 存储桶。
您指定的 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/*
-
使用完整的资源路径,包括 S3 存储桶 ARN 的账户 ID 部分。请勿在 S3 存储桶 ARN 的账户 ID 部分使用通配符 (*)。
"Resource": "arn:aws:s3:::
amzn-s3-demo-bucket
/prefix
/AWSLogs/123456789012
/*" -
用于
aws:SourceArn
确保只有来自指定区域和账户的负载均衡器才能使用您的存储桶。"Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:elasticloadbalancing:
region
:123456789012
:loadbalancer/*" } } -
aws:SourceOrgId
与一起使用aws:SourceArn
可确保只有来自指定组织的负载均衡器才能使用您的存储桶。"Condition": { "StringEquals": { "aws:SourceOrgId": "
o-1234567890
" }, "ArnLike": { "aws:SourceArn": "arn:aws:elasticloadbalancing:*:*:loadbalancer/*" } } -
如果您有禁止访问除明确允许的服务主体之外的服务主体的
Deny
声明,请务必将其logdelivery.elasticloadbalancing.amazonaws.com
添加到允许的服务主体列表中。例如,如果您使用了aws:PrincipalServiceNamesList
条件,请logdelivery.elasticloadbalancing.amazonaws.com
按以下方式添加:{ "Effect": "Deny", "Principal": "*", "Condition": { "StringNotEqualsIfExists": { "aws:PrincipalServiceNamesList": [ "logdelivery.elasticloadbalancing.amazonaws.com", "
service
.amazonaws.com" ] } } }如果您使用了该
NotPrincipal
元素,请按logdelivery.elasticloadbalancing.amazonaws.com
如下方式添加。请注意,我们建议您使用aws:PrincipalServiceName
或aws:PrincipalServiceNamesList
条件键来明确允许服务主体,而不是使用NotPrincipal
元素。有关更多信息,请参阅 NotPrincipal。{ "Effect": "Deny", "NotPrincipal": { "Service": [ "logdelivery.elasticloadbalancing.amazonaws.com", "
service
.amazonaws.com" ] } },
创建存储桶策略后,使用 Amazon S3 接口(例如 Amazon S3 控制台或 AWS CLI 命令)将您的存储桶策略附加到 S3 存储桶。
步骤 3:配置访问日志
使用以下过程配置访问日志,以捕获请求信息并将日志文件传输到 S3 存储桶。
要求
存储桶必须满足第 1 步中所描述的要求,并且必须附加第 2 步中所描述的存储桶策略。如果包含前缀,则不得包含字符串 “AWSLogs”。
管理保存访问日志的 S3 存储桶
要删除您配置用于访问日志的存储桶,请确保首先禁用访问日志。否则,如果在一个不属于您的 AWS 账户 中创建了具有相同名称和必要的存储桶策略的新存储桶,Elastic Load Balancing 会将您的负载均衡器的访问日志写入这个新存储桶。
步骤 4:确认存储桶权限
在为负载均衡器启用访问日志后,Elastic Load Balancing 将验证 S3 存储桶,并创建测试文件以确保存储桶策略指定所需权限。您可以使用 Amazon S3 控制台验证是否已创建测试文件。测试文件不是实际的访问日志文件;它不包含示例记录。
使用 Amazon S3 控制台验证您的存储桶中是否创建了测试文件
打开 Amazon S3 控制台,网址为 https://console.aws.amazon.com/s3/
。 -
选择您指定用于访问日志的存储桶的名称。
-
导航到测试文件
ELBAccessLogTestFile
。位置取决于您是否使用前缀。-
带有前缀的位置:
amzn-s3-demo-logging-bucket
logging-prefix
/AWSLogs/123456789012
/ELBAccessLogTestFile -
不带前缀的位置:
amzn-s3-demo-logging-bucket
/AWSLogs/123456789012
/ELBAccessLogTestFile
-
问题排查
如果您遇到访问被拒绝错误,则可能的原因如下:
-
存储桶策略没有为 Elastic Load Balancing 授予将访问日志写入存储桶的权限。确认您使用的是该区域正确的存储桶策略。确认资源 ARN 使用的存储桶名称与您在启用访问日志时指定的存储桶名称相同。如果您在启用访问日志时未指定前缀,请确认资源 ARN 不包含前缀。
-
存储桶使用不支持的服务器端加密选项。该存储段必须使用 Amazon S3 托管密钥(SSE-S3)。