Application Load Balancer 的访问日志 - Elastic Load Balancing

Application Load Balancer 的访问日志

Elastic Load Balancing 提供了访问日志,该访问日志可捕获有关发送到负载均衡器的请求的详细信息。每个日志都包含信息 (例如,收到请求的时间、客户端的 IP 地址、延迟、请求路径和服务器响应)。您可以使用这些访问日志分析流量模式并解决问题。

访问日志记录是 Elastic Load Balancing 的一项可选功能,默认情况下已禁用此功能。为负载均衡器启用访问日志记录之后,Elastic Load Balancing 捕获日志并将其作为压缩文件存储在您指定的 Amazon S3 存储桶中。您可以随时禁用访问日志记录。

使用访问日志无需额外付费。您需要支付 Amazon S3 的存储费用,但无需支付 Elastic Load Balancing 用以将日志文件发送到 Amazon S3 的带宽费用。有关存储成本的更多信息,请参阅 Amazon S3 定价

访问日志文件

Elastic Load Balancing 每 5 分钟为每个负载均衡器节点发布一次日志文件。日志传输最终是一致的。负载均衡器可以传输相同时间段的多个日志。通常,如果站点具有高流量,会出现此情况。

访问日志的文件名采用以下格式:

bucket[/prefix]/AWSLogs/aws-account-id/elasticloadbalancing/region/yyyy/mm/dd/aws-account-id_elasticloadbalancing_region_load-balancer-id_end-time_ip-address_random-string.log.gz
bucket

S3 存储桶的名称。

prefix

存储桶中的前缀 (逻辑层级结构)。如果您不指定前缀,则会将日志置于存储桶的根级。

aws-account-id

拥有者的 AWS 账户 ID。

region

负载均衡器和 S3 存储桶所在的区域。

yyyy/mm/dd

传输日志的日期。

load-balancer-id

负载均衡器的资源 ID。如果资源 ID 包含任何正斜杠 (/),这些正斜杠将替换为句点 (.)。

end-time

日志记录间隔结束的日期和时间。例如,结束时间 20140215T2340Z 包含在 23:35 和 23:40 之间发出的请求的条目。

ip-address

处理请求的负载均衡器节点的 IP 地址。对于内部负载均衡器,这是私有 IP 地址。

random-string

系统生成的随机字符串。

以下是示例日志文件名:

s3://my-bucket/prefix/AWSLogs/123456789012/elasticloadbalancing/us-east-2/2016/05/01/123456789012_elasticloadbalancing_us-east-2_app.my-loadbalancer.1234567890abcdef_20140215T2340Z_172.160.001.192_20sg8hgm.log.gz

日志文件可以在存储桶中存储任意长时间,不过您也可以定义 Amazon S3 生命周期规则以自动存档或删除日志文件。有关更多信息,请参阅 Amazon Simple Storage Service 用户指南中的对象生命周期管理

访问日志条目

Elastic Load Balancing 会记录发送给负载均衡器的请求,包括从未到达目标的请求。例如,如果客户端发送格式错误的请求或者没有正常的目标响应请求,仍会记录请求。Elastic Load Balancing 不记录运行状况检查请求。

每个日志条目均包含向负载均衡器发出的一个请求 (如果使用 WebSockets,则为连接) 的详细信息。对于 WebSockets,仅在关闭连接后写入条目。如果无法建立升级后的连接,则 HTTP 或 HTTPS 请求的条目相同。

重要

Elastic Load Balancing 将尽力记录请求。我们建议您使用访问日志来了解请求性质,而不是作为所有请求的完整描述。

Syntax

下表按顺序描述了访问日志条目的字段。使用空格分隔所有字段。在引入新的字段时,会将这些字段添加到日志条目的末尾。您应忽略日志条目结尾的任何不需要的字段。

字段 描述

类型

请求或连接的类型。可能的值如下 (忽略任何其他值):

  • http - HTTP

  • https – HTTP over TLS

  • h2 – HTTP/2 over TLS

  • grpcs – gRPC over TLS

  • ws - WebSockets

  • wss – WebSockets over TLS

time

负载均衡器生成对客户端的响应的时间 (采用 ISO 8601 格式)。对于 WebSockets,这是关闭连接的时间。

elb

