S3 là service đơn giản nhất trên AWS, và cũng là service gây ra nhiều vụ rò rỉ dữ liệu nhất. Accenture 2017: S3 bucket public chứa private keys và customer data. Hàng trăm công ty khác: bucket policy sai một dấu *, public access block chưa bật, encryption không enforced → toàn bộ dữ liệu user public.
S3 lưu trữ hơn 280 trillion objects, xử lý hàng triệu request mỗi giây. Độ bền 99.999999999% (11 số 9) — nghĩa là nếu bạn lưu 10 triệu objects, trung bình 10,000 năm mới mất 1 object.
flowchart TB
Bucket["S3 Bucket<br/>global unique name"]
subgraph "Object Model"
Key["Key: avatars/user123.jpg"]
Value["Value: binary data + metadata"]
Version["VersionId (khi versioning bật)"]
end
subgraph "Security Layers"
BPA["Block Public Access<br/>4 settings · account + bucket"]
Enc["Default Encryption<br/>SSE-S3 · SSE-KMS · DSSE-KMS"]
Policy["Bucket Policy<br/>IAM language + Principal"]
VPCE["VPC Endpoint<br/>keep traffic off internet"]
end
Bucket --> Key
Bucket --> BPA
Bucket --> Enc
Bucket --> Policy
Bucket --> VPCE
S3 không phải filesystem
S3 là object storage, không phải filesystem:
- Flat namespace:
/chỉ là ký tự trong key, không có directory tree thực sự - Immutable object: muốn “sửa” object → upload object mới (ghi đè toàn bộ)
- Strong consistency (từ 12/2020): read-after-write cho PUT, read-after-delete cho DELETE
- No partial updates: không thể append hoặc modify 1 phần của object
Encryption: 3 lựa chọn (sắp còn 3)
| Mode | Key Management | CloudTrail Audit? | Cost |
|---|---|---|---|
| SSE-S3 | AWS managed (AES-256) | Không | Miễn phí |
| SSE-KMS | AWS KMS (Customer Managed Key) | Có — mọi encrypt/decrypt đều có log | $1/key/tháng + API calls |
| DSSE-KMS | AWS KMS (dual-layer encryption) | Có | Như KMS + thêm cost |
| SSE-C | Bạn (client-provided key) | Không |
BucketKey (BucketKeyEnabled: true): Giảm KMS API calls từ 1 call/object xuống 1 call/bucket, tiết kiệm ~90% KMS cost cho bucket có nhiều object.
aws s3api put-bucket-encryption --bucket myapp-data --server-side-encryption-configuration '{
"Rules": [{
"ApplyServerSideEncryptionByDefault": {
"SSEAlgorithm": "aws:kms",
"KMSMasterKeyID": "arn:aws:kms:ap-southeast-1:123456789012:key/xxx"
},
"BucketKeyEnabled": true
}]
}'
Enforce encryption + HTTPS bằng bucket policy
{
"Sid": "DenyUnencryptedUploads",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::myapp-data/*",
"Condition": {
"StringNotEquals": { "s3:x-amz-server-side-encryption": "aws:kms" }
}
}
Block Public Access: 4 settings, 4 scope
BPA có 3 scope: Account → Bucket → Access Point. AWS lấy setting restrict nhất. Từ 04/2023, BPA mặc định ON cho bucket mới.
aws s3api put-public-access-block --bucket myapp-data --public-access-block-configuration \
BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true
Nếu cần public distribution → CloudFront + OAC (Bài 15). Bucket giữ private, CloudFront là lớp public duy nhất.
Versioning + MFA Delete + Object Lock
aws s3api put-bucket-versioning --bucket myapp-data --versioning-configuration Status=Enabled,MFADelete=Enabled --mfa "arn:aws:iam::...:mfa/root-device 123456"
aws s3api put-object-lock-configuration --bucket myapp-data --object-lock-configuration '{
"ObjectLockEnabled": "Enabled",
"Rule": {"DefaultRetention": {"Mode": "GOVERNANCE", "Days": 365}}
}'
Versioning + MFA Delete = bảo hiểm chống ransomware và xóa nhầm. Object Lock = WORM (Write Once Read Many) cho compliance.
S3 là object storage, không phải filesystem — và Block Public Access mới là lớp bảo vệ đầu tiên, không phải encryption.
Bài sau: Phần 7: S3 nâng cao — lifecycle, replication, pre-signed URL, event