Kỹ sư Cloud & DevOps với đam mê xây dựng hạ tầng tự động hóa.
Share this post
Untitled
Amazon Web Services (AWS) là nền tảng cloud computing lớn nhất thế giới, cung cấp…
T
Trần Phi Long
Admin
11 tháng 7, 202611 phut doc0 views
Table of Contents
No table of contents for this post.
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 (theo số liệu Synergy Research 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)
Security OF the Cloud (AWS)
Security IN the Cloud (Customer)
Physical data centers
Data mã hóa (at rest & in transit)
Hardware, networking
IAM users, roles, policies
Managed services (RDS, DynamoDB…)
Security Groups, NACLs
Hypervisor, host OS
OS patching (với EC2)
—
Application-level security
## Hạ tầng toàn cầu AWS
Đâ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?
– **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í dụ: ap-southeast-1) 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
Thành phần
Mô tả
AWS Global Infrastructure
Hạ tầng toàn cầu của AWS, 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 đủ AWS services
Availability Zones (~123 AZs)
2–6 AZ mỗi region, các trung tâm dữ liệu tách biệt trong cùng region, 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) bên trong mỗi AZ
Edge Locations (700+)
Dùng cho cache (CDN) và DNS, không dùng để chạy 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](https://github.com/aws/aws-cli).
“`bash
# 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
“`
### 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.
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)
Ví dụ một policy document JSON:
“`json
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Sid”: “AllowS3ReadOnly”,
“Effect”: “Allow”,
“Action”: [
“s3:GetObject”,
“s3:ListBucket”
],
“Resource”: [
“arn:aws:s3:::my-bucket”,
“arn:aws:s3:::my-bucket/*”
]
}
]
}
“`
### IAM Policies Inheritance (Kế thừa quyề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.
**Tài liệu tham khảo thêm:**
– [Password Policy — Hướng dẫn đầy đủ cách thiết lập, thay đổi và xóa password policy qua Console, CLI và API](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_passwords_account-policy.html)
– [MFA — Tổng quan về các loại thiết bị MFA được hỗ trợ, cách bật cho Root user và IAM users, cùng khuyến nghị dùng passkey/security key chống phishing](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa.html)
### IAM Roles for Services
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:**
1. 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.
2. 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 |
| Roles | Cấp quyền cho EC2 instances và AWS services |
| Security | MFA + Password Policy |
| AWS CLI | Quản lý AWS services qua dòng lệnh |
| AWS SDK | Quản lý AWS services qua ngôn ngữ lập trình |
| Access Keys | Xác thực khi dùng CLI hoặc SDK |
| Audit | IAM Credentials Report & IAM Access Advisor |