负载均衡器的资源 ID。如果您正在解析访问日志条目,请注意,资源 ID 可包含正斜杠 (/)。

client:port

请求客户端的 IP 地址和端口。

target:port

处理此请求的目标的 IP 地址和端口。

如果客户端没有发送完整请求,则负载均衡器无法将请求分派到目标,并且此值设置为 -。

如果目标是 Lambda 函数,则此值设置为 -。

如果 AWS WAF 拦截了此请求,该值会被设置为 -,且 elb_status_code 的值会被设置为 403。

request_processing_time

从负载均衡器收到请求到将请求发送到目标所用的总时间(以秒为单位,精度为毫秒)。

如果负载均衡器无法将请求分派到目标,则此值设置为 -1。如果目标在空闲超时前关闭连接,或客户端发送了格式错误的请求,则会发生这种情况。

如果注册目标在空闲超时之前未响应,则此值还可设置为 -1。

target_processing_time

从负载均衡器将请求发送到目标到该目标开始发送响应标头所用的总时间(以秒为单位,精度为毫秒)。

如果负载均衡器无法将请求分派到目标,则此值设置为 -1。如果目标在空闲超时前关闭连接,或客户端发送了格式错误的请求,则会发生这种情况。

如果注册目标在空闲超时之前未响应,则此值还可设置为 -1。

response_processing_time

从负载均衡器收到来自目标的响应标头到开始向客户端发送响应所用的总时间(以秒为单位,精度为毫秒)。此时间包括在负载均衡器上的排队时间以及从负载均衡器到客户端的连接获取时间。

如果负载均衡器无法将请求发送到目标,则此值设置为 -1。如果目标在空闲超时前关闭连接,或客户端发送了格式错误的请求,则会发生这种情况。

elb_status_code

来自负载均衡器的响应的状态代码。

target_status_code

来自目标的响应的状态代码。仅在已建立与目标的连接且目标已发送响应的情况下记录此值。否则,其设置为 -。

received_bytes

从客户端 (申请方) 接收的请求大小 (以字节为单位)。对于 HTTP 请求,这包括标头。对于 WebSockets,这是通过连接从客户端接收的字节总数。

sent_bytes

发送到客户端 (申请方) 的响应的大小 (以字节为单位)。对于 HTTP 请求,这包括标头。对于 WebSockets,这是通过连接发送到客户端的字节总数。

"request"

来自客户端的请求行,包含在双引号内并采用以下格式进行记录:HTTP 方法 + 协议://主机:端口/uri + HTTP 版本。负载均衡器将保留客户端记录请求 URI 时发送的 URL。它不设置访问日志文件的内容类型。当您处理此字段时,请考虑客户端发送 URL 的方式。

"user_agent"

标识发出请求的客户端的用户代理字符串(用双引号括起来)。该字符串包含一个或多个产品标识符 (product[/version])。如果字符串长度超过 8 KB,则将被截断。

ssl_cipher

[HTTPS 侦听器] SSL 密码。如果侦听器不是 HTTPS 侦听器,则此值设置为 -。

ssl_protocol

[HTTPS 侦听器] SSL 协议。如果侦听器不是 HTTPS 侦听器,则此值设置为 -。

target_group_arn

目标组的 Amazon Resource Name (ARN)。

"trace_id"

X-Amzn-Trace-Id 标头的内容(用双引号括起来)。

"domain_name"

[HTTPS 侦听器] TLS 握手期间客户端提供的 SNI 域(用双引号括起来)。如果客户端不支持 SNI 或此域与证书不匹配且将向客户端提供默认证书,则此值将设置为 -。

"chosen_cert_arn"

[HTTPS 侦听器] 向客户端提供的证书的 ARN(用双引号括起来)。如果重复使用会话,则将此值设置为 session-reused。如果侦听器不是 HTTPS 侦听器,则此值设置为 -。

matched_rule_priority

匹配请求的规则的优先级值。如果匹配了某个规则,则此值的范围介于 1 和 50000 之间。如果未匹配任何规则并且已执行默认操作,则此值设置为 0。如果错误发生在规则评估时,则它设置为 -1。对于任何其他错误,它设置为 -。

request_creation_time

负载均衡器从客户端收到请求的时间 (采用 ISO 8601 格式)。

"actions_executed"

