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 Unified Data Model (UDM) terstruktur. Alat ini mengekstrak kolom yang relevan seperti detail pengguna, informasi peran, izin, dan stempel waktu, serta memetakan kolom tersebut ke kolom UDM yang sesuai untuk analisis keamanan yang konsisten.

Sebelum memulai

  • Pastikan Anda memiliki instance Google Chronicle.
  • Pastikan Anda memiliki akses dengan hak 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 Next.
  9. Opsional: tambahkan tag deskripsi.
  10. Klik Create access key.
  11. Klik Download file CSV untuk menyimpan Kunci Akses dan Kunci Akses Rahasia untuk digunakan nanti.
  12. Klik Done.
  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 Next.
  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 Trail name; misalnya, IAMActivityTrail.
    • Terapkan uji coba ke semua wilayah: pilih Ya untuk merekam aktivitas di semua wilayah.
    • Lokasi penyimpanan: pilih bucket S3 yang dibuat sebelumnya atau buat bucket 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 rekaman aktivitas.

Mengonfigurasi CloudTrail untuk Mengekspor Log ke S3

  1. Buka Layanan > 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 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 menyerap log AWS IAM

  1. Buka Setelan SIEM > Feed.
  2. Klik Tambahkan baru.
  3. Di kolom Nama feed, masukkan nama untuk feed; misalnya, AWS IAM Logs.
  4. Pilih Amazon S3 sebagai Source type.
  5. Pilih AWS IAM sebagai Jenis log.
  6. Klik Next.
  7. Tentukan nilai untuk parameter input berikut:

    • Region: region tempat bucket Amazon S3 berada.
    • S3 URI: 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.

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

  8. Klik Next.

  9. Tinjau konfigurasi feed baru Anda di layar Finalize, lalu klik Submit.

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, jenis ini 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 entitas PENGGUNA.
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 menjadi 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 menjadi 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 di-hardcode ke path.
Jalur entity.entity.resource.attribute.labels.value Dipetakan langsung dari kolom Path untuk jenis entity RESOURCE, kunci di-hardcode ke path.
PermissionsBoundary.PermissionsBoundaryArn entity.entity.resource.attribute.labels.value Dipetakan langsung dari kolom PermissionsBoundary.PermissionsBoundaryArn, kunci di-hardcode menjadi permissions_boundary_arn.
PermissionsBoundary.PermissionsBoundaryType entity.entity.resource.attribute.labels.value Dipetakan langsung dari kolom PermissionsBoundary.PermissionsBoundaryType, kunci di-hardcode menjadi 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 menjadi 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 hubungan pengguna, kunci di-hardcode ke path.
Users.PermissionsBoundary.PermissionsBoundaryArn relations.entity.resource.attribute.labels.value Dipetakan langsung dari kolom Users.PermissionsBoundary.PermissionsBoundaryArn dalam hubungan pengguna, kunci di-hardcode ke permissions_boundary_arn.
Users.PermissionsBoundary.PermissionsBoundaryType relations.entity.resource.attribute.labels.value Dipetakan langsung dari kolom Users.PermissionsBoundary.PermissionsBoundaryType dalam hubungan pengguna, kunci di-hardcode 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 Di-hardcode ke AWS.
T/A entity.metadata.product_name Di-hardcode ke AWS IAM.
T/A entity.metadata.entity_type Ditentukan berdasarkan keberadaan kolom tertentu: PENGGUNA jika UserID ada, RESOURCE jika RoleName ada, dan GRUP jika Group.GroupName ada.
T/A entity.entity.resource.resource_subtype Tetapkan ke User untuk jenis entity USER dan GROUP.
T/A entity.entity.resource.resource_type Tetapkan ke ACCESS_POLICY untuk jenis entity RESOURCE.
T/A entity.entity.resource.attribute.cloud.environment Di-hardcode ke AMAZON_WEB_SERVICES.
T/A relations.entity_type Di-hardcode ke USER untuk hubungan pengguna dalam grup.
T/A relations.relationship Di-hardcode ke MEMBER untuk hubungan pengguna dalam grup.
T/A relations.direction Di-hardcode ke UNIDIRECTIONAL untuk hubungan pengguna dalam grup.
T/A relations.entity.resource.resource_subtype Di-hardcode ke User untuk hubungan pengguna dalam grup.

Perubahan

2023-12-14

  • Parser yang baru dibuat.

Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.