Integrare AWS S3 con Google SecOps

Questo documento descrive come integrare AWS S3 con Google Security Operations.

Casi d'uso

  1. Gestire i bucket
  2. Scaricare file dai bucket
  3. Carica file nei bucket

Prima di iniziare

Prima di configurare l'integrazione di AWS S3 in Google SecOps, verifica che l'ambiente di rete e le credenziali AWS soddisfino tutti i prerequisiti operativi.

Per preparare l'ambiente all'integrazione, assicurati di completare le seguenti operazioni:

  1. Verifica la visibilità diretta della rete tra Google SecOps e gli endpoint di servizio regionali di AWS S3.

  2. Ottieni le credenziali API programmatiche AWS (un ID chiave di accesso e una chiave di accesso segreta) con le autorizzazioni IAM appropriate.

  3. Configura e testa l'istanza di integrazione in Google SecOps.

Requisiti di rete

Google SecOps comunica direttamente con il servizio AWS S3 utilizzando API REST HTTPS e l'SDK Python di AWS (boto3).

Assicurati che il tuo ambiente di rete soddisfi le seguenti regole di connettività:

  • Accesso HTTPS in uscita: attiva la comunicazione HTTPS in uscita dalla tua istanza Google SecOps o dall'agente remoto all'endpoint regionale AWS S3 (s3.<region>.amazonaws.com o s3.amazonaws.com) sulla porta 443/TCP.

    Per saperne di più, consulta la sezione Endpoint di servizio AWS nella documentazione di AWS.

  • Configurazione del proxy: se la tua organizzazione instrada il traffico in uscita tramite un proxy HTTP/HTTPS, configura le variabili proxy dell'ambiente standard (HTTP_PROXY, HTTPS_PROXY, NO_PROXY) sul server Google SecOps o sull'host dell'agente remoto.

Autenticazione e credenziali

L'integrazione di AWS S3 richiede credenziali API programmatiche per autenticare le richieste utilizzando la versione 4 della firma di AWS.

Assicurati che il tuo ambiente AWS soddisfi i seguenti requisiti di autenticazione:

  • Credenziali programmatiche: ottieni un ID chiave di accesso AWS e una chiave segreta AWS validi associati a un utente o un ruolo AWS IAM.

    Per informazioni sulla creazione di identità IAM e sulla generazione di credenziali, consulta Gestione delle chiavi di accesso per gli utenti IAM e Identità IAM nella documentazione AWS.

  • Privilegio minimo: limita le autorizzazioni solo alle azioni e alle risorse bucket necessarie per i workflow automatizzati e ruota periodicamente le credenziali.

    Per informazioni dettagliate sui consigli per la sicurezza, consulta Best practice per la sicurezza in IAM nella documentazione di AWS.

Configurare le autorizzazioni di azione

Concedi all'identità AWS IAM di autenticazione le autorizzazioni specifiche richieste per le azioni eseguite dai playbook Google SecOps.

Consulta le autorizzazioni minime per le azioni AWS S3 nella tabella seguente:

Nome azione Autorizzazione AWS IAM richiesta (ActionName:Permission) Autorizzazione prerequisito Descrizione / ambito risorsa
Download File From Bucket s3:GetObject s3:ListAllMyBuckets Scarica un oggetto da un bucket S3. Risorsa: arn:aws:s3:::<bucket-name>/*.
Get Bucket Policy s3:GetBucketPolicy s3:ListAllMyBuckets Recupera la policy di accesso al bucket. Risorsa: arn:aws:s3:::<bucket-name>.
Elenca oggetti bucket s3:ListBucket s3:ListAllMyBuckets Elenca gli oggetti all'interno di un bucket S3. Risorsa: arn:aws:s3:::<bucket-name>.
List Buckets s3:ListAllMyBuckets — Elenca tutti i bucket S3 di proprietà dell'account. Risorsa: *.
Ping s3:ListAllMyBuckets — Convalida la connettività dell'integrazione. Risorsa: *.
Imposta criteri del bucket s3:PutBucketPolicy s3:ListAllMyBuckets Imposta o modifica una policy del bucket S3. Risorsa: arn:aws:s3:::<bucket-name>.
Carica file nel bucket s3:PutObject s3:ListAllMyBuckets Carica un oggetto in un bucket S3. Risorsa: arn:aws:s3:::<bucket-name>/*.

Riferimento rapido (ActionName:Permission)

Utilizza il seguente riferimento rapido per esaminare le autorizzazioni richieste per ogni azione:

Ping: s3:ListAllMyBuckets
Download File From Bucket: s3:GetObject, s3:ListAllMyBuckets
Get Bucket Policy: s3:GetBucketPolicy, s3:ListAllMyBuckets
List Bucket Objects: s3:ListBucket, s3:ListAllMyBuckets
List Buckets: s3:ListAllMyBuckets
Set Bucket Policy: s3:PutBucketPolicy, s3:ListAllMyBuckets
Upload File To Bucket: s3:PutObject, s3:ListAllMyBuckets

Criterio IAM di esempio (privilegio minimo)

La seguente policy di esempio mostra le autorizzazioni necessarie per eseguire tutte le azioni AWS S3 in Google SecOps.

Per istruzioni sulla creazione e l'allegato di policy IAM, consulta Creazione di policy IAM nella documentazione di AWS.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "SecOpsS3Discovery",
      "Effect": "Allow",
      "Action": [
        "s3:ListAllMyBuckets"
      ],
      "Resource": "*"
    },
    {
      "Sid": "SecOpsS3BucketOperations",
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketPolicy",
        "s3:PutBucketPolicy"
      ],
      "Resource": "arn:aws:s3:::*"
    },
    {
      "Sid": "SecOpsS3ObjectOperations",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Resource": "arn:aws:s3:::*/*"
    }
  ]
}