处理请求时执行的操作(用双引号括起来)。此值是一个逗号分隔的列表,可以包含 采取的操作 中所描述的值。如果未执行任何操作(例如,针对格式错误的请求的操作),则此值设置为 - 。

"redirect_url"

HTTP 响应位置标头的重定向目标的 URL,使用双引号括起。如果不执行重定向操作,则此值设置为 -。

"error_reason"

错误原因代码(包含在双引号内)。如果请求失败,则这是 错误原因代码 中描述的错误代码之一。如果所采取的操作不包含身份验证操作或目标不是 Lambda 函数,则此值设置为 -。

“target:port_list”

处理此请求的目标的 IP 地址和端口的列表,各个地址和端口之间用空格分隔,并且用双引号括起。当前,此列表可以包含一个项,并且与 target:port 字段匹配。

如果客户端没有发送完整请求,则负载均衡器无法将请求分派到目标,并且此值设置为 -。

如果目标是 Lambda 函数,则此值设置为 -。

如果 AWS WAF 拦截了此请求,该值会被设置为 -,且 elb_status_code 的值会被设置为 403。

“target_status_code_list”

目标响应的状态代码列表,代码之间用空格分隔,并且用双引号括起来。当前,此列表可以包含一个项,并且与 target_status_code 字段匹配。

仅在已建立与目标的连接且目标已发送响应的情况下记录此值。否则,其设置为 -。

"classification"

异步缓解的分类(包含在双引号内)。如果请求不符合 RFC 7230 标准,则可能的值为 “可接受”、“不明确” 和 “严重”。

如果请求符合 RFC 7230 标准,则此值设置为“-”。

"classification_reason"

分类原因代码(包含在双引号内)。如果请求不符合 RFC 7230 标准,则这是 分类原因 中描述的分类代码之一。如果请求符合 RFC 7230 标准,则此值设置为“-”。

采取的操作

负载均衡器将其采取的操作存储在访问日志的 actions_executed 字段中。

  • authenticate – 负载均衡器验证会话,验证用户身份,并将用户信息添加到规则配置所指定的请求标头中。

  • fixed-response – 负载均衡器发出规则配置所指定的固定响应。

  • forward – 负载均衡器将请求转发到规则配置所指定的目标。

  • redirect – 负载均衡器将请求重定向到规则配置所指定的另一个 URL。

  • waf — 负载均衡器将请求转发到 AWS WAF 以确定是否应将请求转发到目标。如果这是最终操作,则 AWS WAF 确定应拒绝请求。

  • waf-failed — 负载均衡器尝试将请求转发到 AWS WAF,但此过程失败。

分类原因

如果请求不符合 RFC 7230 标准,负载均衡器将在访问日志的 classification_reason 字段中存储以下代码之一。有关更多信息,请参阅 异步缓解模式

代码 描述 分类。

AmbiguousUri

请求 URI 包含控制字符。

不明确

BadContentLength

Content-Length 标头包含一个无法解析或不是有效数字的值。

严重

BadHeader

标头包含 Null 字符或回车符。

严重

BadTransferEncoding

Transfer-Encoding 标头包含错误的值。

严重

BadUri

请求 URI 包含 Null 字符或回车符。

严重

BadMethod

请求方法格式不正确。

严重

BadVersion

请求版本格式不正确。

严重

BothTeClPresent

请求同时包含 Transfer-Encoding 标头和 Content-Length 标头。

不明确

DuplicateContentLength

存在多个具有相同值的 Content-Length 标头。

不明确

EmptyHeader

标头是空的,或者有一行中只包含空格。

不明确

GetHeadZeroContentLength

对于 GET 或 HEAD 请求,有一个值为 0 的 Content-Length 标头。

可接受

MultipleContentLength

存在多个具有不同值的 Content-Length 标头。

严重

MultipleTransferEncodingChunked

存在多个 Transfer-Encoding: chunked 标头。

严重

NonCompliantHeader

标头包含非 ASCII 字符或控制字符。

可接受

NonCompliantVersion

请求版本包含错误的值。

可接受

SpaceInUri

请求 URI 包含一个未采用 URL 编码的空格。

可接受

SuspiciousHeader

有一个标头可以使用常见的文本规范化技术标准化为 Transfer-Encoding 或 Content-Length。

不明确

UndefinedContentLengthSemantics

