Ngân hàng đề — AWS Certified SysOps Administrator Associate
Tìm thấy 936 câu.
An application server running on an Amazon EC2 instance recently failed due to an Amazon EBS volume running out of space. The failure caused an outage of a critical application.
Which steps should a SysOps Administrator take to prevent this from happening again?
-
A
Install the Amazon CloudWatch agent on the EC2 instance to collect disk metrics. Create a CloudWatch alarm to notify the Administrator when disk space is running low.
-
B
Enable detailed monitoring for the EC2 instances. Create an Amazon CloudWatch alarm to notify the Administrator when disk space is running low.
-
C
Configure Amazon CloudWatch Events to monitor Amazon EC2 status checks for the status of the EBS volumes. Post a notification to an Amazon SNS topic to notify the if the disk is impaired.
-
D
Create an AWS Lambda function that monitors the disk space metrics using the Amazon EBS API. Post a notification to an Amazon SNS topic when disk space is running low.
Xem giải thích
Đáp án
A — Cài CloudWatch agent lên instance để thu thập chỉ số ĐĨA, rồi tạo alarm cảnh báo khi dung lượng còn thấp.
Vì sao đúng
Có một sự thật nền tảng quyết định câu này: CloudWatch không tự biết ổ đĩa của bạn còn bao nhiêu chỗ trống.
⚠ Điểm mấu chốt — hypervisor không nhìn thấy bên trong hệ điều hành:
CloudWatch mặc định thu chỉ số từ HYPERVISOR
↓
Thấy được:
DiskReadBytes, DiskWriteBytes,
VolumeReadOps, VolumeWriteOps
→ tức là HOẠT ĐỘNG đọc ghi
↓
KHÔNG thấy được:
dung lượng đã dùng / còn trống
→ vì đó là thông tin của FILE SYSTEM
bên trong hệ điều hành khách
↓
→ phải cài AGENT mới lấy được
⚠ Chỉ số cần theo dõi và cấu hình agent:
{
"metrics": {
"metrics_collected": {
"disk": {
"measurement": ["used_percent", "inodes_free"],
"resources": ["/"],
"metrics_collection_interval": 60
},
"mem": { "measurement": ["mem_used_percent"] }
}
}
}
disk_used_percent → phần trăm đã dùng
inodes_free → HẾT INODE cũng gây lỗi
"no space left" dù còn dung lượng
⚠ Và alarm nên có hai bậc:
80% → cảnh báo sớm, còn thời gian xử lý
90% → khẩn cấp, gọi đội trực
↓
Kèm hành động tự động:
SSM Automation dọn log cũ,
hoặc MỞ RỘNG volume (EBS Elastic Volumes)
rồi resize file system — KHÔNG cần dừng máy
Xem thêm câu #11833 (cùng lô): cùng nguyên tắc — chỉ số bộ nhớ và đĩa đều cần CloudWatch agent.
Vì sao các phương án khác sai
-
B (bật detailed monitoring rồi tạo alarm cho dung lượng đĩa) — đây là phương án gần nhất và là bẫy phổ biến nhất của chủ đề này: detailed monitoring chỉ tăng tần suất từ 5 phút xuống 1 phút cho các chỉ số đã có sẵn. Nó không thêm chỉ số mới nào, nên vẫn không có
disk_used_percent. -
C (dùng CloudWatch Events theo dõi EC2 status check để biết tình trạng EBS volume) — status check kiểm tra máy có phản hồi được không, không kiểm tra dung lượng còn trống. Một máy đầy ổ vẫn qua status check bình thường.
-
D (viết Lambda dùng EBS API để theo dõi chỉ số dung lượng) — EBS API không cung cấp thông tin dung lượng đã dùng; nó chỉ biết kích thước volume, còn phần đã dùng nằm ở file system. Và đây cũng là cách tự làm lại thứ agent đã có sẵn.
Ghi nhớ
⚠ Chỉ số có sẵn ↔ chỉ số cần agent — bảng phải thuộc: | Có sẵn (hypervisor) | Cần CloudWatch agent | |---|---| | CPUUtilization | mem_used_percent | | NetworkIn / NetworkOut | disk_used_percent | | DiskReadBytes / DiskWriteOps (hoạt động) | inodes_free | | StatusCheckFailed_Instance / _System | swap_used_percent | | EBSIOBalance%, EBSByteBalance% | log hệ điều hành và ứng dụng, procstat |
Từ khoá nhận diện:
"dung lượng đĩa còn lại", "bộ nhớ" → CloudWatch agent, LUÔN LUÔN "detailed monitoring" → chỉ đổi TẦN SUẤT, không thêm chỉ số "CPU, mạng" → có sẵn "status check" → máy có sống không, không phải dung lượng "tự động mở rộng ổ khi gần đầy" → EBS Elastic Volumes + SSM Automation
| Ba loại status check của EC2 | Kiểm gì |
|---|---|
| System status check | hạ tầng AWS bên dưới — mất điện, mạng, phần cứng |
| Instance status check | hệ điều hành khách — không boot, hết bộ nhớ nặng, sai mạng |
| EBS status check | volume đính kèm có khoẻ không |
| Không kiểm | dung lượng đĩa, mức bộ nhớ, sức khoẻ ứng dụng |
| Mở rộng volume EBS mà không dừng máy | Bước |
|---|---|
| 1 | modify-volume --size N — Elastic Volumes, không cần dừng máy |
| 2 | Chờ trạng thái optimizing (dùng được ngay) |
| 3 | Mở rộng partition: growpart /dev/nvme0n1 1 |
| 4 | Mở rộng file system: resize2fs (ext4) hoặc xfs_growfs (XFS) |
| Lưu ý | phải chờ 6 giờ trước lần sửa tiếp theo trên cùng volume |
| Ngăn ổ đầy — không chỉ cảnh báo | Cách |
|---|---|
| Xoay log | logrotate, và đẩy log lên CloudWatch Logs rồi xoá bản địa phương |
| Dọn tự động | SSM Automation document chạy khi alarm bật |
| Tách volume riêng cho dữ liệu | ổ root đầy nguy hiểm hơn nhiều |
| Ổ root đủ rộng ngay từ đầu | đừng để 8 GB cho máy production |
| Theo dõi | inodes_free — rất nhiều tệp nhỏ cũng gây lỗi hết chỗ |
| Cài agent cho cả đội máy | Cách |
|---|---|
| SSM Distributor | cài và cập nhật agent hàng loạt |
| Cấu hình trong Parameter Store | một cấu hình dùng chung, sửa một chỗ |
| State Manager | bảo đảm agent luôn được cài và đang chạy |
| Quyền | CloudWatchAgentServerPolicy trong instance profile |
| Golden AMI | cài sẵn agent để máy mới có ngay |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Agent có chạy không | amazon-cloudwatch-agent-ctl -a status | | Chỉ số đã lên chưa | CloudWatch → Metrics → namespace CWAgent | | Ổ còn bao nhiêu chỗ | trên máy: df -h và df -i |
Và một nguyên nhân rất hay bị bỏ sót khi máy báo hết chỗ: cạn INODE chứ không phải cạn dung lượng. df -h báo còn trống rất nhiều trong khi mọi thao tác ghi đều lỗi "No space left on device" — đó là dấu hiệu của một thư mục chứa hàng triệu tệp nhỏ, thường là log hoặc cache của phiên làm việc, và chỉ df -i mới cho thấy điều đó.
A SysOps Administrator plans to use a single AWS CloudFormation template to create and manage stacks across multiple AWS accounts and regions with a single operation.
What feature of AWS CloudFormation will help the Administrator to accomplish this?
-
A
Nested stacks
-
B
Stack policies
-
C
StackSets
-
D
Change sets
Xem giải thích
Đáp án
C — StackSets.
Vì sao đúng
Đề nêu chính xác định nghĩa của StackSets: một template, tạo và quản lý stack ở NHIỀU TÀI KHOẢN và NHIỀU REGION, bằng MỘT thao tác.
⚠ Điểm mấu chốt — StackSets mở rộng CloudFormation ra hai chiều:
Stack thường
↓
Một tài khoản, một Region
↓
StackSets
↓
Một template + danh sách TÀI KHOẢN + danh sách REGION
↓
CloudFormation tạo một STACK INSTANCE
ở mỗi ô của ma trận đó
↓
Ví dụ: 20 tài khoản × 3 Region = 60 stack
→ tạo và cập nhật bằng MỘT lệnh
⚠ Hai chế độ quyền — điểm hay ra thi:
SELF-MANAGED
↓
Bạn tự tạo hai IAM role:
AWSCloudFormationStackSetAdministrationRole
(ở tài khoản quản trị)
AWSCloudFormationStackSetExecutionRole
(ở MỖI tài khoản đích)
↓
Dùng khi các tài khoản KHÔNG ở cùng tổ chức
SERVICE-MANAGED ← khuyến nghị
↓
Tích hợp thẳng với AWS Organizations
→ khai OU thay vì từng account id
→ AWS lo phần role
↓
AUTO-DEPLOYMENT:
tài khoản MỚI vào OU → TỰ ĐỘNG được triển khai
tài khoản rời OU → tự gỡ stack
⚠ Kiểm soát mức độ rủi ro khi triển khai:
MaxConcurrentCount / MaxConcurrentPercentage
↓
→ bao nhiêu tài khoản triển khai cùng lúc
FailureToleranceCount / Percentage
↓
→ hỏng bao nhiêu thì DỪNG toàn bộ
↓
Cộng với RegionOrder
↓
→ triển khai Region ít rủi ro trước,
production sau
Xem thêm câu #11857 (cùng lô): cũng về tái sử dụng template CloudFormation. Hai câu bổ sung cho nhau —
Parameterslàm một template dùng được cho nhiều môi trường, StackSets đưa nó ra nhiều tài khoản và Region.
Vì sao các phương án khác sai
-
A (nested stacks) — đây là phương án gần nhất về mức độ hữu ích, nhưng nested stack dùng để chia một template lớn thành các thành phần con dùng lại được, và tất cả vẫn nằm trong một tài khoản, một Region.
-
B (stack policies) — bảo vệ tài nguyên khỏi bị cập nhật hoặc thay thế ngoài ý muốn trong một stack. Không liên quan tới triển khai nhiều nơi.
-
D (change sets) — xem trước thay đổi trước khi áp dụng lên một stack đang tồn tại. Cũng chỉ trong phạm vi một stack.
Ghi nhớ
⚠ Bốn khái niệm CloudFormation dễ lẫn — bảng phải thuộc: | Khái niệm | Việc | |---|---| | StackSets | một template → NHIỀU tài khoản và Region | | Nested stacks | chia nhỏ template lớn thành thành phần dùng lại | | Stack policy | bảo vệ tài nguyên khỏi cập nhật ngoài ý muốn | | Change set | xem trước thay đổi trước khi áp dụng | | Cross-stack reference | stack này đọc Export của stack kia | | Drift detection | phát hiện ai đó sửa tay ngoài CloudFormation |
Từ khoá nhận diện:
"nhiều tài khoản VÀ nhiều Region, một thao tác" → StackSets "chia nhỏ template" → nested stacks "đừng để ai xoá nhầm CSDL khi cập nhật" → stack policy "xem trước sẽ ảnh hưởng gì" → change set "tài khoản mới tự động có cấu hình chuẩn" → StackSets service-managed + auto-deployment
| Dùng StackSets cho việc gì | Ví dụ |
|---|---|
| Luật AWS Config và conformance pack | tuân thủ toàn tổ chức |
| IAM role chuẩn | role cho kiểm toán, cho công cụ CI |
| Cấu hình bảo mật nền | bật CloudTrail, GuardDuty, Security Hub |
| VPC chuẩn | mạng giống nhau ở mọi tài khoản |
| Alarm và log tập trung | chuyển log về tài khoản trung tâm |
| Không hợp | ứng dụng riêng của từng đội — dùng pipeline riêng |
| Tham số kiểm soát triển khai | Nội dung |
|---|---|
MaxConcurrentCount |
bao nhiêu tài khoản cùng lúc |
FailureToleranceCount |
hỏng bao nhiêu thì dừng |
RegionOrder |
thứ tự Region — thử ở Region ít rủi ro trước |
RegionConcurrencyType |
SEQUENTIAL hoặc PARALLEL |
| Nên đặt | tolerance = 0 cho triển khai bảo mật quan trọng |
| Bẫy khi dùng StackSets | Nội dung |
|---|---|
| Thiếu execution role ở tài khoản đích | stack instance hỏng ngay (chế độ self-managed) |
| Dịch vụ chưa có ở Region đó | template phải chịu được, hoặc loại Region ra |
| Chưa bật trusted access với Organizations | chế độ service-managed không dùng được |
--capabilities |
thiếu là hỏng khi template tạo IAM |
| Gỡ stack instance | có tuỳ chọn giữ lại tài nguyên (--retain-stacks) |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Triển khai tới đâu rồi | list-stack-instances --stack-set-name ... | | Chỗ nào hỏng | describe-stack-instance cho tài khoản/Region đó | | Có ai sửa tay không | drift detection trên stack set |
Và một cách triển khai nên áp dụng cho mọi thay đổi diện rộng: đặt RegionOrder với một Region thử nghiệm đứng đầu và FailureToleranceCount bằng 0. Khi ấy một template có lỗi sẽ dừng lại sau đúng một tài khoản đầu tiên, thay vì lan ra sáu mươi stack — và việc dọn dẹp sẽ là một thao tác, chứ không phải một buổi chiều.
A company runs a static website on Amazon S3. A SysOps Administrator noticed that the S3 bucket is receiving a very high rate of read operations. What can the Administrator do to minimize latency and reduce the load on the S3 bucket?
-
A
Use Amazon ElastiCache Redis to cache the static data from the S3 bucket.
-
B
Use cross-region replication (CRR) to replicate the data to another region.
-
C
Migrate to a bucket in an AWS Region that is closer to the end users.
-
D
Create an Amazon CloudFront distribution with the S3 bucket as the origin.
Xem giải thích
Đáp án
D — Tạo một CloudFront distribution với bucket S3 làm origin.
Vì sao đúng
Đề nêu hai vấn đề — độ trễ cao và tải đọc lớn lên bucket — và CloudFront giải cả hai bằng cùng một cơ chế: cache tại biên.
⚠ Điểm mấu chốt — cache giải đồng thời hai bài toán:
Request đầu tiên cho một tệp
↓
Edge location gần người dùng
→ lấy từ bucket S3 (một lần)
→ LƯU LẠI tại edge
↓
Mọi request sau cho cùng tệp đó
↓
→ phục vụ NGAY TẠI EDGE
↓
ĐỘ TRỄ giảm: từ hàng trăm ms xuống vài chục ms
TẢI LÊN S3 giảm: chỉ còn phần cache miss
↓
Với website tĩnh, tỉ lệ cache hit
thường đạt 90-99%
⚠ Và nó còn giải luôn vấn đề chi phí và bảo mật:
CHI PHÍ
↓
- Dữ liệu ra từ CloudFront RẺ HƠN từ S3
- Ít request tới S3 → ít phí GET
- Dữ liệu S3 → CloudFront: MIỄN PHÍ
↓
BẢO MẬT
↓
Origin Access Control (OAC)
→ bucket để RIÊNG TƯ HOÀN TOÀN
→ gắn được WAF, chống DDoS bằng Shield
⚠ Vì sao ElastiCache không dùng được ở đây:
ElastiCache
↓
Cache trong bộ nhớ, nằm TRONG VPC
↓
- Không phục vụ trực tiếp cho trình duyệt
- Cần một ứng dụng đứng giữa để đọc/ghi cache
- Không có mặt ở gần người dùng
↓
→ sai hoàn toàn tầng bài toán
Xem thêm câu #11830, #11868, #11877 và #11847 (cùng lô): đây là chùm năm câu cùng quy về CloudFront cho nội dung tĩnh, mỗi câu nhìn từ một góc — độ trễ địa lý, tải đọc cao, hiệu năng chung, và lỗi 503 do vượt ngưỡng.
Vì sao các phương án khác sai
-
C (chuyển sang bucket ở Region gần người dùng cuối hơn) — đây là phương án gần nhất và giảm được độ trễ cho MỘT nhóm người dùng, nhưng nó làm nhóm khác xa hơn, và không giảm tải đọc chút nào — mọi request vẫn tới thẳng bucket.
-
B (dùng Cross-Region Replication để nhân bản dữ liệu sang Region khác) — tạo được bản sao, nhưng bạn vẫn phải tự định tuyến người dùng tới bucket đúng, và vẫn không có cache nên tải đọc không giảm. Lại tốn thêm chi phí lưu trữ gấp đôi.
-
A (dùng ElastiCache Redis để cache dữ liệu tĩnh từ bucket) — sai tầng kiến trúc: ElastiCache nằm trong VPC, phục vụ ứng dụng, không phục vụ trình duyệt người dùng cuối.
Ghi nhớ
⚠ Các loại cache trên AWS — bảng phải thuộc: | Cache | Ở đâu | Cho ai | |---|---|---| | CloudFront | hơn 400 edge location toàn cầu | người dùng cuối, qua HTTP | | ElastiCache | trong VPC | ứng dụng của bạn (kết quả truy vấn, phiên) | | API Gateway cache | tại Region | phản hồi API | | DAX | trong VPC | chỉ DynamoDB | | Cache trình duyệt | máy người dùng | điều khiển bằng header Cache-Control |
Từ khoá nhận diện:
"tải đọc cao lên S3" → CloudFront "độ trễ cao với người dùng ở xa" → CloudFront "truy vấn CSDL lặp lại tốn kém" → ElastiCache "DynamoDB đọc nhiều, cần dưới mili giây" → DAX "503 SlowDown từ S3" → CloudFront, và chia nhiều prefix
| Điều chỉnh cache của CloudFront | Nội dung |
|---|---|
| Cache policy | quyết định TTL và khoá cache |
| Khoá cache | header, cookie, query string nào được tính vào |
| Nguyên tắc | càng ít thứ trong khoá cache, tỉ lệ hit càng cao |
| Origin request policy | thứ nào được chuyển tiếp xuống origin (không ảnh hưởng khoá cache) |
Cache-Control từ origin |
S3 gửi được, CloudFront tôn trọng |
| Invalidation | xoá cache khi phát hành bản mới — 1.000 đường dẫn miễn phí mỗi tháng |
| Thay vì invalidate, hãy đổi tên tệp | Nội dung |
|---|---|
| Cách làm | app.a1b2c3.js — tên chứa mã băm nội dung |
| Lợi ích | TTL rất dài (một năm) mà vẫn cập nhật ngay |
| Với HTML | TTL ngắn hoặc 0 — nó trỏ tới các tệp có mã băm |
| Kết quả | không cần invalidation, không tốn phí, không có độ trễ |
| Bảo mật cho cặp CloudFront + S3 | Nội dung |
|---|---|
| Origin Access Control (OAC) | cách hiện đại — thay cho OAI |
| Block Public Access | bật ở cả cấp tài khoản và bucket |
| HTTPS bắt buộc | Viewer Protocol Policy: redirect-to-https |
| WAF | gắn được vào distribution |
| Signed URL / signed cookie | cho nội dung cần trả phí hoặc hạn chế |
| Geo restriction | chặn hoặc chỉ cho phép một số quốc gia |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Cache có hiệu quả không | chỉ số CacheHitRate, và header X-Cache | | Tải lên S3 đã giảm chưa | so số request GetObject trước và sau | | Bucket đã đóng chưa | gọi thẳng URL S3 — phải nhận 403 |
Và một điều nên kiểm tra khi tỉ lệ cache hit thấp hơn mong đợi: xem cache policy có đang đưa query string hoặc cookie vào khoá cache không. Chỉ cần một tham số theo dõi quảng cáo được tính vào khoá là mỗi lượt truy cập trở thành một mục cache riêng — và CloudFront khi đó chỉ còn là một lớp trung chuyển tốn tiền, không phải một CDN.
A company is testing a new application which is expected to receive a large amount of traffic. The application runs on Amazon EC2 instances in an Auto Scaling group and uses an Amazon RDS Multi-AZ database. Static content is hosted in an Amazon S3 bucket. During performance testing the application response time increased significantly.
How can a SysOps Administrator increase the performance and scalability of the application?
-
A
Serve the static content from the EC2 instances backed by an Amazon EFS filesystem.
-
B
Use Amazon CloudFront to cache the static content.
-
C
Move the database from Amazon RDS to Amazon ElastiCache for Memcached.
-
D
Use Amazon Route 53 with geolocation routing.
Xem giải thích
Đáp án
B — Dùng Amazon CloudFront để cache nội dung tĩnh.
Vì sao đúng
Kiến trúc trong đề đã khá tốt — ASG, RDS Multi-AZ, S3 cho nội dung tĩnh — nhưng thiếu đúng một mảnh: không có tầng cache trước nội dung tĩnh.
⚠ Điểm mấu chốt — nội dung tĩnh thường chiếm phần lớn số request:
Một trang web điển hình
↓
1 request HTML (động)
+ 30-80 request ảnh, CSS, JS, font (TĨNH)
↓
→ phần tĩnh chiếm 80-95% SỐ REQUEST
và phần lớn KHỐI LƯỢNG dữ liệu
↓
CloudFront đứng trước tất cả
↓
- Phần tĩnh phục vụ tại edge → S3 nhẹ hẳn
- Phần động vẫn về ALB, nhưng ÍT ĐI nhiều
- Kết nối TLS kết thúc tại edge → bắt tay nhanh hơn
↓
→ thời gian phản hồi giảm rõ rệt
→ và hệ thống co giãn tốt hơn hẳn
⚠ CloudFront còn tăng tốc cả phần ĐỘNG:
Ngay cả khi TTL = 0 (không cache)
↓
Request vẫn đi qua ĐƯỜNG TRỤC RIÊNG của AWS
từ edge về origin
↓
- Kết nối tới origin được TÁI SỬ DỤNG
- TLS handshake xảy ra ở edge, gần người dùng
- Đường đi tối ưu hơn internet công cộng
↓
→ API động cũng nhanh hơn 20-50%
⚠ Cấu hình cho kiến trúc của đề:
Hai origin:
S3 → nội dung tĩnh
ALB → nội dung động
↓
Cache behavior:
/static/*, /images/* → S3, TTL dài
/api/* → ALB, TTL 0
/* → ALB, TTL ngắn
↓
Bật nén, dùng OAC cho bucket
Xem thêm câu #11830, #11868, #11876 và #11847 (cùng lô): chùm năm câu về CloudFront cho nội dung tĩnh, khoá nhất quán ở mọi câu.
Vì sao các phương án khác sai
-
A (phục vụ nội dung tĩnh từ chính máy EC2 với EFS làm kho lưu trữ) — đây là phương án gần nhất về mặt "cũng làm được", nhưng nó đi ngược hướng: dồn thêm tải lên đúng tầng đang chậm, thêm độ trễ của EFS vào mỗi request, và mất khả năng mở rộng gần như vô hạn của S3.
-
C (chuyển CSDL từ RDS sang ElastiCache for Memcached) — hiểu sai vai trò của cache: Memcached là kho khoá-giá trị trong bộ nhớ, KHÔNG BỀN, không thay thế được một CSDL quan hệ. (Đặt ElastiCache TRƯỚC RDS thì hợp lý — nhưng đó là "thêm", không phải "chuyển".)
-
D (dùng Route 53 với định tuyến theo vị trí địa lý) — chỉ có ý nghĩa khi hạ tầng được triển khai ở NHIỀU Region. Đề chỉ có một kiến trúc trong một Region.
Ghi nhớ
⚠ Cải thiện hiệu năng — theo đúng tầng bị nghẽn: | Tầng | Triệu chứng | Giải pháp | |---|---|---| | Nội dung tĩnh | ảnh, CSS, JS chậm | CloudFront | | Tầng web | chậm khi đông người | Auto Scaling, máy lớn hơn | | CSDL — đọc | truy vấn đọc chậm | read replica, ElastiCache | | CSDL — ghi | ghi nghẽn | đổi cỡ instance, phân mảnh | | Mã ứng dụng | chậm ở mọi nơi | X-Ray, profiling | | Địa lý | chỉ chậm ở một khu vực | CloudFront, đa Region |
Từ khoá nhận diện:
"nội dung tĩnh trên S3, phản hồi chậm" → CloudFront "đông người thì chậm" → Auto Scaling "CSDL đọc nhiều" → read replica hoặc ElastiCache "định tuyến theo vị trí" → cần NHIỀU Region trước đã "Memcached thay cho CSDL" → luôn SAI — Memcached không bền
| ElastiCache Redis ↔ Memcached | Khác nhau |
|---|---|
| Bền bỉ | Redis CÓ (snapshot, AOF) ↔ Memcached KHÔNG |
| Kiểu dữ liệu | Redis: list, set, sorted set, stream ↔ chỉ chuỗi |
| Sao chép, failover | Redis có ↔ không |
| Đa luồng | Redis chủ yếu đơn luồng ↔ Memcached đa luồng |
| Chọn Redis khi | phiên đăng nhập, bảng xếp hạng, pub/sub, cần bền |
| Chọn Memcached khi | cache đơn giản, cần mở rộng ngang thuần tuý |
| Thứ tự tối ưu một ứng dụng web | Bước |
|---|---|
| 1 | CloudFront cho nội dung tĩnh — rẻ nhất, hiệu quả nhất |
| 2 | Bật nén và tối ưu kích thước ảnh |
| 3 | Auto Scaling đúng cấu hình cho tầng web |
| 4 | ElastiCache trước CSDL cho truy vấn lặp lại |
| 5 | Read replica nếu tải đọc vẫn cao |
| 6 | X-Ray để tìm điểm chậm còn lại trong mã |
| Đo để biết đang nghẽn ở đâu | Chỉ số |
|---|---|
| ALB | TargetResponseTime, RequestCount, HTTPCode_Target_5XX |
| ASG | CPUUtilization, GroupInServiceInstances |
| RDS | CPUUtilization, ReadLatency, DatabaseConnections |
| CloudFront | CacheHitRate, OriginLatency |
| Người dùng thật | CloudWatch RUM |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Nội dung tĩnh chiếm bao nhiêu | mở DevTools, xem tab Network | | Sau khi bật CloudFront | so TargetResponseTime và số request tới ALB | | Cache có hiệu quả không | CacheHitRate — dưới 80% là nên xem lại cache policy |
Và một nguyên tắc nên nhớ khi gặp đề dạng "làm sao tăng hiệu năng": đọc kỹ xem kiến trúc đã có gì rồi. Ở đây ASG, Multi-AZ và S3 đều đã có, nên câu trả lời không nằm ở việc thêm một tầng nữa vào những thứ đã tốt — nó nằm ở mảnh còn thiếu duy nhất, và trong hầu hết đề về ứng dụng web phục vụ nội dung tĩnh, mảnh còn thiếu đó là CloudFront.
A manager has requested that Developers using a dedicated testing account should only be able to use the t2.micro instance type. A SysOps Administrator has created an AWS Organizations SCP and applied it to the correct OU. However, Developers are still able to launch other instance types. What needs to be corrected in the SCP policy statement?
-
A
Change the Effect statement from Deny to Allow
-
B
Change the Resource statement to "arn:aws:ec2:*:*:t2.micro/*"
-
C
Change the Condition statement to StringNotEquals
-
D
Change the date in the version statement to the current date
Xem giải thích
Đáp án
C — Đổi điều kiện thành StringNotEquals.
Vì sao đúng
Chính sách đang Deny nhưng điều kiện viết sai chiều, nên nó không khớp với request nào cả.
⚠ Điểm mấu chốt — Deny phải khớp với những gì bạn muốn CẤM:
Ý định: chỉ cho phép t2.micro
↓
Cách viết SAI (StringEquals):
Deny ec2:RunInstances
Condition: StringEquals
ec2:InstanceType = "t2.micro"
↓
→ CẤM đúng t2.micro
→ mọi loại KHÁC vẫn chạy được
→ ngược hoàn toàn ý định
Cách viết ĐÚNG (StringNotEquals):
Deny ec2:RunInstances
Condition: StringNotEquals
ec2:InstanceType = "t2.micro"
↓
→ CẤM mọi loại KHÔNG PHẢI t2.micro
→ chỉ t2.micro đi qua được
⚠ SCP viết đầy đủ:
{
"Effect": "Deny",
"Action": "ec2:RunInstances",
"Resource": "arn:aws:ec2:*:*:instance/*",
"Condition": {
"StringNotEquals": {
"ec2:InstanceType": "t2.micro"
}
}
}
Lưu ý Resource phải là instance/*
↓
RunInstances chạm tới NHIỀU loại tài nguyên
(instance, volume, network-interface, image…)
↓
Chỉ đặt điều kiện ở instance/*
→ nếu Deny toàn bộ arn:aws:ec2:*:*:*
thì chặn luôn cả volume và ENI
→ không tạo được máy nào cả
⚠ Vì sao Deny + NotEquals thay vì Allow:
SCP mặc định có FullAWSAccess ở root
↓
Thêm một Allow hẹp KHÔNG thu hẹp được gì
(quyền là HỢP của các Allow)
↓
Muốn thu hẹp thì phải:
a) dùng Deny ← an toàn, phổ biến
b) gỡ FullAWSAccess rồi chỉ Allow
→ rủi ro cao, dễ khoá sạch
Xem thêm câu #11865 (lô 128) và #11882 (cùng lô): cùng chủ đề SCP làm trần quyền cho tài khoản trong Organizations.
Vì sao các phương án khác sai
-
A (đổi
Effecttừ Deny sang Allow) — đây là phương án gần nhất về trực giác, nhưng thêm một Allow vào SCP không cấm được gì:FullAWSAccessgắn sẵn ở root vẫn cho phép mọi thứ, và quyền hiệu lực là hợp của các Allow. -
B (đổi
Resourcethànharn:aws:ec2:*:*:t2.micro/*) — không phải một ARN hợp lệ. Loại instance không phải là tài nguyên; nó là thuộc tính của request, nên phải kiểm bằngCondition, không phải bằngResource. -
D (đổi ngày trong trường
Version) —Versionkhông phải ngày tháng bạn tự đặt. Nó là phiên bản ngôn ngữ chính sách, luôn là"2012-10-17"và không được đổi.
Ghi nhớ
⚠ SCP — những điều phải nhớ chính xác: | Đặc điểm | Nội dung | |---|---| | Bản chất | TRẦN quyền tối đa — KHÔNG cấp quyền | | Quyền hiệu lực | SCP ∩ IAM policy | | Không áp cho | tài khoản quản lý (management account) | | Cách siết an toàn | dùng Deny, giữ nguyên FullAWSAccess | | Version | luôn là "2012-10-17" | | Kế thừa | cộng dồn từ root xuống, mọi cấp đều phải cho qua |
Từ khoá nhận diện:
"chỉ được dùng X" → Deny +
StringNotEquals"không được dùng X" → Deny +StringEquals"chặn Region" →aws:RequestedRegionvớiStringNotEquals"bắt buộc gắn tag" → Deny +Nulltrênaws:RequestTag/..."chính sách không có tác dụng" → kiểm tra chiều của Condition trước tiên
| Các toán tử điều kiện — chọn cho đúng chiều | Nội dung |
|---|---|
StringEquals |
khớp khi BẰNG giá trị |
StringNotEquals |
khớp khi KHÁC giá trị |
StringLike / StringNotLike |
có wildcard * |
Null |
khoá CÓ mặt hay KHÔNG trong request |
Bool |
dùng cho aws:SecureTransport, aws:MultiFactorAuthPresent |
ForAllValues: / ForAnyValue: |
khi khoá có nhiều giá trị |
| Các khoá điều kiện hay dùng trong SCP | Nội dung |
|---|---|
ec2:InstanceType |
giới hạn loại máy |
aws:RequestedRegion |
khoá Region — SCP phổ biến nhất |
aws:PrincipalOrgID |
chỉ danh tính trong tổ chức |
aws:RequestTag/<khoá> |
ép gắn tag khi tạo |
aws:ResourceTag/<khoá> |
giới hạn theo tag của tài nguyên |
aws:MultiFactorAuthPresent |
bắt buộc MFA |
RunInstances chạm tới nhiều tài nguyên |
ARN |
|---|---|
instance/* |
nơi đặt điều kiện ec2:InstanceType |
volume/* |
volume gốc và volume phụ |
network-interface/* |
ENI |
image/*, key-pair/*, security-group/*, subnet/* |
các thứ được tham chiếu |
| Bẫy | Deny quá rộng → không tạo nổi máy nào |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | SCP thực sự áp là gì | describe-effective-policy --policy-type SERVICE_CONTROL_POLICY | | Chính sách có chặn đúng không | đăng nhập tài khoản đó rồi thử chạy một loại máy khác | | Vì sao bị chặn | CloudTrail — lỗi AccessDenied ghi rõ "with an explicit deny in a service control policy" |
Và một cách kiểm chứng nhanh hơn nhiều so với thử thật: dùng --dry-run với run-instances. Nó gửi request đầy đủ qua toàn bộ chuỗi kiểm quyền nhưng không tạo máy — nên bạn xác nhận được SCP đang chặn đúng loại nào và cho qua loại nào trong vài giây, thay vì phải khởi chạy rồi huỷ từng máy một.
A team of Data Analysts launched an Amazon RedShift Spectrum cluster. When the team attempts to use the query editor to query data, they received an “[Amazon](500310) Invalid operation: AwsClientException: Failed connect to datacatalog.us-west-2.amazonaws.com:443” error.
How can this issue be resolved?
-
A
Ensure that the Amazon Redshift cluster has access to the necessary AWS service endpoints.
-
B
There is insufficient capacity in the cluster, use Elastic resize to adjust capacity.
-
C
The cluster nodes are running in multiple Availability Zones, launch nodes in a single AZ only.
-
D
The cluster login credentials are incorrect; specify the correct credentials and try again.
Xem giải thích
Đáp án
A — Bảo đảm cụm Redshift TRUY CẬP ĐƯỢC tới các endpoint dịch vụ AWS cần thiết.
Vì sao đúng
Thông báo lỗi đã nói gần như toàn bộ câu trả lời: Failed connect to datacatalog.us-west-2.amazonaws.com:443 — đây là lỗi MẠNG, không phải lỗi dữ liệu hay lỗi quyền.
⚠ Điểm mấu chốt — Redshift Spectrum cần gọi ra ngoài cụm:
Redshift Spectrum truy vấn dữ liệu trong S3
↓
Nhưng nó cần LƯỢC ĐỒ BẢNG trước
↓
Lược đồ nằm ở AWS GLUE DATA CATALOG
(endpoint: datacatalog.<region>.amazonaws.com)
↓
Cụm phải kết nối được tới:
- Glue Data Catalog
- Amazon S3
↓
Cụm nằm trong SUBNET RIÊNG của VPC
↓
→ nếu subnet không có đường ra
thì không gọi được endpoint nào
→ đúng lỗi "Failed connect ... :443"
⚠ Ba cách mở đường, chọn theo yêu cầu bảo mật:
1. VPC ENDPOINT ← an toàn nhất, khuyến nghị
↓
Gateway endpoint cho S3 (MIỄN PHÍ)
Interface endpoint cho Glue (PrivateLink)
↓
→ lưu lượng KHÔNG ra internet
2. NAT GATEWAY
↓
Cụm ở private subnet, đi ra qua NAT
↓
→ chạy được, nhưng qua internet công cộng
và tốn phí xử lý dữ liệu
3. Enhanced VPC Routing + endpoint
↓
Ép MỌI lưu lượng COPY/UNLOAD đi qua VPC
→ kiểm soát và ghi log được bằng flow log
⚠ Đừng quên vế QUYỀN — hay hỏng cùng lúc:
Cụm Redshift cần một IAM ROLE gắn vào nó
↓
Quyền cần:
glue:GetTable, GetPartitions, GetDatabase…
s3:GetObject, s3:ListBucket
↓
Và role phải được khai trong câu lệnh
CREATE EXTERNAL SCHEMA ... IAM_ROLE 'arn:...'
Vì sao các phương án khác sai
-
B (thiếu năng lực, dùng Elastic resize) — đây là phương án gần nhất vì Redshift có vấn đề năng lực thật, nhưng lỗi thiếu năng lực trông hoàn toàn khác: truy vấn chạy chậm, hoặc xếp hàng chờ, chứ không phải "Failed connect" tới một tên miền.
-
C (các node chạy ở nhiều AZ, hãy dồn về một AZ) — cụm Redshift LUÔN nằm trong MỘT Availability Zone; không có cấu hình nhiều AZ để mà sửa.
-
D (sai thông tin đăng nhập) — sai thông tin đăng nhập trả về lỗi xác thực rõ ràng, không phải lỗi kết nối TCP tới cổng 443.
Ghi nhớ
⚠ Đọc thông báo lỗi để phân loại — bảng đáng thuộc: | Thông báo | Loại lỗi | Nghi phạm | |---|---|---| | Failed connect to ...:443 | MẠNG | route table, endpoint, security group, NAT | | AccessDenied, not authorized | QUYỀN | IAM role, bucket policy, key policy | | Invalid credentials | XÁC THỰC | mật khẩu, khoá | | Table not found | DỮ LIỆU | lược đồ, catalog | | Truy vấn chạy nhưng chậm | NĂNG LỰC | cỡ cụm, phân bố dữ liệu |
Từ khoá nhận diện:
"Failed connect tới một endpoint AWS" → đường mạng: VPC endpoint hoặc NAT "Redshift Spectrum" → cần Glue Data Catalog VÀ S3 "không được ra internet" → VPC endpoint "truy vấn Spectrum chậm" → phân vùng dữ liệu, dùng Parquet, nén "ép lưu lượng đi trong VPC" → Enhanced VPC Routing
| Redshift Spectrum cần gì để chạy | Thành phần |
|---|---|
| IAM role gắn vào cụm | quyền Glue + S3 |
CREATE EXTERNAL SCHEMA |
trỏ tới database trong Glue Catalog |
| Đường mạng tới Glue và S3 | VPC endpoint hoặc NAT |
| Dữ liệu trong S3 | cùng Region với cụm |
| Định dạng | Parquet, ORC, JSON, CSV, Avro |
| Tối ưu hiệu năng Spectrum | Cách |
|---|---|
| Định dạng cột | Parquet hoặc ORC — quét ít dữ liệu hơn nhiều |
| Phân vùng (partition) | theo ngày, theo Region — giảm mạnh dữ liệu quét |
| Nén | Snappy, GZIP |
| Kích thước tệp | tránh rất nhiều tệp nhỏ, nhắm 64-512 MB |
| Chi phí | tính theo TB dữ liệu QUÉT — tối ưu là tiết kiệm trực tiếp |
| Hai loại VPC endpoint cần cho tình huống này | Nội dung |
|---|---|
| S3 — gateway endpoint | MIỄN PHÍ, thêm tuyến vào route table |
| Glue — interface endpoint | PrivateLink, có phí giờ + dữ liệu |
| Kiểm tra | security group của endpoint phải cho phép 443 từ subnet của cụm |
| Private DNS | bật để tên miền công khai phân giải về endpoint |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Cụm có ra được endpoint không | tạm bật NAT rồi thử lại — chạy được thì đúng là lỗi mạng | | Endpoint đã có chưa | describe-vpc-endpoints, tìm s3 và glue | | Role có đủ quyền không | CloudTrail, tìm AccessDenied với action glue:GetTable |
Và một trình tự chẩn đoán đáng theo cho mọi lỗi kiểu này: phân loại thông báo trước, rồi mới đi tìm nguyên nhân. "Failed connect" là lỗi ở tầng vận chuyển — nó xảy ra trước cả khi quyền hay dữ liệu được xem xét tới, nên mọi thời gian bỏ ra để soi IAM policy hay lược đồ bảng ở giai đoạn này đều là thời gian đi lạc hướng.
A company has created a new Amazon FSx for Windows File Server file system with limited storage capacity to manage costs effectively. They have also set up an Amazon Simple Notification Service (Amazon SNS) topic in the same AWS account for system notifications. The SysOps administrator wants to receive an email notification when the file system's available space drops below 100 GB. What steps should the SysOps administrator take to meet this requirement?
-
A
Create an Amazon EventBridge rule to monitor the file system's available space. Configure the rule to trigger an Amazon SNS notification when the FreeStorageSpace metric is below 100 GB. Subscribe the SysOps administrator's email address to the SNS topic.
-
B
Enable CloudWatch Logs for the file system. Create a CloudWatch Logs metric filter to capture changes in available space. Configure an Amazon SNS subscription to send email notifications to the SysOps administrator when the filter condition is met.
-
C
Implement a Lambda function that periodically checks the file system's available space. Configure the function to send an email notification to the SysOps administrator when the available space falls below 100 GB.
-
D
Configure an Amazon CloudWatch alarm to monitor the file system's FreeStorageSpace metric. Set the alarm threshold to trigger when the available space is below 100 G.
Xem giải thích
Đáp án
A — Tạo quy tắc EventBridge theo dõi dung lượng còn trống của file system, kích hoạt thông báo SNS khi FreeStorageSpace xuống dưới 100 GB, và ĐĂNG KÝ địa chỉ email vào SNS topic.
Vì sao đúng
Phương án A là phương án duy nhất mô tả toàn bộ chuỗi từ chỉ số tới hộp thư, và chính chuỗi đầy đủ đó mới đáp ứng yêu cầu "nhận được email".
⚠ Điểm mấu chốt — cảnh báo chỉ hữu ích khi đủ BA mắt xích:
1. THEO DÕI chỉ số
↓
FSx for Windows phát chỉ số FreeStorageSpace
vào namespace AWS/FSx
↓
2. KÍCH HOẠT khi vượt ngưỡng
↓
Ngưỡng: dưới 100 GB
↓
3. GỬI TỚI NGƯỜI NHẬN
↓
SNS topic → ĐĂNG KÝ EMAIL → xác nhận đăng ký
↓
Thiếu mắt xích 3 → có cảnh báo mà không ai biết
⚠ Vì sao mắt xích thứ ba lại là điểm phân biệt:
Phương án D dừng ở "đặt ngưỡng cho alarm"
↓
→ không nói gì tới HÀNH ĐỘNG của alarm
→ không nói gì tới SNS
→ không nói gì tới đăng ký email
↓
Một alarm không có alarm action
chỉ đổi màu trên console
↓
→ không ai nhận được email nào
⚠ Và một chi tiết vận hành phải nhớ:
Đăng ký email vào SNS
↓
AWS gửi thư XÁC NHẬN
↓
Người nhận PHẢI BẤM LINK xác nhận
↓
Chưa xác nhận → trạng thái PendingConfirmation
→ cảnh báo bắn ra nhưng KHÔNG tới hộp thư
↓
→ đây là nguyên nhân số một khiến
"alarm chạy mà không ai nhận được gì"
Vì sao các phương án khác sai
-
D (cấu hình CloudWatch alarm theo dõi
FreeStorageSpace, đặt ngưỡng dưới 100 GB) — đây là phương án gần nhất và cách tiếp cận đúng chuẩn mực, nhưng nó dừng ở việc đặt ngưỡng: không cấu hình hành động gửi SNS, không đăng ký email. Yêu cầu của đề là nhận được email, và phương án này chưa đi tới đó. -
B (bật CloudWatch Logs cho file system rồi dùng metric filter bắt thay đổi dung lượng) — dung lượng còn trống là một CHỈ SỐ, không phải một dòng log. Metric filter dùng để trích chỉ số từ văn bản log, hoàn toàn không áp dụng được ở đây.
-
C (viết Lambda định kỳ kiểm tra dung lượng rồi gửi email) — tự làm lại thứ CloudWatch đã có sẵn, kèm hàm phải bảo trì và một lịch phải theo dõi.
Ghi nhớ
⚠ Ghi nhớ về chất lượng câu hỏi
Cách diễn đạt của phương án A không hoàn toàn chính xác về mặt kỹ thuật: EventBridge không "theo dõi chỉ số" — việc so sánh một chỉ số với ngưỡng là công việc của CloudWatch alarm. EventBridge phản ứng với sự kiện, và một trong những sự kiện nó bắt được chính là thay đổi trạng thái của CloudWatch alarm.
Cách triển khai chuẩn mực cho yêu cầu này là: CloudWatch alarm trên FreeStorageSpace với ngưỡng 100 GB → alarm action là SNS topic → email đã đăng ký và xác nhận.
Khoá đáp án vẫn là A, vì trong bốn lựa chọn thì chỉ A mô tả đủ cả ba mắt xích tới hộp thư người nhận, còn D bỏ mất phần thông báo. Khi gặp đề dạng này, hãy chọn phương án đi trọn vẹn tới kết quả mà đề yêu cầu, kể cả khi cách diễn đạt của nó có chỗ chưa chuẩn.
⚠ Chỉ số quan trọng của FSx for Windows — bảng đáng thuộc: | Chỉ số | Ý nghĩa | |---|---| | FreeStorageCapacity | dung lượng còn trống — chỉ số của đề này | | DataReadBytes / DataWriteBytes | thông lượng đọc ghi | | DataReadOperations / DataWriteOperations | số thao tác | | ClientConnections | số client đang kết nối | | FileServerDiskThroughputUtilization | mức dùng thông lượng — cạn là nghẽn |
Từ khoá nhận diện:
"cảnh báo khi chỉ số vượt ngưỡng" → CloudWatch alarm + SNS "phản ứng với một SỰ KIỆN" → EventBridge "trích chỉ số từ nội dung log" → metric filter "alarm chạy mà không ai nhận email" → đăng ký SNS chưa XÁC NHẬN "tự động mở rộng khi gần đầy" → Lambda hoặc SSM Automation gọi
update-file-system
| CloudWatch alarm ↔ EventBridge — đừng lẫn | Khác nhau |
|---|---|
| CloudWatch alarm | so CHỈ SỐ với NGƯỠNG theo thời gian |
| EventBridge | phản ứng với SỰ KIỆN (thay đổi trạng thái, lịch, API call) |
| Kết hợp | alarm đổi trạng thái → EventBridge bắt → chạy tự động hoá |
| Cả hai | đều gửi được tới SNS |
| Vì sao không nhận được thông báo — danh sách kiểm tra | Nội dung |
|---|---|
| Đăng ký SNS chưa xác nhận | nguyên nhân số một — kiểm tra PendingConfirmation |
| Alarm không có alarm action | tạo alarm nhưng quên gắn SNS |
| Alarm chưa vào trạng thái ALARM | chưa đủ DatapointsToAlarm |
| Access policy của SNS topic | không cho CloudWatch publish |
| Email vào thư rác | kiểm tra hộp spam |
| Chỉ số không có dữ liệu | alarm kẹt ở INSUFFICIENT_DATA |
| Mở rộng FSx khi gần đầy | Nội dung |
|---|---|
| Tăng dung lượng | update-file-system --storage-capacity — không gián đoạn |
| Giới hạn | tăng được, KHÔNG giảm được |
| Khoảng cách | phải chờ 6 giờ giữa hai lần tăng |
| Tự động | alarm → SSM Automation hoặc Lambda gọi lệnh trên |
| Nên đặt | hai bậc cảnh báo: 20% và 10% còn lại |
| Các loại FSx | Dùng khi |
|---|---|
| FSx for Windows File Server | SMB, Active Directory, ứng dụng Windows |
| FSx for Lustre | HPC, machine learning, thông lượng cực cao |
| FSx for NetApp ONTAP | đa giao thức, tính năng NetApp |
| FSx for OpenZFS | NFS, snapshot dày đặc |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Đăng ký email đã xác nhận chưa | list-subscriptions-by-topic — không được là PendingConfirmation | | Đường thông báo có chạy không | set-alarm-state --state-value ALARM rồi xem hộp thư | | Dung lượng còn bao nhiêu | CloudWatch → namespace AWS/FSx → FreeStorageCapacity |
Và một việc nên làm ngay khi dựng bất kỳ cảnh báo nào: ép nó vào trạng thái ALARM một lần bằng set-alarm-state để xác nhận email thật sự tới nơi. Toàn bộ giá trị của một hệ thống cảnh báo nằm ở mắt xích cuối cùng, và đó cũng chính là mắt xích duy nhất mà console không hiển thị trạng thái cho bạn thấy.
A SysOps administrator is notified about unusual network activity on an Amazon EC2 instance by Amazon GuardDuty. The GuardDuty report indicates a suspicious external IP address as a traffic destination. The administrator must block traffic to the external IP address identified by GuardDuty.
What is the most suitable course of action to meet this requirement?
-
A
Use VPC flow logs in combination with Amazon Athena to block traffic to the external IP address.
-
B
Create a new security group to block traffic to the external IP address. Associate the new security group with the EC2 instance.
-
C
Create a new security group to block traffic to the external IP address. Link this new security group to the Amazon VPC.
-
D
Create a network ACL and include an outbound rule to deny traffic to the external IP address.
Xem giải thích
Đáp án
D — Tạo network ACL với một luật OUTBOUND từ chối lưu lượng tới địa chỉ IP bên ngoài đó.
Vì sao đúng
Yêu cầu là CHẶN lưu lượng tới một địa chỉ IP cụ thể, và chỉ có một công cụ trong VPC làm được điều đó.
⚠ Điểm mấu chốt — security group KHÔNG CÓ luật Deny:
SECURITY GROUP
↓
Chỉ có luật ALLOW
Mặc định outbound: cho phép TẤT CẢ
↓
Muốn chặn một IP:
→ phải liệt kê MỌI IP KHÁC vào luật allow
→ bất khả thi
↓
NETWORK ACL
↓
Có CẢ Allow LẪN DENY
↓
Thêm một luật Deny cho đúng IP đó
với số thứ tự THẤP (xét trước)
↓
→ chặn được chính xác một địa chỉ
⚠ Cấu hình luật cho đúng:
NACL của subnet chứa máy bị nghi ngờ
Outbound rules:
#90 DENY 203.0.113.55/32 ALL ← luật mới
#100 ALLOW 0.0.0.0/0 ALL
↓
NACL xét theo SỐ THỨ TỰ TĂNG DẦN
và DỪNG ở luật khớp ĐẦU TIÊN
↓
→ luật Deny phải đứng TRƯỚC luật Allow rộng
→ đánh số 90 < 100
⚠ Nhưng chặn IP chỉ là bước ĐẦU của xử lý sự cố:
GuardDuty báo lưu lượng bất thường
↓
→ nghĩa là máy CÓ THỂ ĐÃ BỊ XÂM NHẬP
↓
Quy trình đầy đủ:
1. CÔ LẬP: đổi sang security group không cho gì
2. GIỮ HIỆN TRƯỜNG: snapshot EBS, chụp bộ nhớ
3. ĐIỀU TRA: flow log, CloudTrail, log hệ thống
4. Kiểm tra IAM role gắn vào máy có bị lạm dụng không
5. DIỆT: dựng máy mới từ AMI sạch, KHÔNG "dọn dẹp"
máy cũ rồi dùng lại
Vì sao các phương án khác sai
-
B (tạo security group mới để chặn lưu lượng rồi gắn vào instance) — đây là phương án gần nhất và cũng là nhầm lẫn phổ biến nhất về security group: nó không có luật Deny. (Cách dùng SG đúng trong tình huống này là cô lập máy bằng một SG không cho phép gì cả — nhưng như vậy là chặn tất cả, không phải chặn một IP.)
-
C (tạo security group chặn IP rồi gắn vào VPC) — sai hai lần: SG không có Deny, và security group không gắn vào VPC mà gắn vào ENI của instance.
-
A (dùng VPC Flow Logs kết hợp Athena để chặn lưu lượng) — flow log và Athena chỉ PHÂN TÍCH, hoàn toàn không chặn được gói tin nào. Chúng hữu ích cho bước điều tra, không phải bước ngăn chặn.
Ghi nhớ
⚠ Security Group ↔ Network ACL — bảng phải thuộc: | | Security Group | Network ACL | |---|---|---| | Luật Deny | KHÔNG CÓ | CÓ | | Trạng thái | stateful | stateless | | Phạm vi | ENI / instance | cả subnet | | Thứ tự xét | xét tất cả, hợp lại | theo số, dừng ở luật khớp đầu | | Chặn một IP cụ thể | không làm được | LÀM ĐƯỢC |
Từ khoá nhận diện:
"CHẶN một địa chỉ IP" → NACL với luật Deny "cho phép truy cập" → security group "cô lập máy bị xâm nhập" → SG không có luật nào "chặn ở quy mô lớn, nhiều VPC" → AWS Network Firewall "chặn theo TÊN MIỀN" → Route 53 Resolver DNS Firewall hoặc Network Firewall
| GuardDuty báo gì — các loại phát hiện hay gặp | Nội dung |
|---|---|
Backdoor:EC2/C&CActivity |
máy đang gọi tới máy chủ điều khiển |
CryptoCurrency:EC2/BitcoinTool |
đào tiền ảo |
UnauthorizedAccess:IAMUser/... |
khoá bị dùng từ nơi lạ |
Recon:EC2/PortProbeUnprotectedPort |
có người dò cổng |
Trojan:EC2/DNSDataExfiltration |
rò rỉ dữ liệu qua DNS |
| Quy trình xử lý máy EC2 nghi bị xâm nhập | Bước |
|---|---|
| 1 | CÔ LẬP — gắn SG không cho phép gì, đừng tắt máy |
| 2 | Bật termination protection, gỡ khỏi ASG và target group |
| 3 | Giữ hiện trường — snapshot EBS, chụp bộ nhớ nếu có công cụ |
| 4 | Thu hồi quyền của IAM role gắn vào máy |
| 5 | Điều tra — flow log, CloudTrail, log hệ điều hành |
| 6 | Thay thế — dựng máy mới từ AMI sạch |
| Nguyên tắc | không bao giờ "dọn" rồi dùng lại máy đã bị xâm nhập |
| Tự động hoá phản ứng với GuardDuty | Cách |
|---|---|
EventBridge bắt GuardDuty Finding |
lọc theo severity |
| SSM Automation | tự cô lập máy, chụp snapshot |
| Security Hub | tổng hợp và chấm điểm |
| Detective | phân tích sâu quan hệ giữa các phát hiện |
| Nên có | cô lập tự động cho phát hiện severity cao |
| Chặn ở quy mô lớn | Công cụ |
|---|---|
| Network Firewall | luật theo IP, theo tên miền, theo nội dung (IPS) |
| DNS Firewall | chặn theo tên miền ở tầng phân giải |
| Firewall Manager | áp luật cho cả tổ chức |
| WAF | chỉ HTTP tầng 7 |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Luật đã chặn chưa | VPC Flow Logs — luồng tới IP đó phải thành REJECT | | Còn máy nào gọi ra IP đó không | Logs Insights, lọc dstAddr | | Máy đã sạch chưa | giả định là chưa — thay bằng máy mới |
Và một nhắc nhở quan trọng về thứ tự ưu tiên khi GuardDuty báo động: chặn IP đích là biện pháp cầm máu, không phải cách chữa. Kẻ tấn công đổi địa chỉ đích trong vài phút, còn thứ thực sự cần xử lý là làm sao máy đó bị chiếm và IAM role gắn trên nó đã bị dùng để làm gì — hai câu hỏi mà một luật NACL không trả lời được.
A group of Developer have been given access to a separate AWS account to work on a new project. The Developers require full administrative access to create IAM policies and roles in the account, but corporate policies require that they are blocked from using a few specific AWS services.
What is the BEST way to grant the Developers privileges in the new account while still ensuring compliance with corporate policies?
-
A
Create an IAM group for the Developers and apply a policy restricting access to the specific services.
-
B
Create a job-specific policy in IAM and apply it to all users within the new account.
-
C
Create a service control policy in AWS Organizations and apply it to the new account.
-
D
Create a customer managed policy in IAM and apply it to all users within the new account.
Xem giải thích
Đáp án
C — Tạo một SERVICE CONTROL POLICY trong AWS Organizations và áp lên tài khoản mới.
Vì sao đúng
Đề có một ràng buộc mà chỉ SCP thoả được: lập trình viên có toàn quyền quản trị, KỂ CẢ quyền tạo IAM policy và role, nhưng vẫn phải bị chặn khỏi vài dịch vụ.
⚠ Điểm mấu chốt — ai tạo được IAM policy thì tự gỡ được mọi giới hạn IAM:
Chặn bằng IAM policy
↓
Lập trình viên có quyền iam:CreatePolicy,
iam:AttachUserPolicy, iam:CreateRole…
↓
→ họ TỰ TẠO một policy mới cho chính mình
→ hoặc tạo một role rồi assume vào
↓
→ mọi giới hạn IAM đều VÔ HIỆU
↓
Chặn bằng SCP
↓
SCP là TRẦN quyền của CẢ TÀI KHOẢN
↓
→ không IAM policy nào vượt qua được
→ kể cả người dùng có AdministratorAccess
→ kể cả role mới tạo
⚠ Cách viết SCP cho yêu cầu này:
{
"Effect": "Deny",
"Action": [
"sagemaker:*",
"redshift:*",
"emr:*"
],
"Resource": "*"
}
Deny đơn giản, không cần Condition
↓
→ mọi lời gọi tới các dịch vụ đó bị chặn
ở tầng trên IAM
⚠ Và mô hình quyền hiệu lực:
Quyền THỰC SỰ = SCP ∩ IAM policy
↓
SCP cho phép + IAM cho phép → ĐƯỢC
SCP cho phép + IAM cấm → bị cấm
SCP CẤM + IAM cho phép → BỊ CẤM ← trường hợp này
SCP cấm + IAM cấm → bị cấm
↓
→ SCP luôn thắng khi nó nói Deny
Xem thêm câu #11865 (lô 128) và #11878 (cùng lô): cùng chủ đề SCP. #11878 bổ sung chi tiết về chiều của toán tử điều kiện khi viết Deny.
Vì sao các phương án khác sai
-
A (tạo IAM group cho lập trình viên và áp policy giới hạn dịch vụ) — đây là phương án gần nhất và có vẻ hợp lý, nhưng lập trình viên có quyền tạo và gắn IAM policy, nên họ chỉ cần tự rời khỏi group hoặc gắn thêm một policy khác là xong.
-
B (tạo job-specific policy trong IAM và áp cho mọi người dùng) — cùng lỗ hổng như A: IAM policy không tự bảo vệ được trước người có quyền quản trị IAM.
-
D (tạo customer managed policy trong IAM và áp cho mọi người dùng) — cũng vậy: gỡ ra hoặc ghi đè bằng một policy khác đều nằm trong tầm tay họ.
Ghi nhớ
⚠ Vì sao SCP mạnh hơn IAM policy — bảng phải thuộc: | | SCP | IAM policy | |---|---|---| | Phạm vi | cả TÀI KHOẢN hoặc OU | một danh tính | | Ai gỡ được | chỉ tài khoản QUẢN LÝ của tổ chức | bất kỳ ai có quyền IAM | | Áp cho root user của tài khoản | CÓ | không | | Cấp quyền | KHÔNG — chỉ giới hạn | có | | Không áp cho | tài khoản quản lý | — |
Từ khoá nhận diện:
"admin nhưng vẫn phải bị chặn vài dịch vụ" → SCP "ngăn cả người có quyền quản trị" → SCP "giới hạn trong một tài khoản, người dùng không có quyền IAM" → IAM policy đủ dùng "giới hạn quyền tối đa của một role khi được assume" → permissions boundary "chỉ được dùng hạ tầng đã duyệt" → Service Catalog (bổ trợ, không thay SCP)
| Bốn tầng kiểm soát quyền của AWS | Nội dung |
|---|---|
| SCP | trần quyền cho tài khoản/OU |
| Permissions boundary | trần quyền cho MỘT danh tính — hữu ích khi uỷ quyền tạo role |
| Identity policy | quyền gắn vào user/group/role |
| Resource policy | gắn vào tài nguyên (bucket, KMS key, SQS…) |
| Session policy | giới hạn thêm khi assume role |
| Quyền hiệu lực | giao của tất cả các tầng áp dụng được |
| Permissions boundary — bổ sung rất hợp cho đề này | Nội dung |
|---|---|
| Việc | giới hạn quyền TỐI ĐA của một role/user do lập trình viên tạo ra |
| Vì sao cần | SCP chặn dịch vụ; boundary chặn leo thang quyền trong nội bộ tài khoản |
| Cách dùng | bắt buộc gắn boundary bằng Condition iam:PermissionsBoundary |
| Kết quả | lập trình viên tạo được role nhưng không tạo nổi role mạnh hơn chính họ |
| SCP nên có ở mọi tổ chức | Nội dung |
|---|---|
| Chặn Region không dùng | aws:RequestedRegion |
| Chặn tắt CloudTrail, Config, GuardDuty | bảo vệ tầng giám sát |
| Chặn xoá log bucket | và chặn tắt Object Lock |
| Chặn rời khỏi tổ chức | organizations:LeaveOrganization |
| Chặn tạo IAM user | ép dùng liên kết danh tính |
| Thử nghiệm | luôn áp lên OU thử trước |
| Bẫy khi dùng SCP | Nội dung |
|---|---|
| Không áp cho tài khoản quản lý | đừng để tải công việc chạy ở đó |
Gỡ FullAWSAccess |
khoá sạch mọi thứ nếu chưa có Allow thay thế |
| Ảnh hưởng cả role dịch vụ | có thể làm đứt CI/CD, sao lưu |
| Không thấy lỗi rõ | thông báo là AccessDenied kèm ghi chú explicit deny in SCP |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | SCP thực tế đang áp | describe-effective-policy cho tài khoản đó | | Có chặn đúng không | đăng nhập tài khoản rồi thử gọi dịch vụ bị cấm | | Vì sao một lời gọi bị chặn | CloudTrail — đọc trường errorMessage |
Và một cặp công cụ nên dùng cùng nhau cho đúng tình huống này: SCP để chặn dịch vụ, permissions boundary để chặn leo thang quyền. SCP giải quyết vế "không được dùng dịch vụ X", nhưng vế còn lại — lập trình viên có quyền tạo role và có thể tự cấp cho mình những quyền mà tổ chức chưa lường trước — chỉ được đóng lại khi mọi role họ tạo đều bắt buộc mang một boundary.
An application runs on several Amazon EC2 instances behind an Application Load Balancer (ALB). The instances run in an Auto Scaling group that is configured to determine the health status of EC2 instances using both EC2 status checks and ALB health checks. An application fault has been detected and it is necessary to analyze unhealthy instances before they are terminated.
What should a SysOps Administrator do to accomplish this?
-
A
Create an AWS Lambda function that takes a snapshot of the instances before they are terminated.
-
B
Implement Amazon CloudWatch Events to capture lifecycle events and trigger an AWS Lambda function for remediation.
-
C
Use an Amazon EC2 Auto Scaling lifecycle hook to pause instance termination after the instance has been removed from service.
-
D
Configure the Auto Scaling group to only use ALB health checks so instances are taken out of service but are not terminated.
Xem giải thích
Đáp án
C — Dùng LIFECYCLE HOOK của EC2 Auto Scaling để tạm dừng quá trình kết thúc máy sau khi máy đã được rút khỏi dịch vụ.
Vì sao đúng
Đề cần phân tích máy KHÔNG khoẻ TRƯỚC khi nó bị huỷ, và lifecycle hook sinh ra chính xác cho việc đó.
⚠ Điểm mấu chốt — hook giữ máy lại ở một trạng thái chờ:
ASG quyết định kết thúc một máy
↓
Máy chuyển sang Terminating
↓
LIFECYCLE HOOK chặn lại
↓
Trạng thái: Terminating:Wait
↓
→ máy VẪN CHẠY, VẪN SSH/Session Manager vào được
→ đã bị rút khỏi target group của ALB
nên không phục vụ ai
↓
Giữ tối đa 1 giờ (mặc định)
Kéo dài được tới 48 giờ
↓
Xong việc: complete-lifecycle-action
→ máy mới thực sự bị huỷ
⚠ Hai loại hook:
autoscaling:EC2_INSTANCE_LAUNCHING
↓
Giữ máy ở Pending:Wait khi KHỞI CHẠY
→ cài đặt, tải cấu hình, đăng ký dịch vụ
trước khi nhận lưu lượng
autoscaling:EC2_INSTANCE_TERMINATING ← đề này
↓
Giữ máy ở Terminating:Wait khi KẾT THÚC
→ thu thập log, chụp bộ nhớ, gỡ đăng ký
⚠ Tự động hoá việc thu thập bằng chứng:
Hook phát sự kiện vào EventBridge
↓
Lambda hoặc SSM Automation nhận sự kiện
↓
Chạy trên máy đang chờ:
- đẩy log lên S3
- chụp snapshot EBS
- lấy thread dump / heap dump
↓
Rồi gọi complete-lifecycle-action
↓
→ không bao giờ mất bằng chứng
→ và không giữ máy quá lâu một cách vô ích
Vì sao các phương án khác sai
-
B (dùng CloudWatch Events bắt lifecycle event rồi gọi Lambda) — đây là phương án gần nhất và là một phần của giải pháp đầy đủ, nhưng nếu không có lifecycle hook thì không có gì giữ máy lại: máy đã bị huỷ trước khi Lambda kịp làm gì. Hook mới là thứ tạo ra khoảng thời gian đó.
-
A (Lambda chụp snapshot trước khi máy bị kết thúc) — vẫn là bài toán chạy đua với thời gian: không có cơ chế nào bảo đảm Lambda kịp chạy xong trước khi ASG huỷ máy. (Và snapshot ổ đĩa cũng không giữ được trạng thái bộ nhớ hay tiến trình.)
-
D (chỉ dùng ALB health check để máy bị rút khỏi dịch vụ mà không bị huỷ) — hiểu sai cách ASG hoạt động: ASG luôn kết thúc máy mà nó coi là không khoẻ, bất kể nguồn health check là EC2 hay ELB.
Ghi nhớ
⚠ Vòng đời instance trong ASG — bảng phải thuộc: | Trạng thái | Nghĩa | |---|---| | Pending | đang khởi chạy | | Pending:Wait | hook khi KHỞI CHẠY đang giữ | | InService | đang phục vụ | | Terminating | đang bị kết thúc | | Terminating:Wait | hook khi KẾT THÚC đang giữ — vào được máy | | Terminated | đã huỷ | | Standby | rút khỏi dịch vụ THỦ CÔNG, không bị huỷ |
Từ khoá nhận diện:
"phân tích máy trước khi bị huỷ" → lifecycle hook TERMINATING "cài đặt xong mới nhận lưu lượng" → lifecycle hook LAUNCHING, hoặc
cfn-signal"tạm gỡ một máy ra để sửa, không muốn nó bị thay" → Standby "giữ log khi máy bị thay" → CloudWatch agent đẩy log liên tục "máy bị thay liên tục" → xem lại health check và grace period
| Cấu hình lifecycle hook | Nội dung |
|---|---|
LifecycleTransition |
EC2_INSTANCE_LAUNCHING hoặc EC2_INSTANCE_TERMINATING |
HeartbeatTimeout |
mặc định 3600 giây, tối đa 172800 (48 giờ) |
DefaultResult |
CONTINUE hoặc ABANDON khi hết giờ |
complete-lifecycle-action |
kết thúc chờ sớm |
record-lifecycle-action-heartbeat |
gia hạn thêm thời gian |
| Thông báo | qua EventBridge, SNS hoặc SQS |
| Standby ↔ Lifecycle hook | Khác nhau |
|---|---|
| Standby | bạn CHỦ ĐỘNG rút một máy ra để sửa |
| Hook | tự động chặn ở thời điểm chuyển trạng thái |
| Standby dùng khi | gỡ lỗi một máy cụ thể, ASG khởi chạy máy thay thế nếu cần |
| Hook dùng khi | mọi máy bị huỷ đều phải qua một bước xử lý |
| Giữ được bằng chứng mà không cần hook | Cách |
|---|---|
| CloudWatch agent đẩy log liên tục | log còn nguyên sau khi máy biến mất |
| Ghi log ra ngoài máy | S3, CloudWatch Logs, OpenSearch |
| Chỉ số tuỳ chỉnh | bộ nhớ, đĩa, tiến trình |
| X-Ray | vết truy tìm không phụ thuộc vòng đời máy |
| Nguyên tắc | máy phải là thứ vứt đi được |
| Vì sao ASG kết thúc máy — kiểm tra khi bị thay quá nhiều | Nội dung |
|---|---|
| Health check của ELB | ứng dụng không trả 200 ở đường dẫn kiểm tra |
| Health check của EC2 | status check hỏng |
HealthCheckGracePeriod quá ngắn |
máy bị giết trước khi ứng dụng kịp khởi động |
| Scale-in do chính sách | tải giảm |
| Spot bị thu hồi | xem lại chiến lược phân bổ |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Máy đang ở trạng thái nào | describe-auto-scaling-instances — tìm Terminating:Wait | | Vì sao bị kết thúc | tab Activity của ASG — ghi rõ lý do | | Hook có bị hết giờ không | sự kiện EventBridge, và trạng thái sau khi hết HeartbeatTimeout |
Và một lời khuyên về HeartbeatTimeout: đừng đặt 48 giờ chỉ vì đặt được. Một máy nằm ở Terminating:Wait vẫn được tính tiền và vẫn chiếm một chỗ trong MaxSize của ASG — nên nếu quy trình phân tích tự động của bạn xong trong năm phút, hãy đặt timeout ngắn và gọi complete-lifecycle-action ngay, dành thời gian dài chỉ cho những lần thực sự cần người vào xem tận nơi.