Mengumpulkan log AWS IAM

Didukung di:

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

  1. Buat bucket Amazon S3 dengan mengikuti panduan pengguna ini: Membuat bucket.
  2. Simpan Nama dan Region bucket untuk digunakan nanti.
  3. Buat pengguna dengan mengikuti panduan pengguna ini: Membuat pengguna IAM.
  4. Pilih Pengguna yang dibuat.
  5. Pilih tab Kredensial keamanan.
  6. Klik Create Access Key di bagian Access Keys.
  7. Pilih Layanan pihak ketiga sebagai Kasus penggunaan.
  8. Klik Berikutnya.
  9. Opsional: tambahkan tag deskripsi.
  10. Klik Create access key.
  11. Klik Download CSV file untuk menyimpan Access Key dan Secret Access Key untuk digunakan nanti.
  12. Klik Selesai.
  13. Pilih tab Izin.
  14. Klik Tambahkan izin di bagian Kebijakan izin.
  15. Pilih Tambahkan izin.
  16. Pilih Lampirkan kebijakan secara langsung
  17. Telusuri dan pilih kebijakan AmazonS3FullAccess.
  18. Klik Berikutnya.
  19. Klik Tambahkan izin.

Mengonfigurasi CloudTrail untuk merekam log IAM

  1. Login ke AWS Management Console.
  2. Di kotak penelusuran, ketik dan pilih CloudTrail dari daftar layanan.
  3. Klik Buat jalur.
  4. 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.
  5. Klik Create untuk membuat jejak.

Mengonfigurasi CloudTrail untuk Mengekspor Log ke S3

  1. Buka Services > S3.
  2. Pilih bucket S3 tempat log CloudTrail disimpan; misalnya, iam-logs-bucket.
  3. Pastikan CloudTrail memiliki izin yang tepat untuk menulis log ke bucket.
  4. 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/*"
        }
      ]
    }
    
  5. Aktifkan Pembuatan Versi di bucket S3 untuk memastikan bahwa log disimpan dengan beberapa versi.

  6. Buka Properties > Bucket Versioning > Enable.

Opsional: Mengonfigurasi Lambda untuk ekspor real-time

  1. Buka Konsol Lambda AWS.
  2. Klik Create function.
  3. Pilih Author from Scratch.
  4. Tetapkan nama fungsi sebagai ExportIAMLogsToS3.
  5. Pilih runtime Python 3.x.
  6. 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/*"
        }
      ]
    }
    
  7. 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

  1. Di Lambda Console, buka Designer.
  2. Pilih Tambahkan Pemicu > CloudWatch Logs.
  3. Pilih grup log CloudWatch Logs yang terkait dengan log IAM Anda; misalnya, /aws/cloudtrail/.
  4. Klik Tambahkan.

Mengonfigurasi feed di Google SecOps untuk memproses log IAM AWS

  1. Buka Setelan SIEM > Feed.
  2. Klik Tambahkan baru.
  3. Di kolom Feed name, masukkan nama untuk feed; misalnya, AWS IAM Logs.
  4. Pilih Amazon S3 sebagai Jenis sumber.
  5. Pilih AWS IAM sebagai Jenis log.
  6. Klik Berikutnya.
  7. 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.
    • 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.

  8. Klik Berikutnya.

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