没有为 GET 或 HEAD 请求定义 Content-Length 标头。

不明确

UndefinedTransferEncodingSemantics

没有为 GET 或 HEAD 请求定义 Transfer-Encoding 标头。

不明确

错误原因代码

如果负载均衡器无法完成身份验证操作,则负载均衡器会在访问日志的 error_reason 字段中存储以下原因代码之一。负载均衡器还会增加相应的 CloudWatch 指标。有关更多信息,请参阅 使用 Application Load Balancer 验证用户身份

代码 描述 指标

AuthInvalidCookie

身份验证 Cookie 无效。

ELBAuthFailure

AuthInvalidGrantError

来自令牌终端节点的授权授予代码无效。

ELBAuthFailure

AuthInvalidIdToken

ID 令牌无效。

ELBAuthFailure

AuthInvalidStateParam

状态参数无效。

ELBAuthFailure

AuthInvalidTokenResponse

来自令牌终端节点的响应无效。

ELBAuthFailure

AuthInvalidUserinfoResponse

来自用户信息终端节点的响应无效。

ELBAuthFailure

AuthMissingCodeParam

来自授权终端节点的身份验证响应缺少名为“code”的查询参数。

ELBAuthFailure

AuthMissingHostHeader

来自授权终端节点的身份验证响应缺少主机标头字段。

ELBAuthError

AuthMissingStateParam

来自授权终端节点的身份验证响应缺少名为“state”的查询参数。

ELBAuthFailure

AuthTokenEpRequestFailed

令牌终端节点存在错误响应(非 2XX)。

ELBAuthError

AuthTokenEpRequestTimeout

负载均衡器无法与令牌终端节点通信。

ELBAuthError

AuthUnhandledException

负载均衡器遇到未处理的异常。

ELBAuthError

AuthUserinfoEpRequestFailed

IdP 用户信息终端节点存在错误响应(非 2XX)。

ELBAuthError

AuthUserinfoEpRequestTimeout

负载均衡器无法与 IdP 用户信息终端节点通信。

ELBAuthError

AuthUserinfoResponseSizeExceeded

IdP 返回的声明大小超过 11 K 字节。

ELBAuthUserClaimsSizeExceeded

如果对加权目标组的请求失败,则负载均衡器会在访问日志的 error_reason 字段中存储下列错误代码之一。

代码 描述

AWSALBTGCookieInvalid

与加权目标组一起使用的 AWSALBTG Cookie 无效。例如,当 Cookie 值采用 URL 编码时,负载均衡器就会返回此错误。

WeightedTargetGroupsUnhandledException

负载均衡器遇到未处理的异常。

如果对 Lambda 函数的请求失败,则负载均衡器会在访问日志的 error_reason 字段中存储下列原因代码之一。负载均衡器还会增加相应的 CloudWatch 指标。有关更多信息,请参阅 Lambda 调用操作。

代码 描述 指标

LambdaAccessDenied

负载均衡器无权调用 Lambda 函数。

LambdaUserError

LambdaBadRequest

Lambda 调用失败,因为客户端请求标头或正文不只是包含 UTF-8 字符。

LambdaUserError

LambdaConnectionError

负载均衡器无法连接到 Lambda。

LambdaInternalError

LambdaConnectionTimeout

尝试连接到 Lambda 时发生超时。

LambdaInternalError

LambdaEC2AccessDeniedException

Amazon EC2 在函数初始化期间拒绝了对 Lambda 的访问。

LambdaUserError

LambdaEC2ThrottledException

Amazon EC2 在函数初始化期间限制了 Lambda。

LambdaUserError

LambdaEC2UnexpectedException

Amazon EC2 在函数初始化期间遇到意外异常。

LambdaUserError

LambdaENILimitReachedException

Lambda 无法在 Lambda 函数配置中指定的 VPC 中创建网络接口,因为超出了网络接口的限制。

LambdaUserError

LambdaInvalidResponse

来自 Lambda 函数的响应的格式不正确或缺少必填字段。

LambdaUserError

LambdaInvalidRuntimeException

指定版本的 Lambda 运行时不受支持。

LambdaUserError

LambdaInvalidSecurityGroupIDException

Lambda 函数配置中指定的安全组 ID 无效。

LambdaUserError

LambdaInvalidSubnetIDException

