AWS IAM-Logs erfassen

Unterstützt in:

In diesem Dokument wird beschrieben, wie Sie AWS IAM-Logs in Google Security Operations aufnehmen. Der Parser wandelt Rohprotokolle im JSON-Format in ein strukturiertes einheitliches Datenmodell (Unified Data Model, UDM) um. Es werden relevante Felder wie Nutzerdetails, Rolleninformationen, Berechtigungen und Zeitstempel extrahiert und entsprechenden UDM-Feldern für eine einheitliche Sicherheitsanalyse zugeordnet.

Hinweise

  • Sie benötigen eine Google SecOps-Instanz.
  • Sie benötigen erhöhte Zugriffsrechte für AWS.

AWS IAM und S3 konfigurieren

  1. Erstellen Sie einen Amazon S3-Bucket. Folgen Sie dazu der Anleitung unter Bucket erstellen.
  2. Speichern Sie den Namen und die Region des Buckets für später.
  3. Erstellen Sie einen Nutzer gemäß der Anleitung IAM-Nutzer erstellen.
  4. Wählen Sie den erstellten Nutzer aus.
  5. Wählen Sie den Tab Sicherheitsanmeldedaten aus.
  6. Klicken Sie im Bereich Zugriffsschlüssel auf Zugriffsschlüssel erstellen.
  7. Wählen Sie als Anwendungsfall Drittanbieterdienst aus.
  8. Klicken Sie auf Weiter.
  9. Optional: Fügen Sie ein Beschreibungs-Tag hinzu.
  10. Klicken Sie auf Zugriffsschlüssel erstellen.
  11. Klicken Sie auf CSV-Datei herunterladen, um den Zugriffsschlüssel und den Secret Access Key zur späteren Verwendung zu speichern.
  12. Klicken Sie auf Fertig.
  13. Wählen Sie den Tab Berechtigungen aus.
  14. Klicken Sie im Bereich Berechtigungsrichtlinien auf Berechtigungen hinzufügen.
  15. Wählen Sie Berechtigungen hinzufügen aus.
  16. Wählen Sie Richtlinien direkt anhängen aus.
  17. Suchen Sie nach der Richtlinie AmazonS3FullAccess und wählen Sie sie aus.
  18. Klicken Sie auf Weiter.
  19. Klicken Sie auf Berechtigungen hinzufügen.

CloudTrail für die Erfassung von IAM-Logs konfigurieren

  1. Melden Sie sich bei der AWS Management Console an.
  2. Geben Sie in die Suchleiste CloudTrail ein und wählen Sie den Dienst aus der Liste aus.
  3. Klicken Sie auf Weg erstellen.
  4. Geben Sie einen Trail-Namen an, z. B. IAMActivityTrail.
    • Trail auf alle Regionen anwenden: Wählen Sie Ja aus, um Aktivitäten in allen Regionen zu erfassen.
    • Speicherort: Wählen Sie den zuvor erstellten S3-Bucket aus oder erstellen Sie einen neuen.
    • S3-Bucket: Geben Sie einen Namen für den S3-Bucket ein, z. B. iam-logs-bucket.
    • Wählen Sie Neue IAM-Rolle erstellen aus, falls noch nicht geschehen.
    • Verwaltungsereignisse: Wählen Sie Lesen und Schreiben aus, um sowohl Lese- als auch Schreibereignisse für IAM-Ressourcen zu erfassen.
    • Datenereignisse: Aktivieren Sie S3- und Lambda-Datenereignisse.
  5. Klicken Sie auf Erstellen, um den Trail zu erstellen.

