Amazon VPC Lattice 的访问日志 - Amazon VPC Lattice

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

Amazon VPC Lattice 的访问日志

访问日志会捕获有关 VPC Lattice 服务的详细信息。您可以使用这些访问日志来分析流量模式,并审计网络中的所有服务。

访问日志是可选的,默认情况下处于禁用状态。启用访问日志后,您可以随时禁用。

定价

发布访问日志时需要付费。以您的名义在 AWS 本地发布的日志称为公开日志。有关销售日志定价的更多信息,请参阅 Amazon CloudWatch 定价,选择日,然后在 Vended Logs 下查看定价。

启用访问日志所需的 IAM 权限

要启用访问日志并将日志发送到其目标,必须在策略中将以下操作附加到您正在使用的 IAM 用户、组或角色。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Sid": "ManageVPCLatticeAccessLogSetup", "Action": [ "logs:CreateLogDelivery", "logs:GetLogDelivery", "logs:UpdateLogDelivery", "logs:DeleteLogDelivery", "logs:ListLogDeliveries", "vpc-lattice:CreateAccessLogSubscription", "vpc-lattice:GetAccessLogSubscription", "vpc-lattice:UpdateAccessLogSubscription", "vpc-lattice:DeleteAccessLogSubscription", "vpc-lattice:ListAccessLogSubscriptions" ], "Resource": [ "*" ] } ] }

有关更多信息,请参阅《AWS Identity and Access Management 用户指南》中的添加和删除 IAM 标识权限

更新附加到您正在使用的 IAM 用户、组或角色的策略后,请转到 启用访问日志

访问日志目标

您可以将访问日志发送到以下目标。

Amazon CloudWatch 日志
  • VPC Lattice 通常会在 2 分钟内将 CloudWatch 日志传送到日志。但请记住,实际日志传输时间是尽最大努力计算的,可能会有额外的延迟。

  • 如果 CloudWatch 日志组没有特定权限,则会自动创建资源策略并将其添加到日志组中。有关更多信息,请参阅 Amazon CloudWatch 用户指南中的发送到 CloudWatch 日志的日志。

  • 您可以在 CloudWatch 控制台的 “日志组 CloudWatch ” 下找到发送到的访问日志。有关更多信息,请参阅 Amazon CloudWatch 用户指南中的查看发送到 CloudWatch 日志的日志数据

Amazon S3
  • VPC Lattice 通常会在 6 分钟内将日志传输到 Amazon S3。但请记住,实际日志传输时间是尽最大努力计算的,可能会有额外的延迟。

  • 如果存储桶没有特定权限,系统将自动创建存储桶策略,并将其添加到您的 Amazon S3 存储桶。有关更多信息,请参阅亚马逊 CloudWatch用户指南中的发送到 Amazon S3 的日志

  • 发送到 Amazon S3 的访问日志使用以下命名约定:

    [bucket]/[prefix]/AWSLogs/[accountId]/VpcLattice/AccessLogs/[region]/[YYYY/MM/DD]/[resource-id]/[accountId]_VpcLatticeAccessLogs_[region]_[resource-id]_YYYYMMDDTHHmmZ_[hash].json.gz
Amazon Data Firehose
  • VPC Lattice 通常会在 2 分钟内将日志传送到 Firehose。但请记住,实际日志传输时间是尽最大努力计算的,可能会有额外的延迟。

  • 系统会自动创建一个服务相关角色,该角色授予 VPC Lattice 向 Amazon Data Firehose发送访问日志的权限。为使自动角色创建成功,用户必须具有 iam:CreateServiceLinkedRole 操作的权限。有关更多信息,请参阅 Amazon CloudWatch 用户指南 Amazon Data Firehose中的发送到的日志

  • 有关查看发送到的日志的更多信息 Amazon Data Firehose,请参阅开发者指南中的Amazon Data Firehose 监控 Amazon Kinesis 数据流。

启用访问日志

完成以下过程,配置访问日志,以捕获访问日志并将其传输到您选择的目标。

使用控制台启用访问日志

您可以在创建过程中为服务网络或服务启用访问日志。您还可以在创建服务网络或服务后启用访问日志,如以下过程所述。

要使用控制台创建基本服务
  1. 通过 https://console.aws.amazon.com/vpc/ 打开 Amazon VPC 控制台。

  2. 选择服务网络或服务。

  3. 选择操作编辑日志设置

  4. 打开访问日志切换开关。

  5. 为访问日志添加传输目标,如下所示:

    • 选择CloudWatch 日志组,然后选择一个日志组。要创建日志组,请选择在中创建日志组 CloudWatch

    • 选择 S3 存储桶并输入 S3 存储桶路径,包括任何前缀。要搜索 S3 存储桶,请选择浏览 S3

    • 选择 Kinesis Data Firehose 传输流,然后选择一个传输流。要创建传输流,请选择在 Kinesis 中创建传输流

  6. 选择保存更改

