Mengumpulkan log Fungsi AWS Lambda
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 mengelola resource komputasi yang mendasarinya secara otomatis. 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 secara 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 Konsol AWS, buka CloudWatch > Logs > Log groups.
- Telusuri
/aws/lambda/. Pastikan grup log ada untuk setiap fungsi Lambda yang log-nya 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 Nama kebijakan, masukkan
LambdaLogsFirehoseS3Policy.Klik Create policy.
Buat 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 Nama peran, 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 Pilih sumber dan tujuan, 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 Setelan tujuan:
- Bucket S3: Pilih bucket S3
lambda-logs-to-secops. - Awalan bucket S3 (opsional): Masukkan
lambda-logs/. - Awalan output error bucket S3 (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 Aktif.
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 Nama kebijakan, masukkan
LambdaLogsCWLtoFirehosePolicy.Klik Create policy.
Buat 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 Konsol AWS, 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:
- Tujuan: 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.
- Tujuan: 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 dikirim.
- 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 Kunci Akses dan Kunci Akses Rahasia untuk referensi di masa mendatang.
- Klik Done.
- Pilih tab Permissions.
- Klik Tambahkan izin di bagian Kebijakan izin.
- Pilih Tambahkan izin.
- Pilih Lampirkan kebijakan secara langsung.
- 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 (defaultnya adalah 180 hari)
- ID Kunci Akses: Kunci akses pengguna dengan akses ke bucket S3
- Kunci Akses Rahasia: 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 |
Diurai 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 |
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.