Lambda 函数配置中指定的子网 ID 无效。

LambdaUserError

LambdaInvalidZipFileException

Lambda 无法解压缩指定的函数 zip 文件。

LambdaUserError

LambdaKMSAccessDeniedException

Lambda 无法解密环境变量,因为对 KMS 密钥的访问已被拒绝。检查 Lambda 函数的 KMS 权限。

LambdaUserError

LambdaKMSDisabledException

Lambda 无法解密环境变量,因为指定的 KMS 密钥已被禁用。检查 Lambda 函数的 KMS 密钥设置。

LambdaUserError

LambdaKMSInvalidStateException

Lambda 无法解密环境变量,因为 KMS 密钥的状态无效。检查 Lambda 函数的 KMS 密钥设置。

LambdaUserError

LambdaKMSNotFoundException

Lambda 无法解密环境变量,因为找不到 KMS 密钥。检查 Lambda 函数的 KMS 密钥设置。

LambdaUserError

LambdaRequestTooLarge

请求正文的大小已超过 1 MB。

LambdaUserError

LambdaResourceNotFound

找不到 Lambda 函数。

LambdaUserError

LambdaResponseTooLarge

响应的大小已超过 1 MB。

LambdaUserError

LambdaServiceException

Lambda 遇到了内部错误。

LambdaInternalError

LambdaSubnetIPAddressLimitReachedException

Lambda 无法为 Lambda 函数设置 VPC 访问权限,因为一个或多个子网没有可用的 IP 地址。

LambdaUserError

LambdaThrottling

Lambda 函数受到限制,因为请求过多。

LambdaUserError

LambdaUnhandled

Lambda 函数遇到了未处理的异常。

LambdaUserError

LambdaUnhandledException

负载均衡器遇到未处理的异常。

LambdaInternalError

LambdaWebsocketNotSupported

Lambda 不支持 WebSockets。

LambdaUserError

如果负载均衡器在将请求转发至 AWS WAF 时遇到错误,则会在访问日志的 error_reason 字段中存储下列错误代码之一。

代码 描述

WAFConnectionError

负载均衡器无法连接到 AWS WAF。

WAFConnectionTimeout

与 AWS WAF 的连接超时。

WAFResponseReadTimeout

对 AWS WAF 的请求超时。

WAFServiceError

AWS WAF 返回了 5XX 错误。

WAFUnhandledException

负载均衡器遇到未处理的异常。

Examples

以下是示例日志条目。请注意,文本以多行形式显示只是为了更方便阅读。

示例 HTTP 条目

以下是 HTTP 侦听器 (端口 80 到端口 80) 的示例日志条目:

http 2018-07-02T22:23:00.186641Z app/my-loadbalancer/50dc6c495c0c9188 192.168.131.39:2817 10.0.0.1:80 0.000 0.001 0.000 200 200 34 366 "GET http://www.example.com:80/ HTTP/1.1" "curl/7.46.0" - - arn:aws:elasticloadbalancing:us-east-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067 "Root=1-58337262-36d228ad5d99923122bbe354" "-" "-" 0 2018-07-02T22:22:48.364000Z "forward" "-" "-" 10.0.0.1:80 200 "-" "-"

示例 HTTPS 条目

以下是 HTTPS 侦听器 (端口 443 到端口 80) 的示例日志条目:

https 2018-07-02T22:23:00.186641Z app/my-loadbalancer/50dc6c495c0c9188 192.168.131.39:2817 10.0.0.1:80 0.086 0.048 0.037 200 200 0 57 "GET https://www.example.com:443/ HTTP/1.1" "curl/7.46.0" ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 arn:aws:elasticloadbalancing:us-east-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067 "Root=1-58337281-1d84f3d73c47ec4e58577259" "www.example.com" "arn:aws:acm:us-east-2:123456789012:certificate/12345678-1234-1234-1234-123456789012" 1 2018-07-02T22:22:48.364000Z "authenticate,forward" "-" "-" 10.0.0.1:80 200 "-" "-"

示例 HTTP/2 条目

以下是 HTTP/2 流的示例日志条目。