Parametri di integrazione

Utilizza i seguenti parametri per configurare l'integrazione:

Nome visualizzato del parametro Tipo Valore predefinito È obbligatorio Descrizione
ID chiave di accesso AWS Stringa N/D Sì ID chiave di accesso AWS da utilizzare nell'integrazione.
Chiave segreta AWS Password N/D Sì Chiave segreta AWS da utilizzare nell'integrazione.
Regione AWS predefinita Stringa N/D Sì Regione AWS predefinita da utilizzare nell'integrazione, ad esempio us-west-2.
Esegui da remoto Casella di controllo Deselezionata No Seleziona il campo per eseguire l'integrazione configurata da remoto. Una volta selezionata, viene visualizzata l'opzione per selezionare l'utente remoto (agente).

Per istruzioni su come configurare un'integrazione in Google SecOps, consulta Configurare le integrazioni.

Se necessario, potrai apportare modifiche in un secondo momento. Dopo aver configurato un'istanza di integrazione, puoi utilizzarla nei playbook. Per saperne di più su come configurare e supportare più istanze, consulta Supporto di più istanze.

Azioni

Per ulteriori informazioni sulle azioni, vedi Rispondere alle azioni in attesa dalla tua scrivania e Eseguire un'azione manuale.

Scarica file dal bucket

Scarica il file dal bucket in AWS S3.

Parametri

Nome visualizzato del parametro Tipo Valore predefinito È obbligatorio Descrizione
Percorso file bucket Stringa s3://{bucket_name}/{file_name} Sì Specifica il percorso del file nel bucket. Esempio: s3://siemplify/syslog/log.txt
Percorso di download Stringa N/D Sì Specifica il percorso in cui scaricare il file.

Run On

Questa azione non viene eseguita sulle entità.

Risultati dell'azione

Risultato script
Nome risultato script Opzioni di valore Esempio
is_success Vero/Falso is_success:False
Risultato JSON
{
"bucket_file_path": "s3://testsiemplify/test/123.txt"
"download_path": "/usr/bin/share/download.txt"
}

Bacheca casi

Tipo di risultato Valore / Descrizione Tipo
Messaggio di output*

L'azione non deve non riuscire né interrompere l'esecuzione di un playbook:

If status code == 200 (is_success = true) "Successfully downloaded '{0}' from AWS S3".format(bucket_file_path)

Se altro codice di stato (is_success=false): "L'azione non è riuscita a scaricare "{0}" da AWS S3. Motivo: esiste già un file con questo percorso di download."

L'azione deve non riuscire e interrompere l'esecuzione di un playbook:

Se si verifica un errore irreversibile, ad esempio credenziali errate, nessuna connessione al server, errori SDK, altro: "Errore durante l'esecuzione dell'azione "Scarica file dal bucket". Motivo: {0}''.format(error.Stacktrace)

Generale

Ottieni criterio bucket

Recupera le informazioni sulla policy del bucket da AWS S3.

Parametri

Nome visualizzato del parametro Tipo Valore predefinito È obbligatorio Descrizione
Nome bucket Stringa N/D Sì Specifica il nome del bucket da cui recuperare le informazioni sulle policy.

Run On

Questa azione non viene eseguita sulle entità.

Risultati dell'azione

Risultato script
Nome risultato script Opzioni di valore Esempio
is_success Vero/Falso is_success:False
Risultato JSON
{
    "Policy": {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "AddPerm",
                "Effect": "Allow",
                "Principal": "*",
                "Action": "s3:GetObject",
                "Resource": "arn:aws:s3:::testsiemplify/*"
            }
        ]
    }
