Ngân hàng đề — AWS Certified SysOps Administrator Associate
Tìm thấy 936 câu.
An organization hosts a web application on an Amazon EC2 instance running Ubuntu, which is pre-configured with the AWS Systems Manager Agent (SSM Agent). The DevOps team has been unable to establish a session to the instance via Session Manager. The team has confirmed they possess the necessary IAM permissions and have successfully connected to other instances in the same subnet.
What is the appropriate measure for a SysOps administrator to take to rectify the situation?
-
A
Create a new key pair, set Session Manager to utilize this new key pair, and distribute the private key to the DevOps team.
-
B
Attach the AmazonSSMManagedInstanceCore managed policy to the IAM role associated with the Ubuntu instance.
-
C
Introduce an inbound rule for port 22 in the security group affiliated with the Ubuntu instance.
-
D
Reconfigure the SSM Agent to authenticate with the username "admin".
Xem giải thích
Đáp án
B — Gắn managed policy AmazonSSMManagedInstanceCore vào IAM role của instance Ubuntu.
Vì sao đúng
Đề đã loại sẵn hai nghi phạm lớn: SSM Agent đã cài sẵn, và các máy khác trong CÙNG subnet vào được — nên vấn đề là của riêng máy này, không phải của mạng.
⚠ Điểm mấu chốt — Session Manager cần ĐÚNG BA điều kiện:
1. SSM AGENT đã cài và đang chạy
↓
→ đề nói "pre-configured with SSM Agent" ✓
2. INSTANCE PROFILE với quyền SSM
↓
→ AmazonSSMManagedInstanceCore
→ NGHI PHẠM DUY NHẤT CÒN LẠI
3. ĐƯỜNG MẠNG ra endpoint SSM
↓
→ máy khác cùng subnet vào được
→ nên mạng chắc chắn OK ✓
⚠ Không có role thì agent không đăng ký được:
SSM Agent chạy nhưng không có quyền
↓
Không gọi được ssm:UpdateInstanceInformation
↓
→ máy KHÔNG XUẤT HIỆN trong Fleet Manager
→ hoặc hiện trạng thái "Connection lost"
↓
Đội DevOps có đủ quyền IAM của HỌ
↓
→ nhưng quyền của NGƯỜI DÙNG
khác với quyền của MÁY
→ đây chính là điểm mà câu hỏi kiểm tra
⚠ Quyền trong AmazonSSMManagedInstanceCore gồm gì:
ssm:UpdateInstanceInformation → đăng ký máy
ssm:ListAssociations, ListInstanceAssociations
ssmmessages:* → KÊNH PHIÊN LÀM VIỆC
ec2messages:* → kênh nhắn tin của agent
s3:GetObject (giới hạn) → tải tài liệu và gói
↓
Thiếu ssmmessages
→ máy hiện Online nhưng KHÔNG mở phiên được
Xem thêm câu #11813 và #11814 (lô 127): cùng chủ đề — máy không xuất hiện trong Systems Manager vì thiếu instance profile. Khoá nhất quán.
Vì sao các phương án khác sai
-
C (thêm luật inbound cổng 22 vào security group) — đây là phương án gần nhất về trực giác, nhưng Session Manager KHÔNG DÙNG cổng 22. Agent tự kết nối RA qua HTTPS 443, nên không cần mở cổng vào nào cả. Đây chính là ưu điểm lớn nhất của Session Manager.
-
A (tạo key pair mới, cấu hình Session Manager dùng key pair đó) — Session Manager không dùng key pair. Nó xác thực bằng IAM, không bằng khoá SSH.
-
D (cấu hình SSM Agent xác thực bằng tên người dùng "admin") — không có cơ chế nào như vậy. Agent xác thực bằng thông tin từ instance profile.
Ghi nhớ
⚠ Ba điều kiện của Session Manager — bảng phải thuộc: | Điều kiện | Nội dung | |---|---| | SSM Agent | đã cài và đang chạy — có sẵn trên Amazon Linux, Ubuntu mới | | IAM instance profile | AmazonSSMManagedInstanceCore | | Đường mạng ra | NAT Gateway, hoặc 3 VPC endpoint | | Thiếu bất kỳ điều nào | máy không xuất hiện, hoặc phiên không mở được |
Từ khoá nhận diện:
"Session Manager không kết nối được" → instance profile, trước tiên "máy không hiện trong Fleet Manager" → agent chưa chạy, hoặc thiếu quyền "máy hiện Online nhưng phiên không mở" → thiếu
ssmmessagesendpoint hoặc quyền "không muốn mở cổng 22" → Session Manager "máy tại chỗ cũng cần quản lý" → SSM Hybrid Activation
| Ba VPC endpoint cho Session Manager | Nội dung |
|---|---|
com.amazonaws.<region>.ssm |
kênh điều khiển |
com.amazonaws.<region>.ssmmessages |
kênh PHIÊN LÀM VIỆC |
com.amazonaws.<region>.ec2messages |
kênh nhắn tin của agent |
| Thiếu một cái | agent hiện Online nhưng phiên không mở được |
| Thêm (nếu cần) | s3 gateway endpoint cho log và gói cài đặt |
| Chẩn đoán Session Manager theo thứ tự | Bước |
|---|---|
| 1 | Fleet Manager — máy có hiện không, trạng thái gì |
| 2 | Instance profile — describe-instances → IamInstanceProfile |
| 3 | Chính sách — role có AmazonSSMManagedInstanceCore không |
| 4 | Agent — systemctl status amazon-ssm-agent |
| 5 | Log của agent — /var/log/amazon/ssm/amazon-ssm-agent.log |
| 6 | Mạng — endpoint hoặc NAT; kiểm tra security group chiều RA |
| 7 | Quyền của NGƯỜI DÙNG — ssm:StartSession |
| Vì sao Session Manager tốt hơn SSH | Nội dung |
|---|---|
| Không mở cổng vào nào | agent kết nối ra qua HTTPS 443 |
| Không cần IP công cộng | máy ở private subnet vẫn vào được |
| Không quản lý khoá | không có .pem để mất hay để lộ |
| Phân quyền bằng IAM | thu hồi tức thì khi ai đó nghỉ việc |
| Ghi log toàn bộ phiên | ra S3 hoặc CloudWatch Logs |
| Session document | giới hạn được lệnh, người dùng chạy phiên |
| Hai loại quyền — đừng lẫn | Nội dung |
|---|---|
| Quyền của MÁY | instance profile — để agent đăng ký và mở kênh |
| Quyền của NGƯỜI | ssm:StartSession, ssm:TerminateSession |
| Đề này | quyền của MÁY đang thiếu |
| Bẫy | đội DevOps có đủ quyền của họ nên tưởng vấn đề ở nơi khác |
| Cài và duy trì agent cho cả đội máy | Cách |
|---|---|
| SSM Distributor | cài và cập nhật hàng loạt |
| State Manager | bảo đảm agent luôn cài và đang chạy |
| Golden AMI | có sẵn agent và cấu hình |
| Ubuntu | agent có sẵn trên AMI chính thức từ 16.04 trở lên |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Máy đã đăng ký chưa | describe-instance-information | | Instance profile là gì | describe-instances --query '...IamInstanceProfile' | | Agent báo lỗi gì | /var/log/amazon/ssm/amazon-ssm-agent.log |
Và một cách rất nhanh để khoanh vùng loại sự cố này: mở Fleet Manager và xem máy có trong danh sách hay không. Nếu máy không xuất hiện, vấn đề gần như chắc chắn là instance profile hoặc đường mạng; nếu máy xuất hiện nhưng phiên không mở được, thì hãy nhìn sang ssmmessages — hoặc quyền ssm:StartSession của chính người đang thao tác.
An application uses an Amazon RDS database in a single AWS Region. The company wants to add disaster recovery (DR) capability to the database across geographic locations. A SysOps administrator must add DR for the database.
Which solutions offers the lowest recovery time objective (RTO) and recovery point objective (RPO)?
-
A
Take automated snapshots and replicate them across Regions.
-
B
Run an AWS Lambda function on a schedule to create and copy snapshots across Regions.
-
C
Create a cross-Region read replica for the database.
-
D
Create a Multi-AZ read replica for the database.
Xem giải thích
Đáp án
C — Tạo CROSS-REGION READ REPLICA cho CSDL.
Vì sao đúng
Đề hỏi giải pháp có RTO và RPO THẤP NHẤT cho khôi phục thảm hoạ giữa các vùng địa lý.
⚠ Điểm mấu chốt — replica luôn được đồng bộ, snapshot thì không:
CROSS-REGION READ REPLICA
↓
Sao chép LIÊN TỤC, bất đồng bộ
↓
RPO: thường vài GIÂY
(đúng bằng độ trễ sao chép)
↓
RTO: thời gian THĂNG CẤP replica
thường vài PHÚT
↓
→ thấp nhất trong bốn phương án
SNAPSHOT SAO CHÉP ĐỊNH KỲ
↓
RPO = KHOẢNG CÁCH GIỮA HAI LẦN CHỤP
→ hàng giờ, có khi cả ngày
↓
RTO = thời gian khôi phục instance
→ hàng chục phút tới HÀNG GIỜ
↓
→ cao hơn nhiều
⚠ Nhắc lại hai khái niệm để không lẫn:
RPO — Recovery Point Objective
↓
CHẤP NHẬN MẤT BAO NHIÊU DỮ LIỆU
→ đo bằng THỜI GIAN dữ liệu bị mất
RTO — Recovery Time Objective
↓
CHẤP NHẬN NGỪNG BAO LÂU
→ đo bằng thời gian khôi phục dịch vụ
⚠ Và replica còn có lợi ích kép:
Trong lúc bình thường
↓
→ phục vụ tải ĐỌC ở Region đó
→ giảm độ trễ cho người dùng khu vực
Khi có thảm hoạ
↓
→ promote-read-replica
→ trở thành instance độc lập, ghi được
↓
Lưu ý: THĂNG CẤP LÀ MỘT CHIỀU
→ không quay lại làm replica được
Vì sao các phương án khác sai
-
D (tạo read replica MULTI-AZ cho CSDL) — đây là phương án gần nhất và cải thiện tính sẵn sàng thật, nhưng Multi-AZ nằm TRONG MỘT REGION. Đề đòi khôi phục giữa các vùng địa lý — mất cả Region thì Multi-AZ không cứu được.
-
A (chụp snapshot tự động và sao chép sang Region khác) — chạy được nhưng RPO và RTO cao hơn nhiều: RPO bằng khoảng cách giữa hai lần chụp, RTO là thời gian khôi phục cả một instance.
-
B (dùng Lambda theo lịch để tạo và sao chép snapshot) — cùng nhược điểm như A, cộng thêm mã phải bảo trì. (Và AWS Backup đã làm sẵn việc này.)
Ghi nhớ
⚠ Các chiến lược khôi phục thảm hoạ — bảng phải thuộc: | Chiến lược | RPO | RTO | Chi phí | |---|---|---|---| | Backup & Restore | giờ | giờ | thấp nhất | | Pilot Light | phút | hàng chục phút | thấp | | Warm Standby | giây | phút | trung bình | | Multi-Site Active/Active | gần 0 | gần 0 | cao nhất | | Cross-Region read replica | giây | phút | thuộc nhóm warm standby |
Từ khoá nhận diện:
"RTO và RPO thấp nhất cho CSDL đa Region" → cross-Region read replica "gần như không mất dữ liệu, gần như không ngừng" → Aurora Global Database "rẻ nhất, chấp nhận mất vài giờ" → sao lưu và khôi phục "chịu được mất một AZ" → Multi-AZ (không phải DR theo Region) "tự động hoá sao lưu đa Region" → AWS Backup cross-Region copy
| Aurora Global Database — lựa chọn còn tốt hơn | Nội dung |
|---|---|
| RPO | thường dưới 1 giây |
| RTO | dưới 1 phút với failover có kế hoạch |
| Cơ chế | sao chép ở tầng LƯU TRỮ, không qua động cơ CSDL |
| Độ trễ | thường dưới 1 giây giữa các Region |
| Số Region | tối đa 5 Region phụ |
| Vì sao không phải khoá | đề nói RDS, không phải Aurora |
| Cross-Region read replica — chi tiết cần nhớ | Nội dung |
|---|---|
| Hỗ trợ | MySQL, MariaDB, PostgreSQL, Oracle (SQL Server hạn chế) |
| Thăng cấp | promote-read-replica — MỘT CHIỀU |
| Sao chép | bất đồng bộ — có độ trễ |
| Mã hoá | replica phải có khoá KMS ở Region đích |
| Chi phí | instance + lưu trữ + PHÍ DỮ LIỆU LIÊN REGION |
| Theo dõi | ReplicaLag — alarm khi vượt ngưỡng |
| Quy trình chuyển đổi khi có thảm hoạ | Bước |
|---|---|
| 1 | Xác nhận Region chính thực sự không dùng được |
| 2 | promote-read-replica ở Region phụ |
| 3 | Chờ instance chuyển sang available |
| 4 | Đổi endpoint trong ứng dụng (hoặc chuyển bản ghi Route 53) |
| 5 | Bật lại Multi-AZ và sao lưu ở Region mới |
| 6 | Sau khi Region cũ hồi phục: dựng lại replica theo chiều ngược lại |
| Đừng quên phần ngoài CSDL | Nội dung |
|---|---|
| Tầng ứng dụng | AMI, launch template, ASG phải có sẵn ở Region phụ |
| Tệp tĩnh | S3 Cross-Region Replication |
| DNS | Route 53 failover với health check |
| Bí mật | Secrets Manager replica đa Region |
| Kiểm thử | diễn tập DR định kỳ — RTO chỉ có ý nghĩa khi đã đo thật |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Replica trễ bao nhiêu | chỉ số ReplicaLag — chính là RPO thực tế | | Thăng cấp mất bao lâu | diễn tập ở môi trường thử, bấm giờ | | Ứng dụng có chuyển được không | kiểm thử đổi endpoint trong staging |
Và một điều cần nói rõ khi trình bày phương án DR: con số RTO chỉ có giá trị khi đã được đo bằng một cuộc diễn tập thật. Rất nhiều tài liệu ghi RTO là "vài phút" dựa trên thời gian thăng cấp replica, nhưng bỏ qua thời gian dựng tầng ứng dụng ở Region phụ, thời gian đổi DNS và thời gian con người phát hiện ra sự cố — ba khoản này gộp lại thường lớn hơn nhiều so với phần CSDL.
A company is running a production application across subnets in different AWS accounts within the same Region. To ensure high availability of the application, the SysOps administrator needs to be able to map Availability Zones across accounts.
Which actions will obtain this information? (Select TWO.)
-
A
Call the Describe Subnets API operation and match the response of availabilityZoneId between the two AWS accounts.
-
B
Call the Describe Subnets API operation and match the response of defaultForAz between the two AWS accounts.
-
C
Call the Describe AvailabilityZones API operation and match the response of zoneName between the two AWS accounts.
-
D
Call the Describe Subnets API operation and match the response of availabilityZoneName between the two AWS accounts.
-
E
Call the DescribeAvailabilityZones API operation and match the response of zoneId between the two AWS accounts.
Xem giải thích
Đáp án
A và E — Gọi DescribeSubnets rồi đối chiếu availabilityZoneId, VÀ gọi DescribeAvailabilityZones rồi đối chiếu zoneId.
Vì sao đúng
Có một sự thật rất quan trọng về AZ mà câu hỏi này kiểm tra: TÊN của AZ được XÁO NGẪU NHIÊN cho từng tài khoản.
⚠ Điểm mấu chốt — us-east-1a của bạn KHÔNG phải us-east-1a của tôi:
AWS ánh xạ TÊN AZ sang HẠ TẦNG VẬT LÝ
một cách NGẪU NHIÊN cho mỗi tài khoản
↓
Tài khoản A: us-east-1a → use1-az2
Tài khoản B: us-east-1a → use1-az4
↓
→ hai tài khoản cùng dùng "us-east-1a"
nhưng thực tế ở HAI TRUNG TÂM DỮ LIỆU KHÁC NHAU
↓
Vì sao AWS làm vậy:
→ để tải phân bố đều, tránh mọi người
cùng dồn vào "AZ a"
⚠ AZ ID mới là định danh THẬT:
AZ ID: use1-az1, use1-az2, apse1-az3…
↓
GIỐNG NHAU ở MỌI TÀI KHOẢN
↓
→ muốn biết hai subnet ở hai tài khoản
có CÙNG một AZ vật lý hay không
→ so AZ ID, KHÔNG so tên
⚠ Hai API đều lấy được thông tin này:
DescribeAvailabilityZones ← phương án E
↓
Trả về: zoneName (us-east-1a)
zoneId (use1-az2) ← cái cần
↓
→ dựng được BẢNG ÁNH XẠ cho mỗi tài khoản
DescribeSubnets ← phương án A
↓
Mỗi subnet có:
availabilityZone (tên)
availabilityZoneId (ID) ← cái cần
↓
→ biết ngay subnet nào ở AZ vật lý nào
⚠ Vì sao điều này quan trọng với tính sẵn sàng:
Hai tài khoản cùng triển khai vào "us-east-1a"
↓
Tưởng là cùng AZ → thực ra khác AZ
→ phát sinh PHÍ DỮ LIỆU QUA AZ ngoài dự kiến
→ độ trễ cao hơn dự tính
Hoặc ngược lại:
Tưởng là khác AZ → thực ra CÙNG AZ
→ mất AZ đó là MẤT CẢ HAI
→ cam kết sẵn sàng cao bị phá vỡ
↓
→ đây là rủi ro nghiêm trọng nhất
Vì sao các phương án khác sai
-
C (gọi
DescribeAvailabilityZonesvà đối chiếuzoneName) — đây là phương án gần nhất và là bẫy chính của câu hỏi:zoneNamechính là cái được xáo ngẫu nhiên giữa các tài khoản, nên đối chiếu nó cho kết quả SAI. -
D (gọi
DescribeSubnetsvà đối chiếuavailabilityZoneName) — cùng lỗi như C, chỉ ở API khác. -
B (gọi
DescribeSubnetsvà đối chiếudefaultForAz) —defaultForAzchỉ cho biết subnet đó có phải subnet MẶC ĐỊNH của AZ hay không, hoàn toàn không giúp ánh xạ AZ giữa các tài khoản.
Ghi nhớ
⚠ AZ Name ↔ AZ ID — bảng phải thuộc: | | AZ Name | AZ ID | |---|---|---| | Ví dụ | us-east-1a | use1-az1 | | Nhất quán giữa các tài khoản | KHÔNG — bị xáo ngẫu nhiên | CÓ — luôn giống nhau | | Dùng để | hiển thị trong console của chính bạn | ánh xạ AZ giữa các tài khoản | | Lấy ở đâu | zoneName, availabilityZone | zoneId, availabilityZoneId | | Khi nào cần AZ ID | liên tài khoản, VPC sharing, tối ưu phí qua AZ | |
Từ khoá nhận diện:
"ánh xạ AZ giữa các tài khoản" → AZ ID, không phải AZ name "cùng AZ hay khác AZ" → so
zoneId"chia sẻ subnet giữa tài khoản" → AWS RAM — hiển thị theo AZ ID "phí dữ liệu qua AZ cao bất ngờ" → kiểm tra xem có thật sự cùng AZ không "AZ nào hỗ trợ loại instance này" →describe-instance-type-offeringstheo AZ
| Vì sao AWS xáo tên AZ | Nội dung |
|---|---|
| Nếu không xáo | mọi người dồn vào "AZ a" |
| Hậu quả | tải lệch, một AZ quá tải, các AZ khác nhàn rỗi |
| Cách AWS làm | mỗi tài khoản một ánh xạ ngẫu nhiên |
| Hệ quả cho bạn | không bao giờ so tên AZ giữa các tài khoản |
| Ngoại lệ | các tài khoản trong cùng một tổ chức được tạo bởi Organizations vẫn có thể khác nhau — luôn kiểm tra AZ ID |
| Khi nào bắt buộc phải dùng AZ ID | Tình huống |
|---|---|
| VPC sharing qua AWS RAM | subnet chia sẻ hiển thị theo AZ ID |
| Kiến trúc liên tài khoản | bảo đảm thật sự trải nhiều AZ |
| Tối ưu phí dữ liệu qua AZ | đặt tài nguyên cùng AZ vật lý |
| Peering giữa VPC ở hai tài khoản | tránh lưu lượng đi vòng |
| PrivateLink | endpoint và service phải cùng AZ để tránh phí |
| Phí dữ liệu qua AZ — lý do nên quan tâm | Nội dung |
|---|---|
| Trong cùng AZ | miễn phí (dùng IP riêng) |
| Qua AZ khác | tính tiền CẢ HAI CHIỀU |
| Nơi hay phát sinh | NAT Gateway đặt khác AZ với máy, ALB cross-zone, replica CSDL |
| Cách giảm | một NAT mỗi AZ, route table riêng mỗi AZ |
| Kiểm chứng | VPC Flow Logs + Cost Explorer, lọc DataTransfer-Regional-Bytes |
| Các API liên quan | Việc |
|---|---|
describe-availability-zones |
zoneName và zoneId của mọi AZ |
describe-subnets |
availabilityZone và availabilityZoneId |
describe-instance-type-offerings |
loại máy nào có ở AZ nào |
| Lưu ý | thêm --all-availability-zones để thấy cả AZ chưa bật |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Bảng ánh xạ của tài khoản này | describe-availability-zones --query 'AvailabilityZones[].[ZoneName,ZoneId]' | | Subnet ở AZ vật lý nào | describe-subnets --query 'Subnets[].[SubnetId,AvailabilityZoneId]' | | Hai tài khoản có trùng AZ không | so AvailabilityZoneId, không so tên |
Và một hệ quả rất tốn kém nếu bỏ qua chi tiết này: một kiến trúc "đa AZ" trên giấy có thể thực chất nằm gọn trong một AZ vật lý. Hai tài khoản cùng chọn us-east-1a và us-east-1b trông như đã trải hai AZ, nhưng nếu ánh xạ của chúng lệch nhau thì bốn subnet đó có thể chỉ phủ hai AZ vật lý theo một cách hoàn toàn khác dự kiến — và điều đó chỉ lộ ra vào đúng ngày một AZ gặp sự cố.
A web application will be deployed that uses separate microservices running on different Amazon EC2 instances. A SysOps administrator has been tasked with configuring the infrastructure to route connection requests to the appropriate EC2 endpoints.
How can this be accomplished with the LEAST administrative effort?
-
A
Use Amazon CloudFront and forward the host header to the origin.
-
B
Use a Network Load Balancer (NLB) and do path-based routing.
-
C
Use AWS Global Accelerator with a weighted routing policy.
-
D
Use an Application Load Balancer (ALB) and do path-based routing.
Xem giải thích
Đáp án
D — Dùng APPLICATION LOAD BALANCER với định tuyến THEO ĐƯỜNG DẪN (path-based routing).
Vì sao đúng
Đề cần định tuyến request tới các microservice khác nhau với ít công quản trị nhất, và ALB có sẵn tính năng đó.
⚠ Điểm mấu chốt — ALB hoạt động ở TẦNG 7, đọc được URL:
ALB là load balancer TẦNG 7 (HTTP/HTTPS)
↓
Đọc được nội dung request:
đường dẫn, host header, HTTP header,
query string, phương thức, IP nguồn
↓
Listener rule với điều kiện path-pattern:
↓
/api/nguoi-dung/* → target group A
/api/don-hang/* → target group B
/api/thanh-toan/* → target group C
/* → target group mặc định
↓
→ đúng mô hình microservice
→ cấu hình bằng vài luật, không cần mã
⚠ Vì sao NLB không làm được:
NLB là load balancer TẦNG 4 (TCP/UDP)
↓
Chỉ thấy IP và CỔNG
↓
KHÔNG đọc được URL
↓
→ không thể định tuyến theo đường dẫn
→ phương án B mâu thuẫn ngay trong chính nó
⚠ Các loại điều kiện của listener rule — rất linh hoạt:
path-pattern → /api/*, /images/*
host-header → api.example.com
http-header → theo một header bất kỳ
http-request-method → GET, POST
query-string → ?version=2
source-ip → theo dải IP nguồn
↓
Kết hợp được nhiều điều kiện trong một luật
→ và mỗi luật có SỐ ƯU TIÊN
Vì sao các phương án khác sai
-
B (dùng Network Load Balancer và định tuyến theo đường dẫn) — đây là phương án gần nhất và là bẫy chính: NLB hoạt động ở tầng 4, không đọc được đường dẫn HTTP. Định tuyến theo path là tính năng riêng của ALB.
-
A (dùng CloudFront và chuyển tiếp host header về origin) — CloudFront có định tuyến theo path (qua cache behavior), nhưng nó là CDN cho phân phối toàn cầu, không phải công cụ cân bằng tải nội bộ. Dùng nó cho việc này là thêm một tầng không cần thiết, và vẫn cần một load balancer phía sau.
-
C (dùng Global Accelerator với chính sách định tuyến theo trọng số) — Global Accelerator hoạt động ở tầng 4, chia lưu lượng theo trọng số hoặc theo Region, không đọc được đường dẫn.
Ghi nhớ
⚠ Ba loại load balancer — bảng phải thuộc: | | ALB | NLB | GWLB | |---|---|---|---| | Tầng | 7 (HTTP/HTTPS) | 4 (TCP/UDP/TLS) | 3 (GENEVE) | | Định tuyến theo path | CÓ | KHÔNG | — | | Định tuyến theo host | có | không | — | | IP tĩnh | không | CÓ, mỗi AZ một cái | — | | Hiệu năng | rất cao | cực cao, độ trễ thấp nhất | — | | Sticky session | cookie | theo IP nguồn | — | | Dùng khi | web, API, microservice | game, IoT, cần IP tĩnh | thiết bị bảo mật |
Từ khoá nhận diện:
"định tuyến theo đường dẫn / theo host" → ALB "cần IP tĩnh" → NLB "TCP/UDP, độ trễ cực thấp" → NLB "phân phối nội dung toàn cầu" → CloudFront "microservice, container" → ALB + ECS/EKS
| Tính năng định tuyến của ALB | Nội dung |
|---|---|
| Path-based | /api/* → target group riêng |
| Host-based | api.example.com và web.example.com trên MỘT ALB |
| Header-based | theo header tuỳ ý — hữu ích cho canary |
| Query string | ?version=beta |
| Weighted target group | chia % giữa hai target group — blue/green, canary |
| Hành động | forward, redirect, fixed-response, authenticate |
| Tính năng khác của ALB đáng nhớ | Nội dung |
|---|---|
| Authenticate (Cognito / OIDC) | ALB tự lo đăng nhập |
| Redirect HTTP → HTTPS | ngay tại listener, không cần mã |
| Fixed response | trả 503 hoặc trang bảo trì mà không cần backend |
| Lambda làm target | ALB gọi thẳng Lambda |
| IP làm target | trỏ tới IP ngoài VPC (qua VPN/DX) |
| WAF | gắn được vào ALB |
| ALB cho kiến trúc microservice | Nội dung |
|---|---|
| Một ALB, nhiều target group | mỗi microservice một target group |
| Health check riêng cho từng service | đường dẫn kiểm tra khác nhau |
| Tích hợp ECS/EKS | tự đăng ký và gỡ container |
| Giới hạn | 100 luật mỗi ALB (nâng được) |
| Với rất nhiều service | cân nhắc API Gateway, hoặc service mesh |
| Khi nào chọn API Gateway thay ALB | Nội dung |
|---|---|
| Cần | throttling theo từng client, API key, usage plan |
| Cần | chuyển đổi request/response, mô hình dữ liệu |
| Cần | tích hợp thẳng với Lambda, Step Functions, DynamoDB |
| Chi phí | API Gateway đắt hơn ở lưu lượng cao |
| Chọn ALB khi | lưu lượng lớn, backend là container hoặc EC2 |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Luật đang định tuyến ra sao | describe-rules --listener-arn ... | | Request đi tới target nào | ALB access log, cột target:port | | Target có khoẻ không | HealthyHostCount theo từng target group |
Và một chi tiết dễ gây bối rối khi mới cấu hình nhiều luật: thứ tự ưu tiên quyết định luật nào được áp dụng. ALB xét luật theo số ưu tiên tăng dần và dừng ở luật khớp đầu tiên, nên một luật /* đặt ở ưu tiên thấp sẽ nuốt hết mọi request trước khi các luật cụ thể hơn kịp được xem xét — hãy luôn để luật rộng nhất ở số ưu tiên lớn nhất.
An e-commerce company hosts its website on an Application Load Balancer (ALB) in the Asia Pacific (Singapore) region. As the customer base in North America grows, they face latency issues. The company sets up another version of the site in the North America (Oregon) region.
To maintain the URL and route users to the lowest latency endpoint, what should be done?
-
A
Switch the existing Route 53 record to a latency routing policy, with two latency records each for the respective ALB.
-
B
Update the existing Route 53 record to use a geolocation routing policy, linking to the respective ALB in each region.
-
C
Modify the existing Route 53 record to a multivalue answer routing policy and add the new ALB's DNS name.
-
D
Attach a new ALB DNS name in North America (Oregon) to the existing Route 53 record.
Xem giải thích
Đáp án
A — Chuyển bản ghi Route 53 hiện có sang chính sách LATENCY ROUTING, với hai bản ghi latency trỏ tới hai ALB tương ứng.
Vì sao đúng
Đề nói rất rõ mục tiêu: "route users to the LOWEST LATENCY endpoint" — đưa người dùng tới điểm cuối có độ trễ thấp nhất.
⚠ Điểm mấu chốt — latency routing chọn theo ĐỘ TRỄ ĐO ĐƯỢC:
Route 53 duy trì một BẢNG ĐỘ TRỄ
giữa các mạng trên thế giới và các Region AWS
↓
Người dùng truy vấn DNS
↓
Route 53 xem resolver đó ở đâu
→ tra bảng độ trễ
→ trả về bản ghi của Region CÓ ĐỘ TRỄ THẤP NHẤT
↓
→ không phải Region GẦN NHẤT trên bản đồ
→ mà Region NHANH NHẤT về đường mạng
⚠ Vì sao "độ trễ thấp nhất" khác "gần nhất":
Khoảng cách địa lý ≠ độ trễ mạng
↓
Đường cáp quang không đi thẳng
Chất lượng nhà mạng khác nhau theo vùng
Điểm trao đổi lưu lượng nằm ở những nơi bất ngờ
↓
→ có trường hợp Region xa hơn lại nhanh hơn
↓
Latency routing dùng SỐ LIỆU THẬT của AWS
→ tự cập nhật khi hạ tầng mạng thay đổi
⚠ Cách cấu hình cho đề này:
Cùng một tên bản ghi (www.congty.com):
↓
Bản ghi 1: Alias → ALB ở ap-southeast-1
Routing policy: Latency
Region: ap-southeast-1
↓
Bản ghi 2: Alias → ALB ở us-west-2
Routing policy: Latency
Region: us-west-2
↓
→ URL KHÔNG ĐỔI, đúng yêu cầu "maintain the URL"
→ Route 53 tự chọn giữa hai bản ghi
↓
Nên ghép thêm HEALTH CHECK
→ Region hỏng thì tự chuyển sang Region kia
Xem thêm câu #11922 (lô 129) và #11855 (lô 128): cũng chọn kiểu định tuyến của Route 53 nhưng khoá là geolocation, vì ở đó đề đòi người dùng châu Âu phải về Region châu Âu — một ràng buộc theo VỊ TRÍ. Ở đây đề đòi độ trễ thấp nhất — một ràng buộc về HIỆU NĂNG. Hai khoá khác nhau vì ràng buộc khác nhau, không mâu thuẫn.
Vì sao các phương án khác sai
-
B (chuyển sang geolocation routing, liên kết tới ALB ở mỗi Region) — đây là phương án gần nhất và cũng đưa người dùng về Region theo khu vực, nhưng nó chọn theo vị trí địa lý, không theo độ trễ đo được. Đề nói rõ mục tiêu là độ trễ thấp nhất, nên latency routing đúng hơn. (Geolocation là lựa chọn đúng khi có ràng buộc pháp lý hoặc nội dung theo vùng.)
-
C (chuyển sang multivalue answer và thêm tên DNS của ALB mới) — multivalue trả về nhiều bản ghi khoẻ mạnh một cách ngẫu nhiên, hoàn toàn không xét độ trễ hay vị trí. Người dùng Bắc Mỹ vẫn có thể bị đưa về Singapore.
-
D (chỉ gắn thêm tên DNS của ALB mới vào bản ghi hiện có) — tạo ra một bản ghi có nhiều giá trị nhưng không có logic chọn nào; hành vi sẽ tương tự phương án C.
Ghi nhớ
⚠ Chọn kiểu định tuyến theo đúng RÀNG BUỘC — bảng phải thuộc: | Ràng buộc trong đề | Kiểu định tuyến | |---|---| | "độ trễ thấp nhất", "hiệu năng tốt nhất" | Latency-based | | "người dùng nước X phải về Region Y", tuân thủ | Geolocation | | "chia N% lưu lượng", canary | Weighted | | "chính / dự phòng" | Failover | | "điều chỉnh vùng phục vụ của một Region" | Geoproximity với bias | | Trả nhiều IP khoẻ mạnh | Multivalue answer |
Từ khoá nhận diện:
"lowest latency" → latency-based routing "người dùng ở quốc gia X" → geolocation "dữ liệu phải ở lại trong nước" → geolocation, BẮT BUỘC "giữ nguyên URL" → cùng một tên bản ghi, nhiều bản ghi con "failover nhanh hơn DNS" → Global Accelerator
| Latency-based routing — chi tiết cần nhớ | Nội dung |
|---|---|
| Cơ sở | bảng độ trễ do AWS đo và duy trì |
| Mỗi bản ghi phải khai | Region của tài nguyên |
| Cùng tên bản ghi | nhiều bản ghi latency, mỗi Region một cái |
| Kết hợp health check | Region hỏng → tự loại khỏi lựa chọn |
| Lưu ý | dựa trên vị trí RESOLVER, không phải client |
| Với client dùng DNS công cộng | có thể bị đo lệch — EDNS Client Subnet giúp cải thiện |
| Kết hợp nhiều kiểu định tuyến | Cách |
|---|---|
| Bản ghi alias lồng nhau | latency ở ngoài, failover ở trong |
| Kết quả | chọn Region nhanh nhất, và tự chuyển khi Region đó hỏng |
| Công cụ | Traffic Flow — vẽ cây định tuyến trực quan |
| Kèm | health check cho từng bản ghi |
| Kiến trúc đa Region đầy đủ | Thành phần |
|---|---|
| DNS | latency/geolocation + failover |
| Tính toán | ASG + ALB ở mỗi Region |
| Dữ liệu | Aurora Global Database, DynamoDB global table |
| Tệp tĩnh | S3 Cross-Region Replication |
| Cache | CloudFront trước tất cả |
| Thay thế | Global Accelerator khi cần failover nhanh hơn DNS |
| Vì sao Global Accelerator failover nhanh hơn | Nội dung |
|---|---|
| DNS có TTL | client cache bản ghi cũ |
| Global Accelerator | IP anycast cố định, chuyển hướng trong mạng AWS |
| Thời gian | khoảng 30 giây, không phụ thuộc DNS cache |
| Đánh đổi | phí cố định hằng giờ |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Người dùng vùng X nhận gì | test-dns-answer với --resolver-ip của vùng đó | | Health check đang báo gì | Route 53 → Health checks → tab Monitoring | | Có cải thiện thật không | đo độ trễ từ Bắc Mỹ trước và sau |
Và một chi tiết nên biết về giới hạn của latency routing: nó dựa trên vị trí của RESOLVER, không phải của người dùng. Một người ở Bắc Mỹ dùng DNS công cộng có thể được đo theo vị trí của resolver đó thay vì của chính họ — Route 53 có hỗ trợ EDNS Client Subnet để giảm bớt sai lệch này, nhưng nó phụ thuộc vào việc resolver có gửi thông tin đó hay không.
A popular web application uses an Amazon DynamoDB table for storing customer transaction data. A SysOps administrator needs to add disaster recovery protection for the DynamoDB table. The table should be replicated to another AWS Region.
What should the SysOps administrator do to meet this requirement?
-
A
Enable point-in-time recovery to a second AWS Region.
-
B
Enable DynamoDB Streams and add a global secondary index (GSI).
-
C
Enable a scheduled on-demand backup.
-
D
Enable DynamoDB Streams and add a Global Table Region.
Xem giải thích
Đáp án
D — Bật DynamoDB STREAMS và thêm một GLOBAL TABLE REGION.
Vì sao đúng
Yêu cầu là nhân bản bảng sang Region khác cho khôi phục thảm hoạ, và global table là cơ chế duy nhất làm điều đó.
⚠ Điểm mấu chốt — global table nhân bản đa Region:
DynamoDB Global Table
↓
Bảng tồn tại ở NHIỀU Region cùng lúc
↓
Ghi ở Region nào cũng được (multi-active)
→ tự nhân bản sang các Region còn lại
↓
Độ trễ nhân bản: thường DƯỚI MỘT GIÂY
↓
→ RPO gần bằng 0
→ mất cả một Region vẫn còn bản đầy đủ
⚠ Vì sao phải bật Streams trước:
Global table dùng STREAMS làm cơ chế nhân bản
↓
Streams ghi lại mọi thay đổi ở mức bản ghi
↓
→ phải bật với StreamViewType:
NEW_AND_OLD_IMAGES
↓
→ sau đó chỉ cần THÊM MỘT REGION
vào bảng là xong
⚠ Xử lý xung đột:
Hai Region cùng sửa một bản ghi
↓
LAST WRITER WINS theo dấu thời gian
↓
→ phù hợp với phần lớn ứng dụng
→ nhưng KHÔNG dùng cho giao dịch
đòi nhất quán nghiêm ngặt liên Region
↓
Cách tránh: định tuyến người dùng
về đúng một Region theo khu vực
Xem thêm câu #11934 (CÙNG LÔ): gần như cùng một câu hỏi, cùng đáp án Streams + global table. Chỉ khác chữ cái vì bộ đề xáo thứ tự phương án (ở đó là B, ở đây là D). Khoá nhất quán.
Vì sao các phương án khác sai
-
B (bật Streams và thêm một global secondary index — GSI) — đây là phương án gần nhất và là bẫy đặt tên kinh điển: GSI là chỉ mục phụ TRONG CÙNG bảng và CÙNG Region. Chữ "global" ở đây nghĩa là phủ toàn bộ bảng (khác local secondary index), không phải toàn cầu về địa lý.
-
A (bật point-in-time recovery sang một Region thứ hai) — PITR không có khái niệm Region thứ hai: nó khôi phục theo thời điểm trong cùng Region (35 ngày gần nhất).
-
C (bật sao lưu theo lịch kiểu on-demand) — sao lưu không phải nhân bản: RPO bằng khoảng cách giữa hai lần sao lưu, RTO là thời gian khôi phục cả bảng. Và bản thân on-demand backup cũng nằm trong cùng Region trừ khi dùng AWS Backup để copy.
Ghi nhớ
⚠ Các tính năng DynamoDB dễ nhầm — bảng phải thuộc: | Tính năng | Việc | |---|---| | Global Table | nhân bản ĐA REGION, ghi được ở mọi Region | | Global Secondary Index (GSI) | chỉ mục phụ TRONG CÙNG bảng, cùng Region | | Local Secondary Index (LSI) | cùng khoá phân vùng, phải tạo lúc tạo bảng | | DAX | cache trong bộ nhớ, độ trễ micro giây | | Streams | luồng thay đổi — nền tảng của global table | | PITR | 35 ngày, tới từng giây, CÙNG Region |
Từ khoá nhận diện:
"nhân bản sang Region khác" → Global Table "khôi phục về thời điểm trước sự cố" → PITR "truy vấn theo thuộc tính khác khoá chính" → GSI "đọc cần micro giây" → DAX "phản ứng khi dữ liệu thay đổi" → Streams + Lambda
| Global Table — điều kiện và đặc điểm | Nội dung |
|---|---|
| Điều kiện | bật Streams với NEW_AND_OLD_IMAGES |
| Chế độ ghi | multi-active |
| Xung đột | last writer wins |
| Độ trễ nhân bản | thường dưới 1 giây |
| Lược đồ | khoá phải giống nhau ở mọi Region |
| Chi phí | replicated write unit ở mỗi Region đích |
| Global table KHÔNG thay thế sao lưu | Nội dung |
|---|---|
| Vì sao | xoá nhầm → nhân bản sang MỌI Region trong dưới 1 giây |
| Cần thêm | PITR hoặc on-demand backup |
| Nguyên tắc | nhân bản chống MẤT HẠ TẦNG, sao lưu chống LỖI CON NGƯỜI |
| Bảo vệ thêm | DeletionProtectionEnabled trên bảng |
| Bốn cơ chế bảo vệ dữ liệu DynamoDB | Nội dung |
|---|---|
| PITR | 35 ngày, tới từng giây |
| On-demand backup | giữ vô thời hạn, không ảnh hưởng hiệu năng |
| AWS Backup | lịch tập trung, cross-Region và cross-account copy |
| Global Table | chịu được mất cả Region |
| Kết hợp | PITR + Global Table cho hệ thống quan trọng |
| Theo dõi global table | Chỉ số |
|---|---|
ReplicationLatency |
độ trễ nhân bản — chính là RPO thực tế |
PendingReplicationCount |
số bản ghi đang chờ nhân bản |
ThrottledRequests |
thiếu thông lượng ở một Region |
| Nên dùng | on-demand mode hoặc auto scaling ở mọi replica |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Đã có replica chưa | describe-table → Replicas | | Nhân bản trễ bao nhiêu | chỉ số ReplicationLatency | | PITR đã bật chưa | describe-continuous-backups |
Và một điều đáng nhớ về đặt tên trong AWS: chữ "global" trong "global secondary index" và trong "global table" mang hai nghĩa hoàn toàn khác nhau. Một cái nói về phạm vi khoá phân vùng trong bảng, cái kia nói về phạm vi địa lý — và đây là một trong những bẫy đặt tên xuất hiện đều đặn trong đề thi.
A Development account is being used to test a CPU-heavy application. To save costs, a SysOps administrator needs a solution to stop Amazon EC2 instances that are not in use in the account.
Which solution will meet this requirement?
-
A
Create an Amazon CloudWatch metric to stop the EC2 instances when the VolumeIdleTime metric is >1800 seconds.
-
B
Use Amazon Athena to search AWS CloudTrail logs. Invoke a Lambda function to stop the EC2 instances when there is no API activity.
-
C
Create an Amazon CloudWatch alarm that monitors the CPUUtilization metric and stops the EC2 instances if the utilization is <5% for a 30-minute period.
-
D
Use AWS Config to identify resource state changes and invoke an AWS Lambda function that stops the EC2 instances.
Xem giải thích
Đáp án
C — Tạo CloudWatch alarm theo dõi CPUUtilization và DỪNG máy nếu mức dùng dưới 5% trong 30 phút.
Vì sao đúng
Đề cần tự động dừng máy không dùng tới trong một tài khoản development, và alarm với EC2 action làm đúng việc đó mà không cần mã.
⚠ Điểm mấu chốt — CloudWatch alarm có hành động EC2 tích hợp sẵn:
CloudWatch alarm
↓
Hành động gắn được:
- SNS notification
- Auto Scaling action
- EC2 ACTION: stop / terminate / reboot / recover
- SSM Incident / OpsItem
↓
→ chọn "Stop this instance"
↓
→ KHÔNG cần Lambda, KHÔNG cần mã
→ đây là cách đơn giản nhất
⚠ Cấu hình cho ứng dụng CPU-heavy:
Metric: CPUUtilization
Threshold: < 5%
Period: 5 phút
EvaluationPeriods: 6 → tổng 30 phút
DatapointsToAlarm: 6
Action: EC2 → Stop this instance
↓
Ứng dụng NẶNG CPU
→ CPU dưới 5% suốt 30 phút
nghĩa là gần như chắc chắn không ai dùng
↓
→ ngưỡng này hợp lý cho đúng loại tải trong đề
⚠ Nhưng phải cẩn thận với cách chọn chỉ số:
CPU thấp KHÔNG LUÔN nghĩa là nhàn rỗi
↓
Máy đang chờ I/O
Máy đang chờ dữ liệu từ mạng
Máy chạy tác vụ nặng bộ nhớ
↓
→ với ứng dụng CPU-heavy như đề mô tả
thì rủi ro này thấp
↓
Với tải khác, nên kết hợp thêm:
NetworkIn/Out, số phiên đăng nhập,
hoặc composite alarm
Vì sao các phương án khác sai
-
D (dùng AWS Config phát hiện thay đổi trạng thái tài nguyên rồi gọi Lambda dừng máy) — đây là phương án gần nhất về mức độ tự động hoá, nhưng Config theo dõi THAY ĐỔI CẤU HÌNH, không theo dõi mức sử dụng. Một máy nhàn rỗi thì cấu hình của nó không đổi gì cả, nên Config sẽ không bao giờ kích hoạt.
-
B (dùng Athena tìm trong log CloudTrail rồi gọi Lambda khi không có hoạt động API) — hoạt động API không phản ánh việc máy có đang được dùng hay không: một máy chạy tính toán suốt ngày cũng không sinh lời gọi API nào. Lại rất phức tạp và tốn kém.
-
A (tạo chỉ số CloudWatch để dừng máy khi
VolumeIdleTime> 1800 giây) — sai hai chỗ:VolumeIdleTimeđo thời gian rảnh của EBS, không phải của máy, và bạn không "tạo chỉ số" để dừng máy — phải tạo alarm.
Ghi nhớ
⚠ Bốn hành động EC2 của CloudWatch alarm — bảng phải thuộc: | Hành động | Dùng khi | |---|---| | Stop | máy nhàn rỗi — tiết kiệm chi phí | | Terminate | máy dùng một lần, không cần giữ | | Reboot | ứng dụng treo, cần khởi động lại | | Recover | StatusCheckFailed_System — chuyển sang phần cứng mới | | Điều kiện | máy phải là EBS-backed (với Stop) |
Từ khoá nhận diện:
"tự dừng máy nhàn rỗi" → CloudWatch alarm + EC2 action Stop "tự khởi động lại khi treo" → alarm + EC2 action Reboot "phần cứng lỗi" → alarm trên
StatusCheckFailed_System+ Recover "tắt máy theo LỊCH ngoài giờ" → Instance Scheduler, hoặc EventBridge + SSM "máy không đúng chuẩn cấu hình" → AWS Config
| Hai cách tiết kiệm chi phí máy dev | Nội dung |
|---|---|
| Theo NGƯỠNG sử dụng | alarm trên CPUUtilization — cách của đề này |
| Theo LỊCH | AWS Instance Scheduler, hoặc EventBridge + SSM Automation |
| Kết hợp | lịch tắt lúc 19h, alarm bắt máy nhàn rỗi trong giờ làm |
| Lợi ích | môi trường dev chạy 24/7 thường lãng phí ~70% chi phí |
| Cấu hình alarm cho đúng | Tham số |
|---|---|
Period |
5 phút (basic) hoặc 1 phút (detailed monitoring) |
EvaluationPeriods |
số chu kỳ xét |
DatapointsToAlarm |
M trên N — chống báo động giả |
TreatMissingData |
breaching nếu máy tắt cũng nên coi là nhàn rỗi |
ComparisonOperator |
LessThanThreshold |
| Rủi ro khi tự động dừng máy — cách giảm | Cách |
|---|---|
| Tag ngoại lệ | máy có tag AlwaysOn=true thì loại khỏi cơ chế |
| Cảnh báo trước | SNS báo 10 phút trước khi dừng |
| Ngưỡng đủ dài | 30 phút thay vì 5 phút |
| Kết hợp nhiều chỉ số | composite alarm: CPU thấp VÀ mạng thấp |
| Với máy có người đang SSH | cân nhắc kiểm tra số phiên đăng nhập |
| Recover — hành động rất đáng nhớ | Nội dung |
|---|---|
| Chỉ số | StatusCheckFailed_System |
| Việc | chuyển instance sang PHẦN CỨNG MỚI |
| Giữ nguyên | instance id, IP riêng, IP công cộng, EBS volume |
| Mất | dữ liệu trên instance store |
| Điều kiện | máy EBS-backed, loại máy hỗ trợ |
| Nên có | với mọi máy đơn lẻ quan trọng |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Alarm có kích hoạt không | describe-alarm-history | | Máy có bị dừng nhầm không | CloudTrail, tìm StopInstances với nguồn là CloudWatch | | Tiết kiệm được bao nhiêu | Cost Explorer, so chi phí EC2 trước/sau |
Và một biện pháp bổ sung rất đáng làm cùng lúc: thêm một tag ngoại lệ như AlwaysOn=true và loại những máy đó khỏi cơ chế tự dừng. Trong một tài khoản development luôn có vài máy chạy build agent, license server hay cơ sở dữ liệu dùng chung — chúng có CPU rất thấp nhưng không được phép tắt, và cách rẻ nhất để tránh một sự cố khó chịu là chừa sẵn một lối ra ngay từ đầu.
A company has several production accounts that are managed using AWS Organizations. The company policy mandates that Amazon S3 buckets should never be deleted.
What is the SIMPLEST approach a SysOps administrator can take to enforce this policy?
-
A
Create an IAM group that has an IAM policy to deny the s3:DeleteBucket action on all buckets in all accounts.
-
B
Set up MFA Delete on all the S3 buckets to prevent the buckets from being deleted.
-
C
Use service control policies to deny the s3:DeleteBucket action on all buckets in all accounts.
-
D
Use an Access Control List to deny the s3:DeleteBucket action at the organization level to apply the policy to all accounts.
Xem giải thích
Đáp án
C — Dùng SERVICE CONTROL POLICY để từ chối hành động s3:DeleteBucket trên mọi bucket ở mọi tài khoản.
Vì sao đúng
Đề yêu cầu bucket KHÔNG BAO GIỜ được xoá trên nhiều tài khoản production, với cách đơn giản nhất.
⚠ Điểm mấu chốt — SCP là trần quyền cho CẢ TÀI KHOẢN:
SCP áp lên root hoặc OU
↓
Áp cho MỌI danh tính trong các tài khoản đó:
- IAM user, IAM role
- kể cả người có AdministratorAccess
- kể cả ROOT USER của tài khoản thành viên
↓
Deny s3:DeleteBucket
↓
→ KHÔNG AI xoá được bucket
→ và chỉ cần cấu hình MỘT LẦN ở tài khoản quản lý
⚠ Chính sách viết rất gọn:
{
"Effect": "Deny",
"Action": "s3:DeleteBucket",
"Resource": "*"
}
Không cần Condition
Không cần liệt kê bucket
↓
→ áp cho mọi bucket, mọi tài khoản
trong phạm vi được gắn
⚠ Vì sao IAM policy KHÔNG đủ:
IAM policy gắn vào user hoặc group
↓
Người có quyền quản trị IAM
→ tự gỡ chính sách ra
→ hoặc tạo một role mới không bị ràng buộc
↓
Và phải cấu hình ở TỪNG TÀI KHOẢN
→ tài khoản mới lại phải làm lại
↓
→ không phải "đơn giản nhất",
và cũng không thật sự bảo đảm
Xem thêm câu #11865 (lô 128), #11882 và #11894 (lô 129): cùng chùm SCP — công cụ duy nhất chặn được cả người có quyền quản trị trong tài khoản thành viên. Khoá nhất quán.
Vì sao các phương án khác sai
-
A (tạo IAM group với chính sách Deny
s3:DeleteBuckettrên mọi bucket ở mọi tài khoản) — đây là phương án gần nhất và chính sách đúng nội dung, nhưng IAM group chỉ tồn tại trong MỘT tài khoản: phải tạo ở từng tài khoản, và người dùng không thuộc group đó thì không bị ràng buộc. -
B (bật MFA Delete trên mọi bucket) — MFA Delete bảo vệ việc xoá PHIÊN BẢN ĐỐI TƯỢNG và việc tắt versioning, không ngăn xoá bucket theo cách đề cần. (Và nó chỉ bật được bằng root user với CLI, rất bất tiện ở quy mô nhiều tài khoản.)
-
D (dùng Access Control List để từ chối
s3:DeleteBucketở cấp tổ chức) — S3 ACL là cơ chế cũ, chỉ cấp quyền đọc/ghi cho đối tượng và bucket, không có khái niệm Deny và không áp ở cấp tổ chức.
Ghi nhớ
⚠ Bốn tầng kiểm soát quyền — bảng phải thuộc: | Tầng | Phạm vi | Ai gỡ được | |---|---|---| | SCP | cả TÀI KHOẢN hoặc OU | chỉ tài khoản QUẢN LÝ | | Permissions boundary | một danh tính | người có quyền IAM | | Identity policy | user/group/role | bất kỳ ai có quyền IAM | | Resource policy | một tài nguyên | người quản lý tài nguyên đó | | Hiệu lực | giao của tất cả — Deny ở bất kỳ đâu là TỪ CHỐI | |
Từ khoá nhận diện:
"không ai được làm X, nhiều tài khoản" → SCP "kể cả quản trị viên cũng bị chặn" → SCP "chống xoá nhầm ĐỐI TƯỢNG trong bucket" → versioning + MFA Delete + Object Lock "chống xoá nhầm một tài nguyên cụ thể" → deletion protection,
DeletionPolicy: Retain"phát hiện tài nguyên sai chuẩn" → AWS Config
| Bảo vệ dữ liệu S3 nhiều lớp | Lớp |
|---|---|
SCP chặn s3:DeleteBucket |
chặn xoá cả bucket |
| Versioning | xoá đối tượng chỉ tạo delete marker |
| MFA Delete | cần MFA để xoá phiên bản và tắt versioning |
| Object Lock | WORM — bất biến trong thời hạn giữ |
| Replication sang tài khoản khác | bản sao ngoài tầm với của kẻ tấn công |
| Block Public Access | không lộ ra internet |
| SCP nên có ở mọi tổ chức | Nội dung |
|---|---|
| Chặn xoá bucket log và tắt CloudTrail | bảo vệ tầng giám sát |
| Chặn Region không dùng | aws:RequestedRegion |
| Chặn tắt Config, GuardDuty, Security Hub | |
| Chặn rời khỏi tổ chức | organizations:LeaveOrganization |
| Chặn xoá khoá KMS | kms:ScheduleKeyDeletion |
| Thử nghiệm | luôn áp lên OU thử trước |
| Bẫy khi dùng SCP — nhắc lại | Nội dung |
|---|---|
| Không áp cho tài khoản quản lý | đừng chạy tải công việc ở đó |
Gỡ FullAWSAccess |
khoá sạch mọi thứ nếu chưa có Allow thay thế |
| Ảnh hưởng role dịch vụ | có thể làm đứt CI/CD, sao lưu, replication |
| Chặn quá rộng | ví dụ Deny s3:Delete* cũng chặn luôn DeleteObject |
| Thông báo lỗi | AccessDenied kèm ghi chú explicit deny in SCP |
| Nếu cần chừa ngoại lệ cho một role vận hành | Cách |
|---|---|
Thêm Condition |
ArnNotLike trên aws:PrincipalArn |
| Ví dụ | chừa role OpsBreakGlass |
| Kèm theo | role đó bắt buộc MFA, và ghi log CloudTrail |
| Nguyên tắc | càng ít ngoại lệ càng tốt |
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 | thử delete-bucket ở một tài khoản thành viên — phải AccessDenied | | Có làm đứt gì không | theo dõi CloudTrail tìm AccessDenied bất thường sau khi áp |
Và một điều nên cân nhắc khi viết SCP loại này: đừng dùng s3:Delete*. Mẫu đó sẽ chặn luôn s3:DeleteObject và s3:DeleteObjectVersion, khiến mọi quy trình dọn dẹp và mọi lifecycle rule do ứng dụng gọi bị hỏng — trong khi yêu cầu của công ty chỉ là không cho xoá bucket, một hành động hoàn toàn khác.
A company wants to use an AWS IAM role with a SAML 2.0-compliant identity provider (IdP) and AWS to permit federated users to access the AWS Management Console. The workflow should open the AWS Management Console on behalf of the user.
Which of the following workflow steps should be included?
-
A
Configure the client to post a SAML assertion and use an Amazon Cognito endpoint.
-
B
Configure the client to directly call the AssumeRoleWithSAML API.
-
C
Configure the client to directly call the AssumeRoleWithWebIdentity API.
-
D
Configure the client to post a SAML assertion and use an AWS SSO endpoint.
Xem giải thích
Đáp án
D — Cấu hình client GỬI SAML ASSERTION và dùng ENDPOINT ĐĂNG NHẬP SSO của AWS.
Vì sao đúng
Đề nói rõ mục tiêu: mở AWS Management Console THAY MẶT người dùng. Đó là một luồng của trình duyệt, không phải một lời gọi API.
⚠ Điểm mấu chốt — hai luồng SAML hoàn toàn khác nhau:
LUỒNG CONSOLE (đề này)
↓
IdP xác thực người dùng
↓
Trình duyệt POST SAML assertion tới
https://signin.aws.amazon.com/saml
↓
AWS xác minh assertion, ánh xạ sang IAM role
↓
→ chuyển hướng thẳng vào CONSOLE
→ người dùng KHÔNG cần thao tác gì thêm
LUỒNG API / CLI
↓
Ứng dụng gọi sts:AssumeRoleWithSAML
↓
→ nhận về access key, secret, session token
→ dùng cho SDK và CLI
→ KHÔNG mở console
⚠ Vì sao gọi thẳng AssumeRoleWithSAML không mở được console:
AssumeRoleWithSAML trả về THÔNG TIN XÁC THỰC TẠM
↓
Muốn từ đó vào console
↓
→ phải gọi thêm federation endpoint
để đổi lấy một SIGN-IN TOKEN
→ rồi dựng một URL đăng nhập
↓
→ nhiều bước hơn, và không phải
luồng chuẩn cho SSO qua trình duyệt
⚠ Cấu hình cần có ở phía AWS:
1. Tạo IAM IDENTITY PROVIDER kiểu SAML
→ tải lên metadata XML của IdP
↓
2. Tạo IAM ROLE với trust policy:
Principal: Federated → ARN của IdP
Action: sts:AssumeRoleWithSAML
Condition: SAML:aud =
https://signin.aws.amazon.com/saml
↓
3. Ở phía IdP, khai các thuộc tính SAML:
Role → ARN của role và ARN của IdP
RoleSessionName → tên phiên
SessionDuration → thời hạn phiên
Vì sao các phương án khác sai
-
B (gọi thẳng API
AssumeRoleWithSAML) — đây là phương án gần nhất và là API đúng cho SAML, nhưng nó phục vụ luồng API/CLI, trả về thông tin xác thực chứ không mở console. Đề yêu cầu mở console thay mặt người dùng. -
C (gọi thẳng
AssumeRoleWithWebIdentity) — API này dành cho OIDC / web identity (Google, Facebook, Cognito), không dành cho SAML 2.0. -
A (gửi SAML assertion và dùng endpoint Amazon Cognito) — Cognito phục vụ người dùng của ỨNG DỤNG, không phải để đưa nhân viên vào AWS Management Console.
Ghi nhớ
⚠ Các API của STS — bảng phải thuộc: | API | Dùng khi | |---|---| | AssumeRole | cross-account, hoặc đổi vai trong cùng tài khoản | | AssumeRoleWithSAML | liên kết SAML 2.0 — cho API/CLI | | AssumeRoleWithWebIdentity | OIDC: Google, Facebook, Cognito, IRSA của EKS | | GetFederationToken | liên kết cho người dùng không phải IAM | | GetSessionToken | thêm MFA cho IAM user | | Endpoint console | https://signin.aws.amazon.com/saml |
Từ khoá nhận diện:
"mở CONSOLE thay mặt người dùng" → POST SAML assertion tới endpoint SSO "lấy thông tin xác thực cho CLI/SDK" →
AssumeRoleWithSAML"OIDC, Google, Cognito" →AssumeRoleWithWebIdentity"nhiều tài khoản AWS, một lần đăng nhập" → IAM Identity Center "người dùng của ứng dụng" → Cognito
| Hai cách liên kết SAML vào AWS | Nội dung |
|---|---|
| IAM Identity Provider + role | cách truyền thống — mỗi tài khoản một IdP, một bộ role |
| IAM Identity Center | cách khuyến nghị hiện nay — một nơi, permission set áp cho nhiều tài khoản |
| Với nhiều tài khoản | Identity Center thắng rõ rệt |
| Đồng bộ người dùng | SCIM từ IdP |
| Các thuộc tính SAML mà AWS đọc | Nội dung |
|---|---|
https://aws.amazon.com/SAML/Attributes/Role |
ARN của role và ARN của IdP, cách nhau dấu phẩy |
.../RoleSessionName |
tên phiên — hiện trong CloudTrail |
.../SessionDuration |
thời hạn phiên (tối đa 12 giờ) |
.../PrincipalTag:<khoá> |
gắn tag cho phiên — dùng cho ABAC |
| Trust policy | phải khai SAML:aud đúng endpoint |
| Vì sao liên kết tốt hơn IAM user | Nội dung |
|---|---|
| Một nơi quản lý danh tính | nghỉ việc → khoá ở IdP → mất quyền AWS ngay |
| Không có khoá dài hạn | STS cấp thông tin tạm thời |
| MFA của công ty | dùng lại được |
| Chính sách mật khẩu | thống nhất toàn tổ chức |
| Kiểm toán | CloudTrail ghi RoleSessionName |
| Gỡ lỗi liên kết SAML | Nội dung |
|---|---|
| Lỗi phổ biến nhất | thuộc tính Role khai sai định dạng |
| Định dạng đúng | arn:aws:iam::<acct>:role/<Ten>,arn:aws:iam::<acct>:saml-provider/<Ten> |
Lỗi InvalidIdentityToken |
metadata IdP hết hạn hoặc sai |
Lỗi AccessDenied |
trust policy thiếu SAML:aud |
| Công cụ | plugin đọc SAML trace của trình duyệt |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | IdP đã đăng ký chưa | list-saml-providers | | Trust policy đúng chưa | get-role → đọc AssumeRolePolicyDocument | | Ai đã đăng nhập | CloudTrail, tìm AssumeRoleWithSAML và RoleSessionName |
Và một khuyến nghị nên đặt vào lộ trình dù hôm nay dùng liên kết SAML trực tiếp: chuyển sang IAM Identity Center khi số tài khoản tăng lên. Với một tài khoản thì hai cách tương đương, nhưng với hai mươi tài khoản thì cách truyền thống nghĩa là hai mươi bộ IdP và role phải giữ đồng bộ — trong khi Identity Center chỉ cần một permission set áp cho tất cả.
A SysOps administrator us unable to connect to an Amazon EC2 instance which keeps returning a “request timed out” error message. The administrator is connecting from the public IP address of 200.10.11.12 and the instance’s private IP address is 172.31.16.25. A VPC flow log has captured the following information:
2 0123456789992 eni-12345c7b2012345678 200.10.11.12 172.31.16.25 0 0 1 4 232 1357101112 1357101182 ACCEPT OK
2 0123456789992 eni-12345c7b2012345678 172.31.16.25 200.10.11.12 0 0 1 4 232 1357101112 1357101182 REJECT OK
What could be the cause of the problem?
-
A
Network ACL inbound rules.
-
B
Security group inbound deny rules.
-
C
Network ACL outbound rules.
-
D
Security group outbound deny rules.
Xem giải thích
Đáp án
C — Luật OUTBOUND của NETWORK ACL.
Vì sao đúng
Hai dòng flow log trong đề đã trả lời gần như trọn vẹn — chỉ cần đọc đúng chiều.
⚠ Điểm mấu chốt — đọc hai dòng log:
Dòng 1: 200.10.11.12 → 172.31.16.25 ACCEPT
↓
Gói ĐI VÀO được CHẤP NHẬN
→ security group inbound ĐÚNG
→ NACL inbound ĐÚNG
→ gói tin ĐÃ TỚI máy
Dòng 2: 172.31.16.25 → 200.10.11.12 REJECT
↓
Gói trả lời ĐI RA bị TỪ CHỐI
↓
→ chỉ một thứ chặn được chiều ra ở đây
⚠ Vì sao chắc chắn là NACL chứ không phải security group:
SECURITY GROUP có TRẠNG THÁI (stateful)
↓
Đã cho gói vào → gói trả lời TỰ ĐỘNG được ra
→ KHÔNG cần luật outbound
→ và SG KHÔNG CÓ luật Deny
↓
→ SG không thể là thủ phạm của dòng REJECT
NETWORK ACL KHÔNG có trạng thái (stateless)
↓
Chiều vào và chiều ra xét ĐỘC LẬP
→ cho vào rồi vẫn phải có luật cho RA
↓
→ thủ phạm là NACL, chiều OUTBOUND
⚠ Sửa thế nào — chú ý giao thức:
protocol = 1 → ICMP (đây là lệnh ping)
↓
ICMP KHÔNG có khái niệm cổng
→ phải mở ICMP chiều ra tới 200.10.11.12
↓
Nếu là TCP (SSH, HTTP…) thì
↓
Chiều ra phải mở DẢI CỔNG TẠM 1024-65535
↓
→ đây là lỗi NACL phổ biến nhất
Xem thêm câu #11848 (lô 128): gần như cùng một câu hỏi, cùng hai dòng log ACCEPT/REJECT và cùng đáp án NACL outbound. Chỉ khác chữ cái vì bộ đề xáo thứ tự phương án (ở đó là D, ở đây là C). Khoá nhất quán.
Vì sao các phương án khác sai
-
D (luật Deny outbound của security group) — đây là phương án gần nhất vì cùng nói đúng chiều, nhưng security group KHÔNG CÓ luật Deny, và vì stateful nên gói trả lời luôn được đi ra.
-
B (luật Deny inbound của security group) — sai cả hai vế: SG không có Deny, và dòng log đầu tiên đã là
ACCEPT, chứng minh chiều vào thông. -
A (luật inbound của NACL) — cũng bị chính dòng
ACCEPTđầu tiên bác bỏ.
Ghi nhớ
⚠ Security Group ↔ Network ACL — bảng phải thuộc: | | Security Group | Network ACL | |---|---|---| | Trạng thái | CÓ (stateful) | KHÔNG (stateless) | | Luật Deny | KHÔNG CÓ | CÓ | | 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 tiên | | Mặc định | vào: chặn hết, ra: mở hết | NACL mặc định VPC: mở cả hai chiều | | Gói trả lời chiều ra | tự động cho qua | PHẢI CÓ LUẬT |
Từ khoá nhận diện:
"flow log: vào ACCEPT, ra REJECT" → NACL thiếu luật OUTBOUND "vào REJECT" → security group hoặc NACL inbound "kết nối TCP hỏng một chiều" → NACL thiếu DẢI CỔNG TẠM "cần CHẶN một IP cụ thể" → NACL (SG không có Deny) "request timed out" → gói bị bỏ im lặng
| Đọc một dòng VPC Flow Log | Các trường theo thứ tự |
|---|---|
| 1-3 | version, account-id, interface-id |
| 4-5 | srcaddr, dstaddr |
| 6-7 | srcport, dstport |
| 8 | protocol — 1 = ICMP, 6 = TCP, 17 = UDP |
| 9-10 | packets, bytes |
| 11-12 | start, end (epoch) |
| 13 | action — ACCEPT / REJECT |
| 14 | log-status — OK / NODATA / SKIPDATA |
| Cấu hình NACL đúng cho TCP hai chiều | Nội dung |
|---|---|
| Inbound | cho phép cổng dịch vụ (22, 80, 443) từ nguồn |
| Outbound | cho phép 1024-65535 tới nguồn đó |
| Vì sao | client dùng cổng ngẫu nhiên ở dải cao |
| Bẫy | chỉ mở outbound đúng cổng dịch vụ → kết nối treo |
| Với ICMP | không có cổng — mở theo giao thức |
| Đánh số luật NACL | Nội dung |
|---|---|
| Xét theo | số tăng dần, DỪNG ở luật khớp đầu tiên |
| Nên đánh | cách quãng: 100, 200, 300… để còn chèn |
| Luật cuối | * — Deny tất cả, không xoá được |
| Đặt Deny | TRƯỚC luật Allow rộng hơn |
| Dải cổng tạm theo hệ điều hành | Nội dung |
|---|---|
| Linux hiện đại | 32768-60999 |
| Windows | 49152-65535 |
| NLB và một số dịch vụ AWS | 1024-65535 |
| An toàn | mở 1024-65535 để phủ hết |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | NACL nào gắn vào subnet | describe-network-acls --filters Name=association.subnet-id,Values=... | | Gói bị chặn ở đâu | VPC Flow Logs — tìm REJECT và xem HƯỚNG | | Đường đi lý thuyết | VPC Reachability Analyzer |
Và một công cụ nên dùng trước khi ngồi đọc từng dòng log: VPC Reachability Analyzer. Nó phân tích đường đi mà không gửi gói tin nào, rồi nói thẳng "bị chặn tại network ACL nào, luật số mấy" — nhanh hơn nhiều so với việc bật flow log rồi chờ dữ liệu, và trả lời luôn câu hỏi tiếp theo là cần sửa chính xác luật nào.