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 Tambahkan izin.
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.
Mengonfigurasi feed di Google SecOps untuk memproses log IAM AWS
- Buka Setelan SIEM > Feed.
- Klik Tambahkan baru.
- Di kolom Feed name, masukkan nama untuk feed; misalnya, AWS IAM Logs.
- Pilih Amazon S3 sebagai Jenis sumber.
- Pilih AWS IAM sebagai Jenis log.
- Klik Berikutnya.
Tentukan nilai untuk parameter input berikut:
- Region: region tempat bucket Amazon S3 berada.
- URI S3: URI bucket.
s3://your-log-bucket-name/
- Ganti
your-log-bucket-name
dengan nama bucket yang sebenarnya.
- Ganti
- URI adalah: pilih Direktori atau Direktori yang menyertakan subdirektori.
Opsi penghapusan sumber: pilih opsi penghapusan sesuai preferensi Anda.
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.
Klik Berikutnya.
Tinjau konfigurasi feed baru Anda di layar Selesaikan, lalu klik Kirim.
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.