Bacheca casi
Tipo di risultato Valore / Descrizione Tipo
Messaggio di output*

L'azione non deve non riuscire né interrompere l'esecuzione di un playbook:

If status code == 200 (is_success = true) "Successfully retrieved information about the policy of the "{0}" bucket in AWS S3".format(bucket_name)

Se altro codice di stato (is_success=false): "L'azione non è riuscita a restituire informazioni sulla policy del bucket "{0}" in AWS S3".format(bucket_name)

L'azione deve non riuscire e interrompere l'esecuzione di un playbook:

Se si verifica un errore irreversibile, ad esempio credenziali errate, nessuna connessione al server o altro: "Errore durante l'esecuzione dell'azione "Ottieni policy bucket". Motivo: {0}''.format(error.Stacktrace)

Generale

Elenco degli oggetti bucket

Consente all'utente di disattivare un account utente. Il corpo della richiesta contiene l'utente da disattivare. La proprietà dell'account abilitato dell'account deve essere impostata su false.

Parametri

Nome visualizzato del parametro Tipo Valore predefinito È obbligatorio Descrizione
Nome bucket Stringa N/D Sì Specifica il nome del bucket da cui recuperare gli oggetti.
Numero massimo di oggetti da restituire Numero intero N/D No Specifica il numero di oggetti da restituire.

Run On

Questa azione non viene eseguita sulle entità.

Risultati dell'azione

Risultato script
Nome risultato script Opzioni di valore Esempio
is_success Vero/Falso is_success:False
Risultato JSON
"Contents": [
        {
            "Key": "text.txt",
            "LastModified": %Y-%m-%dT%H:%M:%S,
            "ETag": "d41d8cd98f00b204e9800998ecf8427e",
            "Size": 0,
            "StorageClass": "STANDARD",
            "Owner": {
                "DisplayName": "lab_aws",
                "ID": "935dc3fed0e1d2c5b12242cf9927370824f2438681a2d3c0523f254dbde41aba"
            }
        },
        {
            "Key": "text_1.txt",
            "LastModified": %Y-%m-%dT%H:%M:%S,
            "ETag": "d41d8cd98f00b204e9800998ecf8427e",
            "Size": 0,
            "StorageClass": "STANDARD",
            "Owner": {
                "DisplayName": "lab_aws",
                "ID": "935dc3fed0e1d2c5b12242cf9927370824f2438681a2d3c0523f254dbde41aba"
            }
        }
    ]
Bacheca casi
Tipo di risultato Valore / Descrizione Tipo
Messaggio di output*

L'azione non deve non riuscire né interrompere l'esecuzione di un playbook:

If status code == 200 (is_success = true) "Successfully returned objects of the "{0}" bucket in AWS S3".format(bucket_name)

Se il codice di stato è diverso (is_success=false): "L'azione non è riuscita a restituire oggetti del bucket "{0}" in AWS S3".format(bucket_name)

L'azione deve non riuscire e interrompere l'esecuzione di un playbook:

Se si verifica un errore irreversibile, ad esempio credenziali errate, nessuna connessione al server, altro: "Errore durante l'esecuzione dell'azione "Elenca oggetti bucket". Motivo: {0}''.format(error.Stacktrace)

Generale
Tabella della bacheca casi

Nome tabella: oggetti bucket "{0}"

Colonne:

  • Tasto (mappato come tasto)
  • Ultima modifica (mappato come LastModified)
  • Dimensioni (byte) (mappato come Dimensioni)
  • Proprietario (mappato come Proprietario/DisplayName)
  • Classe di archiviazione (mappata come classe di archiviazione)
Generale

Elenco bucket

Recupera un elenco di bucket da AWS S3.

Run On

Questa azione non viene eseguita sulle entità.

Risultati dell'azione

