Intégrer AWS S3 à Google SecOps

Ce document explique comment intégrer AWS S3 à Google Security Operations.

Cas d'utilisation

  1. Gérer les buckets
  2. Télécharger des fichiers depuis des buckets
  3. Importer des fichiers dans des ensembles

Avant de commencer

Avant de configurer l'intégration AWS S3 dans Google SecOps, vérifiez que votre environnement réseau et vos identifiants AWS répondent à tous les prérequis opérationnels.

Pour préparer votre environnement à l'intégration, assurez-vous d'effectuer les opérations suivantes :

  1. Vérifiez la visibilité réseau entre les points de terminaison de service régionaux Google SecOps et AWS S3.

  2. Obtenez les identifiants de l'API programmatique AWS (ID de clé d'accès et clé d'accès secrète) avec les autorisations IAM appropriées.

  3. Configurez et testez l'instance d'intégration dans Google SecOps.

Configuration réseau requise

Google SecOps communique directement avec le service AWS S3 à l'aide des API REST HTTPS et du SDK AWS pour Python (boto3).

Assurez-vous que votre environnement réseau respecte les règles de connectivité suivantes :

  • Accès HTTPS sortant : activez la communication HTTPS sortante de votre instance Google SecOps ou de l'agent distant vers le point de terminaison régional AWS S3 (s3.<region>.amazonaws.com ou s3.amazonaws.com) sur le port 443/TCP.

    Pour en savoir plus, consultez Points de terminaison des services AWS dans la documentation AWS.

  • Configuration du proxy : si votre organisation achemine le trafic sortant via un proxy HTTP/HTTPS, configurez les variables de proxy d'environnement standard (HTTP_PROXY, HTTPS_PROXY, NO_PROXY) sur le serveur Google SecOps ou l'hôte de l'agent à distance.

Authentification et identifiants

L'intégration AWS S3 nécessite des identifiants d'API programmatiques pour authentifier les requêtes à l'aide d'AWS Signature Version 4.

Assurez-vous que votre environnement AWS répond aux exigences d'authentification suivantes :

  • Identifiants programmatiques : obtenez un ID de clé d'accès AWS et une clé secrète AWS valides associés à un utilisateur ou un rôle AWS IAM.

    Pour savoir comment créer des identités IAM et générer des identifiants, consultez Gérer les clés d'accès pour les utilisateurs IAM et Identités IAM dans la documentation AWS.

  • Moindre privilège : limitez les autorisations aux actions et aux ressources de bucket requises pour vos workflows automatisés, et alternez les identifiants régulièrement.

    Pour en savoir plus sur les recommandations de sécurité, consultez Bonnes pratiques de sécurité dans IAM dans la documentation AWS.

Configurer les autorisations d'action

Accordez à l'identité AWS IAM qui s'authentifie les autorisations spécifiques requises pour les actions exécutées par vos playbooks Google SecOps.

Consultez les autorisations minimales pour les actions AWS S3 dans le tableau suivant :

Nom de l'action Autorisation IAM AWS requise (ActionName:Permission) Autorisation requise Description / Champ d'application de la ressource
Télécharger un fichier depuis un bucket s3:GetObject s3:ListAllMyBuckets Télécharge un objet à partir d'un bucket S3. Ressource : arn:aws:s3:::<bucket-name>/*.
Obtenir la stratégie du bucket s3:GetBucketPolicy s3:ListAllMyBuckets Récupère la règle d'accès au bucket. Ressource : arn:aws:s3:::<bucket-name>.
Lister les objets du bucket s3:ListBucket s3:ListAllMyBuckets Liste les objets d'un bucket S3. Ressource : arn:aws:s3:::<bucket-name>.
Lister les buckets s3:ListAllMyBuckets — Liste tous les buckets S3 appartenant au compte. Ressource : *.
Ping s3:ListAllMyBuckets — Valide la connectivité de l'intégration. Ressource : *.
Définir une règle de bucket s3:PutBucketPolicy s3:ListAllMyBuckets Définit ou modifie une stratégie de bucket S3. Ressource : arn:aws:s3:::<bucket-name>.
Importer un fichier dans un bucket s3:PutObject s3:ListAllMyBuckets Importe un objet dans un bucket S3. Ressource : arn:aws:s3:::<bucket-name>/*.

Légende (ActionName:Permission)

Utilisez le tableau de référence rapide suivant pour consulter les autorisations requises pour chaque action :

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

Exemple de stratégie IAM (principe du moindre privilège)

L'exemple de règle suivant illustre les autorisations requises pour exécuter toutes les actions AWS S3 dans Google SecOps.

Pour savoir comment créer et associer des stratégies IAM, consultez Créer des stratégies IAM dans la documentation 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:::*/*"
    }
  ]
}

