Mengumpulkan log Fungsi AWS Lambda
Versi Parser: 2.0
Dokumen ini menjelaskan cara menyerap log Fungsi AWS Lambda ke Google Security Operations menggunakan Amazon S3.
AWS Lambda adalah layanan komputasi serverless yang menjalankan kode Anda sebagai respons terhadap peristiwa dan otomatis mengelola resource komputasi yang mendasarinya. Lambda secara otomatis mengirimkan semua log fungsi (log platform, log ekstensi, dan output aplikasi) ke Amazon CloudWatch Logs, sehingga membuat grup log per fungsi. Integrasi ini menggunakan Amazon Data Firehose untuk melakukan streaming peristiwa log Lambda dari CloudWatch Logs ke bucket S3, yang kemudian di-ingest oleh Google SecOps menggunakan feed Amazon S3 V2.
Sebelum memulai
Pastikan Anda memiliki prasyarat berikut:
- Instance Google SecOps
- Akses istimewa ke AWS Management Console dengan izin untuk mengelola:
- AWS Lambda (fungsi, konfigurasi logging)
- Amazon CloudWatch Logs (grup log, filter langganan)
- Amazon Data Firehose (aliran pengiriman)
- Amazon S3 (bucket)
- AWS IAM (peran, kebijakan, pengguna)
Verifikasi grup log CloudWatch Logs untuk fungsi Lambda Anda
AWS Lambda otomatis membuat grup log CloudWatch Logs untuk setiap fungsi saat pertama kali dipanggil. Konvensi penamaan grup log default adalah:
/aws/lambda/<function-name>
Untuk memverifikasi:
- Di AWS Console, buka CloudWatch > Logs > Log groups.
- Telusuri
/aws/lambda/. Pastikan grup log ada untuk setiap fungsi Lambda yang lognya ingin Anda masukkan.
Mengonfigurasi bucket AWS S3
- Buat bucket Amazon S3 dengan mengikuti panduan pengguna ini: Membuat bucket.
- Simpan Name dan Region bucket untuk referensi di masa mendatang (misalnya,
lambda-logs-to-secops).
Mengonfigurasi peran IAM untuk Amazon Data Firehose
Amazon Data Firehose memerlukan peran IAM untuk menulis log ke bucket S3 Anda.
Buat kebijakan IAM
- Di AWS Console, buka IAM > Policies > Create policy.
- Pilih tab JSON.
Tempel kebijakan berikut (ganti
lambda-logs-to-secopsdengan nama bucket Anda yang sebenarnya):{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3Delivery", "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::lambda-logs-to-secops", "arn:aws:s3:::lambda-logs-to-secops/*" ] }, { "Sid": "CloudWatchLogging", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:log-group:/aws/kinesisfirehose/lambda-logs-to-secops:log-stream:*" } ] }Klik Berikutnya.
Di kolom Policy name, masukkan
LambdaLogsFirehoseS3Policy.Klik Create policy.
Membuat peran IAM
- Buka IAM > Roles > Create role.
- Pilih Kebijakan kepercayaan kustom.
Tempel kebijakan kepercayaan berikut:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "firehose.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }Klik Berikutnya.
Telusuri dan pilih LambdaLogsFirehoseS3Policy.
Klik Berikutnya.
Di kolom Role name, masukkan
LambdaLogsFirehoseToS3Role.Klik Buat peran.
Buat aliran Amazon Data Firehose
- Buka konsol Kinesis di https://console.aws.amazon.com/kinesis.
- Di panel navigasi, pilih Amazon Data Firehose.
- Klik Create Firehose stream.
- Di bagian Choose source and destination, berikan konfigurasi berikut:
- Sumber: Pilih PUT Langsung.
- Tujuan: Pilih Amazon S3.
- Di kolom Firehose stream name, masukkan
lambda-logs-to-secops. Di bagian Transform records, di bagian Decompress source records from Amazon CloudWatch Logs:
- Pilih Aktifkan dekompresi.
- Jangan pilih Aktifkan ekstraksi pesan.
Di bagian Destination settings:
- Bucket S3: Pilih bucket S3
lambda-logs-to-secops. - S3 bucket prefix (opsional): Masukkan
lambda-logs/. - S3 bucket error output prefix (opsional): Masukkan
firehose-errors/.
- Bucket S3: Pilih bucket S3
Di bagian Buffer hints:
- Ukuran buffer:
5MiB (default). - Interval buffer:
300detik (default).
- Ukuran buffer:
Di bagian Setelan lanjutan:
- Enkripsi sisi server: Opsional. Aktifkan jika enkripsi diperlukan.
- Logging error: Pilih Diaktifkan (direkomendasikan).
- Izin: Pilih Pilih peran IAM yang ada, lalu pilih
LambdaLogsFirehoseToS3Role.
Klik Create Firehose stream.
Tunggu hingga Status aliran data menampilkan Active.
Mengonfigurasi peran IAM untuk CloudWatch Logs
CloudWatch Logs memerlukan peran IAM untuk mengirim data log ke aliran Firehose.
Buat kebijakan IAM
- Buka IAM > Policies > Create policy.
- Pilih tab JSON.
Tempel kebijakan berikut (ganti
<region>dan<account-id>dengan region AWS dan ID akun Anda):{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "firehose:PutRecord", "firehose:PutRecordBatch" ], "Resource": "arn:aws:firehose:<region>:<account-id>:deliverystream/lambda-logs-to-secops" } ] }Klik Berikutnya.
Di kolom Policy name, masukkan
LambdaLogsCWLtoFirehosePolicy.Klik Create policy.
Membuat peran IAM
- Buka IAM > Roles > Create role.
- Pilih Kebijakan kepercayaan kustom.
Tempel kebijakan kepercayaan berikut (ganti
<region>dengan region AWS Anda):{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logs.<region>.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }Klik Berikutnya.
Telusuri dan pilih LambdaLogsCWLtoFirehosePolicy.
Klik Berikutnya.
Di kolom Nama peran, masukkan
LambdaLogsCWLtoFirehoseRole.Klik Buat peran.
Membuat filter langganan CloudWatch Logs
- Di AWS Console, buka CloudWatch > Logs > Log groups.
- Pilih grup log
/aws/lambda/<function-name>. - Pilih tab Filter langganan.
- Klik Buat > Buat filter langganan Amazon Data Firehose.
- Berikan detail konfigurasi berikut:
- Destination: Pilih aliran Firehose
lambda-logs-to-secops. - Berikan izin: Pilih peran
LambdaLogsCWLtoFirehoseRole. - Nama filter langganan: Masukkan nama deskriptif (misalnya,
lambda-logs-to-secops-filter). - Format log: Pilih Lainnya.
- Pola filter langganan: Kosongkan untuk mengirim semua peristiwa log fungsi Lambda.
- Destination: Pilih aliran Firehose
Klik Mulai streaming.
Mengonfigurasi pengguna IAM untuk Google SecOps
Google SecOps memerlukan pengguna IAM dengan akses ke bucket S3 untuk menyerap log yang dikirimkan.
- Buat Pengguna dengan mengikuti panduan pengguna ini: Membuat pengguna IAM.
- Pilih Pengguna yang dibuat.
- Pilih tab Kredensial keamanan.
- Klik Create Access Key di bagian Access Keys.
- Pilih Layanan pihak ketiga sebagai Kasus penggunaan.
- Klik Berikutnya.
- Opsional: Tambahkan tag deskripsi.
- Klik Create access key.
- Klik Download file .csv untuk menyimpan Access Key dan Secret Access Key untuk referensi di masa mendatang.
- Klik Done.
- Pilih tab Permissions.
- Klik Tambahkan izin di bagian Kebijakan izin.
- Pilih Tambahkan izin.
- Pilih Attach policies directly.
- Cari kebijakan AmazonS3FullAccess.
- Pilih kebijakan.
- Klik Berikutnya.
- Klik Add permissions.
Mengonfigurasi feed di Google SecOps untuk menyerap log Fungsi AWS Lambda
- Buka Setelan SIEM > Feed.
- Klik Tambahkan Feed Baru.
- Di halaman berikutnya, klik Konfigurasi satu feed.
- Masukkan nama unik untuk Nama feed.
- Pilih Amazon S3 V2 sebagai Jenis sumber.
- Pilih AWS Lambda Function sebagai Jenis log.
- Klik Berikutnya, lalu klik Kirim.
- Tentukan nilai untuk kolom berikut:
- URI S3:
s3://lambda-logs-to-secops/lambda-logs/ - Opsi penghapusan sumber: Pilih opsi penghapusan sesuai preferensi Anda
- Usia File Maksimum: Menyertakan file yang diubah dalam beberapa hari terakhir (default adalah 180 hari)
- Access Key ID: Kunci akses pengguna dengan akses ke bucket S3
- Secret Access Key: Kunci rahasia pengguna dengan akses ke bucket S3
- Namespace aset: Namespace aset
- Label penyerapan: Label yang akan diterapkan ke peristiwa dari feed ini
- URI S3:
- Klik Berikutnya, lalu klik Kirim.
Tabel pemetaan UDM
| Kolom Log | Pemetaan UDM | Logika |
|---|---|---|
Activity_id_label |
additional.fields |
Digabung |
Arrays_label |
additional.fields |
Digabung |
Name_label |
additional.fields |
Digabung |
Type_1_label |
additional.fields |
Digabung |
Type_id_label |
additional.fields |
Digabung |
Type_label |
additional.fields |
Digabung |
Uid_label |
additional.fields |
Digabung |
Uid_label_1 |
additional.fields |
Digabung |
Value_label |
additional.fields |
Digabung |
__type_label |
additional.fields |
Digabung |
attempts_label |
additional.fields |
Digabung |
class_name_label |
additional.fields |
Digabung |
contentType_label |
additional.fields |
Digabung |
env_label |
additional.fields |
Digabung |
extendedRequestId_label |
additional.fields |
Digabung |
feature_name_label |
additional.fields |
Digabung |
line_number_label |
additional.fields |
Digabung |
logType_label |
additional.fields |
Digabung |
product_name_label |
additional.fields |
Digabung |
requestid_label |
additional.fields |
Digabung |
sourceAccount_label |
additional.fields |
Digabung |
stack_label |
additional.fields |
Digabung |
totalRetryDelay_label |
additional.fields |
Digabung |
vendor_name_label |
additional.fields |
Digabung |
version_label |
additional.fields |
Digabung |
has_principal |
extensions.auth.type |
Dipetakan: true → AUTHTYPE_UNSPECIFIED |
description |
metadata.description |
Dipetakan secara langsung |
file_desc |
metadata.description |
Dipetakan secara langsung |
Time |
metadata.event_timestamp |
Diuraikan sebagai UNIX |
time |
metadata.event_timestamp |
Diurai sebagai yyyy-MM-ddTHH:mm:ss.SSSZ |
has_principal |
metadata.event_type |
Dipetakan: true → USER_LOGIN, true → NETWORK_HTTP, true → NETWORK_CONNECTION, `true... |
has_principal_user |
metadata.event_type |
Dipetakan: true → USER_RESOURCE_ACCESS |
Api.Operation |
metadata.product_event_type |
Dipetakan secara langsung |
name |
metadata.product_event_type |
Dipetakan secara langsung |
Api.Request.Uid |
metadata.product_log_id |
Dipetakan secara langsung |
id |
metadata.product_log_id |
Dipetakan secara langsung |
meta_data.requestId |
metadata.product_log_id |
Dipetakan secara langsung |
Metadata.Version |
metadata.product_version |
Dipetakan secara langsung |
version |
metadata.product_version |
Dipetakan secara langsung |
meta_data.httpStatusCode |
network.http.response_code |
Dipetakan secara langsung |
Http_request.User_agent |
network.http.user_agent |
Dipetakan secara langsung |
Actor.Invoked_by |
principal.administrative_domain |
Dipetakan secara langsung |
Src_endpoint.Domain |
principal.asset.hostname |
Dipetakan secara langsung |
Src_endpoint.Domain |
principal.hostname |
Dipetakan secara langsung |
Cloud.Region |
principal.resource.attribute.cloud.availability_zone |
Dipetakan secara langsung |
Actor.User.Name |
principal.user.userid |
Dipetakan secara langsung |
Status |
security_result.action_details |
Dipetakan secara langsung |
Category_name |
security_result.category_details |
Digabung |
error |
security_result.description |
Dipetakan secara langsung |
errorMessage |
security_result.description |
Dipetakan secara langsung |
Metadata_uid_label |
security_result.detection_fields |
Digabung |
category_uid_label |
security_result.detection_fields |
Digabung |
class_uid_label |
security_result.detection_fields |
Digabung |
errorType_label |
security_result.detection_fields |
Digabung |
event_code_label |
security_result.detection_fields |
Digabung |
fault_label |
security_result.detection_fields |
Digabung |
functionName_label |
security_result.detection_fields |
Digabung |
severity_id_label |
security_result.detection_fields |
Digabung |
sourceArn_label |
security_result.detection_fields |
Digabung |
type_name_label |
security_result.detection_fields |
Digabung |
type_uid_label |
security_result.detection_fields |
Digabung |
user_type_label |
security_result.detection_fields |
Digabung |
Severity |
security_result.severity |
Dipetakan: Informational → INFORMATIONAL |
severity |
security_result.severity |
Dipetakan: INFO → INFORMATIONAL |
msg |
security_result.summary |
Dipetakan secara langsung |
Api.Service.Name |
target.application |
Dipetakan secara langsung |
service |
target.application |
Dipetakan secara langsung |
size |
target.file.size |
Dipetakan secara langsung |
filename |
target.process.file.full_path |
Dipetakan secara langsung |
Activity_name |
target.resource.name |
Dipetakan secara langsung |
targetVar |
target.resource.name |
Dipetakan secara langsung |
| T/A | extensions.auth.type |
Konstanta: AUTHTYPE_UNSPECIFIED |
| T/A | metadata.event_type |
Konstanta: USER_UNCATEGORIZED |
| T/A | metadata.product_name |
Konstanta: AWS_Lambda_Function |
| T/A | metadata.vendor_name |
Konstanta: AWS_Lambda_Function |
| T/A | principal.resource.attribute.cloud.environment |
Konstanta: AMAZON_WEB_SERVICES |
| T/A | security_result.severity |
Konstanta: INFORMATIONAL |
Log Perubahan
Melihat Log Perubahan untuk parser ini
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.