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à.
Crittografia lato client Amazon S3AWS SDK for PHPVersione 3
Con la crittografia lato client, i dati vengono crittografati e decrittografati direttamente nel tuo ambiente. Ciò significa che questi dati sono crittografati prima di essere trasferiti ad Amazon S3 e non devi fare affidamento a un servizio esterno che gestisca la crittografia per te. Per le nuove implementazioni, suggeriamo l'uso diS3EncryptionClientV2
eS3EncryptionMultipartUploaderV2
oltre il obsoletaS3EncryptionClient
eS3EncryptionMultipartUploader
. È consigliabile che le implementazioni precedenti che utilizzano ancora le versioni obsolete tentino di migrare.S3EncryptionClientV2
mantiene il supporto per la decrittografia dei dati crittografati utilizzando la versione precedenteS3EncryptionClient
.
L'AWS SDK for PHP implementa la crittografia a busta e usa OpenSSL
Guida alla migrazione
Per coloro che stanno cercando di migrare dai client obsoleti ai nuovi client, è disponibile una guida alla migrazione che può essere trovataqui.
Installazione
Per iniziare a utilizzare la crittografia lato client, è necessario:
-
Un recordAWS KMSChiave di crittografia
-
Un bucket S3
Prima di eseguire il codice di esempio, configura ilAWSCredenziali . Consulta .Credenziali perAWS SDK for PHPVersione 3.
Encryption (Crittografia)
Caricamento di un oggetto crittografato inS3EncryptionClientV2
richiede tre parametri aggiuntivi in aggiunta allo standardPutObject
Parametri:
-
'@KmsEncryptionContext'
è una coppia chiave-valore che può essere utilizzata per aggiungere un ulteriore livello di sicurezza all'oggetto crittografato. Il client di crittografia deve inserire la stessa chiave, cosa che farà automaticamente durante una chiamata get. Se non si desidera alcun contesto aggiuntivo, inserire un array vuoto. -
@CipherOptions
sono configurazioni aggiuntive per la crittografia, tra cui la crittografia da utilizzare e la dimensione della chiave. -
@MaterialsProvider
è un provider che gestisce la generazione di una chiave di cifratura e un vettore di inizializzazione, oltre a crittografare la chiave di crittografia.
use Aws\S3\S3Client; use Aws\S3\Crypto\S3EncryptionClientV2; use Aws\Kms\KmsClient; use Aws\Crypto\KmsMaterialsProviderV2; // Let's construct our S3EncryptionClient using an S3Client $encryptionClient = new S3EncryptionClientV2( new S3Client([ 'profile' => 'default', 'region' => 'us-east-1', 'version' => 'latest', ]) ); $kmsKeyId = 'kms-key-id'; $materialsProvider = new KmsMaterialsProviderV2( new KmsClient([ 'profile' => 'default', 'region' => 'us-east-1', 'version' => 'latest', ]), $kmsKeyId ); $bucket = 'the-bucket-name'; $key = 'the-file-name'; $cipherOptions = [ 'Cipher' => 'gcm', 'KeySize' => 256, // Additional configuration options ]; $result = $encryptionClient->putObject([ '@MaterialsProvider' => $materialsProvider, '@CipherOptions' => $cipherOptions, '@KmsEncryptionContext' => ['context-key' => 'context-value'], 'Bucket' => $bucket, 'Key' => $key, 'Body' => fopen('file-to-encrypt.txt', 'r'), ]);
Nota
Oltre ad Amazon S3 eAWS KMSin base a errori di servizio, potresti ricevereInvalidArgumentException
oggetti se il tuo'@CipherOptions'
non sono configurati correttamente.
Decrittografia
Il download e la decrittografia di un oggetto hanno quattro parametri aggiuntivi, due dei quali obbligatori, oltre allo standardGetObject
parametri. Il client rileverà automaticamente le opzioni di cifratura di base.
-
-
'@SecurityProfile'
: se impostato su 'V2', solo gli oggetti crittografati in versione compatibile con V2 -
il formato può essere decifrato. L'impostazione di questo parametro su 'V2_AND_LEGACY' consente inoltre di decrittografare gli oggetti crittografati in un formato compatibile con V1. Per supportare la migrazione, imposta @SecurityProfilea 'V2_AND_LEGACY'. Usa 'V2' solo per lo sviluppo di nuove applicazioni.
-
-
-
'@MaterialsProvider'
è un provider che gestisce la generazione di una chiave di cifratura e di un vettore di inizializzazione, come -
oltre a crittografare la tua chiave di crittografia.
-
-
-
'@KmsAllowDecryptWithAnyCmk'
: (opzionale) L'impostazione di questo parametro su true consente la decrittografia -
senza fornire un ID chiave KMS al costruttore del MaterialsProvider. Il valore predefinito è false.
-
-
-
'@CipherOptions'
(opzionali) sono configurazioni aggiuntive per la crittografia, tra cui -
cifrario da usare e dimensione della chiave.
-
$result = $encryptionClient->getObject([ '@KmsAllowDecryptWithAnyCmk' => true, '@SecurityProfile' => 'V2_AND_LEGACY', '@MaterialsProvider' => $materialsProvider, '@CipherOptions' => $cipherOptions, 'Bucket' => $bucket, 'Key' => $key, ]);
Nota
Oltre ad Amazon S3 eAWS KMSin base a errori di servizio, potresti ricevereInvalidArgumentException
oggetti se il tuo'@CipherOptions'
non sono configurati correttamente.
Configurazione cifratura
-
'Cipher'
(Stringa) -
Modalità di cifratura che il client di crittografia utilizza durante la crittografia. Al momento, è supportato solo gcm.
Importante
PHP è aggiornato nella versione 7.1S3EncryptionClientV2
eS3EncryptionMultipartUploaderV2
. Tuttavia, le prestazioni per gli input di grandi dimensioni saranno molto più lente utilizzando il polyfill rispetto all'implementazione nativa per PHP 7.1+, quindi potrebbe essere necessario aggiornare gli ambienti con versioni PHP precedenti per utilizzarli in modo efficace.
-
'KeySize'
(int) -
La durata della chiave di crittografia del contenuto da generare per la crittografia. Il valore di default è 256 bit. Le opzioni di configurazione valide sono 256 e 128 bit.
-
'Aad'
(Stringa) -
"Dati di autenticazione aggiuntivi" facoltativi da includere con il tuo payload crittografato. Queste informazioni sono convalidate per la decrittografia.
Aad
è disponibile solo quando si usa la cifratura "gcm".
Importante
I dati di autenticazione aggiuntivi non sono supportati da tuttiAWSGli SDK e in quanto tali altri SDK potrebbero non essere in grado di decrittografare i file crittografati utilizzando questo parametro.
Strategie di metad
Puoi anche fornire un'istanza di una classe che implementa Aws\Crypto\MetadataStrategyInterface
. Questa semplice interfaccia gestisce il salvataggio e il caricamento di Aws\Crypto\MetadataEnvelope
che contiene i materiali per la crittografia della busta. L'SDK fornisce due classi che implementano questo: Aws\S3\Crypto\HeadersMetadataStrategy
e Aws\S3\Crypto\InstructionFileMetadataStrategy
. HeadersMetadataStrategy
viene utilizzato per impostazione predefinita.
$strategy = new InstructionFileMetadataStrategy( $s3Client ); $encryptionClient->putObject([ '@MaterialsProvider' => $materialsProvider, '@MetadataStrategy' => $strategy, '@KmsEncryptionContext' => [], '@CipherOptions' => $cipherOptions, 'Bucket' => $bucket, 'Key' => $key, 'Body' => fopen('file-to-encrypt.txt', 'r'), ]); $result = $encryptionClient->getObject([ '@KmsAllowDecryptWithAnyCmk' => false, '@MaterialsProvider' => $materialsProvider, '@SecurityProfile' => 'V2', '@MetadataStrategy' => $strategy, '@CipherOptions' => $cipherOptions, 'Bucket' => $bucket, 'Key' => $key, ]);
Le costanti per il nome della classe HeadersMetadataStrategy
e InstructionFileMetadataStrategy
possono anche essere fornite chiamando ::class.
$result = $encryptionClient->putObject([ '@MaterialsProvider' => $materialsProvider, '@MetadataStrategy' => HeadersMetadataStrategy::class, '@CipherOptions' => $cipherOptions, 'Bucket' => $bucket, 'Key' => $key, 'Body' => fopen('file-to-encrypt.txt', 'r'), ]);
Nota
Se si verifica un errore dopo che un file di istruzioni è stato caricato, non verrà automaticamente eliminato.
Caricamenti in più parti
Anche l'esecuzione di un caricamento in più parti con crittografia lato client è possibile. LaAws\S3\Crypto\S3EncryptionMultipartUploaderV2
prepara il flusso sorgente per la crittografia prima del caricamento. La creazione di uno è simile a utilizzare Aws\S3\MultipartUploader
e Aws\S3\Crypto\S3EncryptionClientV2
. S3EncryptionMultipartUploaderV2
può gestire la stessa opzione '@MetadataStrategy'
come S3EncryptionClientV2
, oltre a tutte le configurazioni '@CipherOptions'
disponibili.
$kmsKeyId = 'kms-key-id'; $materialsProvider = new KmsMaterialsProviderV2( new KmsClient([ 'region' => 'us-east-1', 'version' => 'latest', 'profile' => 'default', ]), $kmsKeyId ); $bucket = 'the-bucket-name'; $key = 'the-upload-key'; $cipherOptions = [ 'Cipher' => 'gcm' 'KeySize' => 256, // Additional configuration options ]; $multipartUploader = new S3EncryptionMultipartUploaderV2( new S3Client([ 'region' => 'us-east-1', 'version' => 'latest', 'profile' => 'default', ]), fopen('large-file-to-encrypt.txt', 'r'), [ '@MaterialsProvider' => $materialsProvider, '@CipherOptions' => $cipherOptions, 'bucket' => $bucket, 'key' => $key, ] ); $multipartUploader->upload();
Nota
Oltre ad Amazon S3 eAWS KMSin base a errori di servizio, potresti ricevereInvalidArgumentException
oggetti se il tuo'@CipherOptions'
non sono configurati correttamente.