Paramètres d'intégration

Utilisez les paramètres suivants pour configurer l'intégration :

Nom à afficher du paramètre Type Valeur par défaut Obligatoire Description
AWS Access Key ID (ID de clé d'accès AWS) Chaîne N/A Oui ID de clé d'accès AWS à utiliser dans l'intégration.
Clé secrète AWS Mot de passe N/A Oui Clé secrète AWS à utiliser dans l'intégration.
Région AWS par défaut Chaîne N/A Oui Région AWS par défaut à utiliser dans l'intégration, par exemple "us-west-2".
Exécuter à distance Case à cocher Décochée Non Cochez le champ pour exécuter l'intégration configurée à distance. Une fois la case cochée, l'option permettant de sélectionner l'utilisateur distant (agent) s'affiche.

Pour obtenir des instructions sur la configuration d'une intégration dans Google SecOps, consultez Configurer des intégrations.

Vous pourrez apporter des modifications ultérieurement, si nécessaire. Une fois que vous avez configuré une instance d'intégration, vous pouvez l'utiliser dans des playbooks. Pour savoir comment configurer et prendre en charge plusieurs instances, consultez Prise en charge de plusieurs instances.

Actions

Pour en savoir plus sur les actions, consultez Répondre aux actions en attente dans Votre bureau et Effectuer une action manuelle.

Télécharger un fichier depuis un bucket

Téléchargez un fichier à partir d'un bucket dans AWS S3.

Paramètres

Nom à afficher du paramètre Type Valeur par défaut Obligatoire Description
Chemin d'accès au fichier du bucket Chaîne s3://{bucket_name}/{file_name} Oui Spécifiez le chemin d'accès au fichier dans le bucket. Exemple : s3://siemplify/syslog/log.txt
Chemin de téléchargement Chaîne N/A Oui Spécifiez le chemin d'accès où télécharger le fichier.

Exécuter sur

Cette action ne s'applique pas aux entités.

Résultats de l'action

Résultat du script
Nom du résultat du script Options de valeur Exemple
is_success Vrai/Faux is_success:False
Résultat JSON
{
"bucket_file_path": "s3://testsiemplify/test/123.txt"
"download_path": "/usr/bin/share/download.txt"
}

Mur des cas

Type de résultat Valeur / Description Type
Message de sortie*

L'action ne doit pas échouer ni arrêter l'exécution d'un playbook :

Si le code d'état est égal à 200 (is_success = true) "Téléchargement réussi de '{0}' depuis AWS S3".format(bucket_file_path)

Si un autre code d'état (is_success=false) est renvoyé : "L'action n'a pas pu télécharger '{0}' depuis AWS S3. Motif : un fichier portant ce chemin de téléchargement existe déjà."

L'action doit échouer et arrêter l'exécution d'un playbook :

Si l'erreur est fatale (par exemple, identifiants incorrects, absence de connexion au serveur, erreurs de SDK, etc.) : "Erreur lors de l'exécution de l'action "Télécharger un fichier depuis un bucket". Motif : {0}''.format(error.Stacktrace)

Général

Obtenir la stratégie de bucket

Récupérez les informations sur la stratégie de bucket depuis AWS S3.

Paramètres

Nom à afficher du paramètre Type Valeur par défaut Obligatoire Description
Nom du bucket Chaîne N/A Oui Spécifiez le nom du bucket à partir duquel récupérer les informations sur la stratégie.

Exécuter sur

Cette action ne s'applique pas aux entités.

Résultats de l'action

Résultat du script
Nom du résultat du script Options de valeur Exemple
is_success Vrai/Faux is_success:False
Résultat JSON
{
    "Policy": {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "AddPerm",
                "Effect": "Allow",
                "Principal": "*",
                "Action": "s3:GetObject",
                "Resource": "arn:aws:s3:::testsiemplify/*"
            }
        ]
    }
Mur des cas
Type de résultat Valeur / Description Type
Message de sortie*