h2 2018-07-02T22:23:00.186641Z app/my-loadbalancer/50dc6c495c0c9188 10.0.1.252:48160 10.0.0.66:9000 0.000 0.002 0.000 200 200 5 257 "GET https://10.0.2.105:773/ HTTP/2.0" "curl/7.46.0" ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 arn:aws:elasticloadbalancing:us-east-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067 "Root=1-58337327-72bd00b0343d75b906739c42" "-" "-" 1 2018-07-02T22:22:48.364000Z "redirect" "https://example.com:80/" "-" 10.0.0.66:9000 200 "-" "-"

示例 WebSockets 条目

以下是 WebSockets 连接的示例日志条目。

ws 2018-07-02T22:23:00.186641Z app/my-loadbalancer/50dc6c495c0c9188 10.0.0.140:40914 10.0.1.192:8010 0.001 0.003 0.000 101 101 218 587 "GET http://10.0.0.30:80/ HTTP/1.1" "-" - - arn:aws:elasticloadbalancing:us-east-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067 "Root=1-58337364-23a8c76965a2ef7629b185e3" "-" "-" 1 2018-07-02T22:22:48.364000Z "forward" "-" "-" 10.0.1.192:8010 101 "-" "-"

安全 WebSockets 条目示例

以下是安全 WebSockets 连接的示例日志条目。

wss 2018-07-02T22:23:00.186641Z app/my-loadbalancer/50dc6c495c0c9188 10.0.0.140:44244 10.0.0.171:8010 0.000 0.001 0.000 101 101 218 786 "GET https://10.0.0.30:443/ HTTP/1.1" "-" ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067 "Root=1-58337364-23a8c76965a2ef7629b185e3" "-" "-" 1 2018-07-02T22:22:48.364000Z "forward" "-" "-" 10.0.0.171:8010 101 "-" "-"

Lambda 函数的示例条目

以下是对 Lambda 函数的成功请求的示例日志条目:

http 2018-11-30T22:23:00.186641Z app/my-loadbalancer/50dc6c495c0c9188 192.168.131.39:2817 - 0.000 0.001 0.000 200 200 34 366 "GET http://www.example.com:80/ HTTP/1.1" "curl/7.46.0" - - arn:aws:elasticloadbalancing:us-east-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067 "Root=1-58337364-23a8c76965a2ef7629b185e3" "-" "-" 0 2018-11-30T22:22:48.364000Z "forward" "-" "-" "-" "-" "-" "-"

以下是对 Lambda 函数的失败请求的示例日志条目:

http 2018-11-30T22:23:00.186641Z app/my-loadbalancer/50dc6c495c0c9188 192.168.131.39:2817 - 0.000 0.001 0.000 502 - 34 366 "GET http://www.example.com:80/ HTTP/1.1" "curl/7.46.0" - - arn:aws:elasticloadbalancing:us-east-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067 "Root=1-58337364-23a8c76965a2ef7629b185e3" "-" "-" 0 2018-11-30T22:22:48.364000Z "forward" "-" "LambdaInvalidResponse" "-" "-" "-" "-"

存储桶权限

在启用访问日志记录时,您必须为访问日志指定 S3 存储桶。存储桶必须满足以下要求。

Requirements

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

  • 存储桶必须具有为 Elastic Load Balancing 授予将访问日志写入存储桶的权限的存储桶策略。存储桶策略是 JSON 语句的集合,这些语句以访问策略语言编写,用于为存储桶定义访问权限。每个语句都包括有关单个权限的信息并包含一系列元素。

您可以使用 Amazon S3 托管的加密密钥 (SSE-S3) 为 Amazon S3 访问日志存储桶启用服务器端加密。

有关更多信息,请参阅 Amazon Simple Storage Service 用户指南中的使用采用 Amazon S3 托管加密密钥 (SSE-S3) 的服务器端加密保护数据

Options

使用以下选项之一准备 S3 存储桶以进行访问日志记录。

  • 要使用 Elastic Load Balancing 控制台创建存储桶并启用访问日志记录,请跳到 启用访问日志记录 并选择让控制台为您创建存储桶和存储桶策略的选项。

  • 要使用现有存储桶并使用 Amazon S3 控制台添加所需的存储桶策略,请使用以下过程,但跳过标记为“[跳过使用现有存储桶]”的步骤。

  • 要使用 Amazon S3 控制台创建存储桶并添加所需的存储桶策略(例如,如果您使用 AWS CLI 或 API 启用访问日志记录),请使用以下过程。

