Ngân hàng đề — AWS Certified SysOps Administrator Associate
Tìm thấy 936 câu.
A corporation manages several AWS accounts using AWS Organizations. According to the firm's regulations, only certain AWS Regions are authorized for customer data storage and processing. A SysOps administrator has been tasked with ensuring that the initiation of Amazon EC2 instances in unapproved regions by any company member is prohibited.
Which is the most efficient operational solution to meet these requirements?
-
A
In each AWS account, set up an IAM role that uses a Region condition to deny the ec2:RunInstances action in all unauthorized regions. Attach this role to all EC2 instances in each AWS account.
-
B
Deploy Amazon AWS CloudWatch in all regions to monitor all API activities. Generate an Amazon SNS topic in all unauthorized regions for ec2:RunInstances events. Use AWS Step Functions to terminate the initiated EC2 instances.
-
C
For each AWS account, create a bucket policy in Amazon S3 that rejects the ec2:RunInstances action in all unauthorized regions. Bind this policy to all S3 buckets in each AWS account.
-
D
Create a service control policy (SCP) within AWS Organizations to block the ec2:RunInstances function in all non-compliant regions. Apply this policy to the AWS organization's root level.
Xem giải thích
Đáp án
D — Tạo SERVICE CONTROL POLICY trong AWS Organizations chặn ec2:RunInstances ở các Region không được duyệt, áp lên ROOT của tổ chức.
Vì sao đúng
Yêu cầu là không một ai trong toàn công ty khởi chạy được EC2 ở Region không được duyệt — và chỉ SCP áp ở root mới phủ được "tất cả mọi người, mọi tài khoản".
⚠ Điểm mấu chốt — SCP là NGĂN CHẶN ở tầng cao nhất:
SCP áp ở ROOT của tổ chức
↓
Áp cho MỌI tài khoản thành viên
(trừ tài khoản quản lý)
↓
Áp cho MỌI danh tính trong đó:
- IAM user, IAM role
- kể cả người có AdministratorAccess
- kể cả ROOT USER của tài khoản thành viên
↓
→ không ai vượt qua được
→ và request bị chặn TRƯỚC KHI máy được tạo
⚠ Cách viết SCP khoá Region:
{
"Effect": "Deny",
"Action": "ec2:RunInstances",
"Resource": "*",
"Condition": {
"StringNotEquals": {
"aws:RequestedRegion": [
"ap-southeast-1",
"eu-west-1"
]
}
}
}
StringNotEquals
↓
→ CẤM mọi Region KHÔNG NẰM trong danh sách
→ chỉ hai Region đó chạy được
⚠ Nhưng phải CHỪA các dịch vụ TOÀN CỤC:
Nhiều dịch vụ chạy endpoint ở us-east-1
↓
IAM, Organizations, Route 53,
CloudFront, Support, Billing…
↓
Khoá Region kiểu chặn TẤT CẢ dịch vụ
↓
→ làm đứt luôn IAM và Billing
↓
Cách đúng: dùng NotAction để loại trừ
"NotAction": ["iam:*","organizations:*",
"route53:*","cloudfront:*",
"support:*","budgets:*", ...]
↓
Đề này chỉ chặn ec2:RunInstances
→ không vướng vấn đề đó
Xem thêm câu #11878, #11882 (cùng lô) và #11865 (lô 128): cùng chùm SCP. #11878 nhấn vào chiều của toán tử điều kiện, #11882 vào việc SCP thắng cả quyền quản trị IAM.
Vì sao các phương án khác sai
-
A (tạo IAM role có điều kiện Region để Deny
ec2:RunInstances, gắn role đó vào mọi instance EC2) — đây là phương án gần nhất vì dùng đúng khoá điều kiện, nhưng cách áp dụng sai hoàn toàn: role gắn vào instance quy định quyền của ỨNG DỤNG chạy trên máy, không quy định quyền của người khởi chạy máy. Và IAM policy thì người có quyền quản trị tự gỡ được. -
B (dùng CloudWatch ở mọi Region theo dõi API, SNS báo, Step Functions huỷ máy) — phản ứng SAU khi máy đã chạy: dữ liệu khách hàng có thể đã được xử lý ở Region cấm trong khoảng thời gian đó. Lại rất phức tạp và tốn kém.
-
C (tạo bucket policy trong S3 từ chối
ec2:RunInstances) — bucket policy chỉ áp cho thao tác trên chính bucket đó. Không có cơ chế nào để một bucket policy chặn được việc tạo EC2.
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, IAM policy, permissions boundary | chặn TRƯỚC khi việc xảy ra | | Phát hiện | Config, Security Hub, GuardDuty | báo sau khi đã xảy ra | | Khắc phục | SSM Automation, Config remediation | tự sửa cái đã phát hiện | | Yêu cầu tuân thủ nghiêm | luôn ưu tiên NGĂN CHẶN | |
Từ khoá nhận diện:
"không ai được làm X" → SCP "chỉ được dùng Region A và B" → SCP với
aws:RequestedRegion"phát hiện tài nguyên sai chuẩn" → AWS Config "tự sửa khi phát hiện" → Config + SSM Automation "tài khoản quản lý cũng phải bị chặn" → SCP KHÔNG áp được — đừng chạy tải ở đó
| SCP khoá Region — hai cách viết | Nội dung |
|---|---|
| Chặn một hành động cụ thể | Deny ec2:RunInstances + StringNotEquals trên Region — đơn giản, an toàn |
| Chặn mọi thứ trừ dịch vụ toàn cục | Deny với NotAction liệt kê IAM, Organizations, Route 53, CloudFront, Support, Billing… |
| Rủi ro cách thứ hai | quên một dịch vụ toàn cục → đứt việc quản trị |
| Nên làm | thử trên OU thử nghiệm trước, luôn luôn |
| Các dịch vụ toàn cục hay phải loại trừ | Nội dung |
|---|---|
iam:* |
quan trọng nhất — thiếu là không quản lý được quyền |
organizations:* |
quản lý chính tổ chức |
route53:*, route53domains:* |
DNS |
cloudfront:* |
CDN |
support:*, budgets:*, ce:*, aws-portal:* |
hỗ trợ và thanh toán |
sts:* (một phần) |
lấy thông tin xác thực |
| Phòng thủ nhiều lớp cho yêu cầu vị trí dữ liệu | Lớp |
|---|---|
| SCP khoá Region | ngăn chặn — lớp chính |
| AWS Config | phát hiện tài nguyên đã tồn tại ở Region sai |
Bucket policy với aws:RequestedRegion |
bảo vệ dữ liệu ở tầng lưu trữ |
| CloudTrail cấp tổ chức | bằng chứng cho kiểm toán |
| Control Tower guardrail | có sẵn guardrail "chặn Region" |
| Bẫy khi áp SCP ở root | Nội dung |
|---|---|
| Không áp cho tài khoản quản lý | đừng chạy tải công việc ở đó |
| Ảnh hưởng cả role dịch vụ | có thể làm đứt sao lưu, CI/CD, replication |
| Không có cảnh báo trước | hiệu lực NGAY khi gắn |
| Thông báo lỗi | AccessDenied kèm ghi chú explicit deny in SCP |
| Nên | thử ở OU thử nghiệm, rồi mở rộng dần |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | SCP thực tế đang áp | describe-effective-policy | | Có chặn đúng không | run-instances --dry-run ở Region cấm — phải bị từ chối | | Có gì đang chạy sai chỗ không | Config aggregator, hoặc describe-instances ở mọi Region |
Và một việc nên làm ngay sau khi áp SCP: quét mọi Region để tìm tài nguyên đã tồn tại từ trước. SCP chỉ chặn các request mới — những instance đã chạy ở Region không được duyệt vẫn tiếp tục chạy, vẫn đang xử lý dữ liệu, và chính chúng mới là phần vi phạm mà kiểm toán viên sẽ tìm thấy.
A SysOps Administrator has deployed a fleet of Amazon EC2 instances using an EC2 Auto Scaling group. The instances must be configured to send local logs to Amazon CloudWatch and the solution must minimize operational overhead.
Which action should the Administrator take to meet this requirement?
-
A
Install and configure the Amazon Inspector agent.
-
B
Configure AWS Config to forward events to CloudWatch.
-
C
Create a script that forwards events to CloudWatch.
-
D
Install and configure the unified CloudWatch agent.
Xem giải thích
Đáp án
D — Cài và cấu hình UNIFIED CLOUDWATCH AGENT.
Vì sao đúng
Yêu cầu là đẩy log cục bộ lên CloudWatch với ít công vận hành nhất, và unified agent là công cụ chính thức cho việc đó.
⚠ Điểm mấu chốt — vì sao phải có agent:
Log của ứng dụng và hệ điều hành
↓
Nằm trong tệp trên đĩa của máy:
/var/log/messages
/var/log/nginx/access.log
C:\inetpub\logs\...
↓
CloudWatch KHÔNG tự đọc được tệp trên máy
↓
→ phải có tiến trình đọc tệp và đẩy đi
→ đó là CloudWatch agent
⚠ "Unified" nghĩa là một agent làm cả hai việc:
Agent hợp nhất (amazon-cloudwatch-agent)
↓
1. THU LOG → CloudWatch Logs
2. THU CHỈ SỐ → CloudWatch Metrics
mem_used_percent, disk_used_percent,
swap, procstat…
↓
Thay thế hai công cụ cũ:
CloudWatch Logs agent (đã ngừng)
script mon-put-instance-data.pl
↓
→ một agent, một cấu hình, một nơi cài đặt
⚠ Ít công vận hành nhất — cách triển khai cho cả đội máy:
1. Cấu hình lưu trong SSM PARAMETER STORE
↓
→ một bản dùng chung cho mọi máy
→ sửa một chỗ, áp cho tất cả
2. Cài bằng SSM DISTRIBUTOR
↓
→ cài và cập nhật hàng loạt
3. STATE MANAGER
↓
→ bảo đảm agent LUÔN được cài và ĐANG CHẠY
→ máy mới do ASG khởi chạy cũng tự có
4. Hoặc: cài sẵn vào GOLDEN AMI
↓
→ máy mới có agent ngay từ giây đầu
Xem thêm câu #11833 và #11874 (lô 128): cùng nguyên tắc — chỉ số bộ nhớ, đĩa và log đều cần CloudWatch agent. Khoá nhất quán ở cả ba câu.
Vì sao các phương án khác sai
-
C (viết script tự đẩy sự kiện lên CloudWatch) — đây là phương án gần nhất và về kỹ thuật thì làm được, nhưng nó tự làm lại thứ AWS đã cung cấp sẵn: phải tự xử lý xoay tệp log, thử lại khi lỗi, giới hạn tần suất API, đóng gói và triển khai. Trái hẳn yêu cầu "ít công vận hành nhất".
-
A (cài Amazon Inspector agent) — Inspector quét LỖ HỔNG bảo mật, không thu thập log. (Và Inspector hiện nay dùng SSM Agent chứ không còn agent riêng.)
-
B (cấu hình AWS Config chuyển tiếp sự kiện tới CloudWatch) — Config theo dõi THAY ĐỔI CẤU HÌNH tài nguyên, không đọc log bên trong máy.
Ghi nhớ
⚠ Agent nào làm việc gì — bảng phải thuộc: | Agent | Việc | |---|---| | Unified CloudWatch agent | thu LOG và CHỈ SỐ từ trong máy | | SSM Agent | quản lý máy: chạy lệnh, vá lỗi, Session Manager | | Inspector | quét lỗ hổng (nay dựa trên SSM Agent) | | X-Ray daemon | thu vết truy tìm phân tán | | Cài sẵn trên Amazon Linux | SSM Agent có sẵn; CloudWatch agent PHẢI CÀI |
Từ khoá nhận diện:
"đẩy log từ máy lên CloudWatch" → unified CloudWatch agent "chỉ số bộ nhớ, dung lượng đĩa" → cũng chính agent đó "chạy lệnh trên nhiều máy" → SSM Run Command "quét lỗ hổng" → Inspector "theo dõi thay đổi cấu hình" → AWS Config
| Cài agent cho cả đội máy — ít công nhất | Cách |
|---|---|
| SSM Distributor | cài và cập nhật gói hàng loạt |
| Cấu hình trong Parameter Store | một bản dùng chung |
| State Manager association | bảo đảm agent luôn cài và chạy |
| Golden AMI | có sẵn từ đầu |
| Quyền | CloudWatchAgentServerPolicy trong instance profile |
| Cấu hình agent — các phần chính | Nội dung |
|---|---|
logs.logs_collected.files |
danh sách tệp log cần đẩy |
log_group_name / log_stream_name |
dùng {instance_id} để tách theo máy |
metrics.metrics_collected |
mem, disk, swap, procstat, net |
metrics_collection_interval |
60 giây là hợp lý |
append_dimensions |
thêm InstanceId, AutoScalingGroupName |
| Tạo cấu hình | amazon-cloudwatch-agent-config-wizard |
| Quản lý log sau khi đã đẩy lên | Nội dung |
|---|---|
| Đặt hạn lưu (retention) | mặc định là VĨNH VIỄN — rất tốn tiền |
| Metric filter | trích chỉ số từ nội dung log (đếm số lỗi) |
| Subscription filter | đẩy tiếp sang Kinesis, OpenSearch, Lambda |
| Logs Insights | truy vấn nhanh |
| Xuất sang S3 | lưu trữ dài hạn giá rẻ |
| Với ASG | log còn nguyên sau khi máy bị thay — đây là lợi ích lớn nhất |
| Chi phí cần biết | Nội dung |
|---|---|
| Nạp log (ingestion) | tính theo GB — phần lớn hoá đơn nằm ở đây |
| Lưu trữ | theo GB mỗi tháng |
| Chỉ số tuỳ chỉnh | mỗi tổ hợp dimension là MỘT chỉ số riêng |
| Cách giảm | chỉ đẩy log thật sự cần, lọc bớt ở phía agent, đặt hạn lưu |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Agent có chạy không | amazon-cloudwatch-agent-ctl -a status | | Log đã lên chưa | CloudWatch → Log groups → tìm log stream theo instance id | | Vì sao không lên | log của chính agent: /opt/aws/amazon-cloudwatch-agent/logs/ |
Và một cấu hình rất nên đặt ngay khi tạo log group: hạn lưu trữ. Mặc định CloudWatch Logs giữ log vĩnh viễn, nên một đội máy ghi log đều đặn sẽ âm thầm tích tụ hàng terabyte trong vài năm — và khoản đó thường chỉ được phát hiện khi ai đó ngồi rà lại hoá đơn, rất lâu sau khi những dòng log ấy không còn ai cần đọc nữa.
The manager of a SysOps team needs to ensure Administrators do not accidentally terminate several critical Amazon EC2 instances.
How can this be accomplished?
-
A
Use CloudTrail to restrict the terminate-instances API call.
-
B
Enable termination protection on the EC2 instances.
-
C
Use AWS Config to restrict EC2 termination.
-
D
Use AWS Systems Manager to restrict EC2 termination.
Xem giải thích
Đáp án
B — Bật TERMINATION PROTECTION trên các instance EC2 quan trọng.
Vì sao đúng
Yêu cầu là ngăn việc huỷ máy do NHẦM LẪN, và termination protection là tính năng sinh ra chính xác cho việc đó.
⚠ Điểm mấu chốt — nó chặn ở tầng API:
Bật DisableApiTermination = true
↓
Mọi lời gọi TerminateInstances tới máy đó
↓
→ bị TỪ CHỐI
↓
Từ console: nút Terminate bị mờ
Từ CLI/SDK: lỗi OperationNotPermitted
↓
Muốn huỷ thật:
phải TẮT bảo vệ trước — MỘT BƯỚC CÓ CHỦ Ý
↓
→ đúng nghĩa "chống nhầm lẫn"
⚠ Nhưng phải biết rõ nó KHÔNG chặn những gì:
KHÔNG chặn:
↓
- Lệnh SHUTDOWN từ BÊN TRONG hệ điều hành
(nếu InstanceInitiatedShutdownBehavior = terminate)
- Auto Scaling group thu nhỏ hoặc thay máy không khoẻ
- Spot instance bị THU HỒI
- CloudFormation xoá stack
(trừ khi có DeletionPolicy: Retain)
↓
→ mỗi con đường cần một biện pháp riêng
⚠ Bộ bảo vệ đầy đủ cho một máy quan trọng:
1. DisableApiTermination = true ← chống nhầm tay
2. InstanceInitiatedShutdownBehavior
= stop (không phải terminate) ← chống shutdown từ trong
3. DisableApiStop = true ← chống dừng nhầm
4. EBS: DeleteOnTermination = false ← giữ dữ liệu
5. SCP hoặc IAM policy ← chỉ vài người được huỷ
6. Sao lưu: AWS Backup / snapshot ← lưới an toàn cuối
7. Tag "Critical=true" + alarm ← biết khi có ai đụng vào
Vì sao các phương án khác sai
-
A (dùng CloudTrail để hạn chế lời gọi
terminate-instances) — đây là phương án gần nhất vì CloudTrail đúng là liên quan tới lời gọi API, nhưng CloudTrail chỉ GHI LẠI, không CHẶN. Nó cho biết ai đã huỷ máy — sau khi máy đã biến mất. -
C (dùng AWS Config để hạn chế việc huỷ EC2) — Config là công cụ PHÁT HIỆN: nó đánh giá cấu hình có tuân thủ hay không, không ngăn được hành động nào.
-
D (dùng Systems Manager để hạn chế việc huỷ EC2) — SSM quản lý máy (chạy lệnh, vá lỗi, phiên làm việc), không kiểm soát vòng đời instance.
Ghi nhớ
⚠ Bốn cờ bảo vệ instance — bảng phải thuộc: | Cờ | Chặn gì | |---|---| | DisableApiTermination | chặn TerminateInstances qua API/console | | DisableApiStop | chặn StopInstances | | InstanceInitiatedShutdownBehavior | stop hay terminate khi shutdown từ trong máy | | DeleteOnTermination (trên volume) | giữ hay xoá EBS khi máy bị huỷ | | Mặc định | terminate protection TẮT, root volume DeleteOnTermination = true |
Từ khoá nhận diện:
"tránh huỷ nhầm máy quan trọng" → termination protection "giữ dữ liệu khi máy bị huỷ" →
DeleteOnTermination = false"chỉ vài người được huỷ máy" → IAM policy hoặc SCP "tránh xoá nhầm tài nguyên trong stack" →DeletionPolicy: Retain+ stack policy "tránh xoá nhầm đối tượng S3" → versioning + MFA Delete + Object Lock
| Ngăn xoá nhầm ở các dịch vụ khác | Cách |
|---|---|
| RDS | DeletionProtection, và snapshot cuối khi xoá |
| S3 | versioning, MFA Delete, Object Lock |
| CloudFormation | stack policy, DeletionPolicy: Retain, termination protection cho stack |
| KMS | thời gian chờ 7-30 ngày trước khi xoá khoá |
| EFS / DynamoDB | AWS Backup với vault lock |
| Route 53 | không xoá được hosted zone còn bản ghi |
| Bảo vệ bằng chính sách — mạnh hơn cờ | Nội dung |
|---|---|
IAM policy với aws:ResourceTag |
Deny ec2:TerminateInstances khi tag Critical=true |
| SCP | áp cho cả tài khoản, quản trị viên cũng không vượt qua |
| Kết hợp MFA | thêm điều kiện aws:MultiFactorAuthPresent |
| Lợi ích | không phụ thuộc vào việc ai đó nhớ bật cờ trên từng máy |
| Cờ termination protection và Auto Scaling | Nội dung |
|---|---|
| ASG KHÔNG bị chặn bởi cờ này | nó dùng cơ chế riêng |
| Muốn giữ một máy trong ASG | ProtectedFromScaleIn |
| Hoặc | đưa máy vào Standby |
| Ghi chú | máy quan trọng thường không nên nằm trong ASG |
| Phát hiện khi có người đụng vào máy quan trọng | Cách |
|---|---|
EventBridge bắt TerminateInstances, StopInstances |
lọc theo tag |
| CloudTrail | bằng chứng đầy đủ: ai, lúc nào, từ IP nào |
| Config rule | kiểm tra cờ bảo vệ có đang bật không |
| Alarm | báo ngay khi cờ bị TẮT — đó là dấu hiệu sắp có người huỷ máy |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Cờ đã bật chưa | describe-instance-attribute --attribute disableApiTermination | | Volume có bị xoá theo không | describe-instances --query '...BlockDeviceMappings' | | Ai đã huỷ máy | CloudTrail, tìm TerminateInstances |
Và một cách bảo vệ bền hơn nhiều so với việc bật cờ trên từng máy: một IAM policy hoặc SCP từ chối ec2:TerminateInstances với điều kiện aws:ResourceTag/Critical = true. Cờ trên instance phụ thuộc vào việc ai đó nhớ bật nó lúc tạo máy, còn một chính sách theo tag thì bảo vệ mọi máy mang tag đó, kể cả những máy được dựng ra vào tháng sau bởi một người chưa từng đọc quy trình này.
A media production company operates a suite of applications on Amazon EC2 instances. The company intends to transition these applications to container-based infrastructure using AWS Fargate within the next six months, after which it plans to fully decommission its EC2 instances. The company has a reliable projection of their future Fargate costs.
The SysOps administrator is tasked with selecting a cost-optimizing purchasing strategy that maximizes available discounts and ensures no reservations go unused.
What purchasing option should the SysOps administrator select?
-
A
Compute Savings Plans for 3 years with a Partial Upfront payment model.
-
B
Compute Savings Plans for 3 years with a No Upfront payment model.
-
C
EC2 Instance Savings Plans for 3 years with a Full Upfront payment model.
-
D
EC2 Reserved Instances for 3 years with a Partial Upfront payment model.
Xem giải thích
Đáp án
B — COMPUTE SAVINGS PLANS 3 năm, thanh toán NO UPFRONT.
Vì sao đúng
Đề có ba ràng buộc, và chỉ một tổ hợp thoả cả ba: chuyển từ EC2 sang Fargate, tối đa hoá giảm giá, và không để cam kết nào bị lãng phí.
⚠ Ràng buộc thứ nhất — sẽ chuyển sang Fargate:
Compute Savings Plans ← linh hoạt nhất
↓
Áp cho: EC2, FARGATE, LAMBDA
Mọi Region, mọi họ máy, mọi hệ điều hành
↓
→ 6 tháng đầu áp cho EC2
→ sau đó TỰ ĐỘNG áp cho Fargate
→ không phải mua lại, không phải đổi gì
↓
EC2 Instance Savings Plans / Reserved Instances
↓
KHOÁ vào một họ máy và một Region
↓
→ KHÔNG áp được cho Fargate
→ sau 6 tháng thành cam kết CHẾT
⚠ Ràng buộc thứ hai — tối đa hoá giảm giá:
Thời hạn 3 NĂM > 1 năm
↓
→ mức giảm sâu hơn đáng kể
↓
Và công ty đã DỰ BÁO ĐƯỢC chi phí Fargate
→ cam kết dài hạn là hợp lý
⚠ Ràng buộc thứ ba — không để cam kết bị lãng phí:
NO UPFRONT
↓
Không trả trước đồng nào
→ trả đều theo giờ trong suốt kỳ hạn
↓
→ không có khoản tiền nào bị "kẹt"
→ không có phần trả trước nào không dùng tới
Partial / All Upfront
↓
Trả trước một phần hoặc toàn bộ
→ giảm sâu hơn một chút
→ NHƯNG tiền đã trả rồi
→ nếu dùng không hết là mất
⚠ Cơ chế Savings Plans — điểm hay bị hiểu nhầm:
Bạn cam kết một mức CHI TIÊU MỖI GIỜ
(ví dụ: 10 USD/giờ)
↓
Mọi lượng dùng tới mức đó → giá SP (rẻ)
Vượt mức đó → giá On-Demand
↓
→ KHÔNG cam kết loại máy nào
→ KHÔNG cam kết số lượng máy
→ chỉ cam kết SỐ TIỀN mỗi giờ
Vì sao các phương án khác sai
-
A (Compute Savings Plans 3 năm, Partial Upfront) — đây là phương án gần nhất và loại Savings Plans hoàn toàn đúng, chỉ khác ở cách thanh toán. Partial Upfront giảm sâu hơn một chút, nhưng phần trả trước là tiền đã bỏ ra, trái với yêu cầu "không để reservation nào bị bỏ phí".
-
C (EC2 Instance Savings Plans 3 năm, Full Upfront) — sai nặng nhất: EC2 Instance SP không áp cho Fargate, nên sau sáu tháng cam kết ba năm này thành vô dụng, mà tiền thì đã trả toàn bộ.
-
D (EC2 Reserved Instances 3 năm, Partial Upfront) — RI chỉ áp cho EC2, không áp cho Fargate. Cũng thành cam kết chết sau sáu tháng.
Ghi nhớ
⚠ Ba loại Savings Plans — bảng phải thuộc: | Loại | Áp cho | Mức giảm | |---|---|---| | Compute Savings Plans | EC2, FARGATE, LAMBDA — mọi Region, mọi họ máy | tới 66% | | EC2 Instance Savings Plans | MỘT họ máy trong MỘT Region | tới 72% | | SageMaker Savings Plans | SageMaker | tới 64% | | Thời hạn | 1 hoặc 3 năm | 3 năm giảm sâu hơn | | Thanh toán | No / Partial / All Upfront | trả trước nhiều giảm sâu hơn |
Từ khoá nhận diện:
"sắp chuyển sang Fargate / Lambda" → Compute Savings Plans "tải cố định, chắc chắn không đổi" → EC2 Instance SP (giảm sâu hơn) "không muốn tiền bị kẹt" → No Upfront "cần bảo đảm CÓ máy" → Capacity Reservation hoặc Zonal RI, không phải SP "chịu được gián đoạn" → Spot
| Savings Plans ↔ Reserved Instances | Khác nhau |
|---|---|
| Cam kết | số TIỀN mỗi giờ ↔ số lượng instance cụ thể |
| Linh hoạt | rất cao (Compute SP) ↔ thấp hơn |
| Áp cho Fargate/Lambda | CÓ (Compute SP) ↔ KHÔNG |
| Bảo đảm năng lực | không ↔ Zonal RI thì CÓ |
| Bán lại | không |
| Khuyến nghị hiện nay | Savings Plans, trừ khi cần bảo đảm năng lực |
| Ba cách thanh toán | Đánh đổi |
|---|---|
| No Upfront | không trả trước, rủi ro thấp nhất — giảm ít nhất |
| Partial Upfront | trả trước một phần — cân bằng phổ biến nhất |
| All Upfront | trả hết — giảm sâu nhất, rủi ro cao nhất |
| Chọn No Upfront khi | tương lai chưa chắc chắn, hoặc không muốn khoá dòng tiền |
| Chiến lược mua sắm nhiều tầng | Nội dung |
|---|---|
| Phần nền ổn định | Savings Plans 3 năm |
| Phần dao động | On-Demand |
| Phần chịu gián đoạn được | Spot |
| Phần cần bảo đảm theo lịch | Capacity Reservation |
| Nguyên tắc | cam kết ở mức THẤP HƠN mức dùng tối thiểu, đừng cam kết theo đỉnh |
| Theo dõi hiệu quả Savings Plans | Chỉ số |
|---|---|
| Utilization | bao nhiêu phần cam kết đã dùng — nên gần 100% |
| Coverage | bao nhiêu phần chi tiêu đã được SP phủ |
| Recommendations | AWS gợi ý mức cam kết dựa trên lịch sử |
| Cảnh báo | Budgets cho Savings Plans utilization |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Đã dùng hết cam kết chưa | Cost Explorer → Savings Plans utilization report | | Còn bao nhiêu chi tiêu chưa phủ | coverage report | | Nên cam kết bao nhiêu | Savings Plans recommendations, chọn khung 7/30/60 ngày |
Và một nguyên tắc rất đáng nhớ khi chọn mức cam kết: cam kết theo mức chi tiêu THẤP NHẤT mà bạn chắc chắn sẽ dùng, không phải theo mức trung bình. Phần vượt lên trên vẫn được tính giá On-Demand bình thường, nên cam kết thấp mà dùng hết luôn tốt hơn cam kết cao rồi lãng phí — nhất là với một công ty đang trong giai đoạn chuyển đổi kiến trúc như trong đề.
An application uses an Amazon RDS Multi-AZ DB instance. Due to new security compliance requirements a SysOps Administrator needs to encrypt the database.
Which approach can the Administrator take to encrypt the database?
-
A
Use the RDS management console to enable encryption for the database.
-
B
Encrypt the standby replica in the secondary Availability Zone and promote it to the primary instance.
-
C
Create an encrypted read replica and promote the replica to master.
-
D
Take a snapshot of the RDS instance, copy and encrypt the snapshot, and then restore to the new RDS instance.
Xem giải thích
Đáp án
D — Chụp SNAPSHOT của instance, COPY snapshot có bật mã hoá, rồi khôi phục thành một instance MỚI.
Vì sao đúng
Có một quy tắc rất cứng của RDS quyết định câu này: không bật mã hoá cho một instance đã tồn tại.
⚠ Điểm mấu chốt — mã hoá RDS chỉ đặt được LÚC TẠO:
Mã hoá RDS
↓
Chỉ khai được KHI TẠO instance
↓
Không có nút "bật mã hoá" cho instance có sẵn
Không đổi được từ chưa mã hoá → đã mã hoá tại chỗ
↓
→ cách duy nhất: TẠO INSTANCE MỚI đã mã hoá
rồi chuyển dữ liệu sang
⚠ Quy trình bốn bước:
1. Chụp snapshot instance hiện tại
create-db-snapshot
↓
2. COPY snapshot, BẬT mã hoá trong lúc copy
copy-db-snapshot --kms-key-id <CMK>
↓
→ đây là bước "biến" dữ liệu chưa mã hoá
thành đã mã hoá
↓
3. Khôi phục snapshot đã mã hoá thành instance MỚI
restore-db-instance-from-db-snapshot
↓
4. Chuyển ứng dụng sang endpoint mới,
kiểm chứng, rồi xoá instance cũ
⚠ Giảm gián đoạn khi chuyển:
Cách đơn giản: chấp nhận gián đoạn
↓
Dừng ghi → snapshot → copy → restore → đổi endpoint
→ mất từ vài chục phút tới vài giờ
Cách gián đoạn tối thiểu: DÙNG AWS DMS
↓
Dựng instance mới đã mã hoá
→ DMS với CDC đồng bộ liên tục từ cũ sang mới
→ chuyển đổi chỉ trong vài giây
⚠ Và nhớ khai lại những thứ KHÔNG đi theo snapshot:
Khôi phục từ snapshot KHÔNG giữ:
↓
- Security group
- Parameter group
- Option group
- Cấu hình Multi-AZ
↓
→ phải khai lại, nếu không sẽ dùng giá trị mặc định
Vì sao các phương án khác sai
-
C (tạo read replica đã mã hoá rồi thăng cấp thành master) — đây là phương án gần nhất và nghe rất hợp lý, nhưng read replica phải CÙNG trạng thái mã hoá với instance chính: một instance chưa mã hoá không tạo được replica đã mã hoá.
-
B (mã hoá bản dự phòng ở AZ thứ hai rồi thăng cấp lên làm chính) — bản dự phòng Multi-AZ không phải một thực thể riêng để thao tác; bạn không truy cập, không cấu hình và không thăng cấp nó bằng tay được.
-
A (dùng console RDS để bật mã hoá cho CSDL) — không có tuỳ chọn này. Đây chính là điểm mà câu hỏi kiểm tra.
Ghi nhớ
⚠ Mã hoá RDS — bảng phải thuộc: | Đặc điểm | Nội dung | |---|---| | Bật lúc nào | CHỈ khi TẠO instance | | Bật cho instance có sẵn | snapshot → copy CÓ mã hoá → khôi phục | | Tắt mã hoá | KHÔNG BAO GIỜ được | | Phạm vi | dữ liệu, log, sao lưu, snapshot, read replica | | Read replica | phải cùng trạng thái mã hoá với instance chính | | Khoá | AWS managed (aws/rds) hoặc customer managed |
Từ khoá nhận diện:
"mã hoá một CSDL đã tồn tại" → snapshot → copy có mã hoá → restore "chia sẻ snapshot mã hoá sang tài khoản khác" → BẮT BUỘC dùng CMK, và chia sẻ khoá "mã hoá khi truyền" → bật SSL/TLS trong parameter group "chuyển đổi mà gián đoạn tối thiểu" → AWS DMS với CDC "mã hoá EBS đã tồn tại" → cùng cách: snapshot → copy mã hoá → volume mới
| Mã hoá tại chỗ — những dịch vụ KHÔNG làm được | Nội dung |
|---|---|
| RDS | phải tạo instance mới |
| EBS | phải tạo volume mới từ snapshot đã mã hoá |
| Redshift | thay đổi được, nhưng cụm sẽ được ghi lại toàn bộ |
| S3 | bật được cho ghi mới; tệp cũ phải copy đè (S3 Batch Operations) |
| EFS | phải tạo file system mới, dùng DataSync để chuyển |
| DynamoDB | bật/tắt được trên bảng đang chạy |
| Chuyển đổi mà gián đoạn tối thiểu | Bước |
|---|---|
| 1 | Dựng instance MỚI đã mã hoá từ snapshot |
| 2 | AWS DMS với CDC đồng bộ liên tục từ cũ sang mới |
| 3 | Kiểm chứng dữ liệu bằng DMS data validation |
| 4 | Cửa sổ chuyển đổi ngắn: dừng ghi, chờ CDC đuổi kịp |
| 5 | Đổi endpoint trong ứng dụng (hoặc dùng bản ghi Route 53 CNAME) |
| 6 | Theo dõi rồi mới xoá instance cũ |
| Khôi phục từ snapshot — nhớ khai lại | Nội dung |
|---|---|
| Security group | mặc định sẽ là SG mặc định của VPC |
| Parameter group | mọi tinh chỉnh tham số sẽ mất |
| Option group | tính năng bổ sung của động cơ |
| Multi-AZ | phải bật lại |
| Endpoint | luôn là endpoint MỚI |
| Hiệu năng ban đầu | volume mới cần thời gian khởi động từ snapshot |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Instance đã mã hoá chưa | describe-db-instances --query '...StorageEncrypted' | | Dùng khoá nào | trường KmsKeyId | | Dữ liệu có đủ không | so số bản ghi các bảng chính giữa cũ và mới |
Và một lưu ý về lựa chọn khoá ngay ở bước copy snapshot: nếu có bất kỳ khả năng nào phải chia sẻ snapshot sang tài khoản khác, hãy dùng customer managed key ngay từ đầu. Snapshot mã hoá bằng khoá mặc định aws/rds không chia sẻ liên tài khoản được, và phát hiện điều đó sau khi đã hoàn tất cả quá trình chuyển đổi nghĩa là phải làm lại toàn bộ từ đầu.
An Amazon EBS volume attached to an Amazon EC2 instance running a database and is encrypted using AWS KMS customer-managed customer master keys (CMKs). A SysOps Administrator wants to rotate the AWS KMS keys using automatic key rotation and needs to ensure that the EBS volume encrypted with the current key remains readable.
What should be done to accomplish this?
-
A
Create a new data key in KMS and assign the key to Amazon EBS.
-
B
Create a new customer master key in KMS and enable rotation.
-
C
Enable automatic key rotation of the customer master key in KMS.
-
D
Back up the current KMS data key and enable automatic key rotation.
Xem giải thích
Đáp án
C — Bật XOAY KHOÁ TỰ ĐỘNG trên chính customer master key đang dùng.
Vì sao đúng
Yêu cầu có hai vế: xoay khoá tự động, và volume đang mã hoá vẫn đọc được. Cơ chế xoay của KMS thoả cả hai một cách tự nhiên.
⚠ Điểm mấu chốt — xoay giữ lại vật liệu khoá CŨ:
Bật automatic key rotation trên CMK
↓
KMS sinh VẬT LIỆU KHOÁ MỚI mỗi 365 ngày
↓
Vật liệu khoá CŨ được GIỮ LẠI vô thời hạn
↓
→ dữ liệu mã hoá bằng vật liệu cũ
VẪN GIẢI MÃ ĐƯỢC
→ dữ liệu mới dùng vật liệu mới
↓
KEY ID và ARN KHÔNG ĐỔI
↓
→ EBS không phải cấu hình lại gì
→ volume vẫn đọc ghi bình thường
⚠ Và với EBS thì còn một tầng nữa — envelope encryption:
CMK (khoá gốc, nằm trong KMS)
↓
Sinh ra DATA KEY cho volume
↓
Data key được CMK mã hoá và lưu kèm volume
↓
Khi máy dùng volume:
KMS giải mã data key bằng CMK
→ hypervisor dùng data key để mã hoá/giải mã
↓
Xoay CMK KHÔNG đổi data key của volume cũ
↓
→ volume vẫn dùng đúng data key của nó
→ hoàn toàn trong suốt với ứng dụng
⚠ Nếu tuân thủ đòi dữ liệu cũ phải dùng khoá MỚI:
Xoay tự động KHÔNG mã hoá lại dữ liệu cũ
↓
Muốn mã hoá lại thì phải:
snapshot → copy với khoá mới → volume mới
↓
→ nhưng đề KHÔNG đòi điều đó
→ đề chỉ đòi "vẫn đọc được"
Xem thêm câu #11873 (lô 128): cùng chủ đề xoay khoá KMS, ở đó trọng tâm là chọn customer managed key thay vì AWS managed key để đáp ứng yêu cầu tuân thủ.
Vì sao các phương án khác sai
-
B (tạo một CMK mới trong KMS và bật xoay trên khoá mới) — đây là phương án gần nhất và cũng là một cách xoay khoá hợp lệ (xoay thủ công), nhưng nó không cần thiết ở đây và tạo thêm việc: volume cũ vẫn gắn với CMK cũ, nên bạn phải mã hoá lại toàn bộ mới dùng được khoá mới.
-
A (tạo data key mới trong KMS rồi gán cho EBS) — không gán data key thủ công cho EBS được. Data key do EBS và KMS quản lý tự động ở tầng bên dưới.
-
D (sao lưu data key hiện tại rồi bật xoay tự động) — bạn không truy cập được data key của volume; nó nằm ở dạng đã mã hoá trong siêu dữ liệu của volume, và không có thao tác "sao lưu" nào.
Ghi nhớ
⚠ Xoay khoá KMS — những điều phải nhớ chính xác: | Đặc điểm | Nội dung | |---|---| | Chu kỳ | 365 ngày mặc định (đặt được 90-2560 ngày) | | Key ID / ARN | KHÔNG ĐỔI | | Vật liệu khoá cũ | GIỮ LẠI — dữ liệu cũ vẫn giải mã được | | Dữ liệu cũ | KHÔNG được mã hoá lại | | Chi phí | không tính thêm cho mỗi phiên bản | | Bật cho | CHỈ customer managed key — AWS managed key tự xoay, không điều khiển được |
Từ khoá nhận diện:
"xoay khoá mà dữ liệu cũ vẫn đọc được" → automatic key rotation "tuân thủ đòi xoay 365 ngày" → customer managed key + bật rotation "nghi khoá bị lộ" → xoay THỦ CÔNG + MÃ HOÁ LẠI dữ liệu "khoá phải do công ty sinh ra" → imported key material — KHÔNG xoay tự động được "mã hoá EBS đã tồn tại" → snapshot → copy có mã hoá → volume mới
⚠ Envelope encryption — mô hình nền tảng của KMS: | Tầng | Nội dung | |---|---| | CMK | nằm trong KMS, KHÔNG BAO GIỜ rời khỏi dịch vụ | | Data key | khoá thật dùng để mã hoá dữ liệu | | Cách lưu | data key được CMK mã hoá rồi lưu KÈM dữ liệu | | Khi đọc | KMS giải mã data key → dịch vụ dùng nó | | Vì sao thế | KMS không xử lý dữ liệu lớn — chỉ xử lý khoá | | Giới hạn | Encrypt/Decrypt trực tiếp chỉ tới 4 KB |
| Xoay tự động ↔ Xoay thủ công | Khác nhau |
|---|---|
| Tự động | KMS sinh vật liệu mới, key ID không đổi |
| Thủ công | tạo CMK MỚI, trỏ ALIAS sang khoá mới |
| Dữ liệu cũ (tự động) | vẫn đọc được, không phải làm gì |
| Dữ liệu cũ (thủ công) | vẫn dùng khoá cũ — phải mã hoá lại nếu cần |
| Dùng thủ công khi | khoá bị lộ, hoặc cần đổi loại khoá |
| Không hỗ trợ xoay tự động | Loại khoá |
|---|---|
| Imported key material | phải tự nhập vật liệu mới |
| Khoá bất đối xứng | RSA, ECC |
| Custom key store (CloudHSM) | |
| AWS managed key | AWS tự xoay, bạn không bật/tắt được |
| Bảo vệ khoá quan trọng | Cách |
|---|---|
| Key policy | nguồn quyền chính — IAM policy một mình không đủ |
| Alias | alias/prod-ebs — trỏ lại được sang khoá khác |
| Xoá khoá | thời gian chờ 7-30 ngày, huỷ được |
Alarm trên ScheduleKeyDeletion |
bắt buộc nên có |
| CloudTrail | ghi mọi Decrypt, GenerateDataKey |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Xoay đã bật chưa | get-key-rotation-status --key-id ... | | Đã xoay bao nhiêu lần | list-key-rotations | | Volume dùng khoá nào | describe-volumes --query '...KmsKeyId' |
Và một điều đáng nói rõ với người phụ trách tuân thủ: xoay khoá tự động của KMS làm mới vật liệu khoá, nhưng không mã hoá lại dữ liệu đã có. Với hầu hết khung tuân thủ thì như vậy là đủ — yêu cầu đặt ra là khoá phải được làm mới định kỳ. Nhưng nếu kiểm toán viên đòi dữ liệu cũ cũng phải được bảo vệ bằng vật liệu khoá mới nhất, bạn sẽ cần một quy trình mã hoá lại riêng, và đó là một dự án chứ không phải một công tắc.
A company uses AWS Service Catalog to manage approved services. A new AWS account has been created and a SysOps Administrator needs to create a replica of the company's existing AWS infrastructure in the new AWS account. Currently, an AWS Service Catalog portfolio is used to create and manage resources.
What is the MOST efficient way to accomplish this?
-
A
Run an AWS Lambda function to create a new AWS Service Catalog portfolio based on the output of the DescribePortfolio API operation.
-
B
Create an AWS CloudFormation template to redeploy the AWS Service Catalog portfolio in the new AWS account.
-
C
Share the AWS Service Catalog portfolio with the other AWS account and import the portfolio into the AWS account.
-
D
Manually create an AWS Service Catalog portfolio in the new AWS account and recreate the original portfolio.
Xem giải thích
Đáp án
C — CHIA SẺ portfolio Service Catalog với tài khoản mới, rồi NHẬP portfolio đó vào tài khoản.
Vì sao đúng
Service Catalog có sẵn cơ chế chia sẻ, nên không cần dựng lại bất cứ thứ gì.
⚠ Điểm mấu chốt — chia sẻ giữ MỘT nguồn sự thật duy nhất:
Chia sẻ portfolio
↓
Portfolio vẫn THUỘC tài khoản gốc
↓
Tài khoản mới NHẬP và dùng
↓
Chủ sở hữu cập nhật một sản phẩm
↓
→ thay đổi TỰ ĐỘNG lan tới MỌI tài khoản nhận
→ không phải đồng bộ thủ công
→ không có chuyện mỗi nơi một phiên bản
⚠ Hai cách chia sẻ — cách thứ hai gần như luôn tốt hơn:
Chia sẻ theo TÀI KHOẢN
↓
create-portfolio-share --account-id 111122223333
↓
Bên nhận phải TỰ NHẬP (accept + import)
→ mỗi tài khoản mới là một lần thao tác
Chia sẻ qua ORGANIZATIONS ← khuyến nghị
↓
create-portfolio-share --organization-node
Type=ORGANIZATIONAL_UNIT,Value=ou-xxxx
↓
→ chia sẻ với cả một OU
→ TÀI KHOẢN MỚI vào OU TỰ CÓ portfolio
→ không thao tác gì thêm
⚠ Nhưng nhớ: launch role phải TỒN TẠI ở tài khoản nhận:
Launch constraint khai một IAM role
↓
Role đó phải CÓ ở tài khoản nơi sản phẩm chạy
↓
→ dùng StackSets hoặc CloudFormation
để dựng sẵn role đó ở mọi tài khoản
↓
Thiếu role → sản phẩm khởi chạy thất bại
Xem thêm câu #11891 (cùng lô): nói rõ bên NHẬN làm được gì và KHÔNG làm được gì với một portfolio được chia sẻ — chỉ dùng, không sửa.
Vì sao các phương án khác sai
-
B (viết CloudFormation template để triển khai lại portfolio ở tài khoản mới) — đây là phương án gần nhất và về kỹ thuật thì làm được (Service Catalog có kiểu tài nguyên CloudFormation), nhưng nó tạo ra một bản SAO ĐỘC LẬP: từ đó trở đi hai bản sẽ trôi dạt khỏi nhau, và mỗi lần cập nhật sản phẩm là phải triển khai lại ở mọi nơi.
-
A (dùng Lambda gọi
DescribePortfoliorồi dựng portfolio mới) — tự viết lại cơ chế đã có sẵn, kèm mã phải bảo trì và vẫn tạo ra bản sao độc lập. -
D (tạo tay portfolio ở tài khoản mới và dựng lại từ đầu) — nhiều công nhất, dễ sai nhất, và hoàn toàn không mở rộng được khi có thêm tài khoản.
Ghi nhớ
⚠ Chia sẻ tài nguyên giữa các tài khoản — bảng đáng thuộc: | Tài nguyên | Cách chia sẻ | |---|---| | Service Catalog portfolio | create-portfolio-share — theo tài khoản hoặc theo OU | | Subnet, Transit Gateway, Route 53 Resolver rule | AWS RAM (Resource Access Manager) | | AMI, EBS snapshot, RDS snapshot | modify-*-attribute thêm account id | | KMS key | key policy | | S3 bucket | bucket policy hoặc Access Point | | Secrets Manager secret | resource policy |
Từ khoá nhận diện:
"nhân bản hạ tầng chuẩn sang tài khoản mới" → chia sẻ portfolio "tài khoản mới TỰ ĐỘNG có" → chia sẻ qua Organizations theo OU "chia sẻ subnet, Transit Gateway" → AWS RAM "triển khai stack ra nhiều tài khoản" → CloudFormation StackSets "dựng cả một landing zone" → Control Tower
| Bộ ba quản trị nhiều tài khoản | Dịch vụ |
|---|---|
| Service Catalog | phát hành hạ tầng ĐÃ DUYỆT cho các đội tự phục vụ |
| StackSets | triển khai hạ tầng NỀN ra mọi tài khoản (role, luật Config, log) |
| Control Tower | dựng landing zone, Account Factory, guardrail |
| Kết hợp | StackSets dựng nền → Service Catalog cho đội dùng |
| Quy trình chia sẻ portfolio — các bước | Bước |
|---|---|
| 1 | Bật trusted access giữa Service Catalog và Organizations |
| 2 | create-portfolio-share với --organization-node |
| 3 | Bên nhận: portfolio hiện ra ở Imported portfolios |
| 4 | Bên nhận cấp quyền cho người dùng của mình |
| 5 | Dựng sẵn launch role ở tài khoản nhận (qua StackSets) |
| 6 | Kiểm chứng bằng cách khởi chạy thử một sản phẩm |
| Điều bên nhận KHÔNG làm được — nhắc lại | Nội dung |
|---|---|
| Thêm/xoá sản phẩm khỏi portfolio đã nhập | chỉ chủ sở hữu |
| Sửa template của sản phẩm | chỉ chủ sở hữu |
| Đổi launch role trong portfolio đã nhập | chỉ chủ sở hữu |
| Làm được | thêm sản phẩm vào portfolio CỤC BỘ của mình, cấp quyền cho người dùng của mình |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Đã chia sẻ với ai | describe-portfolio-shares | | Bên nhận thấy gì | ở tài khoản đó: list-accepted-portfolio-shares | | Khởi chạy có chạy không | thử một sản phẩm — thường hỏng vì thiếu launch role |
Và một bước rất hay bị bỏ sót khi mở rộng ra tài khoản mới: dựng sẵn IAM launch role ở tài khoản nhận trước khi ai đó thử khởi chạy sản phẩm. Portfolio sẽ hiện ra đầy đủ, danh sách sản phẩm trông hoàn toàn bình thường, và lỗi chỉ xuất hiện ở lần khởi chạy đầu tiên — thường là bởi một người dùng cuối không có cách nào tự hiểu vì sao.
A SysOps administrator manages a resilient system architecture. The infrastructure includes Amazon EC2 instances and an Amazon RDS Multi-AZ database setup. The EC2 instances are behind an Application Load Balancer in an Auto Scaling group.
The company recently performed a system failover test. The SysOps administrator is tasked with reducing the failover time of the RDS database.
Which approach would meet these criteria?
-
A
Add more CPU and memory to the RDS database instance.
-
B
Configure the RDS DB to operate within a single Availability Zone.
-
C
Configure the RDS Multi-AZ deployment to run across AWS Regions.
-
D
Create an RDS Proxy and direct the application towards the proxy endpoint.
Xem giải thích
Đáp án
D — Tạo RDS PROXY và trỏ ứng dụng tới endpoint của proxy.
Vì sao đúng
Yêu cầu là giảm THỜI GIAN FAILOVER của CSDL, và RDS Proxy có đúng tính năng đó.
⚠ Điểm mấu chốt — phần lớn thời gian failover nằm ở phía CLIENT:
Failover Multi-AZ không có proxy
↓
1. RDS phát hiện sự cố, thăng cấp standby ~30-60 giây
2. Bản ghi DNS của endpoint được cập nhật
3. CLIENT phải chờ HẾT DNS TTL rồi mới
phân giải lại ← chỗ tốn thời gian
4. Kết nối cũ trong pool đều hỏng,
ứng dụng phải mở lại từ đầu
↓
Tổng: thường 60-120 giây, có khi lâu hơn
(JVM cache DNS vĩnh viễn theo mặc định)
⚠ Có proxy thì client không phải biết gì cả:
Ứng dụng luôn kết nối tới ENDPOINT CỦA PROXY
↓
Endpoint này KHÔNG ĐỔI khi failover
↓
Proxy tự phát hiện failover
→ tự kết nối lại tới node chính MỚI
→ GIỮ nguyên kết nối phía ứng dụng
↓
→ AWS công bố giảm thời gian failover
TỚI 66%
→ và ứng dụng không phải xử lý DNS gì
⚠ Proxy còn giải thêm hai bài toán:
Gộp kết nối (connection pooling)
↓
→ hết "too many connections"
Xác thực qua Secrets Manager
↓
→ mật khẩu không nằm trong ứng dụng
→ xoay mật khẩu không làm đứt kết nối
Xem thêm câu #11893 (cùng lô): cũng là RDS Proxy, ở đó dùng để giải bài toán "too many connections". Cùng một dịch vụ, hai lợi ích khác nhau — khoá nhất quán.
Vì sao các phương án khác sai
-
C (cấu hình Multi-AZ chạy qua nhiều Region) — đây là phương án gần nhất về ý tưởng "làm cho dự phòng mạnh hơn", nhưng Multi-AZ theo định nghĩa là trong MỘT Region. Muốn dự phòng đa Region thì phải dùng read replica xuyên Region hoặc Aurora Global Database — và cả hai failover CHẬM HƠN, không nhanh hơn.
-
A (thêm CPU và bộ nhớ cho instance) — không ảnh hưởng tới thời gian failover. Thời gian đó do cơ chế phát hiện, thăng cấp và DNS quyết định, không phải do cỡ máy.
-
B (chuyển CSDL về chạy trong MỘT Availability Zone) — bỏ luôn khả năng failover, đi ngược hoàn toàn với mục tiêu của một kiến trúc chịu lỗi.
Ghi nhớ
⚠ Thời gian failover của các lựa chọn — bảng phải thuộc: | Cấu hình | Thời gian failover | |---|---| | RDS Multi-AZ (instance) | 60-120 giây | | RDS Multi-AZ + RDS Proxy | giảm tới 66% | | RDS Multi-AZ DB Cluster | dưới 35 giây | | Aurora | thường dưới 30 giây | | Aurora Global Database | RTO dưới 1 phút (failover có kế hoạch), lâu hơn khi mất Region | | Single-AZ | không có failover |
Từ khoá nhận diện:
"giảm thời gian failover" → RDS Proxy, hoặc chuyển sang Aurora "too many connections" → RDS Proxy "chịu được mất cả một Region" → Aurora Global Database, cross-Region replica "ứng dụng kẹt sau failover" → DNS cache của JVM "tải ĐỌC cao" → read replica
| Vì sao ứng dụng Java hay kẹt lâu sau failover | Nội dung |
|---|---|
| JVM cache DNS VĨNH VIỄN theo mặc định | networkaddress.cache.ttl = -1 |
| Hậu quả | ứng dụng gọi mãi vào IP CŨ rất lâu sau khi CSDL đã khoẻ |
| Cách sửa | đặt networkaddress.cache.ttl = 5 (giây) |
| Hoặc | dùng RDS Proxy — endpoint không đổi, không phụ thuộc DNS |
| Kiểm chứng | chủ động failover ở staging, đo thời gian ứng dụng phục hồi |
| RDS Proxy — cần biết | Nội dung |
|---|---|
| Hỗ trợ | MySQL, PostgreSQL, MariaDB, SQL Server; RDS và Aurora |
| Xác thực | BẮT BUỘC qua Secrets Manager |
| Chi phí | theo vCPU của instance CSDL, mỗi giờ |
| Mạng | trong VPC, có security group riêng |
| Endpoint | read/write, và read-only với Aurora |
| Lợi ích | gộp kết nối + failover nhanh + không lưu mật khẩu trong ứng dụng |
| Chuẩn bị ứng dụng cho failover | Danh sách |
|---|---|
| Dùng endpoint, không dùng IP | luôn luôn |
| TTL DNS ngắn | quan trọng nhất với JVM |
| Thử lại có backoff | mọi truy vấn phải chịu được đứt ngắn |
| Timeout hợp lý | đừng để kết nối treo vô hạn |
| Kiểm thử định kỳ | reboot-db-instance --force-failover |
| Theo dõi | sự kiện RDS qua SNS |
| Nguyên nhân failover — nhắc lại | Nội dung |
|---|---|
| Mất AZ hoặc mất node chính | |
| Lỗi lưu trữ trên node chính | |
| Đổi loại instance | AWS cố ý failover để giảm gián đoạn |
| Vá hệ điều hành / động cơ | |
| KHÔNG gây failover | tải cao, dữ liệu hỏng |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Failover mất bao lâu thật | chủ động failover ở staging, đo từ log ứng dụng | | Proxy có hoạt động không | describe-db-proxies, và chỉ số DatabaseConnections | | Ứng dụng phục hồi sau bao lâu | đếm số lỗi trong log từ lúc failover tới lúc hết |
Và một phép đo rất đáng làm trước khi kết luận đã cải thiện: đo thời gian phục hồi từ phía ỨNG DỤNG, không phải từ phía CSDL. RDS có thể báo failover xong trong 40 giây, nhưng nếu ứng dụng còn mất thêm hai phút để nhận ra và mở lại kết nối thì người dùng vẫn chịu một sự cố hơn hai phút — và chính khoảng chênh lệch đó là thứ RDS Proxy loại bỏ.
A SysOps Administrator manages an application running on an Auto Scaling group of Amazon EC2 instances behind an Application Load Balancer (ALB). The database layer uses Amazon RDS MySQL with an Amazon ElastiCache for Memcached cluster as a caching layer. The SysOps Administrator must perform all system patching at 10pm on a Wednesday.
Which resources require the configuration of a maintenance window? (Select TWO.)
-
A
Amazon ElastiCache cluster
-
B
Amazon RDS instance
-
C
Elastic Load Balancer
-
D
Amazon EC2 instances
-
E
Amazon EC2 Auto Scaling
Xem giải thích
Đáp án
A và B — Cụm Amazon ElastiCache và instance Amazon RDS.
Vì sao đúng
Chỉ những dịch vụ ĐƯỢC QUẢN LÝ mà AWS tự vá mới có khái niệm cửa sổ bảo trì.
⚠ Điểm mấu chốt — cửa sổ bảo trì tồn tại ở đâu:
Dịch vụ được quản lý — AWS TỰ VÁ
↓
RDS / Aurora
ElastiCache
Redshift, DocumentDB, Neptune,
OpenSearch, MSK, DMS…
↓
→ AWS cần một khung giờ được phép
áp bản vá và bảo trì
→ đó là MAINTENANCE WINDOW
↓
Dịch vụ bạn tự quản — BẠN vá
↓
EC2 → dùng SSM Patch Manager, tự đặt lịch
↓
Dịch vụ không có gì để vá
↓
ELB, Auto Scaling → AWS lo hoàn toàn,
trong suốt với bạn, KHÔNG có cửa sổ nào
⚠ Cửa sổ bảo trì của RDS và ElastiCache:
Khai theo giờ UTC, dạng:
ddd:hh24:mi-ddd:hh24:mi
↓
Ví dụ: wed:15:00-wed:16:00
(22:00-23:00 giờ Việt Nam thứ Tư)
↓
Tối thiểu 30 phút
↓
Không đặt → AWS tự chọn một khung
ngẫu nhiên trong khối 8 giờ của Region
⚠ Và với EC2 thì cơ chế hoàn toàn khác:
Systems Manager MAINTENANCE WINDOW
↓
Bạn tự tạo, tự đặt lịch cron
Gắn task: Patch Manager, Run Command…
Chọn target theo tag hoặc patch group
Đặt concurrency và error threshold
↓
→ về hình thức cũng gọi là "maintenance window"
nhưng thuộc SSM, không phải thuộc EC2
→ và đề hỏi "tài nguyên nào CẦN cấu hình
cửa sổ bảo trì" theo nghĩa của dịch vụ
Vì sao các phương án khác sai
-
D (Amazon EC2 instances) — đây là phương án gần nhất và cũng cần vá thật, nhưng EC2 không có thuộc tính "maintenance window": việc vá do bạn làm, thường qua SSM Patch Manager với maintenance window của SSM, một cơ chế riêng biệt.
-
C (Elastic Load Balancer) — AWS quản lý hoàn toàn, tự vá và tự mở rộng trong suốt, không có cửa sổ nào để cấu hình.
-
E (Amazon EC2 Auto Scaling) — là một dịch vụ điều phối, không có phần mềm nào chạy để mà vá.
Ghi nhớ
⚠ Ai vá cái gì — bảng phải thuộc: | Tài nguyên | Ai vá | Có cửa sổ bảo trì | |---|---|---| | RDS / Aurora | AWS | CÓ | | ElastiCache | AWS | CÓ | | Redshift, DocumentDB, Neptune, OpenSearch | AWS | có | | EC2 (hệ điều hành) | BẠN | không — dùng SSM Patch Manager | | ELB, Auto Scaling, S3, Lambda | AWS | không có gì để cấu hình | | Fargate | AWS | không |
Từ khoá nhận diện:
"cửa sổ bảo trì cho CSDL / cache" → RDS và ElastiCache "vá hệ điều hành EC2" → SSM Patch Manager + maintenance window của SSM "vá mà không gián đoạn" → giảm concurrency, hoặc golden AMI + instance refresh "ai chịu trách nhiệm vá" → mô hình trách nhiệm chia sẻ "bảo trì theo lịch của AWS trên một EC2" → stop/start để tránh
| Cửa sổ bảo trì của RDS — chi tiết | Nội dung |
|---|---|
| Định dạng | ddd:hh24:mi-ddd:hh24:mi, theo UTC |
| Độ dài tối thiểu | 30 phút |
| Việc gì diễn ra | vá động cơ CSDL, vá hệ điều hành, đổi cỡ đã lên lịch |
| Multi-AZ | vá node dự phòng trước, failover, rồi vá node kia |
| Xem trước | describe-pending-maintenance-actions |
| Áp ngay | apply-pending-maintenance-action |
| Có bắt buộc không | một số bản vá bảo mật AWS sẽ áp dù bạn hoãn |
| Cửa sổ sao lưu ↔ cửa sổ bảo trì — đừng lẫn | Nội dung |
|---|---|
| Backup window | khi nào chụp snapshot tự động |
| Maintenance window | khi nào áp bản vá |
| Ràng buộc | hai cửa sổ KHÔNG được chồng lấn |
| Đều khai theo | giờ UTC |
| Vá EC2 với SSM — nhắc lại | Nội dung |
|---|---|
| Patch baseline | bản vá nào được duyệt, ApprovalDelay |
| Patch group | gắn bằng tag Patch Group |
| Maintenance window | lịch cron + concurrency + error threshold |
| Compliance | báo cáo máy nào còn thiếu bản vá |
| Giảm ảnh hưởng | đặt concurrency 10%, rút khỏi target group trước khi vá |
| Giảm gián đoạn khi AWS vá CSDL | Cách |
|---|---|
| Dùng Multi-AZ | vá standby trước, chỉ gián đoạn lúc failover |
| Đặt cửa sổ vào giờ thấp điểm | theo múi giờ người dùng thật |
| Ứng dụng phải thử lại | mọi truy vấn chịu được đứt ngắn |
| RDS Proxy | giảm thời gian ứng dụng cảm nhận được |
| Theo dõi | sự kiện RDS qua SNS để biết khi nào sắp có bảo trì |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Cửa sổ hiện tại là khi nào | describe-db-instances --query '...PreferredMaintenanceWindow' | | Có bản vá nào đang chờ | describe-pending-maintenance-actions | | Cửa sổ của ElastiCache | describe-cache-clusters --query '...PreferredMaintenanceWindow' |
Và một sai lầm rất dễ mắc khi đặt cửa sổ bảo trì: quên rằng nó khai theo giờ UTC. Một đội muốn vá lúc 22 giờ đêm giờ Việt Nam mà gõ thẳng wed:22:00-wed:23:00 sẽ vô tình đặt lịch bảo trì vào 5 giờ sáng hôm sau giờ Việt Nam — vẫn là giờ thấp điểm nên không ai để ý, cho tới ngày đầu tiên có một đợt bảo trì kéo dài.
Users in a company have reported issues connecting to an application server running on an Amazon EC2 instance using it’s DNS hostname and a custom port (8121). The DNS name resolves to a private IP address within the Amazon VPC.
Which log type will confirm whether users are trying to connect to the correct port?
-
A
AWS CloudTrail logs
-
B
VPC Flow Logs
-
C
Elastic Load Balancer access logs
-
D
Amazon S3 access logs
Xem giải thích
Đáp án
B — VPC FLOW LOGS.
Vì sao đúng
Câu hỏi rất cụ thể: người dùng có đang kết nối tới ĐÚNG CỔNG hay không. Flow log ghi lại cổng đích của từng luồng.
⚠ Điểm mấu chốt — flow log có trường cổng đích:
Mỗi bản ghi flow log chứa:
↓
srcaddr → ai gọi
dstaddr → gọi tới máy nào
srcport → cổng nguồn (ngẫu nhiên, dải cao)
dstport → CỔNG ĐÍCH ← trường cần
protocol → 6 = TCP
action → ACCEPT / REJECT
↓
Lọc theo IP riêng của máy, xem dstport:
↓
thấy 8121 → người dùng gọi ĐÚNG cổng
thấy 80 hay 443 → gọi SAI cổng
không thấy gì → gói KHÔNG TỚI được VPC
⚠ Ba kịch bản và cách đọc:
dstport = 8121, action = ACCEPT
↓
→ mạng thông, vấn đề nằm ở ỨNG DỤNG
(dịch vụ chưa chạy, nghe sai địa chỉ)
dstport = 8121, action = REJECT
↓
→ security group chưa mở cổng 8121
→ hoặc NACL chặn
dstport = 80 hoặc 443
↓
→ người dùng gõ thiếu cổng trong URL
→ đúng nguyên nhân mà đề nghi ngờ
⚠ Và một chi tiết trong đề đáng chú ý:
"DNS phân giải ra IP RIÊNG trong VPC"
↓
→ người dùng phải ở TRONG mạng của công ty
(qua VPN hoặc Direct Connect)
↓
Nếu họ ở ngoài internet
→ tên miền phân giải ra IP riêng
→ không định tuyến được
→ cũng là một nguyên nhân đáng kiểm tra
Xem thêm câu #11848, #11835, #11872 (lô 128) và #11881 (cùng lô): chùm VPC Flow Logs — đọc phán quyết ACCEPT/REJECT, tìm nguồn lưu lượng lớn, chẩn đoán sau khi đổi cấu hình mạng, và chặn một IP.
Vì sao các phương án khác sai
-
A (AWS CloudTrail logs) — đây là phương án gần nhất vì cũng là log của AWS, nhưng CloudTrail ghi lời gọi API tới mặt phẳng điều khiển. Việc một người dùng mở kết nối TCP tới cổng 8121 không phải là một lời gọi API, nên không có bản ghi nào.
-
C (Elastic Load Balancer access logs) — không có load balancer nào trong tình huống này: đề nói người dùng kết nối thẳng tới instance qua tên DNS của nó.
-
D (Amazon S3 access logs) — ghi request tới bucket S3, hoàn toàn không liên quan.
Ghi nhớ
⚠ Chọn đúng log cho đúng câu hỏi — bảng phải thuộc: | Câu hỏi | Log | |---|---| | Kết nối tới cổng nào, có bị chặn không | VPC Flow Logs | | Mã trạng thái HTTP | ALB / CloudFront access log | | Ai gọi API nào | CloudTrail | | Ứng dụng in ra gì | CloudWatch Logs | | Truy vấn DNS nào được thực hiện | Route 53 Resolver query log | | Cấu hình đã đổi thế nào | AWS Config timeline |
Từ khoá nhận diện:
"đúng cổng hay không", "gói bị chặn ở đâu" → VPC Flow Logs "mã lỗi 5xx" → ALB access log "ai đã sửa security group" → CloudTrail "tên miền phân giải ra gì" → Route 53 Resolver query log "đường đi có thông không" → VPC Reachability Analyzer
| Các trường flow log — nhắc lại thứ tự | Nội dung |
|---|---|
srcaddr / dstaddr |
IP nguồn và đích |
srcport / dstport |
cổng — trường cần cho câu này |
protocol |
6 = TCP, 17 = UDP, 1 = ICMP |
packets / bytes |
khối lượng |
action |
ACCEPT / REJECT |
log-status |
OK / NODATA / SKIPDATA |
| Truy vấn Logs Insights cho tình huống này | Nội dung |
|---|---|
| Lọc theo máy | filter dstAddr = "10.0.1.25" |
| Xem cổng nào được gọi | stats count(*) by dstPort |
| Xem bị chặn không | stats count(*) by action, dstPort |
| Xem ai gọi | stats count(*) by srcAddr |
| Khối lượng lớn | đổ log ra S3 và dùng Athena |
| Chẩn đoán kết nối tới một cổng tuỳ chỉnh | Bước |
|---|---|
| 1 | Flow log: gói có tới không, cổng nào, ACCEPT hay REJECT |
| 2 | Security group: có luật inbound cho cổng 8121 chưa |
| 3 | NACL: cả hai chiều, nhớ cổng tạm ở chiều ra |
| 4 | Trên máy: ss -tlnp — dịch vụ có nghe ở cổng đó không |
| 5 | Dịch vụ nghe ở 0.0.0.0 hay chỉ 127.0.0.1 |
| 6 | Route từ mạng người dùng tới VPC (VPN/Direct Connect) |
| Ba loại lỗi kết nối — nhắc lại | Nội dung |
|---|---|
| Timeout | gói bị bỏ im lặng — SG, NACL, route |
| Connection refused | tới máy nhưng không ai nghe cổng đó |
| Sai giao thức | kết nối được nhưng không nói chuyện được |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Người dùng gọi cổng nào | Flow Logs, stats count(*) by dstPort | | Dịch vụ có nghe không | trên máy: ss -tlnp | grep 8121 | | Đường đi có thông không | VPC Reachability Analyzer |
Và một bước kiểm tra rất nhanh nên làm song song với việc đọc log: chạy ss -tlnp ngay trên chính máy đó. Rất thường xuyên, ứng dụng có nghe ở cổng 8121 nhưng chỉ nghe trên 127.0.0.1 thay vì 0.0.0.0 — khi đó flow log sẽ hiện ACCEPT hoàn toàn bình thường, gói tin tới nơi, mà kết nối vẫn bị từ chối.