Amazon VPC Lattice 的存取日誌 - Amazon VPC Lattice

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon VPC Lattice 的存取日誌

存取日誌會擷取 VPC Lattice 服務和資源組態的詳細資訊。您可以使用這些存取日誌來分析流量模式,並稽核網路中的所有服務。對於 VPC Lattice 服務,我們會發佈 VpcLatticeAccessLogs ,對於資源組態,我們會發佈VpcLatticeResourceAccessLogs需要單獨設定的 。

存取日誌是選用的,預設為停用。啟用存取日誌之後,您可以隨時停用它們。

定價

發佈存取日誌時需支付費用。 AWS 代表您原生發佈的日誌稱為付費日誌。如需付費日誌定價的詳細資訊,請參閱 Amazon CloudWatch 定價、選擇日誌,並在已付費日誌下檢視定價。

啟用存取日誌所需的 IAM 許可

若要啟用存取日誌並將日誌傳送到其目的地,您必須在政策中將下列動作連接到您正在使用的 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 身分許可

更新連接至您正在使用的 IAM 使用者、群組或角色的政策後,請前往 啟用存取日誌

存取日誌目的地

您可以將存取日誌傳送至下列目的地。

Amazon CloudWatch Logs
Amazon S3
  • VPC Lattice 通常會在 6 分鐘內將日誌交付至 Amazon S3。不過,請記住,實際日誌交付時間是盡最大努力的,可能會有額外的延遲。

  • 如果儲存貯體沒有特定許可,系統會自動建立儲存貯體政策並新增至您的 Amazon S3 儲存貯體。如需詳細資訊,請參閱《Amazon CloudWatch 使用者指南》中的傳送至 Amazon S3 的日誌Amazon CloudWatch

  • 傳送至 Amazon S3 的存取日誌使用以下命名慣例:

    [bucket]/[prefix]/AWSLogs/[accountId]/VpcLattice/AccessLogs/[region]/[YYYY/MM/DD]/[resource-id]/[accountId]_VpcLatticeAccessLogs_[region]_[resource-id]_YYYYMMDDTHHmmZ_[hash].json.gz
  • 傳送至 Amazon S3 的 VpcLatticeResourceAccessLogs 使用以下命名慣例:

    [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

  • 如需檢視傳送至 之日誌的詳細資訊 Amazon Data Firehose,請參閱《 Amazon Data Firehose 開發人員指南》中的監控 Amazon Kinesis Data Streams

啟用存取日誌

完成下列程序來設定存取日誌,以擷取存取日誌並將其交付至您選擇的目的地。

使用主控台啟用存取日誌

您可以在建立期間啟用服務網路、服務或資源組態的存取日誌。您也可以在建立服務網路、服務或資源組態後啟用存取日誌,如下列程序所述。

使用主控台建立基本服務
  1. https://console.aws.amazon.com/vpc/ 開啟 Amazon VPC 主控台。

  2. 選取服務網路、服務或資源組態。

  3. 選擇動作編輯日誌設定

  4. 開啟存取日誌切換開關。

  5. 為您的存取日誌新增交付目的地,如下所示:

    • 選取 CloudWatch Log 群組,然後選擇日誌群組。若要建立日誌群組,請選擇在 CloudWatch 中建立日誌群組

    • 選取 S3 儲存貯體並輸入 S3 儲存貯體路徑,包括任何字首。若要搜尋 S3 儲存貯體,請選擇瀏覽 S3

    • 選取 Kinesis Data Firehose 交付串流,然後選擇交付串流。若要建立交付串流,請選擇在 Kinesis 中建立交付串流

  6. 選擇儲存變更

使用 啟用存取日誌 AWS CLI

使用 CLI 命令 create-access-log-subscription 來啟用服務網路或服務的存取日誌。

請求追蹤

VPC Lattice 支援用戶端、目標和日誌之間的請求追蹤和關聯,以便使用 x-amzn-requestid 標頭進行可觀測性和偵錯。此標頭可由用戶端設定和傳送,或由 VPC Lattice 產生,並傳送至目標,也可用於存取日誌。

預設行為
  • VPC Lattice 會自動為每個請求產生此標頭。

  • 此值是隨機產生的識別符 (預設為 UUID 樣式)。

  • 產生的識別符為:

    • 傳播到下游目標。

    • 在回應標頭中傳回給用戶端。

    • 已登入存取日誌

範例 (預設回應)

以下是傳送至用戶端的回應範例,其預設行為為 VPC Lattice 產生 x-amzn-requestid 標頭值的隨機值。

{ "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" }

存取日誌內容

下表說明存取日誌項目的欄位。

欄位 描述 格式
callerPrincipalTags

請求中的 PrincipalTags。

JSON

hostHeader

請求的授權標頭。

string

sslCipher

用於建立用戶端 TLS 連線之一組密碼的 OpenSSL 名稱。

string

serviceNetworkArn

服務網路 ARN。

arn:aws:vpc-lattice:regionaccount:servicenetwork/id

resolvedUser

身分驗證已啟用且身分驗證完成時的使用者 ARN。

null | ARN | "匿名" | "未知"

authDeniedReason

啟用身分驗證時拒絕存取的原因。

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

requestMethod

請求的方法標頭。

string

targetGroupArn

目標主機所屬的目標主機群組。

string

tlsVersion

TLS 版本。

TLSvx

userAgent

使用者代理程式標頭。

string

serverNameIndication

【僅限 HTTPS】 伺服器名稱指示 (SNI) 在 ssl 連線通訊端上設定的值。

string

destinationVpcId

目的地 VPC ID。

vpc-xxxxxxxx

sourceIpPort

來源的 IP 地址和 :port。

ipport

targetIpPort

目標的 IP 地址和連接埠。

ipport

serviceArn

服務 ARN。

arn:aws:vpc-lattice:regionaccount:service/id

sourceVpcId

來源 VPC ID。

vpc-xxxxxxxx

requestPath

請求的路徑。

LatticePath?:path

startTime

請求開始時間。

YYYY-MM-DD THHMMSS Z

protocol

通訊協定。目前為 HTTP/1.1 或 HTTP/2。

string

responseCode

HTTP 回應代碼。只會記錄最終標頭的回應碼。如需詳細資訊,請參閱對存取日誌進行故障診斷

integer

bytesReceived

收到的內文和標頭位元組。

integer

bytesSent

傳送的內文和標頭位元組。

integer

duration

從開始時間到最後一個位元組輸出的請求總持續時間,以毫秒為單位。

integer

requestToTargetDuration

從開始時間到傳送至目標的最後一個位元組的請求總持續時間,以毫秒為單位。

integer

responseFromTargetDuration

從目標主機讀取的第一個位元組到傳送至用戶端的最後一個位元組的請求總持續時間,以毫秒為單位。

integer

grpcResponseCode

gRPC 回應程式碼。如需詳細資訊,請參閱狀態碼及其在 gRPC 中的使用方式。只有在服務支援 gRPC 時,才會記錄此欄位。

integer

requestId

此唯一識別符會自動包含在回應中,做為 x-amzn-requestid 標頭的值。它可讓用戶端、目標和日誌之間的請求相互關聯,以實現可觀測性和偵錯。

string

callerPrincipal

已驗證的委託人。

string

callerX509SubjectCN

主體名稱 (CN)。

string

callerX509IssuerOU

發行者 (OU)。

string

callerX509SANNameCN

發行者替代方案 (名稱/CN)。

string

callerX509SANDNS

主體替代名稱 (DNS)。

string

callerX509SANURI

主體替代名稱 (URI)。

string

sourceVpcArn

發出請求之 VPC 的 ARN。

arn:aws:ec2:regionaccount:vpc/id

failureReason

指出請求失敗的原因。可能值如下:

  • TargetConnectionError - 請求無法連線到目標群組中的目標。

  • TargetProtocolError - 目標未回應有效資料。這可能表示目標具有無效的 TLS 記錄,或使用無效的目標群組通訊協定。

  • TargetDataTimeout - 已達到閒置逾時。

  • TargetConnectionClosed - 目標在完成回應之前關閉連線。

  • ClientConnectionClosed - 用戶端在收到完整回應之前關閉連線。

  • ClientRateLimited - 用戶端超過連線限制,VPC Lattice 限制速率。

  • ClientAccessDenied - VPC Lattice 拒絕存取資源。如需 VPC Lattice 拒絕存取原因的詳細資訊authDeniedReason,請使用 。

  • ClientProtocolError - 用戶端傳送了無法理解的資料。這可能表示用戶端使用了無效的 TLS 記錄或無效的通訊協定。

  • ConnectionDurationExceeded - 連線達到連線持續時間上限。

  • InternalError - 處理請求時發生內部錯誤。

string
範例

以下為日誌項目的範例。

{ "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" }

資源存取日誌內容

下表說明資源存取日誌項目的欄位。

欄位 描述 格式
serviceNetworkArn

服務網路 ARN。

arn:partition vpc-lattice:regionaccount:servicenetwork/id

serviceNetworkResourceAssociationId

服務網路資源 ID。

snra-xxx

vpcEndpointId

用來存取資源的端點 ID。

string

sourceVpcArn

來源 VPC ARN 或起始連線的 VPC。

string

resourceConfigurationArn

已存取之資源組態的 ARN。

string

protocol

用來與資源組態通訊的通訊協定。目前僅支援 tcp。

string

sourceIpPort

啟動連線之來源的 IP 地址和連接埠。

ipport

destinationIpPort

起始連線的 IP 地址和連接埠。這將是 SN-E/SN-A 的 IP。

ipport

gatewayIpPort

資源閘道用來存取資源的 IP 地址和連接埠。

ipport

resourceIpPort

資源的 IP 地址和連接埠。

ipport

範例

以下為日誌項目的範例。

{ "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" }

對存取日誌進行故障診斷

本節包含您在存取日誌中可能看到的 HTTP 錯誤代碼說明。

錯誤碼 可能原因

HTTP 400:錯誤的請求

  • 用戶端傳送了不符合 HTTP 規格的格式錯誤請求。

  • 整個請求標頭或超過 100 個標頭的請求標頭超過 60K。

  • 用戶端在傳送完整請求內文之前關閉了連線。

HTTP 403:禁止

已為服務設定身分驗證,但傳入的請求未經過身分驗證或授權。

HTTP 404:不存在的服務

您嘗試連線到不存在或未註冊至正確服務網路的服務。

HTTP 500:內部伺服器錯誤

VPC Lattice 發生錯誤,例如無法連線至目標。

HTTP 502:無效的閘道

VPC Lattice 發生錯誤。