Mengumpulkan log Fungsi AWS Lambda

Didukung di:

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:

  1. Di Konsol AWS, buka CloudWatch > Logs > Log groups.
  2. Telusuri /aws/lambda/.
  3. Pastikan grup log ada untuk setiap fungsi Lambda yang log-nya ingin Anda masukkan.

Mengonfigurasi bucket AWS S3

  1. Buat bucket Amazon S3 dengan mengikuti panduan pengguna ini: Membuat bucket.
  2. 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

  1. Di AWS Console, buka IAM > Policies > Create policy.
  2. Pilih tab JSON.
  3. Tempel kebijakan berikut (ganti lambda-logs-to-secops dengan 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:*"
            }
        ]
    }
    
  4. Klik Berikutnya.

  5. Di kolom Nama kebijakan, masukkan LambdaLogsFirehoseS3Policy.

  6. Klik Create policy.

Buat peran IAM

  1. Buka IAM > Roles > Create role.
  2. Pilih Kebijakan kepercayaan kustom.
  3. Tempel kebijakan kepercayaan berikut:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": "firehose.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    
  4. Klik Berikutnya.

  5. Telusuri dan pilih LambdaLogsFirehoseS3Policy.

  6. Klik Berikutnya.

  7. Di kolom Nama peran, masukkan LambdaLogsFirehoseToS3Role.

  8. Klik Buat peran.

Buat aliran Amazon Data Firehose

  1. Buka konsol Kinesis di https://console.aws.amazon.com/kinesis.
  2. Di panel navigasi, pilih Amazon Data Firehose.
  3. Klik Create Firehose stream.
  4. Di bagian Pilih sumber dan tujuan, berikan konfigurasi berikut:
    • Sumber: Pilih PUT Langsung.
    • Tujuan: Pilih Amazon S3.
  5. Di kolom Firehose stream name, masukkan lambda-logs-to-secops.
  6. Di bagian Transform records, di bagian Decompress source records from Amazon CloudWatch Logs:

    1. Pilih Aktifkan dekompresi.
    2. Jangan pilih Aktifkan ekstraksi pesan.
  7. 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/.
  8. Di bagian Buffer hints:

    • Ukuran buffer: 5 MiB (default).
    • Interval buffer: 300 detik (default).
  9. 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.
  10. Klik Create Firehose stream.

  11. 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

  1. Buka IAM > Policies > Create policy.
  2. Pilih tab JSON.
  3. 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"
            }
        ]
    }
    
  4. Klik Berikutnya.

  5. Di kolom Nama kebijakan, masukkan LambdaLogsCWLtoFirehosePolicy.

  6. Klik Create policy.

Buat peran IAM

  1. Buka IAM > Roles > Create role.
  2. Pilih Kebijakan kepercayaan kustom.
  3. 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"
            }
        ]
    }
    
  4. Klik Berikutnya.

  5. Telusuri dan pilih LambdaLogsCWLtoFirehosePolicy.

  6. Klik Berikutnya.

  7. Di kolom Nama peran, masukkan LambdaLogsCWLtoFirehoseRole.

  8. Klik Buat peran.

Membuat filter langganan CloudWatch Logs

  1. Di Konsol AWS, buka CloudWatch > Logs > Log groups.
  2. Pilih grup log /aws/lambda/<function-name>.
  3. Pilih tab Filter langganan.
  4. Klik Buat > Buat filter langganan Amazon Data Firehose.
  5. 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.
  6. Klik Mulai streaming.

Mengonfigurasi pengguna IAM untuk Google SecOps

Google SecOps memerlukan pengguna IAM dengan akses ke bucket S3 untuk menyerap log yang dikirim.

  1. Buat Pengguna dengan mengikuti panduan pengguna ini: Membuat pengguna IAM.
  2. Pilih Pengguna yang dibuat.
  3. Pilih tab Kredensial keamanan.
  4. Klik Create Access Key di bagian Access Keys.
  5. Pilih Layanan pihak ketiga sebagai Kasus penggunaan.
  6. Klik Berikutnya.
    • Opsional: Tambahkan tag deskripsi.
  7. Klik Create access key.
  8. Klik Download file .csv untuk menyimpan Kunci Akses dan Kunci Akses Rahasia untuk referensi di masa mendatang.
  9. Klik Done.
  10. Pilih tab Permissions.
  11. Klik Tambahkan izin di bagian Kebijakan izin.
  12. Pilih Tambahkan izin.
  13. Pilih Lampirkan kebijakan secara langsung.
  14. Cari kebijakan AmazonS3FullAccess.
  15. Pilih kebijakan.
  16. Klik Berikutnya.
  17. Klik Add permissions.

Mengonfigurasi feed di Google SecOps untuk menyerap log Fungsi AWS Lambda

  1. Buka Setelan SIEM > Feed.
  2. Klik Tambahkan Feed Baru.
  3. Di halaman berikutnya, klik Konfigurasi satu feed.
  4. Masukkan nama unik untuk Nama feed.
  5. Pilih Amazon S3 V2 sebagai Jenis sumber.
  6. Pilih AWS Lambda Function sebagai Jenis log.
  7. Klik Berikutnya, lalu klik Kirim.
  8. 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
  9. 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: trueAUTHTYPE_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: trueUSER_LOGIN, trueNETWORK_HTTP, trueNETWORK_CONNECTION, `true...
has_principal_user metadata.event_type Dipetakan: trueUSER_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: InformationalINFORMATIONAL
severity security_result.severity Dipetakan: INFOINFORMATIONAL
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.