Amazon Web Services (AWS) là nền tảng cloud computing lớn nhất thế giới, cung cấp hơn 200 dịch vụ từ data centers trên toàn cầu. Ra mắt năm 2006, AWS hiện chiếm khoảng 32% thị phần cloud (2024), vượt xa Microsoft Azure (~22%) và Google Cloud (~11%).
Mô hình Cloud Computing
AWS hoạt động theo mô hình pay-as-you-go — bạn chỉ trả tiền cho những gì bạn dùng, không cần đầu tư hạ tầng ban đầu. Có 3 mô hình dịch vụ chính:
Mô hình
Viết tắt
Bạn quản lý
AWS quản lý
Ví dụ
Infrastructure as a Service
IaaS
OS, Runtime, App, Data
Hardware, Network
EC2
Platform as a Service
PaaS
App, Data
Hardware, OS, Runtime
Elastic Beanstalk, RDS
Software as a Service
SaaS
Chỉ dùng
Tất cả
Gmail, Salesforce
Mô hình trách nhiệm chia sẻ (Shared Responsibility Model)
Đây là một trong những điểm hay ra đề nhất ở phần nền tảng. Cần thuộc lòng cả 3 khái niệm và sự khác biệt giữa chúng.
Region
Region là một khu vực địa lý vật lý độc lập, nơi AWS đặt cụm data centers. Mỗi Region hoàn toàn độc lập với các Region khác — lỗi ở một Region không ảnh hưởng Region khác.
Cách chọn Region: Dựa trên 4 yếu tố:
Compliance/Pháp lý: Dữ liệu có được phép rời khỏi quốc gia không?
Latency: Region gần users nhất
Service availability: Không phải service nào cũng có ở mọi Region
Pricing: Giá khác nhau giữa các Region
Lưu ý quan trọng: Đa số AWS services là Region-scoped — S3 bucket ở us-east-1 hoàn toàn tách biệt với bucket cùng tên ở ap-southeast-1. Một số services là Global (IAM, Route 53, CloudFront, WAF) — không gắn với Region cụ thể.
Availability Zone (AZ)
Mỗi Region ( ví du: ap-southeast-2) gồm tối thiểu 2, thường là 3–6 AZ. Mỗi AZ là một hoặc nhiều data center vật lý riêng biệt với:
Nguồn điện độc lập
Kết nối mạng riêng
Hệ thống làm mát riêng
Các AZ trong cùng Region được kết nối bằng low-latency private network (< 1ms). Đây là nền tảng của High Availability — deploy app trên nhiều AZ để chịu được failure của một AZ.
Edge Location & Points of Presence
Edge Locations (hay Points of Presence) là các điểm phân phối nội dung của AWS, nhiều hơn rất nhiều so với số Region (700+ PoPs tại 90+ thành phố). Dùng bởi:
CloudFront (CDN): Cache content gần users nhất → giảm latency
Route 53 (DNS): Phân giải DNS nhanh
AWS Shield: DDoS protection
Lambda@Edge: Chạy Lambda code gần users
Không có AWS Region ở Hà Nội hay TP.HCM, nhưng có Edge Location→ CloudFront cache content ở đây → users Việt Nam trải nghiệm tốt hơn
Tổng quan hạ tầng
AWS Global Infrastructure: Hạ tầng toàn cầu của AWS, được phân bố trên nhiều khu vực
Regions (~39 regions): Các khu vực địa lý độc lập, mỗi region chứa đầy đủ các AWS services
Availability Zones (~123 AZs) (2–6 mỗi region): Các trung tâm dữ liệu tách biệt trong cùng một region, giúp tăng tính sẵn sàng và fault tolerance
Data Centers: Hạ tầng vật lý thực tế (server, network, storage) nằm bên trong mỗi AZ
Edge Locations (700+): Dùng cho cache (CDN) và DNS, không dùng để chạy các service như EC2 hay RDS
Cách truy cập AWS
Có ba cách để tương tác với AWS — cả ba đều gọi cùng một AWS API bên dưới, chỉ khác nhau về interface.
AWS Management Console — giao diện web, bảo vệ bằng password + MFA
AWS CLI (Command Line Interface) — dòng lệnh, bảo vệ bằng access keys
AWS SDK (Software Developer Kit) — tích hợp vào code, bảo vệ bằng access keys
Access Keys được tạo qua AWS Console, bảo mật như mật khẩu — không chia sẻ cho ai.
Access Key ID tương đương username
Secret Access Key tương đương password
AWS CLI (Command Line Interface)
Công cụ dòng lệnh cho phép tương tác với AWS services thông qua command-line shell, với truy cập trực tiếp vào public APIs của AWS. Mã nguồn mở tại github.com/aws/aws-cli.
# Tạo profile riêng
aws configure --profile dev-account
aws configure --profile prod-account
# Dùng profile cụ thể
aws s3 ls --profile dev-account
aws ec2 describe-instances --profile prod-account
# Hoặc set environment variable
export AWS_PROFILE=dev-account
# Tạo profile riêngaws configure --profile dev-accountaws configure --profile prod-account# Dùng profile cụ thểaws s3 ls --profile dev-accountaws ec2 describe-instances --profile prod-account# Hoặc set environment variableexport AWS_PROFILE=dev-account
AWS SDK (Software Development Kit)
Bộ thư viện API theo từng ngôn ngữ lập trình, cho phép truy cập và quản lý AWS services trực tiếp từ trong ứng dụng của bạn.
IoT Device SDKs: Embedded C, Arduino
SDKs: JS, Python, PHP, .NET, Ruby, Java, Go, Node.js, C++
Mobile SDKs: Android, iOS
Ví dụ:
# Python SDK: boto3
# Cài đặt
# pip install boto3
import boto3
# Tạo S3 client
# SDK tự động lấy credentials từ:
# 1. Environment variables (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
# 2. ~/.aws/credentials file
# 3. IAM Role (khi chạy trên EC2/Lambda/ECS)
s3 = boto3.client('s3', region_name='ap-southeast-1')
# List buckets
response = s3.list_buckets()
for bucket in response['Buckets']:
print(f" {bucket['Name']}")
# Tạo bucket
s3.create_bucket(
Bucket='my-bucket',
CreateBucketConfiguration={'LocationConstraint': 'ap-southeast-1'}
)
# Python SDK: boto3# Cài đặt# pip install boto3import boto3# Tạo S3 client# SDK tự động lấy credentials từ:# 1. Environment variables (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)# 2. ~/.aws/credentials file# 3. IAM Role (khi chạy trên EC2/Lambda/ECS)s3 = boto3.client('s3', region_name='ap-southeast-1')# List bucketsresponse = s3.list_buckets()for bucket in response['Buckets']: print(f" {bucket['Name']}")# Tạo buckets3.create_bucket( Bucket='my-bucket', CreateBucketConfiguration={'LocationConstraint': 'ap-southeast-1'})
AWS CloudShell
CloudShell là terminal trình duyệt ngay trong AWS Console — không cần cài AWS CLI, credentials tự động từ console session của bạn. Có sẵn 1GB persistent storage. Rất tiện để test nhanh.
AWS IAM — Identity and Access Management
Users & Groups
IAM là dịch vụ quản lý danh tính và quyền truy cập, hoạt động ở phạm vi Global (không theo region).
Root account được tạo mặc định khi đăng ký AWS. Không nên dùng để làm việc hàng ngày và tuyệt đối không chia sẻ cho ai.
Users đại diện cho từng người trong tổ chức. Users có thể được gom vào Groups để quản lý quyền tập trung. Một số lưu ý quan trọng:
Users không bắt buộc phải thuộc group nào.
Một user có thể thuộc nhiều group cùng lúc.
Groups chỉ chứa users, không chứa group khác.
Permissions (Phân quyền)
Quyền được định nghĩa qua JSON policies — gán trực tiếp cho user hoặc cho group.
AWS áp dụng nguyên tắc Least Privilege: chỉ cấp đúng quyền cần thiết, không cấp thừa.
Cấu trúc một policy JSON gồm:
Version — phiên bản ngôn ngữ policy
Id — định danh policy (tùy chọn)
Statement — một hoặc nhiều câu lệnh phân quyền (bắt buộc)
Mỗi Statement bao gồm:
Sid — định danh statement (tùy chọn)
Effect — Allow hoặc Deny
Principal — account/user/role được áp dụng
Action — danh sách hành động được cho phép hoặc từ chối
Resource — tài nguyên mà action được áp dụng lên
Condition — điều kiện để policy có hiệu lực (tùy chọn)
Quyền được kế thừa theo cơ chế cộng dồn: nếu một user thuộc nhiều group, user đó có tổng hợp tất cả quyền từ các group đó. Policy cũng có thể được gán trực tiếp cho user (inline policy), song song với quyền từ group.
Password Policy & MFA
Để bảo vệ tài khoản AWS, có hai lớp bảo mật chính được kết hợp với nhau.
Password Policy cho phép bạn đặt ra các quy tắc mật khẩu bắt buộc cho toàn bộ IAM users: độ dài tối thiểu, yêu cầu ký tự đặc biệt, thời hạn hết hạn, và ngăn tái sử dụng mật khẩu cũ. Mật khẩu càng phức tạp, nguy cơ bị tấn công brute-force càng thấp.
MFA (Multi-Factor Authentication) là lớp bảo vệ thứ hai nằm trên mật khẩu. Nguyên tắc: MFA = thứ bạn biết (mật khẩu) + thứ bạn sở hữu (thiết bị). Ngay cả khi mật khẩu bị lộ, kẻ tấn công vẫn không thể đăng nhập nếu không có thiết bị MFA. AWS hỗ trợ Virtual MFA như Google Authenticator và Authy, cũng như hardware key vật lý như YubiKey.
Hai lớp này bổ sung cho nhau: Password Policy giảm nguy cơ mật khẩu yếu bị đoán ra, còn MFA đảm bảo rằng dù mật khẩu có bị lộ thì tài khoản vẫn an toàn. Nên bật MFA cho tất cả accounts, đặc biệt là Root account.
Một số service trong AWS (như EC2, Lambda) cần truy cập sang service khác (S3, CloudWatch…), và mỗi lần gọi đều phải có credentials hợp lệ.
Nhưng việc nhúng sẵn Access Key vào code là không an toàn và khó quản lý.
Vì vậy, AWS dùng IAM Role: bạn khai báo sẵn quyền trong role, rồi gán role đó cho service sử dụng.
Khi service chạy, AWS sẽ tự cấp credentials tạm thời (có thời hạn) thông qua STS, và tự động xoay vòng mà bạn không cần can thiệp.
Nhờ đó, hệ thống vừa an toàn hơn, vừa không cần quản lý key thủ công.
Cách hoạt động:
EC2 được gán một IAM Role có quyền đọc S3. Khi chạy, EC2 sẽ “assume” role này để lấy credentials tạm thời.
Role chứa policy cho phép s3:GetObject, nên EC2 có thể gọi API S3 để đọc dữ liệu.
👉 Kết quả: EC2 truy cập được S3 mà không cần dùng Access Key trong code giúp tăng tính bảo mật và hạn chế rủi ro lộ key.
Các role phổ biến
EC2 Instance Roles — cấp quyền cho EC2 truy cập các service như S3, DynamoDB, CloudWatch; đây là use case phổ biến nhất.
Lambda Execution Roles — mỗi Lambda cần một role để đọc/ghi dữ liệu, ghi log và gọi service khác; không có role thì chỉ chạy logic đơn thuần.
CloudFormation Roles — cho phép CloudFormation tạo và quản lý resource (EC2, S3, RDS…) thay mặt bạn khi deploy hạ tầng.
IAM Security Tools
Hai công cụ giúp audit và rà soát quyền truy cập trong account.
IAM Credentials Report (cấp account) — báo cáo liệt kê toàn bộ users trong account cùng trạng thái các credentials: mật khẩu, Access Keys, MFA. Dùng để phát hiện tài khoản không dùng nữa hoặc chưa bật MFA.
IAM Access Advisor (cấp user) — hiển thị danh sách service permissions đã cấp cho một user cụ thể và thời điểm cuối cùng user đó truy cập từng service. Dùng để thu hẹp quyền theo nguyên tắc least privilege — nếu một service chưa bao giờ được dùng tới, có thể xóa quyền đó đi.
IAM Guidelines & Best Practices
Không dùng Root account ngoài việc setup AWS ban đầu
Một người dùng thực = một IAM user riêng biệt
Gán users vào groups, gán permissions vào groups — không gán trực tiếp cho từng user
Tạo password policy mạnh
Bật và bắt buộc dùng MFA
Tạo và dùng Roles để cấp quyền cho AWS services
Dùng Access Keys cho truy cập qua CLI / SDK
Audit quyền thường xuyên bằng IAM Credentials Report và IAM Access Advisor
Không bao giờ chia sẻ IAM users và Access Keys
Shared Responsibility Model
Bảo mật trên AWS là trách nhiệm chung giữa AWS và người dùng.
AWS
Customer
Hạ tầng bảo mật mạng toàn cầu
Quản lý và giám sát Users, Groups, Roles, Policies
Phân tích cấu hình và lỗ hổng
Bật MFA trên tất cả accounts
Kiểm tra tuân thủ (compliance)
Rotate Access Keys định kỳ
Dùng IAM tools để phân quyền đúng
Phân tích access patterns và review permissions
Tóm tắt — IAM Section
Thành phần
Vai trò
Users
Mapped với người dùng thực, có password để vào Console
Groups
Chứa users, dùng để gán quyền tập trung
Policies
JSON document định nghĩa quyền cho users hoặc groups