Ngân hàng đề — AWS Certified SysOps Administrator Associate
Tìm thấy 936 câu.
A manufacturing firm employs an Amazon RDS DB instance for tracking its inventory. Various AWS Lambda functions are maintained by the firm for interacting with the database to add, remove, and modify items. The Lambda functions connect to the database using credentials stored in the function code
A SysOps administrator must ensure that the database credentials are not saved in plaintext and that the passwords are changed every 30 days.
What solution can best accomplish these requirements in the most operationally effective way?
-
A
Implement AWS KMS to encrypt the database password and store the encrypted password as an environment variable for each Lambda function. Provide each Lambda function access to the KMS key, enabling the database password to be decrypted when necessary. Create a new Lambda function that rotates the password every 30 days.
-
B
Save the database password as an environment variable for each Lambda function. Create a new Lambda function for rotating the password. Use Amazon EventBridge to schedule the password rotation function every 30 days to modify the database password and refresh the environment variables for each Lambda function.
-
C
Employ AWS Systems Manager Parameter Store to create a secure string to save the database credentials. Develop a new Lambda function for rotating the password. Utilize Amazon EventBridge to schedule the password rotation function every 30 days to change the database password and update the secret within Parameter Store. Modify each Lambda function to access the database password from Parameter Store.
-
D
Use AWS Secrets Manager to store the database credentials. Create a Secrets Manager secret and choose the appropriate database so that the Secrets Manager will use a Lambda function to automatically update the database password. Establish an automatic rotation schedule of 30 days. Modify each Lambda function to access the database password from Secrets Manager.
Xem giải thích
Đáp án
D — Dùng AWS SECRETS MANAGER: tạo secret cho CSDL, chọn đúng loại CSDL để Secrets Manager tự dùng Lambda xoay mật khẩu, đặt lịch xoay 30 ngày, và sửa các hàm Lambda đọc mật khẩu từ đó.
Vì sao đúng
Đề yêu cầu hai thứ — không lưu mật khẩu dạng thô, và xoay mật khẩu mỗi 30 ngày — kèm điều kiện ít công vận hành nhất. Secrets Manager là dịch vụ duy nhất làm cả hai sẵn có.
⚠ Điểm mấu chốt — xoay mật khẩu là việc KHÓ, và Secrets Manager làm sẵn:
Xoay mật khẩu CSDL đúng cách đòi:
1. Sinh mật khẩu mới
2. Đặt mật khẩu mới VÀO CSDL
3. Cập nhật secret
4. Không được để ứng dụng đứt trong lúc chuyển
↓
Bước 4 là chỗ tự làm hay hỏng nhất
↓
Secrets Manager giải bằng chiến lược BỐN NHÃN
↓
AWSCURRENT → bản đang dùng
AWSPENDING → bản mới, đang được kiểm thử
AWSPREVIOUS → bản trước đó, giữ để lùi lại
↓
Bốn bước: createSecret → setSecret →
testSecret → finishSecret
↓
→ chỉ đổi AWSCURRENT khi bản mới ĐÃ TEST XONG
⚠ Và tích hợp sẵn với RDS là điểm mấu chốt:
Tạo secret → chọn "Credentials for RDS database"
↓
Chọn instance RDS trong danh sách
↓
AWS TỰ TẠO hàm Lambda xoay mật khẩu
(từ template có sẵn cho MySQL/PostgreSQL/
Oracle/SQL Server/MariaDB)
↓
Đặt chu kỳ: 30 ngày
↓
→ không viết một dòng mã xoay nào
⚠ Cách hàm Lambda đọc secret:
Gọi GetSecretValue qua SDK
↓
Quyền: secretsmanager:GetSecretValue trong role
↓
Nên CACHE trong bộ nhớ, làm mới khi lỗi xác thực
(dùng thư viện caching chính thức của AWS)
↓
→ giảm số lời gọi API và giảm độ trễ
Vì sao các phương án khác sai
-
C (dùng SSM Parameter Store kiểu SecureString, tự viết Lambda xoay, hẹn giờ bằng EventBridge) — đây là phương án gần nhất và hoàn toàn khả thi, cũng thoả yêu cầu "không lưu dạng thô". Nhưng Parameter Store không có cơ chế xoay tích hợp: bạn phải tự viết, tự kiểm thử, tự xử lý cửa sổ chuyển đổi để ứng dụng không đứt. Trái với yêu cầu "ít công vận hành nhất".
-
A (mã hoá mật khẩu bằng KMS rồi lưu vào biến môi trường, tự viết Lambda xoay) — thoả yêu cầu mã hoá, nhưng mỗi lần xoay phải cập nhật biến môi trường của TỪNG hàm Lambda — tức là triển khai lại từng hàm. Rất nhiều việc và rất dễ sót.
-
B (lưu thẳng mật khẩu vào biến môi trường) — vi phạm luôn yêu cầu đầu tiên: biến môi trường của Lambda hiện ra dạng thô trên console với bất kỳ ai đọc được cấu hình hàm.
Ghi nhớ
⚠ Secrets Manager ↔ Parameter Store — bảng phải thuộc: | | Secrets Manager | Parameter Store | |---|---|---| | Xoay tự động | CÓ, tích hợp sẵn với RDS/Redshift/DocumentDB | không — phải tự viết | | Chi phí | có phí mỗi secret mỗi tháng + phí API | Standard MIỄN PHÍ | | Mã hoá | luôn dùng KMS | SecureString dùng KMS | | Sao chép đa Region | có sẵn | không | | Chia sẻ giữa tài khoản | resource policy | không trực tiếp | | Dùng khi | bí mật cần XOAY | cấu hình, tham số không nhạy cảm |
Từ khoá nhận diện:
"xoay mật khẩu tự động" → Secrets Manager, luôn luôn "lưu cấu hình, miễn phí" → Parameter Store "ít công vận hành nhất" → dịch vụ có sẵn tính năng, không tự viết "mật khẩu trong biến môi trường" → luôn SAI "khoá truy cập của EC2/Lambda tới AWS" → IAM role, không phải secret
| Bốn bước của hàm xoay | Nội dung |
|---|---|
createSecret |
sinh giá trị mới, gắn nhãn AWSPENDING |
setSecret |
đặt mật khẩu mới vào CHÍNH CSDL |
testSecret |
thử kết nối bằng bản mới |
finishSecret |
chuyển nhãn AWSCURRENT sang bản mới |
| Ý nghĩa | không bao giờ có khoảng thời gian ứng dụng không đăng nhập được |
| Chiến lược xoay — hai kiểu | Nội dung |
|---|---|
| Một người dùng (single user) | đổi mật khẩu của chính tài khoản đang dùng — có khoảng chuyển ngắn |
| Luân phiên hai người dùng (alternating users) | hai tài khoản CSDL đổi nhau — không gián đoạn, khuyến nghị cho production |
| Điều kiện | kiểu thứ hai cần một tài khoản quản trị để tạo/sửa người dùng |
| Thực hành tốt với Lambda + Secrets Manager | Nội dung |
|---|---|
| Cache secret | trong biến toàn cục, tái dùng giữa các lần gọi |
| Làm mới khi lỗi xác thực | bắt lỗi kết nối → đọc lại secret → thử lại |
| RDS Proxy | quản lý pool kết nối VÀ tự lấy secret — rất hợp với Lambda |
| Quyền | chỉ GetSecretValue trên đúng ARN của secret đó |
| Mã hoá | dùng CMK riêng nếu cần kiểm soát và ghi log truy cập khoá |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Lịch xoay đã bật chưa | describe-secret → RotationEnabled, RotationRules | | Lần xoay gần nhất | LastRotatedDate | | Xoay có hỏng không | CloudWatch Logs của hàm xoay, và alarm trên lỗi của nó |
Và một việc rất nên làm sau khi bật xoay tự động: đặt CloudWatch alarm cho lỗi của chính hàm xoay. Xoay mật khẩu là loại tác vụ chạy mỗi 30 ngày một lần, nên nếu nó hỏng lặng lẽ thì bạn sẽ chỉ biết vào lúc tệ nhất — khi mật khẩu cũ hết hiệu lực và ứng dụng đồng loạt mất kết nối tới CSDL.
A corporation is operating numerous Amazon EC2 instances across multiple regions. The firm requires that EC2 instances should not be accessible to the public via SSH, and the security group rules should be automatically modified to remove this access if it is detected.
What combination of steps should a SysOps administrator implement to fulfil these requirements? (Select TWO.)
-
A
Use Amazon EventBridge to detect changes in security group rules and trigger an AWS Lambda function to modify the security groups.
-
B
Create an AWS Systems Manager Automation document to update the identified security group rules.
-
C
Implement an AWS Config rule to identify if security groups permit SSH from 0.0.0.0/0.
-
D
Set up an Amazon GuardDuty detector to monitor and alert if security groups allow SSH from 0.0.0.0/0.
-
E
Use AWS CloudTrail to monitor security group rule changes and send a notification to an Amazon SNS topic.
Xem giải thích
Đáp án
B và C — Tạo AWS Systems Manager Automation document để sửa luật security group, VÀ dùng luật AWS CONFIG để phát hiện security group cho phép SSH từ 0.0.0.0/0.
Vì sao đúng
Đề đòi hai vế: phát hiện cấu hình sai, và tự động sửa. Đây đúng là mô hình chuẩn Config + Automation của AWS.
⚠ Điểm mấu chốt — hai mảnh ghép, mỗi mảnh một việc:
PHÁT HIỆN
↓
Luật Config quản lý sẵn:
restricted-ssh
(kiểm security group có mở port 22 từ 0.0.0.0/0)
↓
Vi phạm → NON_COMPLIANT
↓
KHẮC PHỤC
↓
Gắn REMEDIATION ACTION vào chính luật đó
↓
SSM Automation document:
AWS-DisablePublicAccessForSecurityGroup
↓
→ gỡ luật SSH mở toang, TỰ ĐỘNG
⚠ Vì sao Config là công cụ đúng thay vì tự bắt sự kiện:
Config ĐÁNH GIÁ LẠI khi cấu hình thay đổi
↓
→ bắt được luật vừa bị thêm
VÀ Config còn đánh giá theo CHU KỲ
↓
→ bắt được cả những security group ĐÃ SAI TỪ TRƯỚC
khi luật mới được bật
↓
Đây là điều một bộ bắt sự kiện thuần tuý
KHÔNG làm được
⚠ Nhiều Region thì dùng conformance pack:
Đề nói "nhiều Region"
↓
Config là dịch vụ THEO TỪNG REGION
↓
→ phải bật ở MỌI Region đang dùng
↓
Cách nhân rộng:
Conformance Pack triển khai theo tổ chức
hoặc CloudFormation StackSets
↓
Tổng hợp kết quả: Config AGGREGATOR
Xem thêm câu #11792: cùng mô hình Config phát hiện + SSM Automation khắc phục, ở đó áp cho một loại tài nguyên khác.
Vì sao các phương án khác sai
-
A (dùng EventBridge bắt thay đổi security group rồi gọi Lambda để sửa) — đây là phương án gần nhất và thực sự chạy được, nhưng nó là cách tự làm lại thứ Config đã có sẵn: phải viết và bảo trì Lambda, và không bắt được các security group đã sai từ trước vì chỉ phản ứng với sự kiện thay đổi. Không có báo cáo tuân thủ nào đi kèm.
-
D (dùng GuardDuty để cảnh báo khi security group mở SSH) — GuardDuty phát hiện HÀNH VI ĐE DOẠ (đào tiền ảo, gọi tới hạ tầng độc hại, dò quét), không kiểm tra cấu hình có tuân thủ hay không. Việc đó là của Config.
-
E (dùng CloudTrail theo dõi thay đổi rồi gửi thông báo qua SNS) — chỉ dừng ở thông báo, không có bước tự sửa mà đề yêu cầu.
Ghi nhớ
⚠ Bốn dịch vụ bảo mật — đừng lẫn vai trò: | Dịch vụ | Việc | |---|---| | Config | CẤU HÌNH có tuân thủ không — và khắc phục được | | GuardDuty | HÀNH VI đe doạ — phân tích log, dùng ML | | Inspector | LỖ HỔNG phần mềm trên EC2, container, Lambda | | Security Hub | TỔNG HỢP phát hiện, chấm điểm theo chuẩn | | CloudTrail | AI đã làm gì — nguồn dữ liệu, không tự phán xét |
Từ khoá nhận diện:
"phát hiện cấu hình sai VÀ tự sửa" → Config rule + SSM Automation "phát hiện hành vi bất thường" → GuardDuty "quét lỗ hổng CVE" → Inspector "nhìn tổng thể nhiều tài khoản, nhiều Region" → Security Hub + Config aggregator "NGĂN không cho tạo luật đó" → SCP, mạnh hơn cả phát hiện
| Các luật Config quản lý sẵn về mạng | Kiểm gì |
|---|---|
restricted-ssh |
security group mở port 22 từ 0.0.0.0/0 |
restricted-common-ports |
các cổng nhạy cảm khác (3389, 3306, 5432…) |
vpc-default-security-group-closed |
SG mặc định không có luật nào |
vpc-sg-open-only-to-authorized-ports |
chỉ mở đúng cổng được duyệt |
ec2-instance-no-public-ip |
máy không có IP công cộng |
| SSM Automation document dùng để khắc phục | Việc |
|---|---|
AWS-DisablePublicAccessForSecurityGroup |
gỡ luật mở toang — dùng cho đề này |
AWS-DisableS3BucketPublicReadWrite |
đóng bucket public |
AWS-EnableCloudTrail |
bật lại CloudTrail |
AWS-ConfigureS3BucketVersioning |
bật versioning |
| Tuỳ chỉnh | viết document riêng bằng YAML/JSON |
| Ba tầng phòng thủ cho đúng bài toán này | Nội dung |
|---|---|
| Ngăn chặn | SCP chặn AuthorizeSecurityGroupIngress với 0.0.0.0/0 cổng 22 |
| Phát hiện | Config restricted-ssh |
| Khắc phục | SSM Automation gắn vào luật |
| Tốt nhất | không cần SSH — dùng Session Manager |
| Triển khai ra nhiều Region và nhiều tài khoản | Cách |
|---|---|
| Conformance Pack | gói nhiều luật, triển khai theo tổ chức |
| CloudFormation StackSets | triển khai luật + remediation hàng loạt |
| Config Aggregator | gom kết quả tuân thủ về một chỗ để nhìn |
| Security Hub | bật theo tổ chức, có quản trị viên uỷ quyền |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | SG nào đang vi phạm | Config → luật restricted-ssh → Non-compliant resources | | Khắc phục có chạy không | Systems Manager → Automation → Executions | | Có ai mở lại không | CloudTrail, tìm AuthorizeSecurityGroupIngress |
Và một lưu ý về chế độ khắc phục nên chọn: bắt đầu bằng chế độ chờ duyệt tay, đừng bật tự động ngay. Một luật SSH mở toang đôi khi lại là đường vào duy nhất mà một đội nào đó đang dùng cho công việc thật — tự động gỡ nó lúc nửa đêm sẽ biến một vấn đề bảo mật thành một sự cố vận hành, và lần sau sẽ không ai cho bạn bật lại cơ chế này nữa.
An application generates data that must be archived for at least 7 years. Amazon Glacier will be used for archiving the data. What configuration option should be used to meet the compliance requirement?
-
A
A Glacier vault notification.
-
B
A Glacier data retrieval policy.
-
C
A Glacier vault lock policy.
-
D
A Glacier vault access policy.
Xem giải thích
Đáp án
C — Dùng VAULT LOCK POLICY của Glacier.
Vì sao đúng
Yêu cầu là tuân thủ: dữ liệu phải được giữ ít nhất 7 năm và không ai được xoá sớm. Chỉ vault lock policy tạo ra ràng buộc không thể đảo ngược.
⚠ Điểm mấu chốt — vault lock khoá chính sách lại vĩnh viễn:
Vault ACCESS policy
↓
Giống bucket policy — kiểm soát ai làm gì
↓
SỬA ĐƯỢC bất cứ lúc nào
↓
→ không dùng cho tuân thủ được:
ai sửa được chính sách thì cũng xoá được dữ liệu
Vault LOCK policy
↓
Chứa các điều kiện tuân thủ, ví dụ:
"chặn xoá archive dưới 2555 ngày tuổi"
↓
Sau khi KHOÁ: KHÔNG SỬA, KHÔNG GỠ được
↓
→ kể cả tài khoản gốc cũng không
→ đây mới là WORM thật sự
⚠ Quy trình khoá gồm hai bước, có 24 giờ để hối hận:
1. InitiateVaultLock
→ chính sách vào trạng thái IN PROGRESS
→ nhận về một lockId
↓
2. Trong 24 GIỜ: kiểm thử thật
→ thử xoá một archive, phải bị từ chối
→ thử các thao tác nghiệp vụ, phải vẫn chạy
↓
3a. CompleteVaultLock (kèm lockId)
→ LOCKED — VĨNH VIỄN, không quay lại
3b. AbortVaultLock
→ huỷ, sửa chính sách rồi làm lại
↓
Quá 24 giờ mà không complete → tự huỷ
⚠ Ví dụ điều kiện cho yêu cầu 7 năm:
{
"Effect": "Deny",
"Principal": "*",
"Action": "glacier:DeleteArchive",
"Condition": {
"NumericLessThan": {
"glacier:ArchiveAgeInDays": "2555"
}
}
}
2555 ngày ≈ 7 năm
↓
→ archive chưa đủ 7 năm tuổi thì KHÔNG XOÁ được
Vì sao các phương án khác sai
-
D (vault access policy) — đây là phương án gần nhất và cú pháp gần như y hệt, nhưng nó sửa và gỡ được bất cứ lúc nào. Với yêu cầu tuân thủ, một chính sách có thể bị gỡ thì không có giá trị chứng minh nào.
-
A (vault notification) — chỉ gửi thông báo qua SNS khi một công việc lấy dữ liệu hoàn tất. Không kiểm soát gì về việc xoá.
-
B (data retrieval policy) — kiểm soát tốc độ và chi phí LẤY dữ liệu ra (giới hạn GB mỗi giờ, hoặc chỉ dùng mức miễn phí). Không liên quan tới việc giữ dữ liệu.
Ghi nhớ
⚠ Bốn loại chính sách của Glacier — bảng phải thuộc: | Chính sách | Việc | |---|---| | Vault Lock policy | ràng buộc TUÂN THỦ, khoá vĩnh viễn — WORM | | Vault Access policy | ai được làm gì — sửa được | | Data Retrieval policy | giới hạn tốc độ/chi phí LẤY dữ liệu | | Vault Notification | báo qua SNS khi job xong |
Từ khoá nhận diện:
"giữ N năm, không ai được xoá" → Vault Lock, hoặc S3 Object Lock compliance "phân quyền truy cập vault" → Vault Access policy "chi phí lấy dữ liệu tăng vọt" → Data Retrieval policy "báo khi lấy xong" → Vault Notification "WORM, SEC 17a-4, bất biến" → Vault Lock hoặc Object Lock compliance
| Vault Lock ↔ S3 Object Lock | Nên chọn cái nào |
|---|---|
| Vault Lock | Glacier vault API kiểu cũ — chính sách theo cả vault |
| S3 Object Lock | cách hiện đại — theo từng phiên bản đối tượng, dùng chung API S3 |
| Khuyến nghị hôm nay | S3 + lifecycle sang Glacier + Object Lock compliance |
| Đề thi | vẫn hay hỏi Vault Lock — phải thuộc |
| Các lớp lưu trữ lạnh của S3 | Nội dung |
|---|---|
| S3 Glacier Instant Retrieval | lấy tức thì, rẻ hơn Standard-IA |
| S3 Glacier Flexible Retrieval | 1-5 phút (Expedited) / 3-5 giờ (Standard) / 5-12 giờ (Bulk) |
| S3 Glacier Deep Archive | rẻ nhất, lấy 12 giờ — hợp với lưu trữ 7-10 năm |
| Lưu trữ tối thiểu | 90 ngày (Flexible) / 180 ngày (Deep Archive) |
| Quy trình khoá vault — nhắc lại | Nội dung |
|---|---|
| 1 | InitiateVaultLock → trạng thái InProgress, nhận lockId |
| 2 | 24 giờ để KIỂM THỬ — thử xoá, phải bị chặn |
| 3 | CompleteVaultLock → Locked, VĨNH VIỄN |
| Huỷ | AbortVaultLock trong 24 giờ |
| Quá hạn | tự về trạng thái chưa khoá |
| Bẫy chi phí khi lưu trữ dài hạn | Nội dung |
|---|---|
| Lấy dữ liệu ra tốn tiền | và tốn nhiều nếu vội (Expedited) |
| Xoá trước thời gian tối thiểu | vẫn bị tính đủ |
| Phí theo số archive | rất nhiều tệp nhỏ → nên gộp lại trước khi lưu |
| Kiểm soát | Data Retrieval policy đặt trần GB mỗi giờ |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Vault đã khoá chưa | get-vault-lock → trường State | | Chính sách khoá nội dung gì | cũng chính lệnh đó, trường Policy | | Có ai thử xoá không | CloudTrail, tìm DeleteArchive bị từ chối |
Và một lời nhắc rất nghiêm túc về bước kiểm thử 24 giờ: hãy thực sự dùng hết cửa sổ đó. Vault Lock là một trong số rất ít thao tác trên AWS không có đường lùi — chính sách viết sai một điều kiện sẽ khoá luôn cả những thao tác nghiệp vụ hợp lệ, và cách sửa duy nhất còn lại là xoá cả vault sau khi mọi archive đã hết thời hạn giữ, tức là bảy năm nữa.
A company launched a static website using Amazon S3 which is being used by thousands of users from around the world. Soon after launch the website users started reporting 503 service unavailable errors.
What is the most likely cause of these errors?
-
A
The users do not have the correct permissions to access the website.
-
B
The request rate to Amazon S3 is too high.
-
C
The pre-signed URL has expired and no longer exists.
-
D
There is an issue with the S3 Transfer Acceleration service.
Xem giải thích
Đáp án
B — Tần suất request tới S3 quá cao.
Vì sao đúng
Mã lỗi 503 Service Unavailable từ S3 gần như luôn có nghĩa là SlowDown — bạn đang vượt ngưỡng thông lượng của một prefix.
⚠ Điểm mấu chốt — S3 giới hạn theo PREFIX:
Mỗi PREFIX trong bucket chịu được:
↓
3.500 PUT/COPY/POST/DELETE mỗi giây
5.500 GET/HEAD mỗi giây
↓
Website tĩnh với hàng nghìn người dùng
↓
Nếu mọi tệp nằm ở CÙNG MỘT prefix
(ví dụ đều ở gốc bucket)
↓
→ toàn bộ lưu lượng dồn vào một ngưỡng
→ vượt ngưỡng → 503 SlowDown
⚠ Cách chữa — theo thứ tự hiệu quả:
1. ĐẶT CLOUDFRONT TRƯỚC BUCKET ← tốt nhất
↓
Nội dung tĩnh được cache ở edge
→ phần lớn request KHÔNG chạm tới S3
→ vừa hết 503, vừa nhanh hơn, vừa rẻ hơn
2. CHIA NHIỀU PREFIX
↓
/images/, /css/, /js/, /2026/01/…
→ mỗi prefix một hạn ngạch riêng
3. THỬ LẠI CÓ BACKOFF LUỸ THỪA
↓
SDK của AWS đã làm sẵn — chỉ cần bật/giữ
4. S3 tự mở rộng theo thời gian
↓
→ nhưng cần vài phút tới vài chục phút
để thích nghi với mẫu truy cập mới
⚠ Phân biệt với các mã lỗi khác của S3:
403 AccessDenied → quyền, chính sách, presigned URL sai
404 NoSuchKey → không có tệp đó
400 Bad Request → request sai định dạng
503 SlowDown → VƯỢT NGƯỠNG ← đề này
500 Internal Error → lỗi phía AWS, cứ thử lại
Vì sao các phương án khác sai
-
C (presigned URL đã hết hạn nên không còn tồn tại) — đây là phương án gần nhất về mặt "có gì đó hết hiệu lực", nhưng presigned URL hết hạn trả về 403 Forbidden, không phải 503. (Và một website tĩnh công khai thì không dùng presigned URL.)
-
A (người dùng không có quyền truy cập website) — thiếu quyền trả về 403, và triệu chứng sẽ xuất hiện ngay từ đầu với mọi người, chứ không phải sau khi lượng truy cập tăng lên.
-
D (có vấn đề với dịch vụ S3 Transfer Acceleration) — website tĩnh không dùng Transfer Acceleration, và nếu có sự cố dịch vụ thì mã lỗi sẽ khác.
Ghi nhớ
⚠ Mã lỗi S3 và nguyên nhân — bảng phải thuộc: | Mã | Tên | Nguyên nhân | |---|---|---| | 503 | SlowDown | vượt ngưỡng request mỗi prefix | | 403 | AccessDenied | chính sách, ACL, presigned hết hạn, Block Public Access | | 404 | NoSuchKey / NoSuchBucket | sai key hoặc sai tên bucket | | 400 | InvalidRequest | thiếu header, sai chữ ký | | 500 | InternalError | lỗi phía AWS — thử lại | | 301 | PermanentRedirect | gọi sai Region của bucket |
Từ khoá nhận diện:
"503 từ S3" → quá tải, dùng CloudFront "403" → quyền hoặc chính sách "website tĩnh, nhiều người dùng toàn cầu" → CloudFront, gần như luôn đúng "cần thông lượng cao hơn" → chia nhiều prefix "tải lên chậm từ xa" → Transfer Acceleration
| Vì sao CloudFront là câu trả lời cho website tĩnh | Nội dung |
|---|---|
| Giảm tải S3 | phần lớn request dừng ở edge |
| Nhanh hơn | phục vụ từ hơn 400 điểm hiện diện |
| RẺ HƠN | dữ liệu ra từ CloudFront rẻ hơn từ S3, và ít request tới S3 hơn |
| Bảo mật hơn | dùng OAC, bucket để hoàn toàn riêng tư |
| Thêm được | HTTPS miễn phí bằng ACM, WAF, tên miền riêng |
| Thông lượng S3 — con số phải thuộc | Nội dung |
|---|---|
| PUT/COPY/POST/DELETE | 3.500 mỗi giây mỗi prefix |
| GET/HEAD | 5.500 mỗi giây mỗi prefix |
| Số prefix | không giới hạn |
| Prefix là gì | phần đường dẫn trước tên tệp — anh/2026/01/ là một prefix |
| Mở rộng | S3 tự thích nghi, nhưng cần thời gian |
| Xử lý 503 trong mã ứng dụng | Cách |
|---|---|
| Exponential backoff + jitter | SDK AWS đã bật sẵn — đừng tắt |
| Số lần thử lại | tăng max_attempts nếu tải rất cao |
| Theo dõi | chỉ số 5xxErrors của S3 trong CloudWatch |
| Tránh | thử lại ngay lập tức, không giãn cách — làm tình hình tệ hơn |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Có bao nhiêu 503 | CloudWatch → 5xxErrors của bucket (bật request metrics) | | Request tập trung vào prefix nào | S3 server access log hoặc CloudTrail data events | | CloudFront đã đỡ được chưa | CacheHitRate, và số request tới S3 giảm bao nhiêu |
Và một nhận xét đáng nói về chính kiến trúc trong đề: phục vụ một website tĩnh cho hàng nghìn người dùng toàn cầu bằng S3 trần là điều gần như không nên làm. CloudFront giải quyết cùng lúc bốn vấn đề — quá tải, độ trễ, chi phí truyền dữ liệu và việc phải mở bucket ra công khai — nên trong hầu hết đề thi lẫn hệ thống thật, "S3 + CloudFront" mới là cặp mặc định, còn "S3 một mình" chỉ hợp với môi trường nội bộ hoặc lưu lượng nhỏ.
A company is connected to an Amazon VPC from an on-premises data center with a VPN connection. A SysOps Administrator attempted to ping an Amazon EC2 instance in a private subnet with the IP 172.31.10.10 and did not receive a response. The ping command was issued from a computer in the data center with the IP address 3.104.75.244. VPC Flow Logs were enabled and showed the following entries:
2 123456789010 eni-1234abcd 3.104.75.244 172.31.10.10 0 0 1 4 336 1432917027 1432917142 ACCEPT OK
2 123456789010 eni-1234abcd 172.31.10.10 3.104.75.244 0 0 1 4 336 1432917094 1432917142 REJECT OK
What is the most likely cause of the issue?
-
A
The EC2 security group rules need to be modified to allow outbound traffic to the on-premises computer.
-
B
The network ACL rules need to be modified to allow inbound traffic from the on-premises computer.
-
C
The EC2 security group rules need to be modified to allow inbound traffic from the on-premises computer.
-
D
The network ACL rules need to be modified to allow outbound traffic to the on-premises computer.
Xem giải thích
Đáp án
D — Phải sửa luật NETWORK ACL để cho phép lưu lượng ĐI RA tới máy tính tại chỗ.
Vì sao đúng
Hai dòng flow log trong đề đã trả lời gần như trọn vẹn — chỉ cần đọc đúng.
⚠ Điểm mấu chốt — đọc hai dòng log:
Dòng 1: 3.104.75.244 → 172.31.10.10 ACCEPT
↓
Gói ping ĐI VÀO đã được CHẤP NHẬN
→ security group inbound ĐÚNG
→ NACL inbound ĐÚNG
→ gói tin ĐÃ TỚI được máy EC2
Dòng 2: 172.31.10.10 → 3.104.75.244 REJECT
↓
Gói trả lời ĐI RA bị TỪ CHỐI
↓
→ chỉ có một thứ chặn được chiều ra ở đây
⚠ Vì sao chắc chắn là NACL chứ không phải security group:
SECURITY GROUP có trạng thái (stateful)
↓
Đã cho gói vào → gói trả lời TỰ ĐỘNG được ra
→ KHÔNG cần luật outbound nào
→ nên SG không thể là thủ phạm của dòng REJECT
NETWORK ACL KHÔNG có trạng thái (stateless)
↓
Chiều vào và chiều ra được xét ĐỘC LẬP
→ cho vào rồi vẫn phải có luật cho RA
→ thiếu luật ra → REJECT
↓
→ thủ phạm là NACL, chiều OUTBOUND
⚠ Sửa thế nào — và một lưu ý về giao thức:
Ping dùng ICMP, không dùng TCP/UDP
↓
→ KHÔNG có khái niệm "cổng tạm" ở đây
→ phải mở ICMP chiều ra tới 3.104.75.244
↓
Nhưng nếu là TCP (SSH, HTTP…) thì
↓
Chiều ra phải mở DẢI CỔNG TẠM
1024-65535
↓
→ đây là lỗi NACL phổ biến nhất
Xem thêm câu #11631, #11686, #11721, #11727, #11730, #11793 và #11799: cùng chùm NACL không nhớ trạng thái. Mọi câu đều quy về một nguyên tắc — NACL phải mở cả hai chiều, security group thì không.
Vì sao các phương án khác sai
-
A (sửa luật security group để cho phép lưu lượng ra tới máy tại chỗ) — đây là phương án gần nhất vì cũng nói đúng chiều (outbound), nhưng sai ở loại thành phần: security group có trạng thái, gói trả lời cho một kết nối đã được chấp nhận luôn được đi ra, bất kể luật outbound.
-
C (sửa security group để cho phép lưu lượng vào) — dòng log đầu tiên đã là
ACCEPT, chứng minh chiều vào hoàn toàn thông. -
B (sửa NACL để cho phép lưu lượng vào) — cũng bị chính dòng
ACCEPTđầu tiên bác bỏ.
Ghi nhớ
⚠ Security Group ↔ Network ACL — bảng phải thuộc: | | Security Group | Network ACL | |---|---|---| | Trạng thái | CÓ (stateful) | KHÔNG (stateless) | | Phạm vi | ENI / instance | cả SUBNET | | Luật | chỉ có Allow | Allow VÀ Deny | | Thứ tự xét | xét tất cả, hợp lại | theo SỐ THỨ TỰ, dừng ở luật khớp đầu tiên | | Mặc định | vào: chặn hết, ra: mở hết | NACL mặc định mở cả hai chiều | | Chiều ra của gói trả lời | tự động cho qua | PHẢI CÓ LUẬT |
Từ khoá nhận diện:
"flow log: vào ACCEPT, ra REJECT" → NACL thiếu luật OUTBOUND "vào REJECT" → security group hoặc NACL inbound "kết nối TCP hỏng một chiều" → NACL thiếu DẢI CỔNG TẠM 1024-65535 "cần CHẶN một IP cụ thể" → NACL (SG không có luật Deny) "timeout" → gói bị bỏ im lặng — SG, NACL, hoặc route table
| Đọc một dòng VPC Flow Log | Các trường theo thứ tự |
|---|---|
| 1-3 | version, account-id, interface-id |
| 4-5 | srcaddr, dstaddr |
| 6-7 | srcport, dstport |
| 8 | protocol — 1 = ICMP, 6 = TCP, 17 = UDP |
| 9-10 | packets, bytes |
| 11-12 | start, end (epoch) |
| 13 | action — ACCEPT hoặc REJECT |
| 14 | log-status — OK / NODATA / SKIPDATA |
| Cấu hình NACL đúng cho TCP hai chiều | Nội dung |
|---|---|
| Inbound | cho phép cổng dịch vụ (22, 80, 443) từ nguồn |
| Outbound | cho phép 1024-65535 tới nguồn đó |
| Vì sao | client dùng cổng ngẫu nhiên ở dải cao |
| Bẫy | chỉ mở outbound đúng cổng dịch vụ → kết nối treo |
| Đánh số luật NACL | Nội dung |
|---|---|
| Xét theo | số thứ tự tăng dần, DỪNG ở luật khớp đầu tiên |
| Nên đánh | cách quãng: 100, 200, 300… để còn chèn về sau |
| Luật cuối cùng | * — Deny tất cả, không xoá được |
| Đặt Deny ở đâu | TRƯỚC luật Allow rộng hơn |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | NACL nào đang gắn vào subnet | describe-network-acls --filters Name=association.subnet-id,Values=... | | Gói bị chặn ở đâu | VPC Flow Logs — tìm dòng REJECT và xem hướng | | Đường đi lý thuyết | VPC Reachability Analyzer — chỉ ra đúng thành phần chặn |
Và một công cụ nên dùng trước khi ngồi đọ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 cần gửi gói tin nào, rồi nói thẳng "bị chặn tại network ACL nào, luật số mấy" — nhanh hơn nhiều so với việc bật flow log rồi chờ dữ liệu tới, và đặc biệt hữu ích khi đường đi có nhiều chặng như trong kiến trúc VPN của đề này.
An Amazon S3 bucket hold sensitive data. A SysOps Administrator has been tasked with monitoring all object upload and download activity relating to the bucket. Monitoring must include tracking the AWS account of the caller, the IAM user role of the caller, the time of the API call, and the IP address of the API.
What should the SysOps Administrator do to meet the requirements?
-
A
Enable data event logging in AWS CloudTrail.
-
B
Configure Amazon Inspector user event logging
-
C
Enable management event logging in AWS CloudTrail.
-
D
Configure Amazon Inspector bucket event logging.
Xem giải thích
Đáp án
A — Bật DATA EVENT logging trong AWS CloudTrail.
Vì sao đúng
Đề yêu cầu theo dõi thao tác tải lên và tải xuống từng đối tượng — đó là data event, không phải management event.
⚠ Điểm mấu chốt — hai loại sự kiện của CloudTrail:
MANAGEMENT EVENT (bật mặc định, miễn phí)
↓
Thao tác trên chính TÀI NGUYÊN:
CreateBucket, DeleteBucket,
PutBucketPolicy, PutBucketAcl
↓
→ KHÔNG ghi việc đọc/ghi từng đối tượng
DATA EVENT (phải bật riêng, CÓ PHÍ) ← đề này
↓
Thao tác trên DỮ LIỆU:
s3:GetObject, s3:PutObject, s3:DeleteObject
(và lambda:Invoke, dynamodb:GetItem…)
↓
→ đúng thứ đề cần: tải lên và tải xuống
⚠ Và bản ghi CloudTrail có đủ bốn thông tin đề đòi:
userIdentity.accountId → TÀI KHOẢN của người gọi
userIdentity.arn / type → IAM user hoặc ROLE
eventTime → THỜI ĐIỂM gọi API
sourceIPAddress → ĐỊA CHỈ IP nguồn
↓
Cộng thêm:
eventName, requestParameters (bucket, key),
errorCode nếu bị từ chối,
userAgent
⚠ Cấu hình cho gọn — đừng bật cho toàn bộ S3:
Bật data event có phí theo SỐ SỰ KIỆN
↓
Bật cho MỌI bucket trong tài khoản
→ hoá đơn có thể rất lớn
↓
Nên: chỉ chọn ĐÚNG bucket nhạy cảm
hoặc dùng advanced event selector
lọc theo prefix
↓
Ví dụ: chỉ ghi PutObject và GetObject
trên arn:aws:s3:::bucket-nhay-cam/
Vì sao các phương án khác sai
-
C (bật management event logging trong CloudTrail) — đây là phương án gần nhất và cùng dịch vụ, nhưng management event chỉ ghi thao tác trên cấu hình bucket, không ghi việc đọc/ghi từng đối tượng. Đây chính là điểm phân biệt mà câu hỏi nhắm tới.
-
B và D (Amazon Inspector) — Inspector là dịch vụ quét LỖ HỔNG cho EC2, container và Lambda. Không có "user event logging" hay "bucket event logging" trong Inspector; nó hoàn toàn không ghi log truy cập S3.
Ghi nhớ
⚠ Management event ↔ Data event — bảng phải thuộc: | | Management event | Data event | |---|---|---| | Ghi gì | thao tác trên tài nguyên | thao tác trên DỮ LIỆU | | Ví dụ S3 | CreateBucket, PutBucketPolicy | GetObject, PutObject, DeleteObject | | Ví dụ khác | RunInstances, CreateUser | lambda:Invoke, dynamodb:PutItem | | Bật sẵn | CÓ (90 ngày trong Event history) | KHÔNG — phải bật riêng | | Chi phí | bản đầu miễn phí | CÓ PHÍ theo số sự kiện | | Khối lượng | ít | rất lớn |
Từ khoá nhận diện:
"ai đã tải lên / tải xuống đối tượng nào" → CloudTrail DATA EVENT "ai đã đổi chính sách bucket" → management event "phân tích request HTTP tới bucket" → S3 server access log (rẻ hơn, nhưng ít chi tiết về danh tính) "quét lỗ hổng" → Inspector "phát hiện truy cập bất thường vào S3" → GuardDuty S3 Protection
| CloudTrail data event ↔ S3 server access log | Khác nhau |
|---|---|
| Độ trễ | thường vài phút ↔ có thể vài giờ |
| Danh tính người gọi | đầy đủ: account, ARN, role, MFA ↔ ít chi tiết hơn |
| Chi phí | theo số sự kiện ↔ chỉ trả tiền lưu trữ log ở S3 |
| Toàn vẹn | có xác thực toàn vẹn tệp log ↔ không |
| Chọn khi | kiểm toán, tuân thủ ↔ phân tích lưu lượng, khối lượng lớn |
| Bảo vệ chính bản thân log CloudTrail | Cách |
|---|---|
| Log file validation | phát hiện log bị sửa |
| Mã hoá SSE-KMS | với CMK riêng |
| Bucket ở TÀI KHOẢN KHÁC | kẻ chiếm tài khoản không xoá được |
| S3 Object Lock | log bất biến |
| Trail cấp TỔ CHỨC | thành viên không tắt được |
| Phân tích log CloudTrail | Công cụ |
|---|---|
| Event history | 90 ngày gần nhất, tra nhanh trên console |
| CloudWatch Logs Insights | truy vấn theo thời gian thực |
| Athena | truy vấn SQL trên khối lượng lớn ở S3 |
| CloudTrail Lake | kho truy vấn có sẵn, giữ tới 7 năm |
| Cảnh báo | EventBridge bắt sự kiện cụ thể → SNS |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Data event đã bật chưa | get-event-selectors --trail-name ... | | Có bản ghi nào chưa | Athena, truy vấn eventName = 'GetObject' | | Đang tốn bao nhiêu | Cost Explorer, lọc dịch vụ CloudTrail |
Và một cấu hình nên chốt ngay khi bật data event: chỉ chọn đúng những bucket cần kiểm toán, và dùng advanced event selector để lọc theo prefix. Một bucket phục vụ ứng dụng có thể sinh hàng triệu GetObject mỗi ngày — bật không giới hạn thì chi phí ghi log dễ dàng vượt qua chi phí lưu trữ chính dữ liệu đó, và bạn sẽ phải tắt nó đi đúng lúc đang cần nó nhất.
A company runs an Amazon RDS multi-AZ deployment for an eCommerce website. An automated failover occurred, and a SysOps Administrator needs to determine the root cause.
Which of the following are possible conditions that may cause the database to failover? (Select TWO.)
-
A
Read contention on the secondary database.
-
B
Write contention on the primary database.
-
C
The database instance type was changed.
-
D
Database corruption errors.
-
E
A storage failure on the primary database.
Xem giải thích
Đáp án
C và E — Loại instance của CSDL bị THAY ĐỔI, và LỖI LƯU TRỮ trên node chính.
Vì sao đúng
RDS Multi-AZ chỉ failover khi node chính hoặc AZ của nó thực sự không phục vụ được, hoặc khi một thao tác quản trị yêu cầu điều đó.
⚠ Điểm mấu chốt — danh sách nguyên nhân failover chính thức:
1. Node chính hoặc cả AZ MẤT KẾT NỐI / hỏng
2. LỖI LƯU TRỮ trên node chính ← phương án E
3. ĐỔI LOẠI INSTANCE (scale up/down) ← phương án C
4. VÁ LỖI hệ điều hành hoặc động cơ CSDL
5. Failover THỦ CÔNG (reboot with failover)
↓
Điểm chung: node chính KHÔNG CÒN
phục vụ được, hoặc đang được thay thế
⚠ Vì sao đổi loại instance lại gây failover — và đó là điều TỐT:
Đổi cỡ Multi-AZ
↓
1. AWS đổi cỡ node DỰ PHÒNG trước
2. FAILOVER sang node đã đổi cỡ
3. Đổi cỡ node cũ (nay là dự phòng)
↓
→ gián đoạn chỉ đúng lúc failover (60-120 giây)
→ thay vì tắt máy chính vài phút
↓
Đây là cách AWS GIẢM gián đoạn,
không phải một sự cố
⚠ Cơ chế Multi-AZ hoạt động thế nào:
Node chính ──(sao chép ĐỒNG BỘ)──▶ node dự phòng
ở AZ 1 ở AZ 2
↓
Dự phòng KHÔNG phục vụ truy vấn nào
↓
Khi failover:
bản ghi DNS của endpoint được trỏ sang AZ 2
↓
→ ENDPOINT KHÔNG ĐỔI
→ ứng dụng chỉ cần kết nối lại
→ nhớ đặt TTL của DNS cache ngắn trong JVM
Vì sao các phương án khác sai
-
D (lỗi hỏng dữ liệu — database corruption) — đây là phương án gần nhất và nghe rất hợp lý, nhưng dữ liệu hỏng được sao chép ĐỒNG BỘ sang node dự phòng, nên failover không giải quyết được gì — RDS vì thế không failover vì lý do này. Cách xử lý là khôi phục theo thời điểm (PITR).
-
A (tranh chấp ĐỌC trên node dự phòng) — node dự phòng không phục vụ truy vấn đọc nào cả, nên không có tranh chấp nào để nói tới.
-
B (tranh chấp GHI trên node chính) — tải cao không phải là điều kiện failover. CSDL sẽ chậm đi, nhưng vẫn đang phục vụ, nên RDS giữ nguyên node chính.
Ghi nhớ
⚠ Nguyên nhân failover ↔ KHÔNG phải nguyên nhân — bảng phải thuộc: | Gây failover | KHÔNG gây failover | |---|---| | Mất AZ hoặc mất node chính | tải cao, tranh chấp ghi | | Lỗi lưu trữ trên node chính | dữ liệu hỏng (corruption) | | Đổi loại instance | truy vấn chậm | | Vá hệ điều hành / động cơ CSDL | hết dung lượng kết nối | | Reboot with failover (thủ công) | thay đổi parameter group |
Từ khoá nhận diện:
"vì sao Multi-AZ failover" → mất AZ, lỗi lưu trữ, đổi cỡ, vá lỗi "dữ liệu bị hỏng" → PITR, không phải failover "tải đọc cao" → read replica, Multi-AZ không giúp "muốn dự phòng ĐỌC ĐƯỢC" → Multi-AZ DB Cluster (3 node, 2 node đọc được) "failover mất bao lâu" → thường 60-120 giây
| Multi-AZ ↔ Read Replica — nhắc lại | Khác nhau |
|---|---|
| Mục đích | sẵn sàng cao ↔ mở rộng ĐỌC |
| Sao chép | đồng bộ ↔ bất đồng bộ |
| Phục vụ truy vấn | KHÔNG ↔ CÓ (chỉ đọc) |
| Failover | tự động ↔ phải tự thăng cấp |
| Khác AZ / Region | AZ khác cùng Region ↔ được cả Region khác |
| Ba kiểu triển khai RDS hiện nay | Nội dung |
|---|---|
| Single-AZ | một node, rẻ nhất, có gián đoạn khi bảo trì |
| Multi-AZ instance | 1 chính + 1 dự phòng KHÔNG đọc được |
| Multi-AZ DB Cluster | 1 ghi + 2 ĐỌC ĐƯỢC ở 3 AZ, failover dưới 35 giây |
| Chuẩn bị ứng dụng cho failover | Cách |
|---|---|
| Dùng ENDPOINT, không dùng IP | endpoint không đổi khi failover |
| TTL DNS ngắn | với Java: đặt networkaddress.cache.ttl (mặc định JVM cache mãi mãi) |
| Thử lại có backoff | mọi truy vấn phải chịu được đứt kết nối ngắn |
| Kiểm thử định kỳ | reboot-db-instance --force-failover |
| Theo dõi | sự kiện RDS qua SNS, và alarm trên FailoverTime |
| Điều tra một lần failover | Bước |
|---|---|
| 1 | RDS → Events — AWS ghi rõ lý do |
| 2 | describe-events --duration 1440 |
| 3 | Kiểm tra có ai đổi cỡ hoặc vá đúng lúc đó không (CloudTrail) |
| 4 | Xem AWS Health Dashboard nếu nghi sự cố AZ |
| 5 | Đối chiếu với chỉ số ngay trước thời điểm đó |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Vì sao failover | RDS Events, dòng có Multi-AZ instance failover | | Đang chạy ở AZ nào | describe-db-instances --query '...AvailabilityZone' | | Ứng dụng chịu được không | chủ động failover ở môi trường staging |
Và một cấu hình rất hay bị bỏ sót ở phía ứng dụng Java: JVM mặc định cache kết quả phân giải DNS vĩnh viễn. Khi RDS failover, endpoint trỏ sang IP mới nhưng ứng dụng vẫn gọi vào IP cũ — nên nó tiếp tục lỗi rất lâu sau khi CSDL đã khoẻ trở lại, và người vận hành thì nhìn thấy một sự cố dài hàng chục phút cho một lần failover chỉ mất một phút.
A corporation has utilized AWS to host their application. The app runs on numerous Linux-based Amazon EC2 instances, which are part of an Auto Scaling group that uses launch templates. These templates spawn EC2 instances with Amazon EBS as primary storage using General Purpose SSD (gp3) EBS volumes.
A SysOps administrator must ensure all EC2 instances can access the same base files and ensure data consistency.
Which of the following approaches should be taken?
-
A
Create an Amazon EFS file system, introduce a new version of the launch template containing user data that connects to the EFS file system. Alter the Auto Scaling group to use the new launch template to launch new EC2 instances and decommission older ones.
-
B
Use Amazon S3 to store shared files and update the launch templates to mount S3 during initialization. Update the Auto Scaling group to use the new launch template and phase out the older EC2 instances.
-
C
Build an Amazon ElastiCache cluster to ensure data consistency and shared access, then modify the Auto Scaling group to integrate new EC2 instances via an updated launch template while deactivating the older ones.
-
D
Implement a shared EBS volume with Multi-Attach enabled, and periodically synchronize data using a scheduled AWS Lambda function. Replace older instances with the new EC2 instances in the Auto Scaling group.
Xem giải thích
Đáp án
A — Tạo Amazon EFS file system, tạo phiên bản launch template mới với user data gắn kết EFS, rồi cho Auto Scaling group dùng template mới và thay dần máy cũ.
Vì sao đúng
Đề cần nhiều máy Linux cùng đọc ghi MỘT bộ tệp chung, và dữ liệu phải nhất quán. Đó chính xác là định nghĩa của hệ thống tệp chia sẻ, và trên AWS cho Linux thì đó là EFS.
⚠ Điểm mấu chốt — EFS là hệ thống tệp gắn kết được từ nhiều máy cùng lúc:
EFS
↓
Giao thức NFS v4.1
↓
Gắn kết đồng thời từ HÀNG NGHÌN máy EC2
trên nhiều AZ trong cùng VPC
↓
Ngữ nghĩa file system thật:
khoá tệp, quyền POSIX, ghi có thứ tự
↓
→ mọi máy thấy CÙNG một nội dung
→ đúng yêu cầu "nhất quán dữ liệu"
⚠ Và vì sao gắn kết trong user data của launch template:
ASG khởi chạy máy MỚI bất cứ lúc nào
↓
Máy mới phải TỰ gắn kết EFS
↓
User data trong launch template:
↓
yum install -y amazon-efs-utils
mount -t efs fs-0123abcd:/ /du-lieu-chung
↓
Hoặc thêm dòng vào /etc/fstab để tự gắn khi khởi động lại
↓
→ mọi máy, kể cả máy sinh ra lúc 3 giờ sáng,
đều có sẵn bộ tệp chung
⚠ Cách thay máy cũ:
Tạo phiên bản MỚI của launch template
↓
Trỏ ASG sang phiên bản đó
↓
INSTANCE REFRESH
↓
→ ASG thay máy theo lô, giữ tỉ lệ khoẻ mạnh tối thiểu
→ không cần tự tay tắt từng máy
Vì sao các phương án khác sai
-
B (lưu tệp chung trên S3 và gắn kết S3 lúc khởi động) — đây là phương án gần nhất và S3 đúng là chia sẻ được, nhưng S3 là kho đối tượng, không phải hệ thống tệp. Gắn kết bằng công cụ như Mountpoint hay s3fs thì không có khoá tệp, không hỗ trợ ghi đè một phần tệp, và tính nhất quán không giống file system — trái với yêu cầu của đề.
-
D (dùng một volume EBS Multi-Attach và định kỳ đồng bộ bằng Lambda) — EBS Multi-Attach chỉ dùng được với volume io1/io2 (đề đang dùng gp3 — không hỗ trợ), chỉ trong CÙNG MỘT AZ, và đòi hệ thống tệp cluster-aware (như GFS2). Một file system thường như ext4 gắn từ nhiều máy sẽ hỏng dữ liệu. Và "định kỳ đồng bộ" thì đã không còn là nhất quán.
-
C (dùng ElastiCache cluster để chia sẻ và bảo đảm nhất quán) — ElastiCache là cache khoá-giá trị trong bộ nhớ, không phải hệ thống tệp. Không gắn kết được, không lưu tệp được.
Ghi nhớ
⚠ Bốn loại lưu trữ của AWS — bảng phải thuộc: | Loại | Dịch vụ | Gắn từ nhiều máy | |---|---|---| | File (NFS, Linux) | EFS | CÓ — hàng nghìn máy, nhiều AZ | | File (SMB, Windows) | FSx for Windows File Server | có | | Block | EBS | thường KHÔNG (Multi-Attach: io1/io2, cùng AZ) | | Object | S3 | có, nhưng không phải file system | | Hiệu năng cao (HPC) | FSx for Lustre | có |
Từ khoá nhận diện:
"nhiều EC2 Linux dùng chung tệp" → EFS "nhiều máy Windows dùng chung" → FSx for Windows "lưu tệp cho ứng dụng web, truy cập qua HTTP" → S3 "đĩa riêng cho một máy" → EBS "HPC, machine learning, thông lượng cực cao" → FSx for Lustre
| Các lớp lưu trữ của EFS | Nội dung |
|---|---|
| Standard | nhiều AZ, dùng thường xuyên |
| Infrequent Access (IA) | rẻ hơn nhiều, có phí đọc |
| Archive | rẻ nhất, cho dữ liệu ít chạm tới |
| One Zone | rẻ hơn nhưng chỉ một AZ |
| Lifecycle policy | tự chuyển tệp không dùng sang IA — nên bật |
| Chế độ hiệu năng và thông lượng | Nội dung |
|---|---|
| Elastic throughput | mặc định hiện nay, tự co giãn — nên dùng |
| Provisioned throughput | khi cần thông lượng cố định, đoán trước được |
| Bursting | kiểu cũ, thông lượng theo dung lượng |
| General Purpose ↔ Max I/O | Max I/O cho hàng nghìn máy, độ trễ cao hơn |
| Bảo mật EFS | Nội dung |
|---|---|
| Security group | mở cổng 2049 (NFS) từ SG của máy EC2 |
| Mount target | một cái ở MỖI AZ có máy cần gắn |
| Mã hoá khi lưu | bật lúc tạo, dùng KMS |
| Mã hoá khi truyền | mount -o tls với amazon-efs-utils |
| Access point | ép UID/GID và thư mục gốc cho từng ứng dụng |
| File system policy | như bucket policy — giới hạn ai gắn được |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Máy đã gắn kết chưa | df -h và mount | grep efs | | Vì sao gắn hỏng | thường là security group cổng 2049 hoặc thiếu mount target ở AZ đó | | Có nghẽn thông lượng không | CloudWatch: PercentIOLimit, BurstCreditBalance |
Và một chi tiết dễ làm hỏng cả kiến trúc vào lúc bất tiện nhất: phải có mount target ở MỌI AZ mà Auto Scaling group có thể khởi chạy máy. Thiếu một AZ thì mọi thứ vẫn chạy êm cho tới ngày ASG quyết định mở rộng sang đúng AZ đó — và máy mới sẽ khởi động thành công, qua health check của EC2, rồi phục vụ lỗi vì không có bộ tệp chung nào được gắn.
A company runs an application on Amazon EC2 instances in a VPC private subnet. The instances must upload objects to an Amazon S3 bucket. The company requires access to the bucket to be restricted to the EC2 instances in the private network and data must not traverse the public network.
What actions should the SysOps Administrator take to meet these requirements?
-
A
Create an AWS VPN tunnel between the VPC private subnet and the Amazon S3 public endpoint.
-
B
Create a VPC endpoint for the S3 bucket and create an IAM policy that conditionally limits all S3 actions on the bucket to the VPC endpoint as the source.
-
C
Create a VPC endpoint for the S3 bucket and create a S3 bucket policy that conditionally limits all S3 actions on the bucket to the VPC endpoint as the source.
-
D
Create a NAT gateway in the VPC and modify the private subnet route table to route all traffic destined for S3 through the NAT gateway.
Xem giải thích
Đáp án
C — Tạo VPC endpoint cho S3, và tạo BUCKET POLICY giới hạn mọi thao tác S3 trên bucket đó theo điều kiện nguồn là VPC endpoint.
Vì sao đúng
Đề đòi hai thứ: dữ liệu không đi qua internet công cộng, và truy cập chỉ từ các máy trong mạng riêng. Mỗi thành phần giải một vế.
⚠ Vế thứ nhất — VPC endpoint giữ lưu lượng trong mạng AWS:
VPC Gateway Endpoint cho S3
↓
Thêm một tuyến vào route table của subnet:
prefix list của S3 → endpoint
↓
Lưu lượng đi thẳng qua hạ tầng AWS
↓
→ KHÔNG qua Internet Gateway
→ KHÔNG qua NAT Gateway
→ KHÔNG ra internet công cộng
↓
Và gateway endpoint MIỄN PHÍ
⚠ Vế thứ hai — bucket policy khoá bucket lại theo endpoint:
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bucket-cua-toi",
"arn:aws:s3:::bucket-cua-toi/*"
],
"Condition": {
"StringNotEquals": {
"aws:sourceVpce": "vpce-0123456789abcdef0"
}
}
}
→ mọi request KHÔNG đi qua đúng endpoint đó
đều bị TỪ CHỐI
↓
→ kể cả người có khoá hợp lệ, gọi từ internet
→ đây là vế "chỉ EC2 trong mạng riêng"
⚠ Vì sao phải là BUCKET POLICY chứ không phải IAM POLICY:
IAM policy (phương án B)
↓
Chỉ áp cho danh tính ĐƯỢC GẮN chính sách đó
↓
→ một role khác, một tài khoản khác,
một người dùng mới tạo
VẪN truy cập bucket từ internet được
↓
Bucket policy
↓
Áp cho MỌI người gọi, mọi danh tính, mọi tài khoản
↓
→ đây mới là "giới hạn truy cập vào BUCKET"
Xem thêm câu #11824: cùng sự phân biệt bucket policy ↔ IAM policy, ở đó là để ép mã hoá khi tải lên.
Vì sao các phương án khác sai
-
B (VPC endpoint + IAM POLICY giới hạn theo endpoint) — đây là phương án gần nhất, điều kiện
aws:sourceVpcehoàn toàn đúng, chỉ sai chỗ gắn chính sách vào đâu: IAM policy chỉ ràng buộc danh tính được gắn, nên bucket vẫn mở với mọi danh tính khác. -
D (tạo NAT gateway và định tuyến lưu lượng S3 qua NAT) — NAT Gateway đưa lưu lượng RA INTERNET, vi phạm thẳng yêu cầu "dữ liệu không đi qua mạng công cộng". Lại còn tốn phí xử lý dữ liệu trong khi gateway endpoint miễn phí.
-
A (dựng đường hầm VPN giữa private subnet và endpoint công khai của S3) — không có cơ chế nào như vậy. VPN của AWS nối VPC với mạng tại chỗ hoặc VPC khác, không nối tới endpoint công khai của một dịch vụ.
Ghi nhớ
⚠ Hai loại VPC endpoint — bảng phải thuộc: | | Gateway endpoint | Interface endpoint (PrivateLink) | |---|---|---| | Dịch vụ | CHỈ S3 và DynamoDB | hầu hết dịch vụ AWS | | Chi phí | MIỄN PHÍ | phí theo giờ + theo GB | | Cơ chế | tuyến trong route table | ENI có IP riêng trong subnet | | Từ mạng tại chỗ | KHÔNG dùng được | dùng được qua VPN/Direct Connect | | DNS | dùng tên miền công khai của S3 | private DNS đè lên tên miền công khai |
Từ khoá nhận diện:
"không được đi qua internet" → VPC endpoint "chỉ máy trong VPC được truy cập bucket" → bucket policy +
aws:sourceVpce"giới hạn theo cả VPC, không chỉ một endpoint" →aws:sourceVpc"máy TẠI CHỖ cũng cần truy cập riêng tư" → interface endpoint, không phải gateway "giảm phí NAT" → gateway endpoint cho S3 và DynamoDB
| Các khoá điều kiện hay dùng cho endpoint | Nội dung |
|---|---|
aws:sourceVpce |
đúng MỘT endpoint cụ thể |
aws:sourceVpc |
cả một VPC (linh hoạt hơn, dễ bảo trì hơn) |
aws:VpcSourceIp |
IP riêng của máy gọi |
aws:PrincipalOrgID |
chỉ danh tính trong tổ chức |
| Kết hợp | thường dùng aws:sourceVpc + aws:PrincipalOrgID |
| Endpoint policy — lớp bảo vệ thứ hai | Nội dung |
|---|---|
| Gắn ở đâu | trên chính VPC endpoint |
| Việc | giới hạn endpoint đó được nói chuyện với bucket nào |
| Vì sao cần | chặn đưa dữ liệu ra bucket của tài khoản lạ |
| Mặc định | cho phép mọi thứ — phải siết lại thủ công |
| Kết hợp | bucket policy (bảo vệ bucket) + endpoint policy (bảo vệ mạng) |
| Bẫy khi bật gateway endpoint | Nội dung |
|---|---|
| Quên gắn vào route table | endpoint tồn tại nhưng không có tuyến nào dùng nó |
| Nhiều route table | phải gắn vào mọi route table của subnet liên quan |
| Bucket ở Region khác | gateway endpoint chỉ phục vụ S3 CÙNG REGION |
| Khoá bucket quá sớm | tự khoá chính mình ra ngoài — luôn giữ một lối vào cho quản trị |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Lưu lượng có đi qua endpoint không | VPC Flow Logs — không thấy đích là IP công cộng của S3 | | Chính sách có chặn đúng không | thử aws s3 ls từ ngoài VPC — phải nhận 403 | | Endpoint đã vào route table chưa | describe-route-tables, tìm vpce- |
Và một lời khuyên rất thực tế trước khi áp bucket policy loại này: luôn thử ở một bucket kiểm thử trước, và giữ sẵn một lối vào cho quản trị. Một điều kiện StringNotEquals viết nhầm endpoint id sẽ khoá tất cả mọi người ra khỏi bucket — kể cả bạn, kể cả tài khoản gốc — và cách gỡ duy nhất khi đó là dùng tài khoản gốc để xoá bucket policy, một thao tác mà không phải tổ chức nào cũng thực hiện được nhanh.
A company's SysOps administrator makes routine checks of the AWS Health Dashboard across all the company's accounts. These accounts are part of an organization within AWS Organizations. The company recently integrated 10 more accounts into the organization. The SysOps administrator needs to aggregate the alerts from the Health Dashboard of each account.
What is the most efficient approach to meet this requirement?
-
A
Construct an AWS Lambda function to interrogate the AWS Health API and record all events into an Amazon Aurora database.
-
B
Employ the AWS Health API to record events into an Amazon S3 bucket.
-
C
Activate organizational view in AWS Health.
-
D
Configure AWS CloudWatch Events in each account to capture events from the Health Dashboard and forward them to a centralized AWS CloudWatch Logs.
Xem giải thích
Đáp án
C — Bật ORGANIZATIONAL VIEW trong AWS Health.
Vì sao đúng
Đề muốn gom cảnh báo Health của mọi tài khoản trong tổ chức về một chỗ, và AWS Health có sẵn đúng tính năng đó.
⚠ Điểm mấu chốt — organizational view là gì:
Bật ở TÀI KHOẢN QUẢN LÝ của Organizations
↓
Health Dashboard hiển thị sự kiện của
TẤT CẢ tài khoản thành viên
↓
Tài khoản mới tham gia tổ chức
↓
→ TỰ ĐỘNG được đưa vào, không phải cấu hình gì
↓
Đây chính là lý do nó là "hiệu quả nhất"
khi công ty vừa thêm 10 tài khoản
⚠ Bật thế nào:
1. Tổ chức phải ở chế độ ALL FEATURES
2. Đăng nhập TÀI KHOẢN QUẢN LÝ
3. AWS Health → Organizational view → Enable
↓
Hoặc: aws health enable-health-service-access-
for-organization
↓
→ Không tốn thêm chi phí
→ Không phải đụng vào từng tài khoản
⚠ Muốn tự động phản ứng thì ghép thêm EventBridge:
AWS Health phát sự kiện vào EventBridge
↓
Quy tắc bắt sự kiện Health cấp TỔ CHỨC
(chỉ ở tài khoản quản lý, Region us-east-1)
↓
→ SNS báo cho đội trực
→ Lambda tự xử lý (ví dụ: máy sắp bị retire
thì stop/start trước)
→ Systems Manager Incident Manager
Vì sao các phương án khác sai
-
D (dùng CloudWatch Events ở từng tài khoản rồi chuyển tiếp về một CloudWatch Logs tập trung) — đây là phương án gần nhất và thực sự chạy được, nhưng nó đòi cấu hình ở TỪNG tài khoản: 10 tài khoản mới nghĩa là 10 lần thiết lập, và mỗi tài khoản thêm về sau lại một lần nữa. Trái với yêu cầu "hiệu quả nhất".
-
A (Lambda hỏi AWS Health API rồi ghi vào Aurora) — tự dựng lại một tính năng đã có sẵn, kèm hàm Lambda phải bảo trì, một CSDL phải trả tiền, và Health API đòi gói hỗ trợ Business trở lên.
-
B (dùng Health API ghi sự kiện vào bucket S3) — cùng vấn đề như A: tự làm lại, và S3 không phải nơi để xem cảnh báo, phải dựng thêm công cụ truy vấn.
Ghi nhớ
⚠ Hai mặt của AWS Health — bảng phải thuộc: | | Nội dung | |---|---| | Service Health Dashboard | tình trạng chung của dịch vụ AWS — công khai, ai cũng xem được | | Personal Health Dashboard | sự kiện ảnh hưởng tới CHÍNH tài nguyên của bạn | | Organizational view | gom Personal Health của MỌI tài khoản trong tổ chức | | Health API | truy vấn bằng chương trình — cần gói Business/Enterprise | | EventBridge | phát sự kiện Health để tự động hoá |
Từ khoá nhận diện:
"gom cảnh báo Health nhiều tài khoản" → organizational view "tự động phản ứng khi có sự kiện" → EventBridge + Lambda/SNS "máy sắp bị retire" → sự kiện Health
AWS_EC2_INSTANCE_RETIREMENT_SCHEDULED"gom log nhiều tài khoản" → CloudWatch Logs cross-account, hoặc trail cấp tổ chức "nhìn tuân thủ nhiều tài khoản" → Config aggregator, không phải Health
| Các loại sự kiện Health hay gặp | Nội dung |
|---|---|
| Issue | sự cố đang diễn ra của AWS |
| Scheduled change | bảo trì có kế hoạch — máy sắp retire, chứng chỉ sắp hết hạn |
| Account notification | thông báo về tài khoản, hạn mức, thanh toán |
| Ví dụ hay ra thi | EC2 retirement, RDS maintenance, certificate expiry |
| Bộ "nhìn toàn tổ chức" — nên bật cả bộ | Dịch vụ |
|---|---|
| AWS Health | organizational view |
| CloudTrail | trail cấp tổ chức — thành viên không tắt được |
| AWS Config | aggregator gom tuân thủ |
| Security Hub | quản trị viên uỷ quyền, bật cho cả tổ chức |
| GuardDuty | quản trị viên uỷ quyền |
| Cost Explorer | ở tài khoản quản lý, thấy chi phí mọi tài khoản |
| Tự động hoá quanh Health | Ví dụ |
|---|---|
| Máy sắp retire | Lambda stop rồi start máy trước hạn |
| Bảo trì RDS | báo trước cho đội ứng dụng |
| Hạn mức sắp chạm | tự mở yêu cầu tăng qua Service Quotas |
| Sự cố dịch vụ | tạo incident trong Incident Manager |
| Lưu ý | quy tắc EventBridge cấp tổ chức đặt ở us-east-1 |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Organizational view đã bật chưa | describe-health-service-status-for-organization | | Có sự kiện nào đang mở | describe-events-for-organization | | Cảnh báo có tới đội trực không | gửi thử một sự kiện qua EventBridge test |
Và một điều kiện dễ bị vướng khi triển khai: Health API chỉ dùng được với gói hỗ trợ Business trở lên. Bản thân organizational view trên console thì xem được, nhưng nếu kế hoạch của bạn là tự động hoá bằng API hoặc EventBridge thì cần kiểm tra gói hỗ trợ trước — nhiều đội dựng xong cả luồng tự động rồi mới phát hiện lời gọi API trả về lỗi từ chối truy cập.