Intégrer AWS S3 à Google SecOps
Ce document explique comment intégrer AWS S3 à Google Security Operations.
Cas d'utilisation
- Gérer les buckets
- Télécharger des fichiers depuis des buckets
- 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 :
Vérifiez la visibilité réseau entre les points de terminaison de service régionaux Google SecOps et AWS S3.
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.
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.comous3.amazonaws.com) sur le port443/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 :
|
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.