AWS Signature Version 4 per le richieste API
Importante
Se utilizzi un SDK AWS (consulta Librerie e codice di esempio
Nelle regioni che supportano più versioni di firma, la firma manuale delle richieste implica che è necessario specificare quale versione della firma utilizzare. Quando utilizzi punti di accesso multi-regione, gli SDK e le CLI vengono commutate automaticamente per utilizzare Signature Version 4A senza ulteriori configurazioni.
Le informazioni di autenticazione inviate in una richiesta devono includere una firma. AWS Signature Version 4 (SigV4) è il protocollo di firma AWS per aggiungere le informazioni di autenticazione alle richieste API AWS.
Non utilizzare la chiave di accesso segreta per firmare le richieste API. Si utilizza invece il processo di firma SigV4. La firma delle richieste implica:
-
Creazione di una richiesta canonica basata sui dettagli della richiesta.
-
Il calcolo di una firma utilizzando le credenziali del tuo AWS.
-
L'aggiunta di questa firma alla richiesta come intestazione di autorizzazione.
AWS quindi replica questo processo e verifica la firma, concedendo o negando l'accesso di conseguenza.
Il SigV4 simmetrico richiede la derivazione di una chiave destinata a un singolo servizio AWS, in una singola regione AWS, in un determinato giorno. Ciò rende la chiave e la firma calcolata diverse per ogni regione, il che significa che è necessario conoscere la regione a cui è destinata la firma.
Il Signature Version 4 (SigV4A) asimmetrico è un'estensione che supporta la firma con un nuovo algoritmo e la generazione di firme individuali verificabili in più di una regione AWS. Con SigV4a, puoi firmare una richiesta per più regioni, con routing e failover senza interruzioni tra le regioni. Quando si utilizza l'SDK AWS o AWS CLI per richiamare una funzionalità che richiede la firma in più regioni, il tipo di firma viene automaticamente modificato per utilizzare SigV4a. Per informazioni dettagliate, consultare Come funziona AWS SigV4a.
Come funziona AWS SigV4
La procedura riportata di seguito illustra il processo generale di calcolo di una firma con SigV4:
-
La stringa da firmare dipende dal tipo di richiesta. Ad esempio, quando utilizzi l'intestazione dell'autorizzazione HTTP o i parametri della query per l'autenticazione, utilizzi una combinazione di elementi della richiesta per creare la stringa da firmare. Per una richiesta HTTP POST, la policy
POST
nella richiesta è la stringa che firmi. -
La chiave di firma è una serie di calcoli, con il risultato di ogni passaggio inserito nel successivo. Il passaggio finale è la chiave di firma.
-
Quando un servizio AWS riceve una richiesta autenticata, crea nuovamente la firma utilizzando le informazioni di autenticazione contenute nella richiesta. Se le firme corrispondono, il servizio elabora la richiesta. In caso contrario, la richiesta viene respinta.
Per ulteriori informazioni, consulta Elementi di una firma di richiesta dell'API AWS.
Come funziona AWS SigV4a
SigV4a utilizza firme asimmetriche basate sulla crittografia a chiave pubblica-privata. SigV4a segue un processo di derivazione delle credenziali con ambito simile a quello di SIGv4, tranne per il fatto che SigV4a utilizza la stessa chiave per firmare tutte le richieste senza dover derivare una chiave di firma distinta in base alla data, al servizio e alla regione. Una coppia di chiavi Elliptic Curve Digital Signature Algorithm
Il sistema utilizza la crittografia asimmetrica per verificare le firme multiregionali, quindi AWS deve solo archiviare le chiavi pubbliche. Le chiavi pubbliche non sono segrete e non possono essere utilizzate per firmare le richieste. Le firme asimmetriche sono necessarie per le richieste di API multi-regione, ad esempio con punti di accesso multi-regione di Amazon S3.
La procedura riportata di seguito illustra il processo generale di calcolo di una firma con SigV4a:
-
La stringa da firmare dipende dal tipo di richiesta. Ad esempio, quando utilizzi l'intestazione dell'autorizzazione HTTP o i parametri della query per l'autenticazione, utilizzi una combinazione di elementi della richiesta per creare la stringa da firmare. Per una richiesta HTTP POST, la policy
POST
nella richiesta è la stringa che firmi. -
La chiave di firma deriva da una chiave di accesso segreta AWS tramite una serie di calcoli, con il risultato di ogni passaggio inserito nel successivo. Il passaggio finale produce la coppia di chiavi.
-
Quando un servizio AWS riceve una richiesta firmata con SigV4a, AWS verifica la firma utilizzando solo la metà pubblica della coppia di chiavi. Se la firma è valida, la richiesta viene autenticata e il servizio elabora la richiesta. Le richieste con firme non valide vengono rifiutate.
Per ulteriori informazioni su Sigv4a per le richieste API multiregione, consulta il progetto sigv4a-signing-examples-signing-examples
Quando firmare le richieste
Quando si scrive un codice personalizzato per l'invio di richieste API ad AWS, è necessario includere il codice che firma tali richieste. Potrebbe essere necessario scrivere codice personalizzato perché:
-
Utilizzi un linguaggio di programmazione per il quale non esiste un SDK AWS.
-
È necessario il controllo totale sul modo in cui le richieste vengono inviate ad AWS.
Mentre le richieste API autenticano l'accesso con AWS SigV4, gli SDK AWS e la AWS CLI autenticano le richieste utilizzando le chiavi di accesso fornite dall'utente. Per ulteriori informazioni sull'autenticazione con SDK AWS e la AWS CLI, consulta Risorse aggiuntive.
Perché le richieste vengono firmate
Il processo di firma aiuta a proteggere le richieste, poiché consente di:
-
Verificare l'identità del richiedente
Le richieste autenticate richiedono una firma che hai creato utilizzando le tue chiavi di accesso (ID chiave di accesso, chiave di accesso segreta). Se stai utilizzando credenziali di sicurezza temporanee, i calcoli della firma richiedono anche un token di sicurezza. Per ulteriori informazioni, consulta AWS accesso programmatico con credenziali di sicurezza.
-
Proteggere i dati in transito
Per evitare che una richiesta venga modificata mentre è in transito, alcuni elementi della richiesta stessa vengono utilizzati per calcolare un hash (digest) e il valore hash risultante è incluso come parte della richiesta. Quando un Servizio AWS riceve la richiesta, utilizza le stesse informazioni per calcolare un hash e lo confronta con il valore hash presente nella richiesta. Se i valori non corrispondono, AWS rifiuta la richiesta.
-
Garantire la protezione da possibili attacchi di tipo replay
Nella maggior parte dei casi, una richiesta deve raggiungere AWS entro cinque minuti dal time stamp presente nella richiesta stessa. In caso contrario, AWS rifiuta la richiesta.
AWS SigV4 può essere espresso nell'intestazione di autorizzazione HTTP o come stringa di query nell'URL. Per ulteriori informazioni, consulta Metodi di autenticazione.
Risorse aggiuntive
-
Per ulteriori informazioni sul processo di firma SigV4 per i diversi servizi, consulta Richiesta di esempi di firma.
-
Per configurare le credenziali per l'accesso programmatico per la AWS CLI, consulta Autenticazione e credenziali di accesso nella Guida per l'utente dell'interfaccia a riga di AWScomando.
-
Gli SDK AWS includono un codice sorgente su GitHub per firmare le richieste API AWS. Per gli esempi di codice, consulta Progetti di esempio nel repository di campioni AWS.
-
AWS SDK for .NET - AWS4Signer.cs
-
AWS SDK for C++ - AWSAuthV4Signer.cpp
-
AWS SDK for Go: sigv4.go
-
AWS SDK for Java - BaseAws4Signer.java
-
AWS SDK for JavaScript: signature-v4
-
AWS SDK for PHP - SignatureV4.php
-
AWS SDK for Python (Boto) - signers.py
-
AWS SDK for Ruby - signer.rb
-