L'action ne doit pas échouer ni arrêter l'exécution d'un playbook :

Si le code d'état est égal à 200 (is_success = true) "Informations sur le règlement du bucket "{0}" dans AWS S3 récupérées".format(bucket_name)

Si un autre code d'état (is_success=false) est renvoyé : "L'action n'a pas pu renvoyer d'informations sur le règlement du bucket '{0}' dans AWS S3".format(bucket_name)

L'action doit échouer et arrêter l'exécution d'un playbook :

Si une erreur fatale se produit (par exemple, des identifiants incorrects, une absence de connexion au serveur, etc.) : "Erreur lors de l'exécution de l'action "Obtenir la règle du bucket". Motif : {0}''.format(error.Stacktrace)

Général

Lister les objets d'un bucket

Permet à l'utilisateur de désactiver un compte utilisateur. Le corps de la requête contient l'utilisateur à désactiver. La propriété "Compte activé" du compte doit être définie sur "false".

Paramètres

Nom à afficher du paramètre Type Valeur par défaut Obligatoire Description
Nom du bucket Chaîne N/A Oui Spécifiez le nom du bucket à partir duquel récupérer les objets.
Nombre maximal d'objets à renvoyer Integer N/A Non Spécifiez le nombre d'objets à renvoyer.

Exécuter sur

Cette action ne s'applique pas aux entités.

Résultats de l'action

Résultat du script
Nom du résultat du script Options de valeur Exemple
is_success Vrai/Faux is_success:False
Résultat 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"
            }
        }
    ]
Mur des cas
Type de résultat Valeur / Description Type
Message de sortie*

L'action ne doit pas échouer ni arrêter l'exécution d'un playbook :

Si le code d'état est égal à 200 (is_success = true) "Successfully returned objects of the "{0}" bucket in AWS S3".format(bucket_name)

Si un autre code d'état (is_success=false) est renvoyé : "L'action n'a pas pu renvoyer les objets du bucket '{0}' dans AWS S3".format(bucket_name)

L'action doit échouer et arrêter l'exécution d'un playbook :

Si une erreur fatale se produit (par exemple, des identifiants incorrects, une absence de connexion au serveur, etc.) : "Erreur lors de l'exécution de l'action "Lister les objets du bucket". Motif : {0}''.format(error.Stacktrace)

Général
Table du mur des cas

Nom de la table : objets du bucket "{0}"

Colonnes :

  • Clé (mappée en tant que clé)
  • Dernière modification (mappée en tant que "LastModified")
  • Taille (octets) (mappée en tant que "Taille")
  • Propriétaire (mappé en tant que Owner/DisplayName)
  • Classe de stockage (mappée en tant que classe de stockage)
Général

Lister les buckets

Récupérez la liste des buckets depuis AWS S3.

Exécuter sur

Cette action ne s'applique pas aux entités.

Résultats de l'action

