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 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 :
Vérifiez la visibilité réseau entre Google SecOps et les points de terminaison de service régionaux AWS S3.
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.
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.comous3.amazonaws.com) sur le port443/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 :
|
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.