Risultato script
Nome risultato script Opzioni di valore Esempio
is_success Vero/Falso is_success:False
Risultato JSON
{
    "Buckets": [
        {
            "CreationDate": %Y-%m-%dT%H:%M:%S,
            "Name": "testsiemplify"
        }
    ],
    "Owner": {
        "DisplayName": "lab_aws",
        "ID": "935dc3fed0e1d2c5b12242cf9927370824f2438681a2d3c0523f254dbde41aba"
    },
Bacheca casi
Tipo di risultato Valore / Descrizione Tipo
Messaggio di output*

L'azione non deve non riuscire né interrompere l'esecuzione di un playbook:

If status code == 200 (is_success = true) "Successfully listed available buckets in AWS S3".

Se altro codice di stato (is_success=false): "L'azione non è riuscita a elencare i bucket disponibili in AWS S3.

L'azione deve non riuscire e interrompere l'esecuzione di un playbook:

Se si verifica un errore irreversibile, ad esempio credenziali errate, nessuna connessione al server o altro: "Errore durante l'esecuzione dell'azione "Elenca bucket". Motivo: {0}''.format(error.Stacktrace)

Generale

Dindin

Verifica la connettività ad AWS S3 con i parametri forniti nella pagina di configurazione dell'integrazione nella scheda Google Security Operations Marketplace.

Casi d'uso

Testa la connettività.

Run On

Questa azione non viene eseguita sulle entità.

Risultati dell'azione

Risultato script
Nome risultato script Opzioni di valore Esempio
is_success Vero/Falso is_success:False
Bacheca casi
Tipo di risultato Valore / Descrizione Tipo
Messaggio di output*

L'azione non deve non riuscire né interrompere l'esecuzione di un playbook:

Se l'operazione va a buon fine:

"Connessione al server AWS S3 riuscita con i parametri di connessione forniti."

L'azione deve non riuscire e interrompere l'esecuzione di un playbook:

Se l'operazione non va a buon fine:

"Impossibile connettersi al server AWS S3. Error is {0}".format(exception.stacktrace)

Generale

Imposta criterio bucket

Imposta un criterio nel bucket da AWS S3.

Parametri

Nome visualizzato del parametro Tipo Valore predefinito È obbligatorio Descrizione
Nome bucket Stringa N/D Sì Specifica il nome del bucket su cui vuoi aggiornare la policy.
Oggetto JSON delle policy Stringa N/D Sì Specifica l'oggetto JSON del criterio che vuoi impostare per il bucket. Esempi sono disponibili qui: https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html.

Run On

Questa azione non viene eseguita sulle entità.

Risultati dell'azione

Risultato script
Nome risultato script Opzioni di valore Esempio
is_success Vero/Falso is_success:False
Risultato JSON
bucket_policy = {
    'Version': '2012-10-17',
    'Statement': [{
        'Sid': 'AddPerm',
        'Effect': 'Allow',
        'Principal': '*',
        'Action': ['s3:GetObject'],
        'Resource': f'arn:aws:s3:::{bucket_name}/*'
    }]
}
Bacheca casi
Tipo di risultato Valore / Descrizione Tipo
Messaggio di output*

L'azione non deve non riuscire né interrompere l'esecuzione di un playbook:

If status code == 204 (is_success = true) "Successfully updated policy of the "{0}" bucket in AWS S3".format(bucket_name)

Se è presente un altro codice di stato (is_success=false): "Action wasn't able to update the policy of the '{0}' bucket in AWS S3".format(bucket_name)

L'azione deve non riuscire e interrompere l'esecuzione di un playbook:

Se si verifica un errore irreversibile, ad esempio credenziali errate, nessuna connessione al server o altro: "Errore durante l'esecuzione dell'azione "Imposta policy del bucket". Motivo: {0}''.format(error.Stacktrace)

Carica file nel bucket

Carica il file nel bucket in AWS S3.

Parametri

Nome visualizzato del parametro Tipo Valore predefinito È obbligatorio Descrizione
Percorso file Stringa N/D Sì Specifica il percorso del file da caricare.
Percorso di caricamento del bucket Stringa s3://{bucket_name}/{file_name} Sì Specifica il percorso nel bucket in cui deve essere caricato il percorso. Esempio: s3://siemplify/syslog/log.txt

Run On

Questa azione non viene eseguita sulle entità.

Risultati dell'azione

Risultato script
Nome risultato script Opzioni di valore Esempio
is_success Vero/Falso is_success:False
Risultato JSON
{
"bucket_upload_path": "s3://testsiemplify/test/123.txt"
"file_path": "/usr/bin/share/download.txt"
}
Bacheca casi
Tipo di risultato Valore / Descrizione Tipo
Messaggio di output*

L'azione non deve non riuscire né interrompere l'esecuzione di un playbook:

If status code == 200 (is_success = true) "Successfully uploaded '{0}' to AWS S3 {1} bucket".format(file_path, bucket name aka first string after s3://)

Se il file non esiste (is_success = false) "L'azione non è riuscita a caricare "{0}" su AWS S3. Motivo: il file con questo percorso di caricamento non esiste."

L'azione deve non riuscire e interrompere l'esecuzione di un playbook:

Se si verifica un errore irreversibile, ad esempio credenziali errate, nessuna connessione al server, errori SDK, altro: "Errore durante l'esecuzione dell'azione "Carica file nel bucket". Motivo: {0}''.format(error.Stacktrace)

Generale

Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.