准备 Amazon S3 存储桶以进行访问日志记录

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

  2. [跳过使用现有存储桶] 选择创建存储桶

  3. [跳过使用现有存储桶] 在创建存储桶页面上,执行以下操作:

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

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

    3. 选择创建

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

  5. 如果要创建新的存储桶策略,请将整个策略文档复制到策略编辑器,然后用相应的信息替换占位符。如果您正在编辑现有存储桶策略,请仅复制策略文档中的新语句(Statement 元素的 [ 和 ] 之间的文本)。

    [可用区和本地区域] 使用以下策略。更新存储桶名称和前缀的占位符、Elastic Load Balancing 的 AWS 账户 ID(基于负载均衡器的区域)以及您的 AWS 账户的 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/*" }, { "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" } ] }

    下表中包含用于替代存储桶策略中的 elb-account-id 的账户 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 (US-West) 048591011584
    us-gov-east-1* AWS GovCloud (US-East) 190560391635
    cn-north-1* 中国(北京) 638102146993
    cn-northwest-1* 中国 (宁夏) 037604701340

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

    [Outpost] 使用以下策略。更新存储桶的名称和前缀的占位符以及您的 AWS 账户的 ID。

    { "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" } } }
  6. 选择 Save

启用访问日志记录

在为负载均衡器启用访问日志记录时,您必须指定负载均衡器将在其中存储日志的 S3 存储桶的名称。存储桶必须位于负载均衡器所在的相同区域,并且必须具有向 Elastic Load Balancing 授予在存储桶中写入访问日志的权限的存储桶策略。该存储桶可由与拥有负载均衡器的账户不同的账户拥有。

使用控制台启用访问日志记录

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

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

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

  4. Description (说明) 选项卡上,选择 Edit attributes (编辑属性)

  5. Edit load balancer attributes 页面上,执行以下操作:

    1. 对于访问日志,请选择启用

    2. 对于 S3 位置,输入 S3 存储桶的名称,包括任何前缀(例如,my-loadbalancer-logs/my-app)。您可以指定现有存储桶的名称或新存储桶名称。如果您指定现有存储桶,请确保您拥有此存储桶,且配置了必要的存储桶策略。

    3. (可选) 如果存储桶不存在,请选择 Create this location for me (为我创建此位置)。您必须指定在 Amazon S3 中的所有现有存储桶名称中唯一的名称,并遵循 DNS 命名约定。有关更多信息,请参阅 Amazon Simple Storage Service 用户指南中的存储桶命名规则

    4. 选择 Save (保存)

使用 AWS CLI 启用访问日志记录

使用 modify-load-balancer-attributes 命令。

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

在为负载均衡器启用访问日志记录后,Elastic Load Balancing 将验证 S3 存储桶,并创建测试文件以确保存储桶策略指定所需权限。您可以使用 Amazon S3 控制台验证是否已创建测试文件。测试文件不是实际的访问日志文件;它不包含示例记录。

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

  2. 对于 All Buckets,选择您的 S3 存储桶。

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

    my-bucket/prefix/AWSLogs/123456789012/ELBAccessLogTestFile

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

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

禁用访问日志记录

您随时可为您的负载均衡器禁用访问日志记录。在禁用访问日志记录后,您的访问日志将在 S3 存储桶中保留,直至您将其删除。有关更多信息,请参阅 Amazon Simple Storage Service 用户指南中的使用存储桶

使用控制台禁用访问日志记录

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

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

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

  4. Description (说明) 选项卡上,选择 Edit attributes (编辑属性)

  5. 对于 Access logs (访问日志),清除 Enable (启用)

  6. 选择 Save

使用 AWS CLI 禁用访问日志记录

使用 modify-load-balancer-attributes 命令。

处理访问日志文件

访问日志文件是压缩文件。如果您使用 Amazon S3 控制台打开这些文件,则将对其进行解压缩,并且将显示信息。如果您下载这些文件,则必须对其进行解压才能查看信息。

如果您的网站上有大量需求,则负载均衡器可以生成包含大量数据的日志文件 (以 GB 为单位)。您可能无法通过逐行处理来处理数量如此庞大的数据。因此,您可能必须使用提供并行处理解决方案的分析工具。例如,您可以使用以下分析工具分析和处理访问日志: