View a markdown version of this page

GuardDuty esempi di utilizzo AWS CLI - AWS Esempi di codice SDK

Sono disponibili altri esempi di AWS SDK nel repository AWS Doc SDK Examples. GitHub

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

GuardDuty esempi di utilizzo AWS CLI

I seguenti esempi di codice mostrano come eseguire azioni e implementare scenari comuni utilizzando AWS Command Line Interface with GuardDuty.

Le azioni sono estratti di codice da programmi più grandi e devono essere eseguite nel contesto. Sebbene le azioni mostrino come richiamare le singole funzioni del servizio, è possibile visualizzarle contestualizzate negli scenari correlati.

Ogni esempio include un link al codice sorgente completo, in cui vengono fornite le istruzioni su come configurare ed eseguire il codice nel contesto.

Argomenti

Azioni

L’esempio di codice seguente mostra come utilizzare accept-invitation.

AWS CLI

Per accettare un invito a diventare un account GuardDuty membro nella regione corrente

L'accept-invitationesempio seguente mostra come accettare un invito a diventare un account GuardDuty membro nella regione corrente.

aws guardduty accept-invitation \ --detector-id 12abc34d567e8fa901bc2d34eexample \ --master-id 123456789111 \ --invitation-id d6b94fb03a66ff665f7db8764example

Questo comando non produce alcun output.

Per ulteriori informazioni, vedere Gestione GuardDuty degli account tramite invito nella Guida GuardDuty per l'utente.

L’esempio di codice seguente mostra come utilizzare archive-findings.

AWS CLI

Come archiviare gli esiti nella Regione corrente

In questo esempio archive-findings viene mostrato come archiviare gli esiti nella Regione corrente.

aws guardduty archive-findings \ --detector-id 12abc34d567e8fa901bc2d34eexample \ --finding-ids d6b94fb03a66ff665f7db8764example 3eb970e0de00c16ec14e6910fexample

Questo comando non produce alcun output.

Per ulteriori informazioni, vedere Creazione di regole di soppressione nella Guida per l'GuardDuty utente.

L’esempio di codice seguente mostra come utilizzare create-detector.

AWS CLI

Da abilitare GuardDuty nella regione corrente

Questo esempio mostra come creare un nuovo rilevatore, che abiliti GuardDuty, nella regione corrente. :

aws guardduty create-detector \ --enable

Output:

{ "DetectorId": "b6b992d6d2f48e64bc59180bfexample" }

Per ulteriori informazioni, consulta Enable Amazon GuardDuty nella Guida GuardDuty per l'utente.

  • Per i dettagli sulle API, consulta la sezione CreateDetector AWS CLI Command Reference.

L’esempio di codice seguente mostra come utilizzare create-filter.

AWS CLI

Esempio 1: come creare un nuovo filtro nella Regione corrente

L’esempio create-filter seguente crea un filtro che corrisponde a tutti gli esiti Portscan per l’istanza creata da un’immagine specifica. Tali esiti non vengono soppressi.

aws guardduty create-filter \ --detector-id b6b992d6d2f48e64bc59180bfexample \ --name myFilterExample \ --finding-criteria '{"Criterion": {"type": {"Eq": ["Recon:EC2/Portscan"]},"resource.instanceDetails.imageId": {"Eq": ["ami-0a7a207083example"]}}}'

Output:

{ "Name": "myFilterExample" }

Per ulteriori informazioni, consulta Filtrare GuardDuty i risultati nella Guida per l'GuardDuty utente.

Esempio 2: come creare un nuovo filtro ed eliminare gli esiti nella Regione corrente

L’esempio create-filter seguente crea un filtro che corrisponde a tutti gli esiti Portscan per l’istanza creata da un’immagine specifica. Questo filtro archivia tali esiti in modo che non compaiano negli esiti correnti.

aws guardduty create-filter \ --detector-id b6b992d6d2f48e64bc59180bfexample \ --action ARCHIVE \ --name myFilterSecondExample \ --finding-criteria '{"Criterion": {"type": {"Eq": ["Recon:EC2/Portscan"]},"resource.instanceDetails.imageId": {"Eq": ["ami-0a7a207083example"]}}}'

Output:

{ "Name": "myFilterSecondExample" }

Per ulteriori informazioni, vedere Filtraggio dei GuardDuty risultati nella Guida per l'GuardDuty utente.

  • Per i dettagli sull'API, vedi CreateFilter in AWS CLI Command Reference.

L’esempio di codice seguente mostra come utilizzare create-ip-set.

AWS CLI

Come creare e attivare un set di IP attendibili

L’esempio create-ip-set seguente crea e attiva un set di IP attendibili nella Regione corrente.

aws guardduty create-ip-set \ --detector-id 12abc34d567e8fa901bc2d34eexample \ --name new-ip-set-example \ --format TXT \ --location s3://amzn-s3-demo-bucket/customtrustlist.csv \ --activate

Output:

{ "IpSetId": "d4b94fc952d6912b8f3060768example" }

Per ulteriori informazioni, vedere Utilizzo degli elenchi di indirizzi IP affidabili e degli elenchi di minacce nella Guida per l'utente. GuardDuty

  • Per i dettagli sulle API, consulta la sezione CreateIpSet AWS CLI Command Reference.

L’esempio di codice seguente mostra come utilizzare create-members.

AWS CLI

Per associare un nuovo membro al tuo account GuardDuty principale nella regione corrente.

Questo esempio mostra come associare gli account dei membri che devono essere gestiti dall'account corrente come GuardDuty master.

aws guardduty create-members --detector-id b6b992d6d2f48e64bc59180bfexample \ --account-details AccountId=111122223333,Email=first+member@example.com AccountId=111111111111 ,Email=another+member@example.com

Output:

{ "UnprocessedAccounts": [] }

Per ulteriori informazioni, vedere Gestione di più account nella Guida GuardDuty per l'utente.

  • Per i dettagli sull'API, vedi CreateMembers in AWS CLI Command Reference.

L’esempio di codice seguente mostra come utilizzare create-publishing-destination.

AWS CLI

Per creare una destinazione di pubblicazione in cui esportare i GuardDuty risultati nella regione corrente.

L'create-publishing-destinationesempio seguente mostra come impostare una destinazione di pubblicazione per esportare i GuardDuty risultati correnti (non archiviati) per tenere traccia dei dati storici dei risultati.

aws guardduty create-publishing-destination \ --detector-id b6b992d6d2f48e64bc59180bfexample \ --destination-type S3 \ --destination-properties 'DestinationArn=arn:aws:s3:::amzn-s3-demo-bucket,KmsKeyArn=arn:aws:kms:us-west-1:111122223333:key/84cee9c5-dea1-401a-ab6d-e1de7example'

Output:

{ "DestinationId": "46b99823849e1bbc242dfbe3cexample" }

Per ulteriori informazioni, consulta Esportazione dei GuardDuty risultati generati nei bucket Amazon S3 nella Guida per l'utente. GuardDuty

L’esempio di codice seguente mostra come utilizzare create-sample-findings.

AWS CLI

Per creare GuardDuty risultati di esempio nella regione corrente.

Questo esempio mostra come creare un esito di esempio dei tipi forniti.

aws guardduty create-sample-findings \ --detector-id b6b992d6d2f48e64bc59180bfexample \ --finding-types UnauthorizedAccess:EC2/TorClient UnauthorizedAccess:EC2/TorRelay

Questo comando non produce alcun output.

Per ulteriori informazioni, vedere Esempi di risultati nella Guida GuardDuty per l'utente.

L’esempio di codice seguente mostra come utilizzare create-threat-intel-set.

AWS CLI

Come creare e attivare un nuovo set di informazioni sulle minacce

L’esempio create-threat-intel-set seguente crea e attiva un set di intelligence delle minacce nella Regione corrente.

aws guardduty create-threat-intel-set \ --detector-id b6b992d6d2f48e64bc59180bfexample \ --name myThreatSet-example \ --format TXT \ --location s3://amzn-s3-demo-bucket/threatlist.csv \ --activate

Output:

{ "ThreatIntelSetId": "20b9a4691aeb33506b808878cexample" }

Per ulteriori informazioni, vedere Utilizzo degli elenchi di indirizzi IP affidabili e degli elenchi di minacce nella Guida per l'utente. GuardDuty

L’esempio di codice seguente mostra come utilizzare decline-invitations.

AWS CLI

Come rifiutare un invito a far gestire GuardDuty da un altro account nella Regione corrente.

Questo esempio mostra come rifiutare un invito all’iscrizione.

aws guardduty decline-invitations \ --account-ids 111122223333

Output:

{ "UnprocessedAccounts": [] }

Per ulteriori informazioni, vedere Gestione degli GuardDuty account tramite invito nella Guida per l' GuardDuty utente.

L’esempio di codice seguente mostra come utilizzare delete-detector.

AWS CLI

Per eliminare e disattivare GuardDuty un rilevatore nella regione corrente.

Questo esempio mostra come eliminare un rilevatore, in caso di successo, questo verrà disabilitato GuardDuty nella regione associata a quel rilevatore.

aws guardduty delete-detector \ --detector-id b6b992d6d2f48e64bc59180bfexample

Questo comando non produce alcun output.

Per ulteriori informazioni, vedere Sospensione o disabilitazione GuardDuty nella Guida per l'utente. GuardDuty

L’esempio di codice seguente mostra come utilizzare delete-filter.

AWS CLI

Come eliminare un filtro esistente nella Regione corrente

In questo esempio viene mostrato come creare ed eliminare un filtro.

aws guardduty delete-filter \ --detector-id b6b992d6d2f48e64bc59180bfexample \ --filter-name byebyeFilter

Questo comando non produce alcun output.

Per ulteriori informazioni, vedere Filtraggio dei risultati nella Guida per l'utente. GuardDuty

  • Per i dettagli sull'API, vedi DeleteFilter in AWS CLI Command Reference.

L’esempio di codice seguente mostra come utilizzare disable-organization-admin-account.

AWS CLI

Per rimuovere un account come amministratore delegato all'interno dell'organizzazione GuardDuty

Questo esempio mostra come rimuovere un account come amministratore delegato per. GuardDuty

aws guardduty disable-organization-admin-account \ --admin-account-id 111122223333

Questo comando non produce alcun output.

Per ulteriori informazioni, vedere Gestione degli account con AWS le organizzazioni nella Guida per l'GuardDuty utente.

L’esempio di codice seguente mostra come utilizzare disassociate-from-master-account.

AWS CLI

Come annullare l’associazione dal tuo attuale account amministratore nella Regione corrente

L'disassociate-from-master-accountesempio seguente dissocia il tuo account dall'account amministratore corrente nella regione corrente. GuardDuty AWS

aws guardduty disassociate-from-master-account \ --detector-id d4b040365221be2b54a6264dcexample

Questo comando non produce alcun output.

Per ulteriori informazioni, vedere Comprendere la relazione tra account GuardDuty amministratore e account membro nella Guida per l'GuardDuty utente.

L’esempio di codice seguente mostra come utilizzare get-detector.

AWS CLI

Come recuperare i dettagli di un rilevatore specifico

L’esempio get-detector seguente visualizza i dettagli delle configurazioni del rilevatore specificato.

aws guardduty get-detector \ --detector-id 12abc34d567e8fa901bc2d34eexample

Output:

{ "Status": "ENABLED", "ServiceRole": "arn:aws:iam::111122223333:role/aws-service-role/guardduty.amazonaws.com/AWSServiceRoleForAmazonGuardDuty", "Tags": {}, "FindingPublishingFrequency": "SIX_HOURS", "UpdatedAt": "2018-11-07T03:24:22.938Z", "CreatedAt": "2017-12-22T22:51:31.940Z" }

Per ulteriori informazioni, vedere Concetti e terminologia nella Guida per l'utente. GuardDuty

  • Per i dettagli sull'API, vedi GetDetector in AWS CLI Command Reference.

L’esempio di codice seguente mostra come utilizzare get-findings.

AWS CLI

Esempio 1: come recuperare i dettagli di un esito specifico

L’esempio get-findings seguente recupera i dettagli completi degli esiti JSON dell’esito specificato.

aws guardduty get-findings \ --detector-id 12abc34d567e8fa901bc2d34eexample \ --finding-id 1ab92989eaf0e742df4a014d5example

Output:

{ "Findings": [ { "Resource": { "ResourceType": "AccessKey", "AccessKeyDetails": { "UserName": "testuser", "UserType": "IAMUser", "PrincipalId": "AIDACKCEVSQ6C2EXAMPLE", "AccessKeyId": "ASIASZ4SI7REEEXAMPLE" } }, "Description": "APIs commonly used to discover the users, groups, policies and permissions in an account, was invoked by IAM principal testuser under unusual circumstances. Such activity is not typically seen from this principal.", "Service": { "Count": 5, "Archived": false, "ServiceName": "guardduty", "EventFirstSeen": "2020-05-26T22:02:24Z", "ResourceRole": "TARGET", "EventLastSeen": "2020-05-26T22:33:55Z", "DetectorId": "d4b040365221be2b54a6264dcexample", "Action": { "ActionType": "AWS_API_CALL", "AwsApiCallAction": { "RemoteIpDetails": { "GeoLocation": { "Lat": 51.5164, "Lon": -0.093 }, "City": { "CityName": "London" }, "IpAddressV4": "52.94.36.7", "Organization": { "Org": "Amazon.com", "Isp": "Amazon.com", "Asn": "16509", "AsnOrg": "AMAZON-02" }, "Country": { "CountryName": "United Kingdom" } }, "Api": "ListPolicyVersions", "ServiceName": "iam.amazonaws.com", "CallerType": "Remote IP" } } }, "Title": "Unusual user permission reconnaissance activity by testuser.", "Type": "Recon:IAMUser/UserPermissions", "Region": "us-east-1", "Partition": "aws", "Arn": "arn:aws:guardduty:us-east-1:111122223333:detector/d4b040365221be2b54a6264dcexample/finding/1ab92989eaf0e742df4a014d5example", "UpdatedAt": "2020-05-26T22:55:21.703Z", "SchemaVersion": "2.0", "Severity": 5, "Id": "1ab92989eaf0e742df4a014d5example", "CreatedAt": "2020-05-26T22:21:48.385Z", "AccountId": "111122223333" } ] }

Per ulteriori informazioni, vedere Findings nella Guida per l' GuardDuty utente.

  • Per i dettagli sull'API, vedi GetFindings in AWS CLI Command Reference.

L’esempio di codice seguente mostra come utilizzare get-ip-set.

AWS CLI

Come elencare i dettagli ottenuti su un set di IP attendibili specificato

L’esempio get-ip-set seguente mostra lo stato e i dettagli del set di IP attendibili specificato.

aws guardduty get-ip-set \ --detector-id 12abc34d567e8fa901bc2d34eexample \ --ip-set-id d4b94fc952d6912b8f3060768example

Output:

{ "Status": "ACTIVE", "Location": "s3://amzn-s3-demo-bucket.s3-us-west-2.amazonaws.com/customlist.csv", "Tags": {}, "Format": "TXT", "Name": "test-ip-set-example" }

Per ulteriori informazioni, vedere Utilizzo degli elenchi di indirizzi IP affidabili e degli elenchi di minacce nella Guida per l'utente. GuardDuty

  • Per i dettagli sulle API, consulta la sezione GetIpSet AWS CLI Command Reference.

L’esempio di codice seguente mostra come utilizzare get-master-account.

AWS CLI

Come recuperare i dettagli del tuo account master nella Regione corrente

L’esempio get-master-account seguente visualizza lo stato e i dettagli dell’account master associato al rilevatore nella Regione corrente.

aws guardduty get-master-account \ --detector-id 12abc34d567e8fa901bc2d34eexample

Output:

{ "Master": { "InvitationId": "04b94d9704854a73f94e061e8example", "InvitedAt": "2020-06-09T22:23:04.970Z", "RelationshipStatus": "Enabled", "AccountId": "111122223333" } }

Per ulteriori informazioni, vedere Comprendere la relazione tra account GuardDuty amministratore e account membro nella Guida per l'utente. GuardDuty

  • Per i dettagli sull'API, consulta la sezione GetMasterAccount AWS CLI Command Reference.

L’esempio di codice seguente mostra come utilizzare list-detectors.

AWS CLI

Come elencare i rilevatori disponibili nella Regione corrente

L'list-detectorsesempio seguente elenca i rilevatori disponibili nella regione corrente. AWS

aws guardduty list-detectors

Output:

{ "DetectorIds": [ "12abc34d567e8fa901bc2d34eexample" ] }

Per ulteriori informazioni, vedere Concetti e terminologia nella Guida per l' GuardDuty utente.

  • Per i dettagli sull'API, vedi ListDetectors in AWS CLI Command Reference.

L’esempio di codice seguente mostra come utilizzare list-findings.

AWS CLI

Esempio 1: come elencare tutti gli esiti per la Regione corrente

L’esempio list-findings seguente visualizza un elenco di tutti i findingId per la Regione corrente ordinati per gravità dalla più alta alla più bassa.

aws guardduty list-findings \ --detector-id 12abc34d567e8fa901bc2d34eexample \ --sort-criteria '{"AttributeName": "severity","OrderBy":"DESC"}'

Output:

{ "FindingIds": [ "04b8ab50fd29c64fc771b232dexample", "5ab8ab50fd21373735c826d3aexample", "90b93de7aba69107f05bbe60bexample", ... ] }

Per ulteriori informazioni, vedere Findings nella Guida per l' GuardDuty utente.

Esempio 2: come elencare gli esiti per la Regione corrente corrispondenti a un criterio di ricerca specifico

L’esempio list-findings seguente visualizza un elenco di tutti i findingId che corrispondono a un tipo di esito specificato.

aws guardduty list-findings \ --detector-id 12abc34d567e8fa901bc2d34eexample \ --finding-criteria '{"Criterion":{"type": {"Eq":["UnauthorizedAccess:EC2/SSHBruteForce"]}}}'

Output:

{ "FindingIds": [ "90b93de7aba69107f05bbe60bexample", "6eb9430d7023d30774d6f05e3example", "2eb91a2d060ac9a21963a5848example", "44b8ab50fd2b0039a9e48f570example", "9eb8ab4cd2b7e5b66ba4f5e96example", "e0b8ab3a38e9b0312cc390ceeexample" ] }

Per ulteriori informazioni, vedere Findings nella Guida GuardDuty per l'utente.

Esempio 3: come elencare gli esiti per la Regione corrente corrispondenti a un set di criteri di ricerca specifico definito in un file JSON

L’esempio list-findings seguente visualizza un elenco di tutti i findingId non archiviati e che non coinvolgono l’utente IAM denominato “testuser”, come specificato in un file JSON.

aws guardduty list-findings \ --detector-id 12abc34d567e8fa901bc2d34eexample \ --finding-criteria file://myfile.json

Contenuto di myfile.json:

{"Criterion": { "resource.accessKeyDetails.userName":{ "Eq":[ "testuser" ] }, "service.archived": { "Eq": [ "false" ] } } }

Output:

{ "FindingIds": [ "1ab92989eaf0e742df4a014d5example" ] }

Per ulteriori informazioni, vedere Findings nella Guida GuardDuty per l'utente.

  • Per i dettagli sull'API, vedi ListFindings in AWS CLI Command Reference.

L’esempio di codice seguente mostra come utilizzare list-invitations.

AWS CLI

Come elencare i dettagli dei tuoi inviti a diventare account membro nella Regione corrente

L'list-invitationsesempio seguente elenca i dettagli e gli stati degli inviti a diventare un account GuardDuty membro nella regione corrente.

aws guardduty list-invitations

Output:

{ "Invitations": [ { "InvitationId": "d6b94fb03a66ff665f7db8764example", "InvitedAt": "2020-06-10T17:56:38.221Z", "RelationshipStatus": "Invited", "AccountId": "123456789111" } ] }

Per ulteriori informazioni, consulta Gestione degli GuardDuty account tramite invito nella Guida per l' GuardDuty utente.

L’esempio di codice seguente mostra come utilizzare list-ip-sets.

AWS CLI

Come elencare i set di IP attendibili nella Regione corrente

L'list-ip-setsesempio seguente elenca i set IP affidabili nella tua regione corrente. AWS

aws guardduty list-ip-sets \ --detector-id 12abc34d567e8fa901bc2d34eexample

Output:

{ "IpSetIds": [ "d4b94fc952d6912b8f3060768example" ] }

Per ulteriori informazioni, vedere Utilizzo degli elenchi di indirizzi IP affidabili e degli elenchi di minacce nella Guida per l' GuardDuty utente.

  • Per i dettagli sulle API, consulta la sezione ListIpSets AWS CLI Command Reference.

L’esempio di codice seguente mostra come utilizzare list-members.

AWS CLI

Esempio 1: come elencare solo i membri correnti nella Regione corrente

L'list-membersesempio seguente elenca e fornisce i dettagli dei soli account dei membri correnti associati all'account GuardDuty amministratore, nella regione corrente.

aws guardduty list-members \ --detector-id 12abc34d567e8fa901bc2d34eexample \ --only-associated="true"

Output:

{ "Members": [ { "RelationshipStatus": "Enabled", "InvitedAt": "2020-06-09T22:49:00.910Z", "MasterId": "111122223333", "DetectorId": "7ab8b2f61b256c87f793f6a86example", "UpdatedAt": "2020-06-09T23:08:22.512Z", "Email": "your+member@example.com", "AccountId": "123456789012" } ] }

Per ulteriori informazioni, vedere Comprensione della relazione tra account GuardDuty amministratore e account membro nella Guida per l'GuardDuty utente.

Esempio 2: come elencare tutti i membri nella Regione corrente

L'list-membersesempio seguente elenca e fornisce i dettagli di tutti gli account dei membri, compresi quelli che sono stati dissociati o non hanno ancora accettato l'invito GuardDuty dell'amministratore, nella regione corrente.

aws guardduty list-members \ --detector-id 12abc34d567e8fa901bc2d34eexample \ --only-associated="false"

Output:

{ "Members": [ { "RelationshipStatus": "Enabled", "InvitedAt": "2020-06-09T22:49:00.910Z", "MasterId": "111122223333", "DetectorId": "7ab8b2f61b256c87f793f6a86example", "UpdatedAt": "2020-06-09T23:08:22.512Z", "Email": "your+other+member@example.com", "AccountId": "555555555555" } ] }

Per ulteriori informazioni, vedere Comprendere la relazione tra account GuardDuty amministratore e account membro nella Guida per l'GuardDuty utente.

  • Per i dettagli sull'API, consulta la sezione ListMembers AWS CLI Command Reference.

L’esempio di codice seguente mostra come utilizzare update-detector.

AWS CLI

Esempio 1: per abilitare il monitoraggio del runtime in GuardDuty

L'update-detectoresempio seguente abilita il monitoraggio del runtime senza configurazione aggiuntiva.

aws guardduty update-detector \ --detector-id 12abc34d567e8fa901bc2d34eexample \ --features 'Name=RUNTIME_MONITORING,Status=ENABLED'

Questo comando non produce alcun output.

Per ulteriori informazioni, vedere Runtime monitoring nella Guida GuardDuty per l'utente.

Esempio 2: per abilitare il monitoraggio del runtime con una configurazione aggiuntiva

L'update-detectoresempio seguente abilita il monitoraggio del runtime con una configurazione aggiuntiva per EC2, ECS Fargate ed EKS.

aws guardduty update-detector \ --detector-id 12abc34d567e8fa901bc2d34eexample \ --features 'Name=RUNTIME_MONITORING,Status=ENABLED,AdditionalConfiguration=[{Name=EC2_AGENT_MANAGEMENT,Status=ENABLED},{Name=ECS_FARGATE_AGENT_MANAGEMENT,Status=ENABLED},{Name=EKS_ADDON_MANAGEMENT,Status=ENABLED}]'

Questo comando non produce alcun output.

Per ulteriori informazioni, vedere Runtime monitoring nella Guida per l'GuardDuty utente.

L’esempio di codice seguente mostra come utilizzare update-ip-set.

AWS CLI

Come aggiornare un set di IP attendibili

L’esempio update-ip-set seguente mostra come aggiornare i dettagli di un set di IP attendibili.

aws guardduty update-ip-set \ --detector-id 12abc34d567e8fa901bc2d34eexample \ --ip-set-id d4b94fc952d6912b8f3060768example \ --location https://amzn-s3-demo-bucket.s3-us-west-2.amazonaws.com/customtrustlist2.csv

Questo comando non produce alcun output.

Per ulteriori informazioni, vedere Utilizzo degli elenchi di indirizzi IP affidabili e degli elenchi di minacce nella Guida per l'utente. GuardDuty

  • Per i dettagli sulle API, consulta la sezione UpdateIpSet AWS CLI Command Reference.