Mengumpulkan log AWS IAM
Dokumen ini menjelaskan cara menyerap log AWS IAM ke Google Security Operations. Parser mengubah log berformat JSON mentah menjadi Model Data Terpadu (UDM) terstruktur. Proses ini mengekstrak kolom yang relevan seperti detail pengguna, informasi peran, izin, dan stempel waktu, lalu memetakannya ke kolom UDM yang sesuai untuk analisis keamanan yang konsisten.
Sebelum memulai
- Pastikan Anda memiliki instance Google SecOps.
- Pastikan Anda memiliki akses istimewa ke AWS.
Mengonfigurasi AWS IAM dan S3
- Buat bucket Amazon S3 dengan mengikuti panduan pengguna ini: Membuat bucket.
- Simpan Nama dan Region bucket untuk digunakan nanti.
- 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 CSV file untuk menyimpan Access Key dan Secret Access Key untuk digunakan nanti.
- Klik Selesai.
- Pilih tab Izin.
- Klik Tambahkan izin di bagian Kebijakan izin.
- Pilih Tambahkan izin.
- Pilih Lampirkan kebijakan secara langsung
- Telusuri dan pilih kebijakan AmazonS3FullAccess.
- Klik Berikutnya.
- Klik Add permissions.
Mengonfigurasi CloudTrail untuk merekam log IAM
- Login ke AWS Management Console.
- Di kotak penelusuran, ketik dan pilih CloudTrail dari daftar layanan.
- Klik Buat jalur.
- Berikan Nama jejak; misalnya,
IAMActivityTrail
.- Terapkan jejak ke semua wilayah: pilih Ya untuk merekam aktivitas di semua wilayah.
- Lokasi penyimpanan: pilih bucket S3 yang dibuat sebelumnya atau buat yang baru.
- Bucket S3: masukkan nama untuk bucket S3; misalnya,
iam-logs-bucket
. - Pilih Buat peran IAM baru (jika belum dibuat sebelumnya).
- Peristiwa pengelolaan: pilih Baca dan Tulis untuk merekam peristiwa baca dan tulis pada resource IAM.
- Peristiwa data: aktifkan peristiwa data S3 dan Lambda.
- Klik Create untuk membuat jejak.
Mengonfigurasi CloudTrail untuk Mengekspor Log ke S3
- Buka Services > S3.
- Pilih bucket S3 tempat log CloudTrail disimpan; misalnya,
iam-logs-bucket
. - Pastikan CloudTrail memiliki izin yang tepat untuk menulis log ke bucket.
Tambahkan kebijakan berikut jika belum ada:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "CloudTrailS3Access", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::your-bucket-name/AWSLogs/*" } ] }
Aktifkan Pembuatan Versi di bucket S3 untuk memastikan bahwa log disimpan dengan beberapa versi.
Buka Properties > Bucket Versioning > Enable.
Opsional: Mengonfigurasi Lambda untuk ekspor real-time
- Buka Konsol Lambda AWS.
- Klik Create function.
- Pilih Author from Scratch.
- Tetapkan nama fungsi sebagai
ExportIAMLogsToS3
. - Pilih runtime Python 3.x.
Tetapkan Peran IAM ke fungsi yang memiliki izin untuk:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:GetLogEvents", "logs:FilterLogEvents", "logs:DescribeLogGroups", "logs:DescribeLogStreams" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::your-bucket-name/*" } ] }
Gunakan kode Python berikut untuk mengambil log IAM dan menguploadnya ke S3:
import boto3 import gzip from io import BytesIO s3 = boto3.client('s3') logs = boto3.client('logs') def lambda_handler(event, context): log_group = event['logGroup'] log_stream = event['logStream'] log_events = logs.get_log_events( logGroupName=log_group, logStreamName=log_stream, startFromHead=True ) log_data = "\n".join([event['message'] for event in log_events['events']]) # Compress and upload to S3 compressed_data = gzip.compress(log_data.encode('utf-8')) s3.put_object( Bucket='your-s3-bucket-name', Key='iam-logs/{log_stream}.gz', Body=compressed_data )
- Ganti
your-s3-bucket-name
dengan nama bucket Anda yang sebenarnya.
Mengonfigurasi Pemicu Lambda untuk CloudWatch Logs
- Di Lambda Console, buka Designer.
- Pilih Tambahkan Pemicu > CloudWatch Logs.
- Pilih grup log CloudWatch Logs yang terkait dengan log IAM Anda; misalnya,
/aws/cloudtrail/
. - Klik Tambahkan.
Menyiapkan feed
Ada dua titik entri berbeda untuk menyiapkan feed di platform Google SecOps:
- Setelan SIEM > Feed > Tambahkan Baru
- Hub Konten > Paket Konten > Mulai
Cara menyiapkan feed AWS IAM
- Klik paket Amazon Cloud Platform.
- Temukan jenis log AWS IAM.
Tentukan nilai di kolom berikut.
- Jenis Sumber: API pihak ketiga
- Nama pengguna: Nama pengguna untuk autentikasi
- Secret: Rahasia untuk mengautentikasi
Opsi lanjutan
- Nama Feed: Nilai yang telah diisi otomatis yang mengidentifikasi feed.
- Namespace Aset: Namespace yang terkait dengan feed.
- Label Penyerapan: Label yang diterapkan ke semua peristiwa dari feed ini.
Klik Buat feed.
Untuk mengetahui informasi selengkapnya tentang cara mengonfigurasi beberapa feed untuk berbagai jenis log dalam keluarga produk ini, lihat Mengonfigurasi feed menurut produk.
Tabel Pemetaan UDM
Kolom Log | Pemetaan UDM | Logika |
---|---|---|
Arn | entity.entity.resource.name | Dipetakan langsung dari kolom Arn untuk jenis entity USER dan RESOURCE. Untuk jenis entity GROUP, dipetakan dari Group.Arn . |
AssumeRolePolicyDocument | entity.entity.resource.attribute.permissions.name | Dipetakan langsung dari kolom AssumeRolePolicyDocument , tetapi hanya untuk jenis entity RESOURCE. |
CreateDate | entity.entity.user.attribute.creation_time | Dipetakan langsung dari kolom CreateDate dan dikonversi ke format stempel waktu Chronicle untuk jenis entity USER. |
CreateDate | entity.entity.resource.attribute.creation_time | Dipetakan langsung dari kolom CreateDate dan dikonversi ke format stempel waktu Chronicle untuk jenis entity RESOURCE. |
Group.Arn | entity.entity.resource.name | Dipetakan langsung dari kolom Group.Arn untuk jenis entitas GROUP. |
Group.CreateDate | entity.entity.group.attribute.creation_time | Dipetakan langsung dari kolom Group.CreateDate dan dikonversi ke format stempel waktu Chronicle. |
Group.GroupID | entity.entity.group.product_object_id | Dipetakan langsung dari kolom Group.GroupID . |
Group.GroupName | entity.entity.group.group_display_name | Dipetakan langsung dari kolom Group.GroupName . |
Group.GroupName | entity.entity.group.email_addresses | Dipetakan langsung dari kolom Group.GroupName . |
Group.Path | entity.entity.group.attribute.labels.value | Dipetakan langsung dari kolom Group.Path , kunci di-hardcode ke path |
IsTruncated | entity.entity.group.attribute.labels.value | Dipetakan langsung dari kolom IsTruncated dan dikonversi menjadi string, kunci di-hardcode menjadi is_truncated |
Penanda | entity.entity.group.attribute.labels.value | Dipetakan langsung dari kolom Marker , kunci di-hardcode ke marker |
PasswordLastUsed | entity.entity.user.last_login_time | Dipetakan langsung dari kolom PasswordLastUsed dan dikonversi ke format stempel waktu Chronicle. |
Jalur | entity.entity.user.attribute.labels.value | Dipetakan langsung dari kolom Path untuk jenis entity USER, kunci dikodekan secara permanen ke path . |
Jalur | entity.entity.resource.attribute.labels.value | Dipetakan langsung dari kolom Path untuk jenis entity RESOURCE, kunci dikodekan secara permanen ke path . |
PermissionsBoundary.PermissionsBoundaryArn | entity.entity.resource.attribute.labels.value | Dipetakan langsung dari kolom PermissionsBoundary.PermissionsBoundaryArn , kunci di-hardcode ke permissions_boundary_arn . |
PermissionsBoundary.PermissionsBoundaryType | entity.entity.resource.attribute.labels.value | Dipetakan langsung dari kolom PermissionsBoundary.PermissionsBoundaryType , kunci di-hardcode ke permissions_boundary_type . |
RoleID | entity.entity.resource.product_object_id | Dipetakan langsung dari kolom RoleID . |
RoleLastUsed.LastUsedDate | entity.entity.resource.attribute.labels.value | Dipetakan langsung dari kolom RoleLastUsed.LastUsedDate , kunci di-hardcode ke role_last_used_date . |
RoleLastUsed.Region | entity.entity.location.name | Dipetakan langsung dari kolom RoleLastUsed.Region . |
RoleName | entity.entity.resource.attribute.roles.name | Dipetakan langsung dari kolom RoleName . |
Tags.Key | entity.entity.user.attribute.labels.key | Digunakan sebagai kunci untuk kolom labels dalam atribut pengguna. |
Tags.Value | entity.entity.user.attribute.labels.value | Digunakan sebagai nilai untuk kolom labels dalam atribut pengguna. |
UserID | entity.entity.user.product_object_id | Dipetakan langsung dari kolom UserID . |
NamaPengguna | entity.entity.user.userid | Dipetakan langsung dari kolom UserName . |
Users.Arn | relations.entity.resource.name | Dipetakan langsung dari kolom Users.Arn dalam hubungan pengguna. |
Users.CreateDate | relations.entity.user.attribute.creation_time | Dipetakan langsung dari kolom Users.CreateDate dalam hubungan pengguna dan dikonversi ke format stempel waktu Chronicle. |
Users.PasswordLastUsed | relations.entity.user.last_login_time | Dipetakan langsung dari kolom Users.PasswordLastUsed dalam hubungan pengguna dan dikonversi ke format stempel waktu Chronicle. |
Users.Path | relations.entity.user.attribute.labels.value | Dipetakan langsung dari kolom Users.Path dalam relasi pengguna, kunci dikodekan secara permanen ke path . |
Users.PermissionsBoundary.PermissionsBoundaryArn | relations.entity.resource.attribute.labels.value | Dipetakan langsung dari kolom Users.PermissionsBoundary.PermissionsBoundaryArn dalam relasi pengguna, kunci dikodekan secara permanen ke permissions_boundary_arn . |
Users.PermissionsBoundary.PermissionsBoundaryType | relations.entity.resource.attribute.labels.value | Dipetakan langsung dari kolom Users.PermissionsBoundary.PermissionsBoundaryType dalam relasi pengguna, kunci dikodekan secara permanen ke permissions_boundary_type . |
Users.UserID | relations.entity.user.product_object_id | Dipetakan langsung dari kolom Users.UserID dalam hubungan pengguna. |
Users.UserName | relations.entity.user.userid | Dipetakan langsung dari kolom Users.UserName dalam hubungan pengguna. |
T/A | entity.metadata.collected_timestamp | Diisi dengan stempel waktu peristiwa dari log mentah. |
T/A | entity.metadata.vendor_name | Hardcode ke AWS . |
T/A | entity.metadata.product_name | Hardcode ke AWS IAM . |
T/A | entity.metadata.entity_type | Ditentukan berdasarkan keberadaan kolom tertentu: USER jika UserID ada, RESOURCE jika RoleName ada, dan GROUP jika Group.GroupName ada. |
T/A | entity.entity.resource.resource_subtype | Setel ke User untuk jenis entity PENGGUNA dan GRUP. |
T/A | entity.entity.resource.resource_type | Ditetapkan ke ACCESS_POLICY untuk jenis entity RESOURCE. |
T/A | entity.entity.resource.attribute.cloud.environment | Hardcode ke AMAZON_WEB_SERVICES . |
T/A | relations.entity_type | Dikodekan secara permanen ke USER untuk hubungan pengguna dalam grup. |
T/A | relations.relationship | Dikodekan secara permanen ke MEMBER untuk hubungan pengguna dalam grup. |
T/A | relations.direction | Dikodekan secara permanen ke UNIDIRECTIONAL untuk hubungan pengguna dalam grup. |
T/A | relations.entity.resource.resource_subtype | Dikodekan secara permanen ke User untuk hubungan pengguna dalam grup. |
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.