2.2.3 Client-side vs Server-side Encryption

Client-side vs Server-side Encryption

So sánh

Server-side (SSE)Client-side
Encrypt byAWS service (S3, EBS, RDS)Application trước khi gửi
Decrypt byAWS serviceApplication sau khi nhận
Data in transit to AWSPlaintext (protected by TLS)Already encrypted
Key managementAWS/KMS/CustomerApplication
ComplexityLowHigh
Use caseMost workloadsStrict compliance, zero-trust

Server-side Encryption (S3)

Client → (TLS) → S3 → Encrypt with key → Store encrypted
Client ← (TLS) ← S3 ← Decrypt with key ← Read encrypted
TypeKeyAudit
SSE-S3AWS manages
SSE-KMSKMS key✅ CloudTrail
SSE-CCustomer provides per request

Client-side Encryption

Client → Encrypt locally → (TLS) → S3 → Store (already encrypted)
Client ← Decrypt locally ← (TLS) ← S3 ← Read (still encrypted)
# Client-side encryption with AWS Encryption SDK
import aws_encryption_sdk

client = aws_encryption_sdk.EncryptionSDKClient()
kms_provider = aws_encryption_sdk.StrictAwsKmsMasterKeyProvider(
    key_ids=['arn:aws:kms:us-east-1:123456789012:key/key-id']
)

# Encrypt
ciphertext, header = client.encrypt(
    source=plaintext_data,
    key_provider=kms_provider
)

# Upload encrypted data to S3
s3.put_object(Bucket='bucket', Key='file', Body=ciphertext)

Khi nào dùng Client-side?

ScenarioRecommendation
Standard complianceSSE-KMS (server-side)
Strict zero-trustClient-side
End-to-end encryptionClient-side
Multi-cloudClient-side (portable)
Simple setupSSE-S3 (server-side)

Exam Tip: Server-side = simple, AWS manages. Client-side = application manages, data encrypted before reaching AWS. SSE-KMS = best balance (audit + managed keys). SSE-C = customer provides key mỗi request (HTTPS bắt buộc).