Résultat du script
Nom du résultat du script Options de valeur Exemple
is_success Vrai/Faux is_success:False
Résultat JSON
{
    "Buckets": [
        {
            "CreationDate": %Y-%m-%dT%H:%M:%S,
            "Name": "testsiemplify"
        }
    ],
    "Owner": {
        "DisplayName": "lab_aws",
        "ID": "935dc3fed0e1d2c5b12242cf9927370824f2438681a2d3c0523f254dbde41aba"
    },
Mur des cas
Type de résultat Valeur / Description Type
Message de sortie*

L'action ne doit pas échouer ni arrêter l'exécution d'un playbook :

Si le code d'état est égal à 200 (is_success = true) : "La liste des buckets disponibles dans AWS S3 a été créée avec succès."

Si un autre code d'état (is_success=false) s'affiche : "L'action n'a pas pu lister les buckets disponibles dans AWS S3.

L'action doit échouer et arrêter l'exécution d'un playbook :

Si une erreur fatale se produit (par exemple, des identifiants incorrects, une absence de connexion au serveur, etc.) : "Erreur lors de l'exécution de l'action "Lister les buckets". Motif : {0}''.format(error.Stacktrace)

Général

Ping

Testez la connectivité à AWS S3 avec les paramètres fournis sur la page de configuration de l'intégration dans l'onglet "Google Security Operations Marketplace".

Cas d'utilisation

Testez la connectivité.

Exécuter sur

Cette action ne s'applique pas aux entités.

Résultats de l'action

Résultat du script
Nom du résultat du script Options de valeur Exemple
is_success Vrai/Faux is_success:False
Mur des cas
Type de résultat Valeur / Description Type
Message de sortie*

L'action ne doit pas échouer ni arrêter l'exécution d'un playbook :

Si l'opération réussit :

"Connexion au serveur AWS S3 réussie avec les paramètres de connexion fournis !"

L'action doit échouer et arrêter l'exécution d'un playbook :

Si l'opération échoue :

"Échec de la connexion au serveur AWS S3 ! Error is {0}".format(exception.stacktrace)

Général

Définir la stratégie de bucket

Définissez une règle dans le bucket à partir d'AWS S3.

Paramètres

Nom à afficher du paramètre Type Valeur par défaut Obligatoire Description
Nom du bucket Chaîne N/A Oui Spécifiez le nom du bucket pour lequel vous souhaitez mettre à jour la règle.
Objet JSON de la règle Chaîne N/A Oui Spécifiez l'objet JSON de la règle que vous souhaitez définir pour le bucket. Vous trouverez des exemples sur cette page : https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html.

Exécuter sur

Cette action ne s'applique pas aux entités.

Résultats de l'action

Résultat du script
Nom du résultat du script Options de valeur Exemple
is_success Vrai/Faux is_success:False
Résultat JSON
bucket_policy = {
    'Version': '2012-10-17',
    'Statement': [{
        'Sid': 'AddPerm',
        'Effect': 'Allow',
        'Principal': '*',
        'Action': ['s3:GetObject'],
        'Resource': f'arn:aws:s3:::{bucket_name}/*'
    }]
}
Mur des cas
Type de résultat Valeur / Description Type
Message de sortie*

L'action ne doit pas échouer ni arrêter l'exécution d'un playbook :

Si le code d'état est égal à 204 (is_success = true) "La règle du bucket "{0}" dans AWS S3 a bien été mise à jour".format(bucket_name)

Si un autre code d'état (is_success=false) est renvoyé : "L'action n'a pas pu mettre à jour la règle du bucket '{0}' dans AWS S3".format(bucket_name)

L'action doit échouer et arrêter l'exécution d'un playbook :

Si une erreur fatale se produit (par exemple, des identifiants incorrects, une absence de connexion au serveur, etc.) : "Erreur lors de l'exécution de l'action "Définir la règle du bucket". Motif : {0}''.format(error.Stacktrace)

Importer un fichier dans un bucket

Importez le fichier dans un bucket AWS S3.

Paramètres

Nom à afficher du paramètre Type Valeur par défaut Obligatoire Description
Chemin d'accès au fichier Chaîne N/A Oui Spécifiez le chemin d'accès au fichier à importer.
Chemin d'accès au bucket pour l'importation Chaîne s3://{bucket_name}/{file_name} Oui Spécifiez le chemin d'accès dans le bucket où le chemin d'accès doit être importé. Exemple : s3://siemplify/syslog/log.txt

Exécuter sur

Cette action ne s'applique pas aux entités.

Résultats de l'action

Résultat du script
Nom du résultat du script Options de valeur Exemple
is_success Vrai/Faux is_success:False
Résultat JSON
{
"bucket_upload_path": "s3://testsiemplify/test/123.txt"
"file_path": "/usr/bin/share/download.txt"
}
Mur des cas
Type de résultat Valeur / Description Type
Message de sortie*

L'action ne doit pas échouer ni arrêter l'exécution d'un playbook :

Si le code d'état est égal à 200 (is_success = true) "Fichier '{0}' importé dans le bucket AWS S3 {1}".format(file_path, bucket name aka first string after s3://)

Si le fichier n'existe pas (is_success = false) : "L'action n'a pas pu importer '{0}' vers AWS S3. Motif : le fichier avec ce chemin d'accès n'existe pas."

L'action doit échouer et arrêter l'exécution d'un playbook :

Si une erreur fatale se produit (par exemple, des identifiants incorrects, une absence de connexion au serveur, des erreurs de SDK, etc.) : "Erreur lors de l'exécution de l'action "Importer un fichier dans un bucket". Motif : {0}''.format(error.Stacktrace)

Général

Vous avez encore besoin d'aide ? Obtenez des réponses auprès des membres de la communauté et des professionnels Google SecOps.