

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

# Amazon VPC Lattice 的访问日志
<a name="monitoring-access-logs"></a>

访问日志会捕获有关您的VPC Lattice服务和资源配置的详细信息。您可以使用这些访问日志来分析流量模式，并审计网络中的所有服务。对于 VPC Lattice 服务，我们发布`VpcLatticeAccessLogs`；对于资源配置，我们发布`VpcLatticeResourceAccessLogs`，需要单独配置。

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

**定价**  
发布访问日志时需要付费。以您的名义在 AWS 本地发布的日志称为公开日*志。*有关销售日志定价的更多信息，请参阅 [Amazon CloudWatch 定价](https://aws.amazon.com/cloudwatch/pricing/)，选择日**志**，然后在 **Vended Logs 下查看定价。**

**Topics**
+ [启用访问日志所需的 IAM 权限](#monitoring-access-logs-IAM)
+ [访问日志目标](#monitoring-access-logs-destinations)
+ [启用访问日志](#monitoring-access-logs-enable)
+ [请求追踪](#x-amzn-RequestId-enable)
+ [访问日志内容](#monitoring-access-logs-contents)
+ [资源访问日志内容](#monitoring-resource-access-logs-contents)
+ [访问日志问题排查](#monitoring-access-logs-troubleshoot)

## 启用访问日志所需的 IAM 权限
<a name="monitoring-access-logs-IAM"></a>

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

------
#### [ JSON ]

****  

```
{
    "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 标识权限](https://docs.aws.amazon.com//IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。

更新附加到您正在使用的 IAM 用户、组或角色的策略后，请转到 [启用访问日志](#monitoring-access-logs-enable)。

## 访问日志目标
<a name="monitoring-access-logs-destinations"></a>

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

**Amazon CloudWatch 日志**
+ VPC Lattice 通常会在 2 分钟内将 CloudWatch 日志传送到日志。但请记住，实际日志传输时间是尽最大努力计算的，可能会有额外的延迟。
+ 如果 CloudWatch 日志组没有特定权限，则会自动创建资源策略并将其添加到日志组中。有关更多信息，请参阅 *Amazon CloudWatch 用户指南*中的[发送到 CloudWatch 日志](https://docs.aws.amazon.com//AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-CWL)的日志。
+ 您可以在 CloudWatch控制台的 “日志组 CloudWatch ” 下找到发送到的访问日志。有关更多信息，请参阅 *Amazon CloudWatch 用户指南*中的[查看发送到 CloudWatch 日志的日志数据](https://docs.aws.amazon.com//AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#ViewingLogData)。

**Amazon S3**
+ VPC Lattice 通常会在 6 分钟内将日志传输到 Amazon S3。但请记住，实际日志传输时间是尽最大努力计算的，可能会有额外的延迟。
+ 如果存储桶没有特定权限，系统将自动创建存储桶策略，并将其添加到您的 Amazon S3 存储桶。有关更多信息，请参阅亚马逊* CloudWatch用户指南中的发送到 Amazon* [S3 的日志](https://docs.aws.amazon.com//AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-S3)。
+ 发送到 Amazon S3 的访问日志使用以下命名约定：

  ```
  [bucket]/[prefix]/AWSLogs/[accountId]/VpcLattice/AccessLogs/[region]/[YYYY/MM/DD]/[resource-id]/[accountId]_VpcLatticeAccessLogs_[region]_[resource-id]_YYYYMMDDTHHmmZ_[hash].json.gz
  ```
+ VpcLatticeResourceAccessLogs 发送到 Amazon S3 的内容使用以下命名约定：

  ```
  [bucket]/[prefix]/AWSLogs/[accountId]/VpcLattice/ResourceAccessLogs/[region]/[YYYY/MM/DD]/[resource-id]/[accountId]_VpcLatticeResourceAccessLogs_[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*中的[发送到的日志](https://docs.aws.amazon.com//AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-Firehose)。
+ 有关查看发送到 Amazon Data Firehose日志的更多信息，请参阅《Amazon Data Firehose 开发人员指南》**中的[监控 Amazon Kinesis Data Streams](https://docs.aws.amazon.com//streams/latest/dev/monitoring.html)。

## 启用访问日志
<a name="monitoring-access-logs-enable"></a>

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

**Topics**
+ [使用控制台启用访问日志](#monitoring-access-logs-console)
+ [使用启用访问日志 AWS CLI](#monitoring-access-logs-cli)

### 使用控制台启用访问日志
<a name="monitoring-access-logs-console"></a>

您可以在创建期间启用服务网络、服务或资源配置的访问日志。您还可以在创建服务网络、服务或资源配置后启用访问日志，如以下过程所述。

**要使用控制台创建基本服务**

1. 打开位于 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 的 Amazon VPC 控制台。

1. 选择服务网络、服务或资源配置。

1. 选择**操作**和**编辑日志设置**。

1. 打开**访问日志**切换开关。

1. 为访问日志添加传输目标，如下所示：
   + 选择**CloudWatch 日志组**，然后选择一个日志组。要创建日志组，请选择**在中创建日志组 CloudWatch**。
   + 选择 **S3 存储桶**并输入 S3 存储桶路径，包括任何前缀。要搜索 S3 存储桶，请选择**浏览 S3**。
   + 选择 **Kinesis Data Firehose 传输流**，然后选择一个传输流。要创建传输流，请选择**在 Kinesis 中创建传输流**。

1. 选择**保存更改**。

### 使用启用访问日志 AWS CLI
<a name="monitoring-access-logs-cli"></a>

使用 CLI 命令[create-access-log-subscription](https://docs.aws.amazon.com/cli/latest/reference/vpc-lattice/create-access-log-subscription.html)启用服务网络或服务的访问日志。

## 请求追踪
<a name="x-amzn-RequestId-enable"></a>

 VPC Lattice 支持跨客户端、目标和日志的请求跟踪和关联，以实现可观察性和使用标头进行调试。 x-amzn-requestid此标头可以由客户端设置和发送，也可以由VPC Lattice生成，发送到目标，也可以在访问日志中找到。

**默认 行为**
+ VPC Lattice 会为每个请求自动生成此标头。
+ 该值是随机生成的标识符（默认为 UUID 样式）。
+ 生成的标识符是：
  + 已传播到下游目标。
  +  在客户端的响应标头中返回。
  + 登录访问日志

**示例（默认响应）**  
以下是发送给客户端的响应示例，默认行为为 VPC Lattice 为 value eo x-amzn-requestid f 标头生成随机值。

```
{
    "HTTP/1.1 200 OK
    x-amzn-requestid: a9f2c7a1-6b4f-4c79-9e87-ff5a1234a001"
}
```

**客户机设定值**
+ 客户端可以选择在传入的请求上设置此标头，以覆盖自动生成的值。
+ 注意事项
  +  标头值不需要遵循 UUID 格式。
  + 如果标头值超过 512 字节，VPC Lattice 会将其截断为 512 字节。
+  成功重写后，提供的标头值将：
  + 出现在响应标题中
  + 传播到目标
  + 出现在访问日志和指标中

**示例（覆盖客户端请求）**  
以下是客户端发送的带有标头值的请求的示例。

```
{
    "GET /my-service/endpoint HTTP/1.1 
    Host: my-api.example.com
    x-amzn-requestid: trace-request-foobar"
}
```

**示例（默认覆盖响应）**  
以下是向客户端发送的带有被覆盖值的响应的示例。

```
{
    "HTTP/1.1 200 OK
    x-amzn-requestid: trace-request-foobar"
}
```

## 访问日志内容
<a name="monitoring-access-logs-contents"></a>

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


| 字段 | 说明 | Format | 
| --- | --- | --- | 
|  callerPrincipalTags  | 请求 PrincipalTags 中的。 | JSON | 
|  hostHeader  | 请求的授权标头。 | 字符串 | 
|  sslCipher  | 用于建立客户端 TLS 连接的一组密码的 OpenSSL 名称。 | 字符串 | 
|  serviceNetworkArn  | 服务网络 ARN。 | arn: aws: vpc-lattice::: servicenetwork/ {{region}} {{account}} {{id}} | 
|  resolvedUser  | 启用并完成验证后用户的 ARN。 | null \| ARN \| "Anonymous" \| "Unknown" | 
|  authDeniedReason  | 启用验证后访问被拒绝的原因。 | null \| "Service" \| "Network" \| "Identity" | 
|  requestMethod  | 请求的方法标头。 | 字符串 | 
|  targetGroupArn  | 目标主机所属的目标主机组。 | 字符串 | 
|  tlsVersion  | TLS 版本。 | TLSv{{x}} | 
|  userAgent  | 用户代理标头。 | 字符串 | 
|  serverNameIndication  | [仅限 HTTPS]在服务器名称指示（SNI）的 ssl 连接套接字上设置的值。 | 字符串 | 
|  destinationVpcId  | 目标 VPC ID。 | vpc-{{xxxxxxxx}} | 
|  sourceIpPort  | 源的 IP 地址和端口。 | {{ip}}:{{port}} | 
|  targetIpPort  | 目标的 IP 地址和端口。 | {{ip}}:{{port}} | 
|  serviceArn  | 服务 ARN。 | arn: aws: vpc-lattice::: service/ {{region}} {{account}} {{id}} | 
|  sourceVpcId  | 源 VPC ID。 | vpc-{{xxxxxxxx}} | 
|  requestPath  | 请求的路径。 | LatticePath?:{{path}} | 
|  startTime  | 请求开始时间。 | {{YYYY}}-{{MM}}-{{DD}} T{{HH}}:{{MM}}: {{SS}} Z | 
|  protocol  | 协议。目前是 HTTP/1.1 或 HTTP/2。 | 字符串 | 
|  responseCode  | HTTP 响应代码。仅记录最终标头的响应代码。有关更多信息，请参阅 [访问日志问题排查](#monitoring-access-logs-troubleshoot)。 | 整数 | 
|  bytesReceived  | 收到的正文和标头字节。 | 整数 | 
|  bytesSent  | 发送的正文和标头字节。 | 整数 | 
|  duration  | 请求从开始时间到最后一个字节输出的总持续时间（毫秒）。 | 整数 | 
|  requestToTargetDuration  | 请求从开始时间到发送到目标的最后一个字节的总持续时间（毫秒）。 | 整数 | 
|  responseFromTargetDuration  | 请求从目标主机读取第一个字节到发送到客户端的最后一个字节的总持续时间（毫秒）。 | 整数 | 
|  grpcResponseCode  | gRPC 响应代码。有关更多信息，请参阅[状态代码及其在 gRPC 中的使用](https://grpc.github.io/grpc/core/md_doc_statuscodes.html)。仅当服务支持 gRPC 时，才会记录此字段。 | 整数 | 
|  requestId  | 这是一个唯一标识符，作为标 x-amzn-requestid题的值自动包含在响应中。它支持跨客户端、目标和日志的请求关联，以实现可观察性和调试。 | 字符串 | 
|  callerPrincipal  | 经过验证的主体。 | 字符串 | 
|  callerX509SubjectCN  | 使用者名称（CN）。 | 字符串 | 
|  callerX509IssuerOU  | 发布者（OU）。 | 字符串 | 
|  callerX509SANNameCN  | 发布者备用名称（名称/CN）。 | 字符串 | 
|  callerX509SANDNS  | 使用者备用名称（DNS）。 | 字符串 | 
|  callerX509SANURI  | 使用者备用名称（URI）。 | 字符串 | 
|  sourceVpcArn  | 发出请求的 VPC 的 ARN。 | arn: aws: ec2::: vpc/ {{region}} {{account}} {{id}} | 
| failureReason | 指明请求失败的原因。可能的值包括：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/vpc-lattice/latest/ug/monitoring-access-logs.html) | 字符串 | 

**示例**  
以下是示例日志条目。

```
{
    "callerPrincipalTags" : "{ "TagA": "ValA", "TagB": "ValB", ... }",
    "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,
    "requestId": "a9f2c7a1-6b4f-4c79-9e87-ff5a1234a001"
}
```

## 资源访问日志内容
<a name="monitoring-resource-access-logs-contents"></a>

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


| 字段 | 说明 | Format | 
| --- | --- | --- | 
|  serviceNetworkArn  | 服务网络 ARN。 | arn: {{partition}} vpc-lattice::: servicenetwork/ {{region}} {{account}} {{id}} | 
|  serviceNetworkResourceAssociationId  | 服务网络资源 ID。 | {{snra}}-{{xxx}} | 
|  vpcEndpointId  | 用于访问资源的终端节点 ID。 | 字符串 | 
|  sourceVpcArn  | 源 VPC ARN 或从中发起连接的 VPC。 | 字符串 | 
|  resourceConfigurationArn  | 被访问的资源配置的 ARN。 | 字符串 | 
|  protocol  | 用于与资源配置通信的协议。目前仅支持 tcp。 | 字符串 | 
|  sourceIpPort  | 发起连接的源的 IP 地址和端口。 | {{ip}}:{{port}} | 
|  destinationIpPort  | 发起连接时使用的 IP 地址和端口。这将是 SN-E/SN-A 的 IP。 | {{ip}}:{{port}} | 
|  gatewayIpPort  | 资源网关用于访问资源的 IP 地址和端口。 | {{ip}}:{{port}} | 
|  resourceIpPort  | 资源的 IP 地址和端口。 | {{ip}}:{{port}} | 

**示例**  
以下是示例日志条目。

```
{
    "eventTimestamp": "2024-12-02T10:10:10.123Z",
    "serviceNetworkArn": "arn:aws:vpc-lattice:us-west-2:1234567890:servicenetwork/sn-1a2b3c4d",
    "serviceNetworkResourceAssociationId": "snra-1a2b3c4d",
    "vpcEndpointId": "vpce-01a2b3c4d",
    "sourceVpcArn": "arn:aws:ec2:us-west-2:1234567890:vpc/vpc-01a2b3c4d",
    "resourceConfigurationArn": "arn:aws:vpc-lattice:us-west-2:0987654321:resourceconfiguration/rcfg-01a2b3c4d",
    "protocol": "tcp",
    "sourceIpPort": "172.31.23.56:44076",
    "destinationIpPort": "172.31.31.226:80",
    "gatewayIpPort": "10.0.28.57:49288",
    "resourceIpPort": "10.0.18.190:80"
}
```

## 访问日志问题排查
<a name="monitoring-access-logs-troubleshoot"></a>

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


| 错误代码 | 可能的原因 | 
| --- | --- | 
| HTTP 400：错误请求 |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/vpc-lattice/latest/ug/monitoring-access-logs.html)  | 
| HTTP 403：禁止访问 | 已为服务配置验证，但传入请求未经过验证或授权。 | 
| HTTP 404：服务不存在 | 您正在尝试连接到不存在或未注册到正确服务网络的服务。 | 
| HTTP 500：内部服务器错误 | VPC Lattice 遇到错误，例如无法连接到目标。 | 
| HTTP 502：无效网关 | VPC Lattice 遇到错误。 | 