Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Konfigurasikan Log Aliran VPC untuk sentralisasi di seluruh Akun AWS
Benjamin Morris dan Aman Kaur Gandhi, Amazon Web Services
Ringkasan
Dalam AWS virtual private cloud (VPC), fitur VPC Flow Logs dapat menyediakan data yang berguna untuk pemecahan masalah operasional dan keamanan. Namun, ada batasan dalam menggunakan VPC Flow Logs di lingkungan multi-akun. Secara khusus, log aliran lintas akun dari Amazon CloudWatch Logs tidak didukung. Sebagai gantinya, Anda dapat memusatkan log dengan mengonfigurasi bucket Amazon Simple Storage Service (Amazon S3) dengan kebijakan bucket yang sesuai.
catatan
Pola ini membahas persyaratan untuk mengirim log aliran ke lokasi terpusat. Namun, jika Anda juga ingin log tersedia secara lokal di akun anggota, Anda dapat membuat beberapa log aliran untuk setiap VPC. Pengguna yang tidak memiliki akses ke akun Arsip Log dapat melihat log lalu lintas untuk pemecahan masalah. Atau, Anda dapat mengonfigurasi log aliran tunggal untuk setiap VPC yang mengirimkan log ke CloudWatch Log. Anda kemudian dapat menggunakan filter langganan Amazon Data Firehose untuk meneruskan log ke bucket S3. Untuk informasi selengkapnya, lihat bagian Sumber daya terkait.
Prasyarat dan batasan
Prasyarat
Aktif Akun AWS
AWS Organizations Organisasi dengan akun yang digunakan untuk memusatkan log (misalnya, Arsip Log)
Keterbatasan
Jika Anda menggunakan kunci terkelola AWS Key Management Service (AWS KMS) aws/s3 untuk mengenkripsi bucket pusat, bucket pusat tidak akan menerima log dari akun lain. Sebagai gantinya, Anda akan melihat kode Unsuccessful kesalahan 400 dengan pesan seperti "LogDestination: <bucketName> is undeliverable" untuk yang Anda berikanResourceId. Ini karena kunci AWS terkelola akun tidak dapat dibagikan di seluruh akun. Solusinya adalah dengan menggunakan enkripsi terkelola Amazon S3 (SSE-S3) atau kunci yang dikelola AWS KMS pelanggan yang dapat Anda bagikan dengan akun anggota.
Arsitektur
Arsitektur target
Dalam diagram berikut, dua log aliran digunakan untuk setiap VPC. Satu mengirim log ke grup CloudWatch Log lokal. Yang lain mengirim log ke bucket S3 di akun logging terpusat. Kebijakan bucket mengizinkan layanan pengiriman log untuk menulis log ke bucket.
catatan
Mulai November 2023, AWS sekarang mendukung aws: SourceOrg ID condition key

Otomatisasi dan skala
Setiap VPC dikonfigurasi untuk mengirim log ke bucket S3 di akun logging pusat. Gunakan salah satu solusi otomatisasi berikut untuk membantu memastikan bahwa log aliran dikonfigurasi dengan tepat:
Alat
Alat
Amazon CloudWatch Logs membantu Anda memusatkan log dari semua sistem, aplikasi, Layanan AWS sehingga Anda dapat memantau dan mengarsipkannya dengan aman.
Amazon Simple Storage Service (Amazon S3) adalah layanan penyimpanan objek berbasis cloud yang membantu Anda menyimpan, melindungi, dan mengambil sejumlah data.
Amazon Virtual Private Cloud (Amazon VPC) membantu Anda meluncurkan AWS sumber daya ke jaringan virtual yang telah Anda tentukan. Jaringan virtual ini menyerupai jaringan tradisional yang akan Anda operasikan di pusat data Anda sendiri, dengan manfaat menggunakan infrastruktur yang dapat diskalakan. AWS Pola ini menggunakan fitur VPC Flow Logs untuk menangkap informasi tentang lalu lintas IP yang menuju dan dari antarmuka jaringan di VPC Anda.
Praktik terbaik
Menggunakan infrastruktur sebagai kode (IAc) dapat sangat menyederhanakan proses penyebaran VPC Flow Logs. Mengabstraksi definisi penerapan VPC Anda untuk menyertakan konstruksi sumber daya log aliran akan menerapkan VPCs log aliran Anda secara otomatis. Ini ditunjukkan di bagian selanjutnya.
Log aliran terpusat
Contoh sintaks untuk menambahkan log aliran terpusat ke modul VPC di HashiCorp Terraform: Kode ini membuat log aliran yang mengirim log dari VPC ke bucket S3 terpusat. Perhatikan bahwa pola ini tidak mencakup pembuatan bucket S3. Untuk pernyataan kebijakan bucket yang direkomendasikan, lihat bagian Informasi tambahan.
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. }
Untuk informasi selengkapnya tentang format log kustom, lihat dokumentasi Amazon VPC.
Log aliran lokal
Contoh sintaks untuk menambahkan log aliran lokal ke modul VPC di Terraform dengan izin yang diperlukan: Kode ini membuat log aliran yang mengirimkan log dari VPC ke grup Log lokal. CloudWatch
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 }
Epik
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Tentukan strategi enkripsi dan buat kebijakan untuk bucket S3 pusat. | Bucket pusat tidak mendukung AWS KMS | Kepatuhan |
Buat bucket log aliran pusat. | Buat bucket pusat tempat flow log akan dikirim, dan terapkan strategi enkripsi yang Anda pilih pada langkah sebelumnya. Ini harus dalam Arsip Log atau akun yang bertujuan serupa. Dapatkan kebijakan bucket dari bagian Informasi tambahan, dan terapkan ke bucket pusat setelah memperbarui placeholder dengan nilai spesifik lingkungan Anda. | AWS Umum |
Konfigurasikan Log Aliran VPC untuk mengirim log ke bucket log aliran pusat. | Tambahkan log aliran ke setiap VPC yang ingin Anda kumpulkan datanya. Cara yang paling skalabel untuk melakukan ini adalah dengan menggunakan alat IAc seperti AFT atau. AWS Cloud Development Kit (AWS CDK) Misalnya, Anda dapat membuat modul Terraform yang menerapkan VPC di samping log aliran. Jika perlu, Anda menambahkan log aliran secara manual. | Administrator jaringan |
Konfigurasikan Log Aliran VPC untuk dikirim ke Log lokal CloudWatch . | (Opsional) Jika Anda ingin log aliran terlihat di akun tempat log dibuat, buat log aliran lain untuk mengirim data ke CloudWatch Log di akun lokal. Atau, Anda dapat mengirim data ke bucket S3 khusus akun di akun lokal. | AWS Umum |
Sumber daya terkait
Informasi tambahan
Kebijakan bucket
Contoh kebijakan bucket ini dapat diterapkan ke bucket S3 pusat untuk log aliran, setelah Anda menambahkan nilai untuk nama placeholder.
{ "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" } } } ] }