選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

設定 VPC 流程日誌以跨 AWS 帳戶集中化 - AWS 方案指引

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

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

設定 VPC 流程日誌以跨 AWS 帳戶集中化

由 Benjamin Morris (AWS) 和 Aman Kaur Gandhi (AWS) 建立

Summary

在 Amazon Web Services (AWS) 虛擬私有雲端 (VPC) 中,VPC 流程日誌功能可以提供有用的資料,以進行操作和安全性疑難排解。不過,在多帳戶環境中使用 VPC 流程日誌有其限制。具體而言,不支援來自 Amazon CloudWatch Logs 的跨帳戶流程日誌。反之,您可以使用適當的儲存貯體政策來設定 Amazon Simple Storage Service (Amazon S3) 儲存貯體,以集中管理日誌。

注意

此模式討論將流程日誌傳送至集中位置的需求。不過,如果您也希望日誌可在成員帳戶中於本機使用,您可以為每個 VPC 建立多個流程日誌。無法存取 Log Archive 帳戶的使用者可以查看流量日誌以進行故障診斷。或者,您可以為將日誌傳送至 CloudWatch Logs 的每個 VPC 設定單一流程日誌。然後,您可以使用 Amazon Data Firehose 訂閱篩選條件,將日誌轉送至 S3 儲存貯體。如需詳細資訊,請參閱相關資源一節。

先決條件和限制

先決條件

  • 作用中的 AWS 帳戶

  • AWS Organizations 組織具有用於集中日誌的帳戶 (例如,Log Archive)

限制

如果您使用 AWS Key Management Service (AWS KMS) 受管金鑰aws/s3來加密您的中央儲存貯體,則不會收到來自不同帳戶的日誌。反之,您會看到Unsuccessful錯誤代碼 400,其中包含訊息,例如指定 "LogDestination: <bucketName> is undeliverable"ResourceId

這是因為帳戶的 AWS 受管金鑰無法跨帳戶共用。

解決方案是使用 Amazon S3 受管加密 (SSE-S3) 或可與成員帳戶共用的 AWS KMS 客戶受管金鑰。

架構

目標技術堆疊

在下圖中,會為每個 VPC 部署兩個流程日誌。一個 會將日誌傳送至本機 CloudWatch Logs 群組。另一個 會將日誌傳送至集中式日誌帳戶中的 S3 儲存貯體。儲存貯體政策允許日誌交付服務將日誌寫入儲存貯體。

注意

截至 2023 年 11 月, AWS 現在支援 aws:SourceOrgID 條件金鑰。此條件可讓您拒絕寫入 AWS Organizations 組織外部帳戶的集中式儲存貯體。

目標架構

每個 VPC 都會有一個流程日誌將日誌傳送至 CloudWatch,一個流程日誌則顯示日誌傳送至 S3 儲存貯體。

自動化和擴展

每個 VPC 都設定為將日誌傳送至中央記錄帳戶中的 S3 儲存貯體。使用下列其中一個自動化解決方案,以協助確保流程日誌設定正確:

工具

工具

  • Amazon CloudWatch Logs 可協助您集中所有系統、應用程式和 AWS 服務的日誌,以便您可以監控日誌並將其安全地封存。

  • Amazon Simple Storage Service (Amazon S3) 是一種雲端型物件儲存服務,可協助您儲存、保護和擷取任何數量的資料。

  • Amazon Virtual Private Cloud (Amazon VPC) 可協助您在已定義的虛擬網路中啟動 AWS 資源。此虛擬網路類似於您在自己的資料中心內操作的傳統網路,具有使用可擴展的 AWS 基礎設施的優勢。此模式使用 VPC 流程日誌功能來擷取進出 VPC 中網路介面之 IP 流量的相關資訊。

最佳實務

使用基礎設施做為程式碼 (IaC) 可大幅簡化 VPC 流程日誌部署程序。抽象 VPC 部署定義以包含流程日誌資源建構,會自動使用流程日誌部署您的 VPCs。這會在下一節中示範。

集中式流程日誌

在 HashiCorp Terraform 中將集中式流程日誌新增至 VPC 模組的範例語法

此程式碼會建立流程日誌,將日誌從 VPC 傳送至集中式 S3 儲存貯體。請注意,此模式不包含 S3 儲存貯體的建立。

如需建議的儲存貯體政策陳述式,請參閱其他資訊一節。

variable "vpc_id" { type = string } locals { custom_log_format_v5 = "$${version} $${account-id} $${interface-id} $${srcaddr} $${dstaddr} $${srcport} $${dstport} $${protocol} $${packets} $${bytes} $${start} $${end} $${action} $${log-status} $${vpc-id} $${subnet-id} $${instance-id} $${tcp-flags} $${type} $${pkt-srcaddr} $${pkt-dstaddr} $${region} $${az-id} $${sublocation-type} $${sublocation-id} $${pkt-src-aws-service} $${pkt-dst-aws-service} $${flow-direction} $${traffic-path}" } resource "aws_flow_log" "centralized_flow_log" { log_destination = "arn:aws:s3:::centralized-vpc-flow-logs-<log_archive_account_id>" # Optionally, a prefix can be added after the ARN. log_destination_type = "s3" traffic_type = "ALL" vpc_id = var.vpc_id log_format = local.custom_log_format_v5 # If you want fields from VPC Flow Logs v3+, you will need to create a custom log format. }

如需自訂日誌格式的詳細資訊,請參閱 AWS 文件

本機流程日誌

將本機流程日誌新增至具有必要許可的 Terraform 中的 VPC 模組的範例語法

此程式碼會建立流程日誌,將日誌從 VPC 傳送至本機 CloudWatch Logs 群組。

data "aws_region" "current" {} variable "vpc_id" { type = string } resource "aws_iam_role" "local_flow_log_role" { name = "flow-logs-policy-${var.vpc_id}" assume_role_policy = <<EOF { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": {"Service": "vpc-flow-logs.amazonaws.com"}, "Action": "sts:AssumeRole" }] } EOF } resource "aws_iam_role_policy" "logs_permissions" { name = "flow-logs-policy-${var.vpc_id}" role = aws_iam_role.local_flow_log_role.id policy = <<EOF { "Version": "2012-10-17", "Statement": [{ "Action": ["logs:CreateLog*", "logs:PutLogEvents", "logs:DescribeLog*", "logs:DeleteLogDelivery"], "Effect": "Allow", "Resource": "arn:aws:logs:${data.aws_region.current.name}:*:log-group:vpc-flow-logs*" }] } EOF } resource "aws_cloudwatch_log_group" "local_flow_logs" { name = "vpc-flow-logs/${var.vpc_id}" retention_in_days = 30 } resource "aws_flow_log" "local_flow_log" { iam_role_arn = aws_iam_role.local_flow_log_role.arn log_destination = aws_cloudwatch_log_group.local_flow_logs.arn traffic_type = "ALL" vpc_id = var.vpc_id }

史詩

任務描述所需技能

決定加密策略並建立中央 S3 儲存貯體的政策。

中央儲存貯體不支援 aws/s3 AWS KMS 金鑰,因此您必須使用 SSE-S3 或 AWS KMS 客戶受管金鑰。如果您使用 AWS KMS 金鑰,金鑰政策必須允許成員帳戶使用金鑰。

合規

建立中央流程日誌儲存貯體。

建立流量日誌要傳送到其中的中央儲存貯體,並套用您在上一個步驟中選擇的加密策略。這應該位於日誌封存或類似用途的帳戶中。

其他資訊區段取得儲存貯體政策,並在使用環境特定值更新預留位置之後,將其套用至您的中央儲存貯體。

一般 AWS

設定 VPC 流程日誌,將日誌傳送至中央流程日誌儲存貯體。

將流程日誌新增至您要收集資料的每個 VPC。最可擴展的方式是使用 AFT 或 AWS 雲端開發套件 (AWS CDK) 等 IaC 工具。例如,您可以建立 Terraform 模組,以部署 VPC 與流程日誌。如有必要,您可以手動新增流程日誌。

網路管理員

設定要傳送至本機 CloudWatch Logs 的 VPC 流程日誌。

(選用) 如果您希望流程日誌顯示在產生日誌的帳戶中,請建立另一個流程日誌,將資料傳送至本機帳戶中的 CloudWatch Logs。或者,您可以將資料傳送至本機帳戶中的帳戶特定 S3 儲存貯體。

一般 AWS

部署 VPC 流程日誌基礎設施

任務描述所需技能

決定加密策略並建立中央 S3 儲存貯體的政策。

中央儲存貯體不支援 aws/s3 AWS KMS 金鑰,因此您必須使用 SSE-S3 或 AWS KMS 客戶受管金鑰。如果您使用 AWS KMS 金鑰,金鑰政策必須允許成員帳戶使用金鑰。

合規

建立中央流程日誌儲存貯體。

建立流量日誌要傳送到其中的中央儲存貯體,並套用您在上一個步驟中選擇的加密策略。這應該位於日誌封存或類似用途的帳戶中。

其他資訊區段取得儲存貯體政策,並在使用環境特定值更新預留位置之後,將其套用至您的中央儲存貯體。

一般 AWS

設定 VPC 流程日誌,將日誌傳送至中央流程日誌儲存貯體。

將流程日誌新增至您要收集資料的每個 VPC。最可擴展的方式是使用 AFT 或 AWS 雲端開發套件 (AWS CDK) 等 IaC 工具。例如,您可以建立 Terraform 模組,以部署 VPC 與流程日誌。如有必要,您可以手動新增流程日誌。

網路管理員

設定要傳送至本機 CloudWatch Logs 的 VPC 流程日誌。

(選用) 如果您希望流程日誌顯示在產生日誌的帳戶中,請建立另一個流程日誌,將資料傳送至本機帳戶中的 CloudWatch Logs。或者,您可以將資料傳送至本機帳戶中的帳戶特定 S3 儲存貯體。

一般 AWS

相關資源

其他資訊

儲存貯體政策

在您新增預留位置名稱的值後,此儲存貯體政策範例可以套用至流量日誌的中央 S3 儲存貯體。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AWSLogDeliveryWrite", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::<BUCKET_NAME>/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceOrgID": "<ORG_ID>" } } }, { "Sid": "AWSLogDeliveryCheck", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::<BUCKET_NAME>", "Condition": { "StringEquals": { "aws:SourceOrgID": "<ORG_ID>" } } }, { "Sid": "DenyUnencryptedTraffic", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": "s3:*", "Resource": [ "arn:aws:s3:::<BUCKET_NAME>/*", "arn:aws:s3:::<BUCKET_NAME>" ], "Condition": { "Bool": { "aws:SecureTransport": "false" } } } ] }
隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。