Шифрование на стороне сервера и шифрование на стороне клиента — это два подхода к защите данных, хранящихся в Amazon S3 (Simple Storage Service). Давайте рассмотрим каждый метод и приведем несколько примеров кода.
-
Шифрование на стороне сервера (SSE).
Шифрование на стороне сервера означает, что шифрование и дешифрование данных выполняются сервером. Amazon S3 предоставляет три варианта SSE:а. SSE-S3: Amazon S3 управляет ключами шифрования.
import boto3 s3 = boto3.client('s3') response = s3.put_object( Bucket='your_bucket_name', Key='your_object_key', Body='your_data', ServerSideEncryption='AES256' )
б. SSE-KMS: Amazon Key Management Service (KMS) управляет ключами шифрования.
import boto3 s3 = boto3.client('s3') response = s3.put_object( Bucket='your_bucket_name', Key='your_object_key', Body='your_data', ServerSideEncryption='aws:kms', SSEKMSKeyId='your_kms_key_id' )
в. SSE-C: вы управляете ключами шифрования за пределами Amazon S3.
import boto3 import base64 s3 = boto3.client('s3') key = base64.b64encode(b'your_encryption_key') response = s3.put_object( Bucket='your_bucket_name', Key='your_object_key', Body='your_data', ServerSideEncryption='AES256', SSECustomerAlgorithm='AES256', SSECustomerKey=key, SSECustomerKeyMD5=base64.b64encode(hashlib.md5(b'your_encryption_key').digest()).decode() )
-
Шифрование на стороне клиента.
Шифрование на стороне клиента означает, что шифрование и дешифрование данных происходит на стороне клиента перед их загрузкой в Amazon S3. Для реализации шифрования на стороне клиента вы можете использовать различные библиотеки или платформы шифрования.Пример использования библиотеки
boto3
и библиотекиcryptography
для шифрования:import boto3 from cryptography.fernet import Fernet # Generate a random encryption key key = Fernet.generate_key() # Encrypt the data using the encryption key f = Fernet(key) encrypted_data = f.encrypt(b'your_data') # Upload the encrypted data to Amazon S3 s3 = boto3.client('s3') response = s3.put_object( Bucket='your_bucket_name', Key='your_object_key', Body=encrypted_data )
Чтобы получить данные, вам необходимо выполнить обратный процесс расшифровки на стороне клиента.