CloudTrail so konfigurieren, dass Protokolle nach S3 exportiert werden

  1. Gehen Sie zu Dienste > S3.
  2. Wählen Sie den S3-Bucket aus, in dem CloudTrail-Logs gespeichert werden, z. B. iam-logs-bucket.
  3. Prüfen Sie, ob CloudTrail die erforderlichen Berechtigungen zum Schreiben von Protokollen in den Bucket hat.
  4. Fügen Sie die folgende Richtlinie hinzu, falls sie noch nicht vorhanden ist:

    {
      "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. Aktivieren Sie die Versionsverwaltung für den S3-Bucket, damit Protokolle mit mehreren Versionen gespeichert werden.

  6. Gehen Sie zu Properties > Bucket-Versionierung > Aktivieren.

Optional: Lambda für Echtzeitexport konfigurieren

  1. Rufen Sie die AWS Lambda Console auf.
  2. Klicken Sie auf Funktion erstellen.
  3. Wählen Sie Autor von Grund auf neu erstellen aus.
  4. Legen Sie als Funktionsnamen ExportIAMLogsToS3 fest.
  5. Wählen Sie eine Python 3.x-Laufzeit aus.
  6. Weisen Sie der Funktion eine IAM-Rolle mit den folgenden Berechtigungen zu:

    {
      "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. Verwenden Sie den folgenden Python-Code, um IAM-Protokolle abzurufen und in S3 hochzuladen:

    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
        )
    
  • Ersetzen Sie your-s3-bucket-name durch den tatsächlichen Bucket-Namen.

Lambda-Trigger für CloudWatch-Protokolle konfigurieren

  1. Klicken Sie in der Lambda Console auf Designer.
  2. Wählen Sie Trigger hinzufügen > CloudWatch-Protokolle aus.
  3. Wählen Sie die Protokollgruppe CloudWatch-Protokolle aus, die mit Ihren IAM-Protokollen verknüpft ist, z. B. /aws/cloudtrail/.
  4. Klicken Sie auf Hinzufügen.

Feed in Google SecOps für die Aufnahme von AWS IAM-Logs konfigurieren

  1. Gehen Sie zu SIEM-Einstellungen > Feeds.
  2. Klicken Sie auf Neu hinzufügen.
  3. Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B. AWS IAM-Logs.
  4. Wählen Sie als Quelltyp Amazon S3 aus.
  5. Wählen Sie AWS IAM als Logtyp aus.
  6. Klicken Sie auf Weiter.
  7. Geben Sie Werte für die folgenden Eingabeparameter an:

    • Region: die Region, in der sich der Amazon S3-Bucket befindet.
    • S3-URI: der Bucket-URI.
      • s3://your-log-bucket-name/
        • Ersetzen Sie your-log-bucket-name durch den tatsächlichen Namen des Buckets.
    • URI ist ein: Wählen Sie Verzeichnis oder Verzeichnis mit Unterverzeichnissen aus.
    • Optionen zum Löschen der Quelle: Wählen Sie die gewünschte Löschoption aus.

    • Access Key ID: Der Nutzerzugriffsschlüssel mit Zugriff auf den S3-Bucket.

    • Secret Access Key: Der geheime Schlüssel des Nutzers mit Zugriff auf den S3-Bucket.

    • Asset-Namespace: der Asset-Namespace.

    • Aufnahmelabels: Das Label, das auf die Ereignisse aus diesem Feed angewendet werden soll.

  8. Klicken Sie auf Weiter.

  9. Prüfen Sie die neue Feedkonfiguration auf dem Bildschirm Abschließen und klicken Sie dann auf Senden.

UDM-Zuordnungstabelle

Logfeld UDM-Zuordnung Logik
Arn entity.entity.resource.name Wird direkt aus dem Feld Arn für die Entitätstypen „USER“ und „RESOURCE“ zugeordnet. Für den Entitätstyp „GRUPPE“ wird er von Group.Arn zugeordnet.
AssumeRolePolicyDocument entity.entity.resource.attribute.permissions.name Wird direkt aus dem Feld AssumeRolePolicyDocument zugeordnet, aber nur für den Entitätstyp RESOURCE.
CreateDate entity.entity.user.attribute.creation_time Wird direkt aus dem Feld CreateDate zugeordnet und in das Zeitstempelformat von Chronicle für den Nutzerentitätstyp konvertiert.
CreateDate entity.entity.resource.attribute.creation_time Wird direkt aus dem Feld CreateDate zugeordnet und in das Zeitstempelformat von Chronicle für den RESOURCE-Entitätstyp konvertiert.
Group.Arn entity.entity.resource.name Wird direkt aus dem Feld Group.Arn für den Entitätstyp „GRUPPE“ zugeordnet.
Group.CreateDate entity.entity.group.attribute.creation_time Wird direkt aus dem Feld Group.CreateDate zugeordnet und in das Zeitstempelformat von Chronicle konvertiert.
Group.GroupID entity.entity.group.product_object_id Direkt aus dem Feld Group.GroupID zugeordnet.
Group.GroupName entity.entity.group.group_display_name Direkt aus dem Feld Group.GroupName zugeordnet.
Group.GroupName entity.entity.group.email_addresses Direkt aus dem Feld Group.GroupName zugeordnet.
Group.Path entity.entity.group.attribute.labels.value Der Schlüssel wird direkt aus dem Feld Group.Path zugeordnet und hartcodiert auf path.
IsTruncated entity.entity.group.attribute.labels.value Der Schlüssel wird direkt aus dem Feld IsTruncated zugeordnet und in einen String umgewandelt. Er ist auf is_truncated hartcodiert.
Markierung entity.entity.group.attribute.labels.value Der Schlüssel wird direkt aus dem Feld Marker zugeordnet und hartcodiert auf marker.
PasswordLastUsed entity.entity.user.last_login_time Wird direkt aus dem Feld PasswordLastUsed zugeordnet und in das Zeitstempelformat von Chronicle konvertiert.
Pfad entity.entity.user.attribute.labels.value Der Schlüssel wird direkt aus dem Feld Path für den Entitätstyp „USER“ abgeleitet und auf path hartcodiert.
Pfad entity.entity.resource.attribute.labels.value Der Schlüssel wird direkt aus dem Feld Path für den Entitätstyp RESOURCE zugeordnet und ist auf path hartcodiert.
PermissionsBoundary.PermissionsBoundaryArn entity.entity.resource.attribute.labels.value Der Schlüssel wird direkt aus dem Feld PermissionsBoundary.PermissionsBoundaryArn abgeleitet und auf permissions_boundary_arn hartcodiert.
PermissionsBoundary.PermissionsBoundaryType entity.entity.resource.attribute.labels.value Der Schlüssel wird direkt aus dem Feld PermissionsBoundary.PermissionsBoundaryType abgeleitet und auf permissions_boundary_type hartcodiert.
RoleID entity.entity.resource.product_object_id Direkt aus dem Feld RoleID zugeordnet.
RoleLastUsed.LastUsedDate entity.entity.resource.attribute.labels.value Der Schlüssel wird direkt aus dem Feld RoleLastUsed.LastUsedDate abgeleitet und auf role_last_used_date hartcodiert.
RoleLastUsed.Region entity.entity.location.name Direkt aus dem Feld RoleLastUsed.Region zugeordnet.
RoleName entity.entity.resource.attribute.roles.name Direkt aus dem Feld RoleName zugeordnet.
Tags.Key entity.entity.user.attribute.labels.key Wird als Schlüssel für das Feld labels im Nutzerattribut verwendet.
Tags.Value entity.entity.user.attribute.labels.value Wird als Wert für das Feld labels im Nutzerattribut verwendet.
UserID entity.entity.user.product_object_id Direkt aus dem Feld UserID zugeordnet.
Nutzername entity.entity.user.userid Direkt aus dem Feld UserName zugeordnet.
Users.Arn relations.entity.resource.name Wird direkt aus dem Feld Users.Arn in der Nutzerbeziehung zugeordnet.
Users.CreateDate relations.entity.user.attribute.creation_time Wird direkt aus dem Feld Users.CreateDate in der Nutzerbeziehung abgeleitet und in das Zeitstempelformat von Chronicle konvertiert.
Users.PasswordLastUsed relations.entity.user.last_login_time Wird direkt aus dem Feld Users.PasswordLastUsed in der Nutzerbeziehung zugeordnet und in das Zeitstempelformat von Chronicle konvertiert.
Users.Path relations.entity.user.attribute.labels.value Der Schlüssel wird direkt aus dem Feld „Users.Path“ in der Nutzerbeziehung abgeleitet und auf „path“ hartcodiert.
Users.PermissionsBoundary.PermissionsBoundaryArn relations.entity.resource.attribute.labels.value Der Schlüssel wird direkt aus dem Feld „Users.PermissionsBoundary.PermissionsBoundaryArn“ in der Nutzerbeziehung abgeleitet und auf „permissions_boundary_arn“ hartcodiert.
Users.PermissionsBoundary.PermissionsBoundaryType relations.entity.resource.attribute.labels.value Der Schlüssel wird direkt aus dem Feld „Users.PermissionsBoundary.PermissionsBoundaryType“ in der Nutzerbeziehung abgeleitet und auf „permissions_boundary_type“ hartcodiert.
Users.UserID relations.entity.user.product_object_id Wird direkt aus dem Feld Users.UserID in der Nutzerbeziehung zugeordnet.
Users.UserName relations.entity.user.userid Wird direkt aus dem Feld Users.UserName in der Nutzerbeziehung zugeordnet.
entity.metadata.collected_timestamp Wird mit dem Ereigniszeitstempel aus dem Rohprotokoll ausgefüllt.
entity.metadata.vendor_name Hartcodiert auf AWS.
entity.metadata.product_name Hartcodiert auf AWS IAM.
entity.metadata.entity_type Wird anhand der Anwesenheit bestimmter Felder bestimmt: „USER“, wenn UserID vorhanden ist, „RESOURCE“, wenn RoleName vorhanden ist, und „GROUP“, wenn Group.GroupName vorhanden ist.
entity.entity.resource.resource_subtype Für die Entitätstypen „USER“ und „GROUP“ auf User festlegen.
entity.entity.resource.resource_type Für den Entitätstyp „RESOURCE“ auf ACCESS_POLICY festlegen.
entity.entity.resource.attribute.cloud.environment Hartcodiert auf AMAZON_WEB_SERVICES.
relations.entity_type Für Nutzerbeziehungen innerhalb einer Gruppe hartcodiert auf USER.
relations.relationship Für Nutzerbeziehungen innerhalb einer Gruppe hartcodiert auf MEMBER.
relations.direction Für Nutzerbeziehungen innerhalb einer Gruppe hartcodiert auf UNIDIRECTIONAL.
relations.entity.resource.resource_subtype Für Nutzerbeziehungen innerhalb einer Gruppe hartcodiert auf User.

Änderungen

2023-12-14

  • Neu erstellter Parser.

Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten