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à.
SDK di crittografia AWS per Python
In questo argomento viene descritto come installare e utilizzare SDK di crittografia AWS per Python. Per dettagli sulla programmazione con SDK di crittografia AWS per Python, consulta il aws-encryption-sdk-python
Prerequisiti
Prima di installare SDK di crittografia AWS per Python, assicurati di avere i seguenti prerequisiti.
- Una versione supportata di Python
-
Python 3.8 o successivo è richiesto dalle SDK di crittografia AWS per Python versioni 3.2.0 e successive.
Nota
La AWS Cryptographic Material Providers Library
(MPL) è una dipendenza opzionale per quella introdotta nella SDK di crittografia AWS per Python versione 4. x. Se intendi installareMPL, devi usare Python 3.11 o successivo. Le versioni precedenti di Python AWS Encryption SDK supportano Python 2.7 e Python 3.4 e versioni successive, ma si consiglia di utilizzare la versione più recente di. AWS Encryption SDK
Per scaricare Python, consulta la pagina relativa ai download di Python
. - Lo strumento di installazione pip per Python
-
pip
è incluso in Python 3.6 e versioni successive, anche se potresti volerlo aggiornare. Per ulteriori informazioni sull'aggiornamento o l'installazionepip
, consulta Installazionenella documentazione. pip
Installazione
Installa la versione più recente di. SDK di crittografia AWS per Python
Nota
È possibile eseguire l'aggiornamento in tutta sicurezza dalla versione 2.0. x e versioni successive alla versione più recente di AWS Encryption SDK senza modifiche al codice o ai dati. Tuttavia, nella versione 2.0 sono state introdotte nuove funzionalità di sicurezza. x non sono retrocompatibili. Per eseguire l'aggiornamento da versioni precedenti alla 1.7. x alla versione 2.0. x e versioni successive, è necessario prima eseguire l'aggiornamento alla versione più recente 1. versione x di AWS Encryption SDK. Per informazioni dettagliate, consultare Migrazione della tuaAWS Encryption SDK.
Utilizzare pip
per installare SDK di crittografia AWS per Python, come illustrato negli esempi seguenti.
- Per installare la versione più recente
-
pip install "aws-encryption-sdk[MPL]"
Il
[MPL]
suffisso installa la libreria AWS Cryptographic Material Providers(). MPL MPLContiene costrutti per crittografare e decrittografare i dati. MPLÈ una dipendenza opzionale per quella introdotta nella SDK di crittografia AWS per Python versione 4. x. Consigliamo vivamente di installareMPL. Tuttavia, se non si intende utilizzare ilMPL, è possibile omettere il [MPL]
suffisso.
Per ulteriori dettagli sull'utilizzo di pip per installare e aggiornare pacchetti, consulta la sezione relativa all'installazione dei pacchetti
SDK di crittografia AWS per Python Richiede la libreria di crittografia (pyca/cryptographypip
automaticamente la libreria su Windows. cryptography
pip
8.1 e versioni successive vengono installate e create automaticamente cryptography
su Linux. Se si utilizza una versione precedente di pip
e l'ambiente Linux non dispone degli strumenti necessari per creare la cryptography
libreria, è necessario installarli. Per ulteriori informazioni, consulta la sezione relativa alla creazione di una crittografia in Linux
Le versioni 1.10.0 e 2.5.0 inseriscono la dipendenza dalla SDK di crittografia AWS per Python crittografia
Per la versione di sviluppo più recente di SDK di crittografia AWS per Python, vai al aws-encryption-sdk-python
Dopo aver installato SDK di crittografia AWS per Python, inizia a guardare il codice di esempio di Python in questa guida.
La versione 4.x di SDK di crittografia AWS per Python
Questa sezione descrive le nuove funzionalità introdotte dalla versione 4. x di SDK di crittografia AWS per Python se utilizzato con la dipendenza opzionale Cryptographic Material Providers Library
Quando si utilizza la versione 4. x SDK di crittografia AWS per Python conMPL, è possibile utilizzare i portachiavi per eseguire la crittografia delle buste. AWS Encryption SDK Fornisce portachiavi compatibili con i provider di chiavi principali utilizzati nelle versioni precedenti. Per ulteriori informazioni, consulta Compatibilità dei keyring. Per esempi sulla migrazione dai fornitori di chiavi master ai portachiavi, consulta Esempi di migrazione nell'aws-encryption-sdk-python
archivio
Gli esempi in questo argomento istanziano il AWS Encryption SDK client con la politica di impegno predefinita,. REQUIRE_ENCRYPT_REQUIRE_DECRYPT
Per ulteriori informazioni, consulta Impostazione della politica di impegno.
AWS KMS portachiavi in SDK di crittografia AWS per Python
I AWS KMS portachiavi di base della serie SDK di crittografia AWS per Python richiedono una KMS sola chiave. Richiedono anche un AWS KMS client, che ti dà l'opportunità di configurare il client per la Regione AWS KMS chiave.
Per creare un AWS KMS portachiavi con una o più chiavi avvolgenti, utilizzate un portachiavi multiplo. SDK di crittografia AWS per Python Ha uno speciale portachiavi multiplo che accetta una o più AWS KMS chiavi e un portachiavi multiplo standard che accetta uno o più portachiavi di qualsiasi tipo supportato. Alcuni programmatori preferiscono utilizzare un metodo con più portachiavi per creare tutti i loro portachiavi e supportano questa strategia. SDK di crittografia AWS per Python
SDK di crittografia AWS per Python Fornisce portachiavi di base a chiave singola e portachiavi multiplo per tutti i casi d'uso tipici, comprese le chiavi multiregionali. AWS KMS
Ad esempio, per creare un AWS KMS portachiavi con una sola AWS KMS chiave, puoi utilizzare il metodo. create_aws_kms_keyring()
# Instantiate the AWS Encryption SDK client client = aws_encryption_sdk.EncryptionSDKClient( commitment_policy=CommitmentPolicy.
REQUIRE_ENCRYPT_REQUIRE_DECRYPT
) # Create a boto3 client for AWS KMS kms_client = boto3.client('kms', region_name="us-west-2") # Optional: Create an encryption context encryption_context: Dict[str, str] = { "encryption": "context", "is not": "secret", "but adds": "useful metadata", "that can help you": "be confident that", "the data you are handling": "is what you think it is", } # Instantiate the material providers library mat_prov: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders( config=MaterialProvidersConfig() ) # Create the AWS KMS keyring keyring_input: CreateAwsKmsKeyringInput = CreateAwsKmsKeyringInput( kms_key_id=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
, kms_client=kms_client ) kms_keyring: IKeyring = mat_prov.create_aws_kms_keyring( input=keyring_input )
Per creare un portachiavi con una o più AWS KMS chiavi, utilizzate il create_aws_kms_multi_keyring()
metodo. Questo esempio utilizza due KMS chiavi. Per specificare una KMS chiave, utilizzate solo il generator
parametro. Il kms_key_ids
parametro che specifica le KMS chiavi aggiuntive è facoltativo.
L'input per questo portachiavi non richiede un AWS KMS client. AWS Encryption SDK Utilizza invece il AWS KMS client predefinito per ogni regione rappresentato da una KMS chiave nel portachiavi. Ad esempio, se la KMS chiave identificata dal valore del generator
parametro si trova nella regione () degli Stati Uniti occidentali (Oregonus-west-2
), AWS Encryption SDK crea un AWS KMS
client predefinito per la us-west-2
regione. Se è necessario personalizzare il AWS KMS client, utilizzare il create_aws_kms_keyring()
metodo.
# Instantiate the AWS Encryption SDK client client = aws_encryption_sdk.EncryptionSDKClient( commitment_policy=CommitmentPolicy.
REQUIRE_ENCRYPT_REQUIRE_DECRYPT
) # Optional: Create an encryption context encryption_context: Dict[str, str] = { "encryption": "context", "is not": "secret", "but adds": "useful metadata", "that can help you": "be confident that", "the data you are handling": "is what you think it is", } # Instantiate the material providers library mat_prov: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders( config=MaterialProvidersConfig() ) # Create the AWS KMS keyring kms_multi_keyring_input: CreateAwsKmsMultiKeyringInput = CreateAwsKmsMultiKeyringInput( generator=default_region_kms_key_id
, kms_key_ids=[second_region_kms_key_id
] ) kms_multi_keyring: IKeyring = mat_prov.create_aws_kms_multi_keyring( input=kms_multi_keyring_input )
SDK di crittografia AWS per Python supporta AWS KMS portachiavi che utilizzano la crittografia simmetrica (SYMMETRIC_DEFAULT
) o chiavi asimmetriche. RSA KMS AWS KMS i portachiavi creati con chiavi asimmetriche possono contenere solo una coppia di RSA KMS chiavi.
Per crittografare con un RSA AWS KMS portachiavi asimmetrico, non hai bisogno di kms: GenerateDataKey o KMS:Encrypt perché devi specificare il materiale della chiave pubblica che desideri utilizzare per la crittografia quando crei il portachiavi. Non vengono effettuate chiamate durante la crittografia con questo portachiavi. AWS KMS Per decrittografare con un portachiavi asimmetrico RSA AWS KMS , è necessaria l'autorizzazione KMS:Decrypt.
Per creare un portachiavi asimmetrico, devi fornire la chiave pubblica e la chiave privata della tua RSA AWS KMS chiave asimmetrica. ARN RSA KMS La chiave pubblica deve essere codificata. PEM L'esempio seguente crea un AWS KMS portachiavi con una coppia di chiavi asimmetricaRSA.
# Instantiate the AWS Encryption SDK client client = aws_encryption_sdk.EncryptionSDKClient( commitment_policy=CommitmentPolicy.
REQUIRE_ENCRYPT_REQUIRE_DECRYPT
) # Optional: Create an encryption context encryption_context: Dict[str, str] = { "encryption": "context", "is not": "secret", "but adds": "useful metadata", "that can help you": "be confident that", "the data you are handling": "is what you think it is", } # Instantiate the material providers library mat_prov: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders( config=MaterialProvidersConfig() ) # Create the AWS KMS keyring keyring_input: CreateAwsKmsRsaKeyringInput = CreateAwsKmsRsaKeyringInput( public_key=public_key
, kms_key_id=kms_key_id
, encryption_algorithm="RSAES_OAEP_SHA_256
", kms_client=kms_client ) kms_rsa_keyring: IKeyring = mat_prov.create_aws_kms_rsa_keyring( input=keyring_input )
Contesti di crittografia richiesti nella versione 4.x
Quando si utilizza la versione 4. x di SDK di crittografia AWS per Python conMPL, è possibile utilizzare il contesto di crittografia richiesto CMM per richiedere contesti di crittografia nelle operazioni crittografiche. Un contesto di crittografia è un insieme di coppie chiave-valore non segrete. Il contesto di crittografia è associato crittograficamente ai dati crittografati in modo che sia necessario lo stesso contesto di crittografia per decrittografare il campo. Quando si utilizza il contesto di crittografia richiestoCMM, è possibile specificare una o più chiavi del contesto di crittografia richieste (chiavi obbligatorie) che devono essere incluse in tutte le chiamate di crittografia e decrittografia.
Nota
Il contesto di crittografia richiesto CMM è supportato solo dalle seguenti versioni:
-
Versione 3. x del SDK di crittografia AWS per Java
-
Versione 4. x del AWS Encryption SDK modulo. NET
-
Versione 4. x di SDK di crittografia AWS per Python, se utilizzato con la dipendenza opzionale Cryptographic Material Providers Library
(MPL).
Se si crittografano i dati utilizzando il contesto di crittografia richiestoCMM, è possibile decrittografarli solo con una di queste versioni supportate.
Durante la crittografia, AWS Encryption SDK verifica che tutte le chiavi del contesto di crittografia richieste siano incluse nel contesto di crittografia specificato. Segna AWS Encryption SDK i contesti di crittografia specificati. Solo le coppie chiave-valore che non sono chiavi richieste vengono serializzate e archiviate in testo non crittografato nell'intestazione del messaggio crittografato restituito dall'operazione di crittografia.
In decrypt, è necessario fornire un contesto di crittografia che contenga tutte le coppie chiave-valore che rappresentano le chiavi richieste. AWS Encryption SDK Utilizza questo contesto di crittografia e le coppie chiave-valore memorizzate nell'intestazione del messaggio crittografato per ricostruire il contesto di crittografia originale specificato nell'operazione di crittografia. Se AWS Encryption SDK non è possibile ricostruire il contesto di crittografia originale, l'operazione di decrittografia ha esito negativo. Se si fornisce una coppia chiave-valore che contiene la chiave richiesta con un valore errato, il messaggio crittografato non può essere decrittografato. È necessario fornire la stessa coppia chiave-valore specificata in encrypt.
Importante
Valuta attentamente i valori che scegli per le chiavi richieste nel tuo contesto di crittografia. Devi essere in grado di fornire nuovamente le stesse chiavi e i valori corrispondenti al momento di decrypt. Se non riesci a riprodurre le chiavi richieste, il messaggio crittografato non può essere decrittografato.
L'esempio seguente inizializza un AWS KMS portachiavi con il contesto di crittografia richiesto. CMM
# Instantiate the AWS Encryption SDK client client = aws_encryption_sdk.EncryptionSDKClient( commitment_policy=CommitmentPolicy.
REQUIRE_ENCRYPT_REQUIRE_DECRYPT
) # Create your encryption context encryption_context: Dict[str, str] = { "key1": "value1", "key2": "value2", "requiredKey1": "requiredValue1", "requiredKey2": "requiredValue2" } # Create a list of required encryption context keys required_encryption_context_keys: List[str] = ["requiredKey1", "requiredKey2"] # Instantiate the material providers library mpl: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders( config=MaterialProvidersConfig() ) # Create the AWS KMS keyring keyring_input: CreateAwsKmsKeyringInput = CreateAwsKmsKeyringInput( kms_key_id=kms_key_id, kms_client=boto3.client('kms', region_name="us-west-2") ) kms_keyring: IKeyring = mpl.create_aws_kms_keyring(keyring_input) # Create the required encryption context CMM underlying_cmm: ICryptographicMaterialsManager = \ mpl.create_default_cryptographic_materials_manager( CreateDefaultCryptographicMaterialsManagerInput( keyring=kms_keyring ) ) required_ec_cmm: ICryptographicMaterialsManager = \ mpl.create_required_encryption_context_cmm( CreateRequiredEncryptionContextCMMInput( required_encryption_context_keys=required_encryption_context_keys, underlying_cmm=underlying_cmm, ) )