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 d'AWS S3 dans Google SecOps, vérifiez que votre environnement réseau et vos identifiants AWS répondent à toutes les conditions préalables opérationnelles.

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

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

  2. Obtenez des identifiants d'API programmatique AWS (un ID de clé d'accès et une 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 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 depuis votre instance Google SecOps ou votre 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 de service 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 standards (HTTP_PROXY, HTTPS_PROXY, NO_PROXY) sur le serveur Google SecOps ou l'hôte de l'agent distant.

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 IAM AWS.

    Pour en savoir plus sur la création d'identités IAM et la génération d'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 seules actions et ressources de bucket requises pour vos workflows automatisés, et effectuez une rotation périodique des identifiants.

    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 d'authentification 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 AWS IAM 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 une stratégie de bucket s3:GetBucketPolicy s3:ListAllMyBuckets Récupère la stratégie d'accès au bucket. Ressource : arn:aws:s3:::<bucket-name>.
Lister les objets d'un bucket s3:ListBucket s3:ListAllMyBuckets Répertorie les objets d'un bucket S3. Ressource : arn:aws:s3:::<bucket-name>.
Lister les buckets s3:ListAllMyBuckets — Répertorie 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 règle 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>/*.

Référence rapide (ActionName:Permission)

Utilisez l'aide-mémoire suivant pour examiner 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 (moindre privilège)

L'exemple de stratégie 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 Est 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 cette option cochée, l'option permettant de sélectionner l'utilisateur distant (agent) s'affiche.

Pour savoir comment configurer une intégration dans Google SecOps, consultez Configurer des intégrations.

Vous pourrez apporter des modifications ultérieurement si nécessaire. Après avoir configuré une instance d'intégration, vous pouvez l'utiliser dans des playbooks. Pour en savoir plus sur la configuration et la prise en charge de plusieurs instances, consultez Prendre en charge plusieurs instances.

Actions

Pour en savoir plus sur les actions, consultez Répondre aux actions en attente depuis votre bureau et Exécuter une action manuelle dans votre demande.

Télécharger un fichier à partir d'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 Est 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'exécute pas sur les 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) : "Successfully downloaded '{0}' from AWS S3".format(bucket_file_path)

Si un autre code d'état est renvoyé (is_success=false) : "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 :

En cas d'erreur fatale (identifiants incorrects, absence de connexion au serveur, erreurs du SDK, etc.) : "Error executing action "Download File From Bucket". Reason: {0}''.format(error.Stacktrace)

Général

Obtenir la stratégie de bucket

Récupérez les informations sur la stratégie de bucket à partir d'AWS S3.

Paramètres

Nom à afficher du paramètre Type Valeur par défaut Est 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'exécute pas sur les 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) : "Successfully retrieved information about the policy of the "{0}" bucket in AWS S3".format(bucket_name)

Si un autre code d'état est renvoyé (is_success=false) : "Action wasn't able to return information about the policy of the '{0}' bucket in AWS S3".format(bucket_name)

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

En cas d'erreur fatale (par exemple, identifiants incorrects, aucune connexion au serveur, etc.) : "Erreur lors de l'exécution de l'action "Get Bucket Policy". Reason: {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é "account enabled" du compte doit être définie sur "false".

Paramètres

Nom à afficher du paramètre Type Valeur par défaut Est 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'exécute pas sur les 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 est renvoyé (is_success=false) : "Action wasn't able to return objects of the '{0}' bucket in AWS S3".format(bucket_name)

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

En cas d'erreur fatale (identifiants incorrects, absence de connexion au serveur, etc.) : "Erreur lors de l'exécution de l'action "Lister les objets du bucket". Reason: {0}''.format(error.Stacktrace)

Général
Tableau 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é 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 une liste de buckets depuis AWS S3.

Exécuter sur

Cette action ne s'exécute pas sur les 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) : "Successfully listed available buckets in AWS S3".

Si un autre code d'état est renvoyé (is_success=false) : "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 :

En cas d'erreur fatale (identifiants incorrects, absence de connexion au serveur, etc.) : "Error executing action "List Buckets". Reason: {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 la page Hub de contenus Google SecOps.

Cas d'utilisation

Tester la connectivité.

Exécuter sur

Cette action ne s'exécute pas sur les 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 Est obligatoire Description
Nom du bucket Chaîne N/A Oui Spécifiez le nom du bucket sur lequel vous souhaitez mettre à jour la stratégie.
Objet JSON de la stratégie Chaîne N/A Oui Spécifiez l'objet JSON de la stratégie que vous souhaitez définir pour le bucket. Vous trouverez des exemples sur la page https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html.

Exécuter sur

Cette action ne s'exécute pas sur les 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 == 204 (is_success = true) "Successfully updated policy of the "{0}" bucket in AWS S3".format(bucket_name)

Si un autre code d'état est renvoyé (is_success=false) : "Action wasn't able to update the policy of the '{0}' bucket in AWS S3".format(bucket_name)

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

En cas d'erreur fatale (identifiants incorrects, absence de connexion au serveur, etc.) : "Error executing action "Set Bucket Policy". Reason: {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 Est 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'importation du bucket 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'exécute pas sur les 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) "Successfully uploaded '{0}' to AWS S3 {1} bucket".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}' dans AWS S3. Motif : le fichier associé à ce chemin d'importation n'existe pas."

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

En cas d'erreur fatale (par exemple, identifiants incorrects, absence de connexion au serveur, erreurs du SDK, etc.) : "Error executing action "Upload File To Bucket". Reason: {0}''.format(error.Stacktrace)

Général

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