使用启用访问日志 AWS CLI

使用 CLI 命令create-access-log-subscription启用服务网络或服务的访问日志。

访问日志内容

下表描述了访问日志条目的字段。

字段 描述 格式
hostHeader

请求的授权标头。

字符串

sslCipher

用于建立客户端 TLS 连接的一组密码的 OpenSSL 名称。

字符串

serviceNetworkArn

服务网络 ARN。

arn:aws:vpc-lattice:region:account:servicenetwork/id

resolvedUser

启用并完成验证后用户的 ARN。

null | ARN | "Anonymous" | "Unknown"

authDeniedReason

启用验证后访问被拒绝的原因。

null | "Service" | "Network" | "Identity"

requestMethod

请求的方法标头。

字符串

targetGroupArn

目标主机所属的目标主机组。

字符串

tlsVersion

TLS 版本。

TLSvx

userAgent

用户代理标头。

字符串

ServerNameIndication

[仅限 HTTPS]在服务器名称指示(SNI)的 ssl 连接套接字上设置的值。

字符串

destinationVpcId

目标 VPC ID。

vpc-xxxxxxxx

sourceIpPort

源的 IP 地址和端口。

ip:port

targetIpPort

目标的 IP 地址和端口。

ip:port

serviceArn

服务 ARN。

arn:aws:vpc-lattice:region:account:service/id

sourceVpcId

源 VPC ID。

vpc-xxxxxxxx

requestPath

请求的路径。

LatticePath? : 路径

startTime

请求开始时间。

YYYY-MM-DDTHH:MM:SSZ

protocol

协议。目前是 HTTP/1.1 或 HTTP/2。

字符串

responseCode

HTTP 响应代码。仅记录最终标头的响应代码。有关更多信息,请参阅 访问日志问题排查

整数

bytesReceived

收到的正文和标头字节。

整数

bytesSent

发送的正文和标头字节。

整数

duration

请求从开始时间到最后一个字节输出的总持续时间(毫秒)。

整数

requestToTargetDuration

请求从开始时间到发送到目标的最后一个字节的总持续时间(毫秒)。

整数

responseFromTargetDuration

请求从目标主机读取第一个字节到发送到客户端的最后一个字节的总持续时间(毫秒)。

整数

grpcResponseCode

gRPC 响应代码。有关更多信息,请参阅状态代码及其在 gRPC 中的使用。仅当服务支持 gRPC 时,才会记录此字段。

整数

callerPrincipal

经过验证的主体。

字符串

callerX509SubjectCN

使用者名称(CN)。

字符串

callerX509IssuerOU

发布者(OU)。

字符串

callerX509SANNameCN

发布者备用名称(名称/CN)。

字符串

callerX509SANDNS

使用者备用名称(DNS)。

字符串

callerX509SANURI

使用者备用名称(URI)。

字符串

sourceVpcArn

发出请求的 VPC 的 ARN。

arn:aws:ec2:region:account:vpc/id

示例

以下是示例日志条目。

{ "hostHeader": "example.com", "sslCipher": "-", "serviceNetworkArn": "arn:aws:vpc-lattice:us-west-2:123456789012:servicenetwork/svn-1a2b3c4d", "resolvedUser": "Unknown", "authDeniedReason": "null", "requestMethod": "GET", "targetGroupArn": "arn:aws:vpc-lattice:us-west-2:123456789012:targetgroup/tg-1a2b3c4d", "tlsVersion": "-", "userAgent": "-", "serverNameIndication": "-", "destinationVpcId": "vpc-0abcdef1234567890", "sourceIpPort": "178.0.181.150:80", "targetIpPort": "131.31.44.176:80", "serviceArn": "arn:aws:vpc-lattice:us-west-2:123456789012:service/svc-1a2b3c4d", "sourceVpcId": "vpc-0abcdef1234567890", "requestPath": "/billing", "startTime": "2023-07-28T20:48:45Z", "protocol": "HTTP/1.1", "responseCode": 200, "bytesReceived": 42, "bytesSent": 42, "duration": 375, "requestToTargetDuration": 1, "responseFromTargetDuration": 1, "grpcResponseCode": 1 }

访问日志问题排查

本章节包含您可能在访问日志中看到的 HTTP 错误代码的解释。

错误代码 可能的原因

HTTP 400:错误请求

  • 客户端发送的请求格式错误,不符合 HTTP 规范。

  • 整个请求标头超过 60K,或超过 100 个标头。

  • 客户端在发送完整的请求正文之前关闭了连接。

HTTP 403:禁止访问

已为服务配置验证,但传入请求未经过验证或授权。

HTTP 404:服务不存在

您正在尝试连接到不存在或未注册到正确服务网络的服务。

HTTP 500:内部服务器错误

VPC Lattice 遇到错误,例如无法连接到目标。

HTTP 502:无效网关

VPC Lattice 遇到错误。