Ngân hàng đề — AWS Certified SysOps Administrator Associate
Tìm thấy 936 câu.
A business utilizes an Amazon DynamoDB table for data storage. To fulfill the company’s disaster recovery requirements, a SysOps administrator is tasked with setting up replication of the table in an alternate AWS Region.
What action should the SysOps administrator take to fulfill this requirement?
-
A
Activate point-in-time recovery.
-
B
Implement DynamoDB Streams and establish a global table in another Region.
-
C
Activate DynamoDB Accelerator (DAX).
-
D
Enable DynamoDB Streams and create a global secondary index (GSI).
Xem giải thích
Đáp án
B — Bật DynamoDB STREAMS và tạo GLOBAL TABLE ở một Region khác.
Vì sao đúng
Yêu cầu là nhân bản bảng sang Region khác phục vụ 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, HAI CHIỀU:
DynamoDB Global Table
↓
Bảng tồn tại ở NHIỀU Region cùng lúc
↓
Ghi ở Region nào cũng được
→ tự nhân bản sang các Region còn lại
(multi-active, active-active)
↓
Độ trễ nhân bản: thường DƯỚI MỘT GIÂY
↓
→ mất cả một Region vẫn còn bản đầy đủ
→ và ứng dụng ở Region khác dùng được ngay
⚠ Vì sao phải bật DynamoDB Streams:
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`**
↓
Với phiên bản 2019.11.21 (hiện hành)
→ bật streams là điều kiện tiên quyết
→ tạo replica chỉ là thêm một Region
⚠ Xử lý xung đột khi ghi ở nhiều nơi:
Hai Region cùng sửa một bản ghi
↓
Global table dùng LAST WRITER WINS
↓
→ bản ghi có dấu thời gian mới hơn thắng
↓
→ phù hợp với phần lớn ứng dụng
→ nhưng KHÔNG phù hợp khi cần
giao dịch nghiêm ngặt liên Region
↓
Cách tránh: định tuyến người dùng
về đúng một Region theo vùng địa lý
Vì sao các phương án khác sai
-
A (bật point-in-time recovery — PITR) — đây là phương án gần nhất và là một biện pháp sao lưu rất tốt, nhưng PITR khôi phục TRONG CÙNG Region theo thời điểm (35 ngày gần nhất). Không nhân bản sang Region khác, nên không đáp ứng yêu cầu khôi phục thảm hoạ theo Region.
-
D (bật Streams và tạo global secondary index — GSI) — GSI là một chỉ mục 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ý — đây là bẫy đặt tên rất hay gặp.
-
C (bật DynamoDB Accelerator — DAX) — DAX là lớp CACHE trong bộ nhớ đặt trước DynamoDB để giảm độ trễ đọc. Không nhân bản dữ liệu, và chỉ trong một Region.
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 — khoá phân vùng khác | | Local Secondary Index (LSI) | chỉ mục phụ, 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, và cho Lambda trigger | | PITR | khôi phục theo thời điểm, 35 ngày, CÙNG Region | | On-demand backup | sao lưu thủ công, giữ mãi |
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 quá chậm, 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 DynamoDB Streams với NEW_AND_OLD_IMAGES |
| Chế độ ghi | multi-active — ghi ở mọi Region |
| Xung đột | last writer wins theo dấu thời gian |
| Độ trễ nhân bản | thường dưới 1 giây |
| Yêu cầu bảng | lược đồ khoá giống nhau ở mọi Region |
| Chi phí | trả tiền cho replicated write unit ở mỗi Region |
| Bốn cơ chế bảo vệ dữ liệu DynamoDB | Nội dung |
|---|---|
| PITR | 35 ngày, khôi phục tới từng giây, cùng Region |
| 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 chống xoá nhầm + Global Table chống mất Region |
| Global Table không thay thế được sao lưu | Nội dung |
|---|---|
| Vì sao | xoá nhầm dữ liệu → xoá được nhân bản sang MỌI Region |
| 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 |
| Chi phí và lưu ý vận hành | Nội dung |
|---|---|
| rWCU | write unit nhân bản, tính ở mỗi Region đích |
| Dung lượng | trả tiền lưu trữ ở mỗi Region |
| Chế độ | nên dùng on-demand hoặc auto scaling ở mọi replica |
| Theo dõi | ReplicationLatency, PendingReplicationCount |
| Định tuyến | Route 53 latency hoặc geolocation đưa người dùng về Region gần |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Đã có replica chưa | describe-table → Replicas | | Nhân bản có trễ không | chỉ số ReplicationLatency | | PITR đã bật chưa | describe-continuous-backups |
Và một điều nên nói rõ khi trình bày phương án khôi phục thảm hoạ: global table không phải là bản sao lưu. Nó bảo vệ bạn khỏi việc mất một Region, nhưng nếu ai đó chạy nhầm một lệnh xoá, thao tác đó được nhân bản sang mọi Region trong chưa đầy một giây — nên PITR vẫn phải bật, và hai cơ chế này giải quyết hai loại rủi ro hoàn toàn khác nhau.
A SysOps administrator has launched an Amazon EC2 Linux instance in a public subnet. The instance obtained a public IP address, and the administrator needs to connect using an SSH client. When attempting the SSH connection, the connection attempt fails repeatedly with a timeout error.
Which action will allow the SysOps administrator to remotely connect to the instance?
-
A
Update the network ACL for the subnet to allow port 22 outbound to the SysOps administrator's IP address.
-
B
Update the instance security group with a rule allowing SSH outbound to the SysOps administrator's IP address.
-
C
Update the subnet route table with an entry for the SysOps administrator's IP address.
-
D
Update the instance security group with a rule allowing SSH inbound from the SysOps administrator's IP address.
Xem giải thích
Đáp án
D — Cập nhật SECURITY GROUP của instance, thêm luật cho phép SSH ĐI VÀO từ địa chỉ IP của quản trị viên.
Vì sao đúng
Triệu chứng TIMEOUT kết hợp với máy ở public subnet và có IP công cộng chỉ thẳng tới một nghi phạm.
⚠ Điểm mấu chốt — security group mặc định CHẶN HẾT chiều vào:
Security group mới tạo
↓
Inbound: KHÔNG CÓ LUẬT NÀO → chặn tất cả
Outbound: cho phép TẤT CẢ
↓
Không thêm luật SSH inbound
↓
→ gói tin bị BỎ IM LẶNG
→ client chờ mãi → TIMEOUT
↓
Luật cần thêm:
Type: SSH, Port: 22,
Source: <IP-cua-quan-tri-vien>/32
⚠ Vì sao TIMEOUT là manh mối quyết định:
TIMEOUT (chờ mãi, không phản hồi)
↓
→ gói bị BỎ IM LẶNG ở tầng mạng
→ security group, NACL, route table,
hoặc không có IP công cộng
CONNECTION REFUSED (từ chối ngay)
↓
→ gói ĐÃ TỚI máy
→ nhưng sshd không chạy, hoặc nghe cổng khác
PERMISSION DENIED (publickey)
↓
→ mạng HOÀN TOÀN THÔNG
→ vấn đề ở khoá hoặc tên người dùng
⚠ Và đề đã loại sẵn các nghi phạm khác:
"public subnet" → route table có tuyến ra IGW ✓
"obtained a public IP" → máy có IP công cộng ✓
↓
→ còn lại đúng hai lớp lọc:
security group và NACL
↓
NACL mặc định của VPC CHO PHÉP TẤT CẢ
↓
→ nghi phạm duy nhất còn lại là
SECURITY GROUP, chiều VÀO
Xem thêm câu #11825 (lô 127): gần như cùng một câu hỏi, cùng đáp án — security group chưa cho phép SSH đi vào. 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 (thêm luật cho phép SSH ĐI RA tới IP của quản trị viên) — đây là phương án gần nhất và cùng nói về security group, chỉ sai chiều: security group có trạng thái, gói trả lời của một kết nối đã được chấp nhận luôn được đi ra. Và outbound mặc định đã mở hết.
-
A (sửa NACL cho phép cổng 22 ĐI RA tới IP của quản trị viên) — NACL mặc định của VPC cho phép tất cả cả hai chiều, nên nó không phải nguyên nhân. (Và nếu có sửa thì chiều ra cần dải cổng tạm 1024-65535, không phải cổng 22.)
-
C (thêm một mục trong route table cho IP của quản trị viên) — route table không hoạt động theo IP của từng client. Subnet đã là public, tuyến
0.0.0.0/0 → IGWđã bao phủ mọi đích.
Ghi nhớ
⚠ Ba lỗi SSH và ý nghĩa — bảng phải thuộc: | Lỗi | Nghĩa | Nghi phạm | |---|---|---| | Connection timed out | gói bị bỏ im lặng | SG, NACL, route table, không có IP công cộng | | Connection refused | tới máy nhưng không ai nghe | sshd chưa chạy, sai cổng | | Permission denied (publickey) | mạng thông, sai chứng chỉ | sai khoá, sai user, sai quyền tệp | | Host key verification failed | khoá host đổi | máy đã được dựng lại |
Từ khoá nhận diện:
"SSH timeout" → security group inbound, trước tiên "connection refused" → dịch vụ chưa chạy trên máy "permission denied" → khoá hoặc tên user "IP nhà thay đổi liên tục" → Session Manager, đừng sửa SG mỗi lần "không muốn mở cổng 22 chút nào" → Session Manager
⚠ Security Group ↔ Network ACL — nhắc lại: | | Security Group | Network ACL | |---|---|---| | Trạng thái | CÓ (stateful) | KHÔNG (stateless) | | Mặc định | vào: chặn hết, ra: mở hết | mặc định của VPC: mở CẢ HAI chiều | | Luật | chỉ Allow | Allow và Deny | | Phạm vi | ENI / instance | cả subnet | | Chiều ra của gói trả lời | tự động cho qua | PHẢI CÓ LUẬT |
| Danh sách kiểm tra khi SSH timeout | Bước |
|---|---|
| 1 | Security group có luật inbound cổng 22 từ IP của bạn |
| 2 | NACL cho phép cả hai chiều (nhớ cổng tạm ở chiều ra) |
| 3 | Instance có IP công cộng, subnet có public không |
| 4 | Route table có 0.0.0.0/0 → IGW không |
| 5 | Mạng của bạn có chặn cổng 22 đi ra không |
| 6 | ss -tlnp trên máy — sshd có đang nghe không |
| Vì sao Session Manager là lựa chọn tốt hơn | Nội dung |
|---|---|
| Không mở cổng vào nào | agent tự 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 |
| Phân quyền bằng IAM | thu hồi tức thì |
| Ghi log toàn bộ phiên | ra S3 hoặc CloudWatch Logs |
| Ba điều kiện | SSM Agent, instance profile, đường ra tới endpoint SSM |
| Nếu vẫn phải dùng SSH | Cách an toàn hơn |
|---|---|
| EC2 Instance Connect | AWS đẩy public key tạm sống 60 giây |
| EC2 Instance Connect Endpoint | vào private subnet không cần bastion |
| Prefix list cho dải IP văn phòng | quản tập trung, dùng lại nhiều SG |
| VPN công ty | mọi người ra internet bằng cùng dải IP |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | IP hiện tại của bạn | curl https://checkip.amazonaws.com | | Security group cho phép gì | describe-security-groups — đọc JSON | | Gói bị chặn ở đâu | VPC Flow Logs, tìm bản ghi REJECT |
Và một công cụ nên dùng trước khi đọc log dòng nào: VPC Reachability Analyzer. Nó phân tích đường đi từ nguồn tới đích mà không gửi gói tin nào, rồi chỉ thẳng "bị chặn tại security group sg-xxxx" — nhanh hơn nhiều so với việc bật flow log rồi chờ dữ liệu, và nó cũng trả lời luôn câu hỏi tiếp theo là cần sửa chính xác thành phần nào.
A company has an e-commerce platform hosted on multiple Amazon EC2 instances, all of which are positioned behind an Application Load Balancer (ALB). A SysOps administrator must ensure that all website traffic is secured through HTTPS.
What two steps should a SysOps administrator perform to accomplish this? (Select TWO.)
-
A
Generate a private SSL certificate using AWS Certificate Manager (ACM).
-
B
Install the SSL certificate directly on each EC2 instance.
-
C
Associate the SSL certificate with the ALB.
-
D
Provision a public SSL certificate through AWS Certificate Manager (ACM).
-
E
Secure the website by attaching an externally obtained certificate.
Xem giải thích
Đáp án
C và D — Xin chứng chỉ SSL CÔNG KHAI qua AWS Certificate Manager (ACM), và GẮN chứng chỉ đó vào ALB.
Vì sao đúng
Đây là mô hình chuẩn của AWS cho HTTPS: kết thúc TLS tại load balancer, dùng chứng chỉ công khai miễn phí từ ACM.
⚠ Điểm mấu chốt — TLS termination tại ALB:
Người dùng ──HTTPS──▶ ALB ──HTTP──▶ EC2
│
chứng chỉ ACM
gắn ở listener 443
↓
→ chỉ QUẢN LÝ MỘT chứng chỉ, ở một chỗ
→ EC2 không phải cài, không phải gia hạn
→ thêm bao nhiêu máy cũng không phải làm gì
→ ALB lo cả việc bắt tay TLS (tốn CPU)
⚠ Vì sao phải là chứng chỉ CÔNG KHAI:
Website cho người dùng internet
↓
Trình duyệt phải TIN chứng chỉ
↓
→ cần CA công cộng ký
↓
Chứng chỉ RIÊNG (AWS Private CA)
↓
→ chỉ máy đã cài CA gốc của công ty mới tin
→ dùng cho nội bộ, mTLS, IoT
⚠ Và ACM có một giới hạn phải nhớ:
Chứng chỉ ACM CÔNG KHAI
↓
MIỄN PHÍ, tự động gia hạn
↓
Nhưng KHÔNG TẢI PRIVATE KEY VỀ ĐƯỢC
↓
→ KHÔNG cài lên EC2 được
→ chỉ dùng với các dịch vụ tích hợp:
ALB / NLB / CloudFront / API Gateway
Elastic Beanstalk / App Runner
↓
→ đây chính là lý do phương án B sai
Xem thêm câu #11929 (cùng lô): cùng chủ đề chứng chỉ ACM cho ALB, ở đó nhấn vào việc DNS validation để tự động gia hạn. Khoá nhất quán.
Vì sao các phương án khác sai
-
B (cài chứng chỉ SSL trực tiếp lên từng instance EC2) — đây là phương án gần nhất về mặt "cũng ra được HTTPS", nhưng nó không dùng được với chứng chỉ ACM công khai (không tải private key về được), và tạo ra gánh nặng vận hành: mỗi máy một bản chứng chỉ, mỗi lần gia hạn phải triển khai lại toàn bộ.
-
A (xin chứng chỉ RIÊNG qua ACM) — chứng chỉ riêng không được trình duyệt tin, sẽ hiện cảnh báo bảo mật với mọi người dùng.
-
E (dùng chứng chỉ mua từ bên ngoài) — làm được (nhập vào ACM), nhưng phải tự gia hạn thủ công mỗi năm, và tốn tiền trong khi ACM công khai miễn phí. Không phải cách hiệu quả nhất.
Ghi nhớ
⚠ ACM — bảng phải thuộc: | Đặc điểm | Nội dung | |---|---| | Chứng chỉ công khai | MIỄN PHÍ, tự gia hạn (với DNS validation) | | Không tải private key | KHÔNG cài lên EC2 được | | Dùng được với | ALB, NLB, CloudFront, API Gateway, Beanstalk, App Runner | | CloudFront | BẮT BUỘC chứng chỉ ở us-east-1 | | ALB / NLB | cùng Region với load balancer | | Nhập chứng chỉ ngoài | được, nhưng KHÔNG tự gia hạn |
Từ khoá nhận diện:
"HTTPS cho website sau ALB" → ACM công khai + gắn vào ALB "cần cài chứng chỉ lên EC2" → ACM công khai KHÔNG làm được — dùng Private CA hoặc chứng chỉ ngoài "chứng chỉ nội bộ, mTLS, IoT" → AWS Private CA "tự động gia hạn" → ACM + DNS validation "chứng chỉ cho CloudFront" →
us-east-1
| Cấu hình HTTPS cho ALB đầy đủ | Bước |
|---|---|
| 1 | Xin chứng chỉ ACM công khai, xác thực bằng DNS |
| 2 | Tạo listener 443, gắn chứng chỉ |
| 3 | Chọn security policy — dùng bản khuyến nghị mới nhất |
| 4 | Listener 80 → redirect 443 (mã 301) |
| 5 | Bản ghi ALIAS trong Route 53 trỏ tới ALB |
| 6 | Thêm HSTS header ở tầng ứng dụng nếu cần |
| 7 | Security group của EC2 chỉ nhận từ SG của ALB |
| Bốn cách xử lý TLS trong kiến trúc | Nội dung |
|---|---|
| TLS termination tại ALB | phổ biến nhất — ALB↔EC2 dùng HTTP |
| TLS end-to-end | ALB↔EC2 cũng HTTPS — cần khi tuân thủ đòi mã hoá toàn tuyến |
| TLS passthrough (NLB) | NLB chuyển thẳng, EC2 tự xử lý TLS |
| CloudFront + ALB | hai tầng TLS, chứng chỉ CloudFront ở us-east-1 |
| Với end-to-end | backend dùng chứng chỉ tự ký cũng được — ALB không kiểm |
| SNI — nhiều tên miền trên một ALB | Nội dung |
|---|---|
| ALB hỗ trợ SNI | gắn tới 25 chứng chỉ mỗi listener |
| Cách dùng | mỗi tên miền một chứng chỉ, ALB chọn theo SNI |
| Hoặc | một chứng chỉ với nhiều SAN (tối đa 10 tên miền) |
| Hoặc | wildcard *.example.com |
| Kiểm tra cấu hình TLS | Công cụ |
|---|---|
openssl s_client -connect ten-mien:443 |
xem chứng chỉ và chuỗi |
| Kiểm tra hạn | trường notAfter |
| Điểm bảo mật | các công cụ chấm điểm SSL công khai |
| Security policy | describe-ssl-policies — chọn bản mới, bỏ TLS 1.0/1.1 |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Chứng chỉ đã gắn chưa | describe-listeners → Certificates | | Trình duyệt có tin không | mở website, kiểm tra ổ khoá | | Có tự gia hạn được không | describe-certificate → RenewalEligibility |
Và một cấu hình rất nên làm cùng lúc với việc bật HTTPS: redirect toàn bộ HTTP sang HTTPS ngay tại ALB. Đây là một quy tắc trên listener 80, không cần đụng tới mã ứng dụng — và nếu thiếu nó thì mọi người dùng gõ địa chỉ không kèm https:// vẫn đi vào bằng kết nối không mã hoá, khiến toàn bộ công sức cấu hình chứng chỉ mất tác dụng với đúng nhóm người dùng đông nhất.
A SysOps administrator has deployed an application using an AWS CloudFormation stack set across multiple AWS accounts and Regions. The administrator plans to deploy and updated template and wants to test the update in subset of the accounts and Regions before rolling it out to the entire stack set.
How can the administrator implement the test update?
-
A
Create a separate stack set to test the update.
-
B
Use a change set for the stack set to test the update.
-
C
Update the stack set and select a single account and Region.
-
D
Create a nested stack to deploy the update.
Xem giải thích
Đáp án
A — Tạo một STACK SET RIÊNG để kiểm thử bản cập nhật.
Vì sao đúng
StackSets không có cơ chế "phiên bản thử nghiệm" cho một phần stack instance, nên cách an toàn là tách hẳn ra một stack set khác.
⚠ Điểm mấu chốt — một stack set chỉ có MỘT template:
Stack set giữ MỘT template duy nhất
↓
Cập nhật stack set
↓
→ template mới trở thành template CỦA CẢ STACK SET
↓
Dù chỉ triển khai cho vài tài khoản
↓
→ các stack instance còn lại thành LỖI THỜI
(outdated), không khớp template hiện tại
→ trạng thái stack set trở nên lẫn lộn
↓
→ khó biết đâu là bản đang chạy ở đâu
⚠ Stack set riêng để kiểm thử — sạch sẽ và an toàn:
Tạo stack set thứ hai
↓
Triển khai vào một OU / vài tài khoản thử nghiệm
ở một vài Region
↓
→ hoàn toàn cô lập khỏi stack set production
→ chạy hỏng cũng không ảnh hưởng gì
↓
Xác nhận ổn
↓
→ cập nhật stack set THẬT
→ và dùng RegionOrder + FailureTolerance
để triển khai từ từ
⚠ Và khi cập nhật stack set thật, hãy triển khai có kiểm soát:
RegionOrder
↓
Đặt Region ít rủi ro nhất lên ĐẦU
FailureToleranceCount = 0
↓
Hỏng một tài khoản → DỪNG NGAY toàn bộ
MaxConcurrentCount thấp
↓
Triển khai từng ít tài khoản một
↓
→ một template hỏng dừng lại sau
một tài khoản, không lan ra sáu mươi
Xem thêm câu #11875 (lô 128): cùng chủ đề StackSets — một template triển khai ra nhiều tài khoản và Region bằng một thao tác. Khoá nhất quán.
Vì sao các phương án khác sai
-
C (cập nhật stack set và chọn một tài khoản và Region duy nhất) — đây là phương án gần nhất và về mặt lệnh thì làm được (
update-stack-setnhận danh sách accounts và regions), nhưng nó đã thay đổi template của cả stack set: mọi stack instance chưa cập nhật sẽ mang trạng thái outdated, và bạn đang thử nghiệm ngay trên chính stack set production. -
B (dùng change set cho stack set) — StackSets KHÔNG hỗ trợ change set. Change set là tính năng của stack thường.
-
D (tạo nested stack để triển khai bản cập nhật) — nested stack dùng để chia nhỏ một template lớn, không phải cơ chế kiểm thử hay triển khai theo giai đoạn.
Ghi nhớ
⚠ StackSets — bảng phải thuộc: | Đặc điểm | Nội dung | |---|---| | Việc | một template → NHIỀU tài khoản và Region, một thao tác | | Hai chế độ quyền | self-managed (tự tạo 2 IAM role) ↔ service-managed (qua Organizations) | | Auto-deployment | tài khoản mới vào OU TỰ ĐỘNG được triển khai | | Không hỗ trợ | change set | | Kiểm soát rủi ro | MaxConcurrentCount, FailureToleranceCount, RegionOrder | | Phát hiện sửa tay | drift detection |
Từ khoá nhận diện:
"kiểm thử bản cập nhật stack set" → tạo stack set RIÊNG "nhiều tài khoản và Region, một thao tác" → StackSets "xem trước thay đổi" → change set — chỉ cho stack THƯỜNG "chia nhỏ template lớn" → nested stacks "tài khoản mới tự có cấu hình chuẩn" → service-managed + auto-deployment
| Hai chế độ quyền của StackSets | Nội dung |
|---|---|
| Self-managed | tự tạo AWSCloudFormationStackSetAdministrationRole và ...ExecutionRole |
| Service-managed | tích hợp Organizations, khai theo OU, AWS lo role |
| Auto-deployment | chỉ có ở service-managed |
| Điều kiện | service-managed cần bật trusted access với Organizations |
| Tham số kiểm soát triển khai | Nội dung |
|---|---|
MaxConcurrentCount / Percentage |
bao nhiêu tài khoản cùng lúc |
FailureToleranceCount / Percentage |
hỏng bao nhiêu thì DỪNG |
RegionOrder |
thứ tự Region — đặt Region thử nghiệm đầu tiên |
RegionConcurrencyType |
SEQUENTIAL hoặc PARALLEL |
| Khuyến nghị cho thay đổi lớn | tolerance = 0, concurrency = 1 |
| Quy trình phát hành template an toàn | Bước |
|---|---|
| 1 | cfn-lint và kiểm thử cú pháp trong CI |
| 2 | Triển khai vào stack set THỬ NGHIỆM (tài khoản sandbox) |
| 3 | Kiểm chứng tài nguyên và ứng dụng |
| 4 | Cập nhật stack set thật với RegionOrder và tolerance = 0 |
| 5 | Theo dõi list-stack-instances — trạng thái từng ô |
| 6 | Drift detection sau khi xong |
| Bẫy khi dùng StackSets | Nội dung |
|---|---|
| Thiếu execution role ở tài khoản đích | stack instance hỏng ngay (self-managed) |
| Dịch vụ chưa có ở Region đó | template phải chịu được, hoặc loại Region ra |
| AMI ID ghi cứng | hỏng ở Region khác — dùng SSM public parameter |
Thiếu --capabilities |
hỏng khi template tạo tài nguyên IAM |
| Gỡ stack instance | có tuỳ chọn --retain-stacks để giữ tài nguyên |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Trạng thái từng ô | 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 tổ chức đáng theo cho hạ tầng dùng StackSets: giữ hẳn một OU sandbox và một stack set thử nghiệm song song với stack set production. Chi phí thêm gần như bằng không nếu template chỉ tạo IAM role hay luật Config, nhưng nó cho bạn một nơi để phạm sai lầm — thứ luôn rẻ hơn nhiều so với việc phát hiện lỗi sau khi đã triển khai ra sáu mươi tài khoản.
A company manager is concerned about an increase in monthly costs associated with a developer AWS account. A large team of over 60 developers use the account and the manager needs to determine the costs incurred per developer.
What should a SysOps administrator do to collect this information? (Select TWO.)
-
A
Analyze the usage with AWS Cost Explorer.
-
B
Activate the createdBy tag in the account.
-
C
Configure AWS Config to track resource usage.
-
D
Create a billing alarm in AWS Budgets.
-
E
Analyze the API usage with AWS CloudTrail.
Xem giải thích
Đáp án
A và B — Phân tích bằng AWS COST EXPLORER, và KÍCH HOẠT tag createdBy trong tài khoản.
Vì sao đúng
Đề cần biết chi phí theo TỪNG lập trình viên trong một tài khoản dùng chung, và tag do AWS sinh ra chính là thứ giải quyết được ngay.
⚠ Điểm mấu chốt — aws:createdBy là tag AWS TỰ GẮN:
Tài khoản dùng chung, hơn 60 người
↓
Không ai gắn tag thủ công theo tên mình
↓
AWS có sẵn một tag SINH TỰ ĐỘNG:
aws:createdBy
↓
Ghi lại DANH TÍNH đã tạo ra tài nguyên
(IAM user hoặc role)
↓
→ không cần ai làm gì thêm
→ chỉ cần KÍCH HOẠT nó làm cost allocation tag
⚠ Và Cost Explorer là nơi nhìn kết quả:
Cost Explorer
↓
Group by → Tag → aws:createdBy
↓
→ biểu đồ chi phí theo từng danh tính
→ lọc thêm theo dịch vụ, theo Region
→ so sánh giữa các tháng
⚠ Nhưng phải nói rõ hai giới hạn của createdBy:
1. KHÔNG ÁP NGƯỢC cho quá khứ
↓
Chỉ gắn cho tài nguyên tạo SAU khi kích hoạt
→ chi phí tháng trước không chia được
2. Không phủ HẾT tài nguyên
↓
Một số dịch vụ không hỗ trợ tag này
Tài nguyên do tự động hoá tạo ra
→ mang danh tính của role, không phải của người
↓
→ là ước lượng tốt, không phải con số tuyệt đối
Vì sao các phương án khác sai
-
E (phân tích API bằng AWS CloudTrail) — đây là phương án gần nhất và thực sự cho biết AI đã tạo tài nguyên nào, nhưng CloudTrail không có thông tin chi phí. Muốn ra được con số tiền thì vẫn phải tự đối chiếu thủ công với dữ liệu billing — rất nhiều việc so với việc bật một tag.
-
C (dùng AWS Config để theo dõi việc sử dụng tài nguyên) — Config theo dõi CẤU HÌNH, không theo dõi chi phí.
-
D (tạo billing alarm trong AWS Budgets) — Budgets cảnh báo khi vượt ngưỡng, không phân tích và chia nhỏ chi phí theo người.
Ghi nhớ
⚠ Hai loại cost allocation tag — bảng phải thuộc: | Loại | Tiền tố | Ai gắn | |---|---|---| | Do AWS sinh | aws: | AWS tự gắn | | Ví dụ | aws:createdBy, aws:cloudformation:stack-name, aws:cloudformation:logical-id | | | Do người dùng định nghĩa | user: trong CUR | bạn tự gắn | | Ví dụ | Project, Environment, Owner | | | Điểm chung | đều phải KÍCH HOẠT ở Billing → Cost Allocation Tags | | | Khác biệt | aws: không sửa, không xoá được | |
Từ khoá nhận diện:
"chi phí theo TỪNG NGƯỜI trong tài khoản chung" →
aws:createdBy+ Cost Explorer "chi phí theo dự án / phòng ban" → tag do người dùng định nghĩa "ai đã tạo tài nguyên này" → CloudTrail, hoặcaws:createdBy"cảnh báo khi vượt ngân sách" → Budgets "tách bạch chi phí tuyệt đối" → mỗi người/đội một TÀI KHOẢN riêng
Quy trình bật aws:createdBy |
Bước |
|---|---|
| 1 | Đăng nhập tài khoản thanh toán (hoặc chính tài khoản đó nếu độc lập) |
| 2 | Billing → Cost Allocation Tags → AWS-Generated Cost Allocation Tags |
| 3 | Chọn aws:createdBy → Activate |
| 4 | Chờ tới 24 giờ |
| 5 | Cost Explorer → Group by → Tag → aws:createdBy |
| Lưu ý | không áp ngược cho chi phí quá khứ |
| Kiểm soát chi phí trong tài khoản dùng chung | Cách |
|---|---|
aws:createdBy |
nhìn ai đang tiêu bao nhiêu |
| Budgets theo tag | cảnh báo khi một người vượt ngưỡng |
| SCP giới hạn loại instance | ví dụ chỉ cho t3.* trong tài khoản dev |
| Instance Scheduler | tự tắt máy ngoài giờ làm việc |
Config required-tags |
ép gắn tag Owner |
| Triệt để nhất | mỗi đội một tài khoản riêng — hạn mức và chi phí tách bạch |
| Bốn công cụ chi phí — nhắc lại | Việc |
|---|---|
| Cost Explorer | phân tích, nhóm, dự báo |
| Budgets | cảnh báo và hành động khi vượt |
| Cost Anomaly Detection | phát hiện bất thường bằng ML |
| Cost and Usage Report | dữ liệu thô chi tiết nhất |
| Trusted Advisor / Compute Optimizer | gợi ý cắt lãng phí cụ thể |
| Nguồn lãng phí hay gặp trong tài khoản dev | Nội dung |
|---|---|
| Máy để quên không tắt | Instance Scheduler, hoặc alarm trên máy nhàn rỗi |
| EBS volume mồ côi | volume không gắn vào đâu vẫn tính tiền |
| Elastic IP không dùng | bị tính tiền |
| Snapshot và AMI cũ | không có lifecycle dọn |
| NAT Gateway | phí giờ chạy suốt ngày đêm |
| Log không đặt hạn lưu | tích tụ vô hạn |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Tag đã kích hoạt chưa | Billing → Cost Allocation Tags — cột Status | | Ai tốn nhiều nhất | Cost Explorer → Group by → Tag → aws:createdBy | | Tài nguyên nào không có tag | Cost Explorer hiện nhóm "No tag key" |
Và một cách nhìn nên trao đổi với người quản lý cùng lúc với báo cáo: aws:createdBy cho biết ai TẠO ra tài nguyên, không cho biết ai đang DÙNG nó. Một lập trình viên dựng môi trường chung cho cả đội sẽ hiện lên như người tốn kém nhất, nên con số này rất hữu ích để tìm điểm nóng, nhưng không nên dùng trực tiếp để đánh giá từng cá nhân.
A SysOps administrator noticed an unusual number of requests to an application that runs behind an Application Load Balancer (ALB). The administrator would like to identify the IP addresses of the clients that accessed the ALB.
Which logs should the administrator use to find this information?
-
A
Elastic Load Balancer access logs
-
B
Amazon CloudWatch Logs
-
C
EC2 Auto Scaling logs
-
D
AWS CloudTrail logs
Xem giải thích
Đáp án
A — ELASTIC LOAD BALANCER ACCESS LOGS.
Vì sao đúng
ALB access log ghi lại địa chỉ IP của client cho từng request — đúng thông tin đề cần.
⚠ Điểm mấu chốt — trường client:port trong mỗi bản ghi:
Mỗi dòng access log của ALB chứa:
↓
type → http hay https
time → thời điểm
elb → id của load balancer
client:port → ĐỊA CHỈ IP CỦA CLIENT ← cần
target:port → máy nào xử lý
request → phương thức + URL + phiên bản HTTP
elb_status_code / target_status_code
user_agent → trình duyệt hoặc công cụ
ssl_cipher, ssl_protocol
↓
→ đủ để tìm ra IP nào gửi bất thường nhiều
⚠ Phân tích bằng Athena — cách làm chuẩn:
SELECT client_ip, count(*) AS so_request
FROM alb_logs
WHERE time BETWEEN ... AND ...
GROUP BY client_ip
ORDER BY so_request DESC
LIMIT 20
→ bảng xếp hạng IP gửi nhiều request nhất
→ tài liệu AWS có sẵn câu lệnh tạo bảng
⚠ Một chi tiết bắt buộc phải nhớ:
ALB ACCESS LOG KHÔNG BẬT SẴN
↓
Phải bật thủ công, ghi ra một bucket S3
↓
Bucket cần bucket policy cho phép
dịch vụ ELB ghi vào
↓
→ nếu chưa bật từ trước thì
KHÔNG CÓ dữ liệu của quá khứ
↓
→ nên bật ngay từ ngày dựng ALB
Xem thêm câu #11933 (cùng lô) và #11887 (lô 129): cùng nguồn log này, ở đó trọng tâm là mã trạng thái HTTP tầng 7. Khoá nhất quán.
Vì sao các phương án khác sai
-
B (Amazon CloudWatch Logs) — đây là phương án gần nhất vì cũng là nơi chứa log, nhưng ALB không tự ghi access log vào CloudWatch Logs — nó ghi ra S3. CloudWatch Logs chứa log do bạn tự đẩy lên (log ứng dụng qua agent).
-
D (AWS CloudTrail logs) — ghi lời gọi API tới AWS (ai tạo, ai sửa ALB), không ghi request HTTP của người dùng cuối.
-
C (EC2 Auto Scaling logs) — ASG ghi sự kiện khởi chạy và kết thúc máy, không ghi lưu lượng nào.
Ghi nhớ
⚠ Các trường quan trọng của ALB access log — bảng đáng thuộc: | Trường | Ý nghĩa | |---|---| | client:port | IP và cổng của CLIENT — trường của câu này | | target:port | máy backend xử lý | | elb_status_code | mã ALB trả cho client | | target_status_code | mã backend trả cho ALB | | request_processing_time, target_processing_time | tách được độ trễ do ALB hay do backend | | user_agent | nhận diện bot, công cụ tự động | | ssl_cipher, ssl_protocol | phiên bản TLS được dùng | | trace_id | nối với X-Ray |
Từ khoá nhận diện:
"IP của client truy cập ALB" → ALB access log "mã trạng thái HTTP" → ALB / CloudFront access log "gói tin bị chặn" → VPC Flow Logs "ai gọi API AWS" → CloudTrail "chặn IP gửi quá nhiều" → WAF rate-based rule
| Xử lý sau khi tìm ra IP bất thường | Cách |
|---|---|
| WAF rate-based rule | tự chặn IP vượt ngưỡng request |
| WAF IP set | chặn cụ thể một danh sách IP |
| Shield Advanced | nếu là tấn công DDoS quy mô lớn |
| NACL | chặn ở tầng mạng (nếu client tới thẳng VPC) |
| CloudFront + WAF | chặn ngay tại edge, trước khi tới ALB |
| ALB access log ↔ VPC Flow Logs | Khác nhau |
|---|---|
| ALB access log | tầng 7 — URL, mã HTTP, user agent, IP client |
| VPC Flow Logs | tầng 3/4 — IP, cổng, byte, ACCEPT/REJECT |
| Bật sẵn | cả hai đều PHẢI TỰ BẬT |
| Đích ghi | ALB → S3; Flow Logs → CloudWatch Logs hoặc S3 |
| Dùng chung | ALB log cho hành vi ứng dụng, flow log cho kết nối mạng |
| Bật ALB access log | Bước |
|---|---|
| 1 | Tạo bucket S3 (cùng Region với ALB) |
| 2 | Thêm bucket policy cho phép dịch vụ ELB ghi vào |
| 3 | ALB → Attributes → Access logs: Enable, khai bucket và prefix |
| 4 | Tạo bảng Athena theo DDL mẫu trong tài liệu AWS |
| 5 | Đặt lifecycle rule để log không tích tụ vô hạn |
| Lưu ý | log được ghi theo lô mỗi 5 phút |
| Chỉ số đi kèm để phát hiện sớm | Nội dung |
|---|---|
RequestCount |
tăng đột biến |
ActiveConnectionCount, NewConnectionCount |
dấu hiệu tấn công kết nối |
TargetResponseTime |
backend đang quá tải |
HTTPCode_ELB_4XX_Count |
nhiều request hỏng — dò quét |
RejectedConnectionCount |
chạm giới hạn kết nối của ALB |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Access log đã bật chưa | describe-load-balancer-attributes | | IP nào gửi nhiều nhất | Athena: GROUP BY client_ip ORDER BY count DESC | | Có phải bot không | xem cột user_agent trong cùng truy vấn |
Và một điều nên làm ngay hôm nay dù chưa có sự cố nào: bật access log cho mọi ALB đang chạy. Log chỉ tồn tại từ thời điểm bật trở đi, nên nếu để tới lúc có chuyện mới bật, bạn sẽ có đầy đủ dữ liệu về mọi thứ trừ khoảng thời gian mà bạn thực sự cần điều tra.
A stateful web applications runs on a fleet of Amazon EC2 instances behind an Application Load Balancer (ALB). The ALB is configured as the origin in an Amazon CloudFront distribution. Users who have recently signed in to the application have reported that they are sometimes asked to re-authenticate.
Which combination of actions should a SysOps administrator take to resolve this problem? (Select TWO.)
-
A
Configure the cache behavior to forward cookies.
-
B
Configure the cache behavior to forward headers.
-
C
Enable the slow start duration on the ALB target group.
-
D
Enable group-level stickiness on the ALB listener rule.
-
E
Enable sticky sessions on the ALB target group.
Xem giải thích
Đáp án
A và E — Cấu hình cache behavior để CHUYỂN TIẾP COOKIE, VÀ bật STICKY SESSIONS trên ALB target group.
Vì sao đúng
Kiến trúc có hai tầng, và phiên bị mất vì cả hai tầng đều chưa được cấu hình để giữ phiên.
⚠ Tầng thứ nhất — ALB phải gửi người dùng về đúng máy:
Ứng dụng CÓ TRẠNG THÁI (stateful)
↓
Phiên lưu trong bộ nhớ của một máy EC2
↓
ALB không dính phiên → request rơi vào máy khác
↓
→ máy đó không biết phiên → bắt đăng nhập lại
↓
STICKY SESSIONS trên target group
↓
→ ALB gắn cookie AWSALB, gửi về đúng máy cũ
⚠ Tầng thứ hai — CloudFront phải CHUYỂN TIẾP cookie đó:
CloudFront mặc định KHÔNG chuyển tiếp cookie
↓
→ cookie AWSALB của ALB bị BỎ RƠI
→ và cookie phiên của ứng dụng cũng vậy
↓
→ ALB không nhận được cookie
→ sticky session VÔ TÁC DỤNG
↓
Phải khai cookie trong CACHE BEHAVIOR
↓
→ chỉ khi đó chuỗi mới thông từ đầu tới cuối
⚠ Nhưng phải khai CHỌN LỌC, đừng chuyển tiếp tất cả:
Chuyển tiếp TẤT CẢ cookie
↓
→ mỗi người dùng một khoá cache riêng
→ tỉ lệ cache hit gần bằng 0
↓
Cách đúng:
↓
Đường dẫn ĐỘNG (/app/*, /api/*)
→ cache behavior riêng, TTL 0,
chuyển tiếp cookie cần thiết
↓
Đường dẫn TĨNH (/static/*, /images/*)
→ cache behavior riêng, TTL dài,
KHÔNG chuyển tiếp cookie
↓
→ vừa giữ được phiên, vừa giữ được cache
Xem thêm câu #11909 (lô 129) và #11858 (lô 128): cùng chùm sticky session. Ở hai câu đó không có CloudFront nên chỉ cần bật sticky ở ALB; ở đây có thêm một tầng nên phải làm cả hai việc. Khoá nhất quán.
Vì sao các phương án khác sai
-
D (bật group-level stickiness trên listener rule của ALB) — đây là phương án gần nhất và là một tính năng có thật, nhưng nó dùng khi một listener rule chuyển tiếp tới NHIỀU target group theo trọng số — nó giữ người dùng ở cùng một target group, không phải cùng một máy. Không giải quyết vấn đề phiên trong bộ nhớ máy.
-
B (chuyển tiếp header) — chuyển tiếp header không mang cookie phiên; và chuyển tiếp thừa header còn làm giảm tỉ lệ cache hit.
-
C (bật slow start trên target group) — slow start tăng dần lưu lượng cho target mới thêm vào, giúp máy khởi động êm. Hoàn toàn không liên quan tới phiên.
Ghi nhớ
⚠ Chuỗi giữ phiên qua CloudFront + ALB — bảng phải thuộc: | Tầng | Việc cần làm | |---|---| | CloudFront | chuyển tiếp cookie trong cache behavior của đường dẫn động | | ALB target group | bật sticky sessions (stickiness.enabled) | | Ứng dụng | lý tưởng nhất là KHÔNG giữ trạng thái | | Thiếu một tầng | cả chuỗi hỏng — người dùng vẫn bị đăng xuất |
Từ khoá nhận diện:
"bị đăng xuất, có CloudFront + ALB" → chuyển tiếp cookie + sticky session "bị đăng xuất, chỉ có ALB" → sticky session "mất phiên khi máy bị thay" → đưa phiên ra ngoài: Redis / DynamoDB "cache hit thấp" → chuyển tiếp quá nhiều cookie / query string "máy mới nhận tải quá nhanh" → slow start
| Hai loại sticky cookie của ALB | Nội dung |
|---|---|
| Duration-based | cookie AWSALB, thời hạn 1 giây tới 7 ngày |
| Application-based | cookie của ứng dụng, ALB bọc thêm AWSALBAPP |
| Cần chuyển tiếp qua CloudFront | cả hai đều cần |
| Không sửa ứng dụng | duration-based |
| Cấu hình cache behavior cho ứng dụng có trạng thái | Nội dung |
|---|---|
/static/*, /images/*, /css/* |
TTL dài, KHÔNG cookie, KHÔNG query string |
/api/*, /app/* |
TTL 0, chuyển tiếp cookie cần thiết |
/* (mặc định) |
TTL ngắn, cân nhắc từng trường hợp |
| Nguyên tắc | tách đường dẫn TĨNH khỏi ĐỘNG — đây là chìa khoá |
| Origin request policy | dùng khi origin cần header mà không muốn tạo biến thể cache |
| Vì sao nên bỏ hẳn trạng thái trong máy | Nội dung |
|---|---|
| Máy hỏng | người dùng mất phiên |
| Auto Scaling thu nhỏ | mất phiên |
| Triển khai phiên bản mới | mất phiên |
| Tải phân bố lệch | máy giữ nhiều phiên nặng hơn |
| Cách chữa | ElastiCache Redis, DynamoDB có TTL, hoặc JWT ký |
| ALB tự lo việc xác thực — bỏ luôn nhu cầu này | Nội dung |
|---|---|
| Authenticate với Cognito | ALB tự chuyển hướng đăng nhập |
| Authenticate với OIDC | Google, Okta, Entra ID |
| Kết quả | ứng dụng không viết mã xác thực, phiên do ALB quản bằng cookie đã ký |
| Vẫn cần | chuyển tiếp cookie qua CloudFront |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Cookie có tới ALB không | DevTools → xem cookie AWSALB có được gửi kèm request | | Sticky đã bật chưa | describe-target-group-attributes | | Cache hit có tụt không | chỉ số CacheHitRate sau khi bật chuyển tiếp cookie |
Và một hệ quả cần theo dõi ngay sau khi bật chuyển tiếp cookie: tỉ lệ cache hit sẽ giảm. Nếu bạn khai cookie ở cache behavior mặc định thay vì chỉ ở đường dẫn động, mỗi người dùng sẽ có một tập cache riêng và CloudFront gần như chỉ còn là lớp trung chuyển — nên việc tách đường dẫn tĩnh ra một behavior riêng không phải chuyện tuỳ chọn, mà là điều kiện để giữ được cả hai mục tiêu.
A SysOps administrator sets up an Amazon EC2 instance within a private subnet of a VPC. When trying to connect to https://example.com, the administrator encounters a connection failure.
What corrective action should the SysOps administrator undertake to rectify this problem?
-
A
Confirm that an outbound security group rule permitting traffic through port 443 to 0.0.0.0/0 exists.
-
B
Ensure that there is an outbound network ACL rule that permits traffic on ephemeral ports 1024-65535 to 0.0.0.0/0.
-
C
Verify that there is an inbound security group rule allowing traffic on port 443 from 0.0.0.0/0.
-
D
Check that an outbound network ACL rule allowing traffic through port 80 to 0.0.0.0/0 is present.
Xem giải thích
Đáp án
A — Xác nhận có luật OUTBOUND trong security group cho phép lưu lượng qua CỔNG 443 tới 0.0.0.0/0.
Vì sao đúng
Máy cần gọi RA một địa chỉ HTTPS bên ngoài, nên thứ cần kiểm tra là đường ĐI RA, ở đúng cổng 443.
⚠ Điểm mấu chốt — chiều và cổng phải khớp với hành vi:
Máy gọi https://example.com
↓
→ kết nối ĐI RA
→ tới cổng ĐÍCH 443
↓
Security group phải cho phép:
Outbound, TCP 443, tới 0.0.0.0/0
↓
Mặc định outbound của SG là MỞ HẾT
↓
→ nhưng nhiều tổ chức SIẾT LẠI vì bảo mật
→ và siết nhầm là chặn luôn HTTPS
↓
→ đây là nguyên nhân hợp lý nhất
⚠ Vì sao chiều VÀO không liên quan:
Security group có TRẠNG THÁI (stateful)
↓
Kết nối đi ra đã được cho phép
→ phản hồi TỰ ĐỘNG được đi vào
↓
→ KHÔNG cần luật inbound nào
→ phương án C sai vì lý do này
⚠ Nhưng với private subnet còn phải kiểm tra ĐƯỜNG RA:
Private subnet gọi ra internet
↓
Cần một trong hai:
- NAT Gateway (và tuyến 0.0.0.0/0 → nat-)
- VPC endpoint (nếu đích là dịch vụ AWS)
↓
Không có → kết nối TIMEOUT
↓
→ trong bốn phương án đề cho,
chỉ A chạm tới nguyên nhân có thật
Vì sao các phương án khác sai
-
B (luật NACL outbound cho phép dải cổng tạm 1024-65535 tới
0.0.0.0/0) — đây là phương án gần nhất và dải cổng tạm đúng là một khái niệm quan trọng của NACL, nhưng nó áp cho chiều VÀO của gói trả lời, không phải chiều ra của gói yêu cầu. Gói đi ra tới cổng 443, còn cổng tạm là ở chiều ngược lại. (Và NACL mặc định của VPC đã mở cả hai chiều.) -
C (luật security group INBOUND cho phép cổng 443 từ
0.0.0.0/0) — sai chiều: SG là stateful, phản hồi tự động được vào. Và mở 443 từ cả internet vào một máy private là rủi ro bảo mật không cần thiết. -
D (luật NACL outbound cho phép cổng 80) — sai cổng:
https://dùng 443, không phải 80.
Ghi nhớ
⚠ Chiều và cổng — bảng phải thuộc: | Tình huống | Cần luật gì | |---|---| | Máy GỌI RA một dịch vụ HTTPS | SG outbound, cổng đích 443 | | Máy NHẬN kết nối HTTPS vào | SG inbound, cổng 443 | | NACL cho kết nối ĐI RA | outbound cổng đích, inbound cổng tạm 1024-65535 | | NACL cho kết nối ĐI VÀO | inbound cổng dịch vụ, outbound cổng tạm | | Ghi nhớ | SG stateful → chỉ cần một chiều; NACL stateless → cần cả hai |
Từ khoá nhận diện:
"máy gọi ra một địa chỉ HTTPS" → SG outbound 443 "kết nối TCP hỏng một chiều với NACL" → thiếu DẢI CỔNG TẠM "private subnet không ra được internet" → NAT Gateway, hoặc VPC endpoint "gọi dịch vụ AWS mà không qua internet" → VPC endpoint "timeout" → gói bị bỏ im lặng: SG, NACL, route table
| Danh sách kiểm tra "máy private không gọi ra được" | Bước |
|---|---|
| 1 | SG outbound có cho phép cổng đích không |
| 2 | Route table có 0.0.0.0/0 → nat- không |
| 3 | NAT Gateway có ở public subnet và có Elastic IP không |
| 4 | NACL cả hai chiều (nhớ cổng tạm ở chiều vào) |
| 5 | DNS — VPC có enableDnsSupport không |
| 6 | Đích là dịch vụ AWS → cân nhắc VPC endpoint thay vì NAT |
| Siết security group outbound cho an toàn | Cách |
|---|---|
| Mặc định | mở hết — tiện nhưng lỏng |
| Siết đúng cách | chỉ mở 443 tới đích cần, và prefix list nếu là dịch vụ AWS |
| Prefix list của AWS | com.amazonaws.<region>.s3, ...dynamodb — dùng trong luật SG |
| Bẫy | siết nhầm là ứng dụng không gọi được API nào, không cập nhật được gói |
| Kiểm chứng | VPC Flow Logs, tìm REJECT ở chiều egress |
| Dải cổng tạm — con số phải nhớ | Nội dung |
|---|---|
| Linux hiện đại | 32768-60999 |
| Windows | 49152-65535 |
| NLB, một số dịch vụ AWS | 1024-65535 |
| Thực hành an toàn | mở 1024-65535 trong NACL để phủ hết |
| Công cụ chẩn đoán | Việc |
|---|---|
| VPC Reachability Analyzer | chỉ đúng thành phần đang chặn |
| VPC Flow Logs | bằng chứng gói tin |
| Trên máy | curl -v https://example.com, nc -zv example.com 443 |
dig example.com |
tên miền có phân giải được không |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | SG cho phép gì chiều ra | describe-security-groups — đọc IpPermissionsEgress | | Máy có ra được không | curl -v https://example.com trên chính máy đó | | Bị chặn ở đâu | Flow Logs, tìm REJECT với dstPort = 443 |
Và một bước nên làm trước khi soi từng luật: chạy curl -v ngay trên máy đó. Kết quả nói cho bạn biết vấn đề ở tầng nào — treo ở bước "Trying..." là lỗi mạng hoặc định tuyến, lỗi phân giải tên miền là vấn đề DNS, còn nếu bắt tay TLS thất bại thì mạng đã thông và nguyên nhân nằm ở nơi khác hoàn toàn.
A security team requires that AWS CloudTrail is always enabled in an AWS account. The security team has enabled CloudTrail in the account and have asked a SysOps administrator to ensure that if it is disabled, it is immediately and automatically re-enabled.
How can the SysOps administrator accomplish this requirement without writing any custom code?
-
A
Create an Amazon EventBridge (Amazon CloudWatch Events) hourly rule with a schedule pattern to run an AWS Systems Manager Automation document to enable CloudTrail.
-
B
Create an AWS Config rule that is invoked when the CloudTrail configuration changes. Configure the rule to invoke an AWS Lambda function to re-enable CloudTrail.
-
C
Create an AWS Config rule that is invoked when the CloudTrail configuration changes. Apply the AWS-ConfigureCloudTrailLogging automatic remediation action.
-
D
Configure Amazon Inspector to analyze the account configuration and initiate an AWS Lambda function that re-enables CloudTrail if it is disabled.
Xem giải thích
Đáp án
C — Tạo AWS Config rule được kích hoạt khi cấu hình CloudTrail thay đổi, và áp hành động khắc phục tự động AWS-ConfigureCloudTrailLogging.
Vì sao đúng
Đề có một ràng buộc quyết định: KHÔNG viết mã tuỳ chỉnh nào. Config có sẵn cả luật lẫn document khắc phục cho đúng việc này.
⚠ Điểm mấu chốt — mô hình phát hiện + khắc phục, không cần code:
PHÁT HIỆN
↓
Luật Config quản lý sẵn: cloudtrail-enabled
(hoặc cloud-trail-enabled)
↓
Đánh giá lại khi CẤU HÌNH THAY ĐỔI
↓
CloudTrail bị tắt → NON_COMPLIANT
↓
KHẮC PHỤC
↓
Gắn REMEDIATION ACTION vào chính luật đó
↓
SSM Automation document có sẵn:
AWS-ConfigureCloudTrailLogging
↓
→ BẬT LẠI CloudTrail, tự động
→ không một dòng mã nào
⚠ Hai chế độ khắc phục — chọn "tự động" cho yêu cầu này:
Manual remediation
↓
Config phát hiện → người bấm nút để sửa
Automatic remediation ← đề này
↓
Config phát hiện → TỰ CHẠY document
↓
Có tham số:
MaximumAutomaticAttempts
RetryAttemptSeconds
↓
→ đề nói "immediately and automatically"
→ chọn chế độ tự động
⚠ Nhưng cách NGĂN CHẶN còn tốt hơn:
Config + remediation là PHÁT HIỆN rồi SỬA
↓
→ vẫn có một khoảng thời gian CloudTrail bị tắt
→ log của khoảng đó MẤT VĨNH VIỄN
↓
NGĂN CHẶN — nên làm cùng lúc:
↓
1. SCP chặn cloudtrail:StopLogging,
DeleteTrail, UpdateTrail
2. ORGANIZATION TRAIL
→ tài khoản thành viên KHÔNG tắt được
3. Log ghi vào bucket ở TÀI KHOẢN KHÁC
+ S3 Object Lock
Xem thêm câu #11792 (lô 127) và #11845 (lô 128): cùng mô hình Config phát hiện + SSM Automation khắc phục, áp cho các loại tài nguyên khác. Khoá nhất quán.
Vì sao các phương án khác sai
-
B (Config rule kích hoạt Lambda để bật lại CloudTrail) — đây là phương án gần nhất và chạy được, nhưng nó đòi viết mã Lambda — vi phạm thẳng ràng buộc "without writing any custom code". Trong khi document có sẵn làm đúng việc đó.
-
A (EventBridge chạy theo lịch mỗi giờ để bật lại CloudTrail) — phản ứng chậm tới một giờ, không phải "ngay lập tức". Và nó chạy cả khi không có gì thay đổi.
-
D (dùng Amazon Inspector phân tích cấu hình rồi gọi Lambda) — Inspector quét LỖ HỔNG phần mềm, không kiểm tra cấu hình dịch vụ. Và cũng đòi viết mã.
Ghi nhớ
⚠ Ngăn chặn ↔ Phát hiện ↔ Khắc phục — bảng phải thuộc: | Loại | Công cụ | Đặc điểm | |---|---|---| | Ngăn chặn | SCP, organization trail, Object Lock | chặn TRƯỚC khi việc xảy ra | | Phát hiện | AWS Config, Security Hub, GuardDuty | báo sau khi đã xảy ra | | Khắc phục | SSM Automation document | tự sửa cái đã phát hiện | | Tốt nhất | dùng cả ba tầng | |
Từ khoá nhận diện:
"tự động sửa, KHÔNG viết mã" → Config rule + SSM Automation document CÓ SẴN "không ai được tắt CloudTrail" → SCP + organization trail "phát hiện cấu hình sai" → AWS Config "phát hiện hành vi đe doạ" → GuardDuty "quét lỗ hổng phần mềm" → Inspector
| Các SSM Automation document khắc phục có sẵn | Việc |
|---|---|
AWS-ConfigureCloudTrailLogging |
bật lại CloudTrail — dùng cho đề này |
AWS-DisablePublicAccessForSecurityGroup |
gỡ luật SG mở toang |
AWS-DisableS3BucketPublicReadWrite |
đóng bucket public |
AWS-ConfigureS3BucketVersioning |
bật versioning |
AWSConfigRemediation-* |
họ document dành riêng cho Config remediation |
| Tuỳ chỉnh | viết document YAML/JSON riêng |
| Các luật Config quản lý sẵn về giám sát | Kiểm gì |
|---|---|
cloudtrail-enabled |
tài khoản có trail đang hoạt động |
cloud-trail-log-file-validation-enabled |
bật xác thực toàn vẹn log |
cloud-trail-encryption-enabled |
log được mã hoá KMS |
multi-region-cloudtrail-enabled |
trail phủ mọi Region |
cloudwatch-log-group-encrypted |
log group được mã hoá |
guardduty-enabled-centralized |
GuardDuty đã bật |
| Bảo vệ CloudTrail toàn diện | Lớp |
|---|---|
| Organization trail | tài khoản thành viên KHÔNG tắt, KHÔNG sửa được |
| SCP | chặn cloudtrail:StopLogging, DeleteTrail |
| Bucket ở tài khoản riêng | kẻ chiếm một tài khoản không xoá được log |
| S3 Object Lock | log bất biến |
| Log file validation | phát hiện log bị sửa |
| Config + remediation | lưới an toàn cuối cùng |
| Cấu hình remediation cho đúng | Nội dung |
|---|---|
| Chế độ | Automatic cho yêu cầu "ngay lập tức" |
MaximumAutomaticAttempts |
số lần thử lại |
| IAM role cho remediation | phải đủ quyền thực hiện hành động |
| Cân nhắc | bắt đầu bằng chế độ Manual để quan sát trước |
| Theo dõi | Systems Manager → Automation → Executions |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Luật có phát hiện được không | tắt thử trail ở môi trường test | | Khắc phục có chạy không | SSM → Automation → Executions | | Ai đã tắt | CloudTrail, tìm StopLogging — và nghịch lý là log đó cũng bị dừng |
Và một điểm hạn chế cố hữu của cách tiếp cận này đáng nói rõ: giữa lúc CloudTrail bị tắt và lúc Config sửa lại, mọi hoạt động trong khoảng đó không được ghi lại và không bao giờ khôi phục được. Đó chính là lý do organization trail cộng với SCP mới là biện pháp chính — Config remediation chỉ nên là lưới an toàn phía sau, không phải tuyến phòng thủ duy nhất.
A company operates several workloads on AWS and has identified five specific AWS Trusted Advisor service quota metrics that they need to keep an eye on in a specific AWS Region. They wish to be alerted via email when any resource usage surpasses 80% of the allocated service quota.
What is the most suitable solution to achieve this?
-
A
Implement AWS Config to monitor service quota usage and send notifications via Amazon Simple Email Service (SES).
-
B
Use AWS Personal Health Dashboard to monitor service quota usage and set up email alerts through AWS Chatbot.
-
C
Set up AWS CloudWatch Alarms for the service quotas and configure Amazon Simple Notification Service (SNS) to send email notifications when usage exceeds 80%.
-
D
Utilize AWS Trusted Advisor to monitor service quota usage and configure Amazon Simple Notification Service (SNS) for email alerts.
Xem giải thích
Đáp án
C — Đặt CLOUDWATCH ALARM cho các service quota và cấu hình SNS gửi email khi mức dùng vượt 80%.
Vì sao đúng
Yêu cầu là cảnh báo tự động qua email khi mức dùng vượt một ngưỡng phần trăm — đó chính là mô hình alarm + SNS.
⚠ Điểm mấu chốt — Service Quotas phát chỉ số vào CloudWatch:
Namespace: AWS/Usage
↓
Chỉ số: ResourceCount
Dimensions:
Service → ví dụ "EC2"
Class → "Standard/OnDemand"
Type → "Resource"
Resource → "vCPU"
↓
→ tạo CloudWatch alarm trên chỉ số này
↓
Alarm action: SNS topic
↓
SNS subscription: email đã XÁC NHẬN
⚠ Cách hay nhất — dùng METRIC MATH để tính phần trăm:
m1 = mức dùng hiện tại (AWS/Usage)
↓
Biểu thức: (m1 / SERVICE_QUOTA(m1)) * 100
↓
→ ra thẳng PHẦN TRĂM so với hạn mức
→ đặt ngưỡng 80
↓
Hàm SERVICE_QUOTA() lấy giá trị hạn mức
hiện tại một cách tự động
↓
→ hạn mức được nâng thì ngưỡng tự điều chỉnh
→ không phải sửa alarm bằng tay
⚠ Và Service Quotas có nút tạo alarm sẵn:
Service Quotas console
↓
Chọn một quota → "Create alarm"
↓
Khai ngưỡng phần trăm (ví dụ 80)
↓
→ console tự dựng CloudWatch alarm
với metric math đúng
↓
Chỉ áp dụng cho các quota
có hỗ trợ CloudWatch usage metrics
Vì sao các phương án khác sai
-
D (dùng Trusted Advisor để theo dõi rồi cấu hình SNS gửi email) — đây là phương án gần nhất và Trusted Advisor thật sự có mục kiểm tra Service Limits, nhưng nó cập nhật theo chu kỳ (thường hằng tuần), không đặt ngưỡng tuỳ ý được, và không tự gửi tới SNS — chỉ có bản tóm tắt hằng tuần qua email. Không phải cơ chế cảnh báo theo ngưỡng.
-
A (dùng AWS Config theo dõi mức dùng quota, gửi qua Amazon SES) — Config theo dõi CẤU HÌNH tài nguyên, không theo dõi mức dùng so với hạn mức. Và SES là dịch vụ gửi email cho ứng dụng, không phải kênh cảnh báo hệ thống.
-
B (dùng Personal Health Dashboard theo dõi quota, cảnh báo qua AWS Chatbot) — Health Dashboard báo sự kiện của AWS ảnh hưởng tới tài nguyên của bạn, không theo dõi mức dùng hạn mức theo phần trăm.
Ghi nhớ
⚠ Theo dõi hạn mức — bảng phải thuộc: | Công cụ | Đặc điểm | |---|---| | CloudWatch alarm trên AWS/Usage | ngưỡng tuỳ ý, thời gian gần thực, gửi SNS | | Service Quotas console | xem, xin tăng, tạo alarm sẵn | | Trusted Advisor → Service Limits | kiểm tra định kỳ, cảnh báo ở ~80%, không tuỳ chỉnh | | AWS Health + EventBridge | thông báo khi AWS thay đổi hạn mức | | Quota Request Template | tự xin tăng cho tài khoản MỚI trong tổ chức |
Từ khoá nhận diện:
"cảnh báo khi vượt N% hạn mức" → CloudWatch alarm + SNS "xin tăng hạn mức" → Service Quotas "kiểm tra nhanh sắp chạm hạn mức nào" → Trusted Advisor "tài khoản mới tự có hạn mức cao" → Quota Request Template "stack thất bại vì hạn mức" → đọc tab Events, rồi Service Quotas
| Metric math cho phần trăm hạn mức | Nội dung |
|---|---|
| Chỉ số nguồn | AWS/Usage → ResourceCount |
| Biểu thức | (m1 / SERVICE_QUOTA(m1)) * 100 |
| Ngưỡng | 80 |
| Lợi ích | tự điều chỉnh khi hạn mức được nâng |
| Hạn chế | chỉ với quota có hỗ trợ usage metrics |
| Các hạn mức hay chạm phải | Giá trị mặc định |
|---|---|
| VPC mỗi Region | 5 |
| Elastic IP mỗi Region | 5 |
| Internet Gateway | 5 |
| vCPU theo họ instance | tính bằng vCPU, không phải số máy |
| Security group mỗi VPC | 2.500 |
| Luật mỗi security group | 60 vào, 60 ra |
| Lambda concurrent executions | 1.000 |
| Quản lý hạn mức chủ động | Cách |
|---|---|
| Alarm ở 80% | cho mọi quota quan trọng |
| Xin tăng TRƯỚC sự kiện lớn | có thể mất vài ngày |
| Quota Request Template | áp cho tài khoản mới trong Organizations |
| Trusted Advisor | rà soát định kỳ |
| Tự động | EventBridge + Lambda tự mở yêu cầu tăng khi chạm ngưỡng |
| Hai loại quota | Nội dung |
|---|---|
| Adjustable | xin tăng được — phần lớn |
| Not adjustable | giới hạn cứng của dịch vụ |
| Phạm vi | theo Region, một số theo tài khoản |
| Xin tăng | qua Service Quotas — một số tự động duyệt |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Đang dùng bao nhiêu | Service Quotas console, hoặc chỉ số AWS/Usage | | Alarm có gửi được không | set-alarm-state --state-value ALARM rồi xem hộp thư | | Đăng ký SNS xác nhận chưa | list-subscriptions-by-topic |
Và một việc rất đáng làm với tổ chức có nhiều tài khoản: dựng bộ alarm hạn mức bằng CloudFormation StackSets. Khi đó mọi tài khoản, kể cả tài khoản được tạo vào tháng sau, đều tự có cùng một bộ cảnh báo — thay vì phải nhớ cấu hình thủ công cho từng nơi, và phát hiện ra thiếu sót vào đúng lúc một tài khoản nào đó chạm trần.