Ngân hàng đề — AWS Certified SysOps Administrator Associate
Tìm thấy 936 câu.
An application deployed on several Amazon EC2 instances in a VPC requires very low latency between nodes. A SysOps administrator has noticed unacceptable latency for inter-node communications and must find a solution to reduce latency.
Which approach should the administrator take?
-
A
Redeploy the application in a dedicated subnet.
-
B
Redeploy the application in a placement group.
-
C
Redeploy the application in an Auto Scaling group.
-
D
Redeploy the application in a single Availability Zone.
Xem giải thích
Đáp án
B — Triển khai lại ứng dụng trong một PLACEMENT GROUP.
Vì sao đúng
Yêu cầu là giảm độ trễ giữa các node, và placement group kiểu cluster sinh ra chính xác cho việc đó.
⚠ Điểm mấu chốt — cluster placement group đặt máy SÁT NHAU:
Cluster placement group
↓
Các instance được đặt GẦN NHAU VỀ VẬT LÝ
trong CÙNG MỘT Availability Zone
↓
→ cùng rack, hoặc rất gần nhau
↓
Kết quả:
- độ trễ giữa các node RẤT THẤP
- băng thông mạng cao (tới 10-100 Gbps
giữa các instance trong nhóm)
- ít biến thiên độ trễ (jitter)
↓
→ đúng yêu cầu "very low latency between nodes"
⚠ Ba kiểu placement group — chọn đúng kiểu:
CLUSTER ← đề này
↓
Sát nhau, MỘT AZ
→ độ trễ thấp nhất, băng thông cao nhất
→ dùng cho HPC, tính toán phân tán,
big data, machine learning
→ đánh đổi: mất AZ là mất tất cả
SPREAD
↓
Mỗi instance một PHẦN CỨNG RIÊNG
→ tối đa 7 instance mỗi AZ
→ dùng cho vài máy quan trọng, cần cách ly lỗi
PARTITION
↓
Chia thành các phân vùng, mỗi phân vùng
một nhóm rack riêng
→ dùng cho HDFS, Cassandra, Kafka
→ tối đa 7 phân vùng mỗi AZ
⚠ Ghép thêm ENA và Elastic Fabric Adapter cho độ trễ thấp nhất:
Enhanced Networking (ENA)
↓
→ thông lượng cao hơn, độ trễ thấp hơn,
ít biến thiên hơn
→ hầu hết loại máy hiện đại đã bật sẵn
Elastic Fabric Adapter (EFA)
↓
→ bỏ qua hệ điều hành khi truyền
(OS bypass)
→ cho HPC và ML dùng MPI hoặc NCCL
→ độ trễ thấp hơn nữa
Vì sao các phương án khác sai
-
D (triển khai lại trong MỘT Availability Zone) — đây là phương án gần nhất và đúng một phần: cùng AZ thì độ trễ thấp hơn so với qua AZ. Nhưng trong một AZ vẫn có nhiều trung tâm dữ liệu và nhiều rack, nên độ trễ vẫn cao hơn hẳn so với cluster placement group. Không phải câu trả lời đầy đủ.
-
A (triển khai lại trong một subnet riêng) — subnet là khái niệm LOGIC, không quyết định vị trí vật lý của máy. Không ảnh hưởng gì tới độ trễ.
-
C (triển khai lại trong Auto Scaling group) — ASG lo co giãn và chịu lỗi, không ảnh hưởng tới độ trễ giữa các node. (Tuy ASG có thể dùng KÈM placement group.)
Ghi nhớ
⚠ Ba kiểu placement group — bảng phải thuộc: | Kiểu | Bố trí | Dùng cho | |---|---|---| | Cluster | sát nhau, MỘT AZ | HPC, big data, ML — độ trễ thấp nhất | | Spread | mỗi máy một phần cứng riêng, nhiều AZ | vài máy quan trọng, cần cách ly lỗi | | Partition | nhóm rack riêng cho mỗi phân vùng | HDFS, Cassandra, Kafka | | Giới hạn | Spread 7 máy/AZ, Partition 7 phân vùng/AZ | | | Chi phí | miễn phí | |
Từ khoá nhận diện:
"độ trễ RẤT THẤP giữa các node" → cluster placement group "tránh nhiều máy hỏng cùng lúc" → spread placement group "CSDL phân tán theo phân vùng" → partition placement group "HPC, MPI, huấn luyện mô hình phân tán" → cluster + EFA "chịu được mất một AZ" → KHÔNG dùng cluster — trải nhiều AZ
| Đánh đổi của cluster placement group | Nội dung |
|---|---|
| Ưu | độ trễ thấp nhất, băng thông cao nhất, ít jitter |
| Nhược | MỘT AZ — mất AZ là mất toàn bộ |
| Nhược | có thể gặp InsufficientInstanceCapacity khi thêm máy |
| Khuyến nghị | khởi chạy MỌI máy CÙNG LÚC ngay từ đầu |
| Khuyến nghị | dùng CÙNG loại instance trong nhóm |
| Nếu cần chịu lỗi | nhiều cluster group ở nhiều AZ, hoặc chấp nhận đánh đổi |
| Các công cụ giảm độ trễ mạng khác | Nội dung |
|---|---|
| Enhanced Networking (ENA) | đã bật sẵn ở hầu hết loại máy hiện đại |
| Elastic Fabric Adapter (EFA) | OS bypass — cho HPC dùng MPI/NCCL |
| Loại instance mạng cao | hậu tố n (c5n, m5n, r5n) |
| Jumbo frame (MTU 9001) | trong VPC, tăng thông lượng |
| Không giúp | subnet riêng, Auto Scaling group |
| Kiểm tra độ trễ thật giữa các node | Cách |
|---|---|
ping |
độ trễ vòng lặp cơ bản |
iperf3 |
đo băng thông thật |
sockperf |
đo độ trễ chính xác hơn cho ứng dụng nhạy |
| So sánh | đo TRƯỚC và SAU khi chuyển vào placement group |
| Kỳ vọng | trong cluster group thường dưới 100 micro giây |
| Lưu ý khi dùng placement group | Nội dung |
|---|---|
| Tạo trước khi khởi chạy máy | và khai trong launch template |
| Thêm máy vào nhóm đang chạy | phải dừng máy rồi mới gán được |
| Không phải loại instance nào cũng hỗ trợ | kiểm tra trước |
| Trộn nhiều loại máy | tăng nguy cơ thiếu năng lực |
| Với ASG | khai placement group trong launch template |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Máy đã ở trong nhóm chưa | describe-instances --query '...Placement.GroupName' | | Độ trễ có giảm không | sockperf hoặc ping trước/sau | | Băng thông thật là bao nhiêu | iperf3 giữa hai node |
Và một lời khuyên rất thực tế khi dựng cluster placement group: khởi chạy toàn bộ số máy cần thiết trong một lệnh duy nhất. AWS phải tìm chỗ trống liền kề nhau, nên xin mười máy cùng lúc dễ thành công hơn nhiều so với xin từng máy một — và nếu thêm máy vào một nhóm đã chạy lâu, khả năng gặp InsufficientInstanceCapacity là rất thật.
A SysOps administrator attempts to deploy many EC2 instances to support a large distributed application workload. The instances are being deployed in several batches and on the most recent deployment the administrator received the InstanceLimitExceeded error.
What should the SysOps administrator do to resolve this error?
-
A
Launch new EC2 instances in another VPC within the Region.
-
B
Launch the EC2 instances in a different Availability Zone.
-
C
Use the Amazon EC2 console to request an EBS quota increase.
-
D
Use Service Quotas to request an EC2 quota increase.
Xem giải thích
Đáp án
D — Dùng SERVICE QUOTAS để xin TĂNG HẠN MỨC EC2.
Vì sao đúng
Lỗi InstanceLimitExceeded nói thẳng nguyên nhân: đã chạm hạn mức số instance (tính theo vCPU) của tài khoản trong Region đó.
⚠ Điểm mấu chốt — hạn mức EC2 nay tính bằng vCPU:
Trước đây: giới hạn theo SỐ INSTANCE mỗi loại
↓
Hiện nay: giới hạn theo SỐ vCPU theo HỌ MÁY
↓
Ví dụ: "Running On-Demand Standard
(A, C, D, H, I, M, R, T, Z) instances"
→ mặc định thường vài trăm vCPU
↓
Một m5.4xlarge = 16 vCPU
↓
→ triển khai hàng loạt máy lớn
chạm trần rất nhanh
↓
→ và trần là THEO REGION, THEO TÀI KHOẢN
⚠ Xin tăng ở đâu và mất bao lâu:
Service Quotas console
↓
Tìm "Running On-Demand Standard instances"
↓
Request quota increase → khai số vCPU cần
↓
Một số yêu cầu ĐƯỢC DUYỆT TỰ ĐỘNG (vài phút)
Yêu cầu lớn → qua Support, có thể vài NGÀY
↓
→ với sự kiện lớn: XIN TRƯỚC vài ngày
⚠ Và các loại hạn mức EC2 tách bạch nhau:
On-Demand Standard → họ A, C, D, H, I, M, R, T, Z
On-Demand G/VT → GPU đồ hoạ
On-Demand P → GPU tính toán
On-Demand Inf/Trn → chip suy luận/huấn luyện
Spot → hạn mức RIÊNG cho Spot
Dedicated Hosts → riêng theo họ máy
↓
→ tăng hạn mức Standard KHÔNG giúp gì
cho Spot hay GPU
Xem thêm câu #11822 (lô 127): cùng chủ đề chạm hạn mức — ở đó là hạn mức 5 VPC mỗi Region khiến CloudFormation stack thất bại. Khoá nhất quán.
Vì sao các phương án khác sai
-
C (dùng EC2 console để xin tăng hạn mức EBS) — đây là phương án gần nhất vì cũng là xin tăng hạn mức, nhưng sai loại hạn mức: lỗi là về số instance, không phải về dung lượng EBS. (Và nơi xin tăng là Service Quotas, không phải EC2 console.)
-
B (khởi chạy ở một Availability Zone khác) — hạn mức vCPU áp cho CẢ REGION, không theo từng AZ. Đổi AZ không giúp gì.
-
A (khởi chạy ở một VPC khác trong cùng Region) — hạn mức không liên quan gì tới VPC. Cùng một tài khoản, cùng một Region thì cùng một trần.
Ghi nhớ
⚠ Các lỗi về năng lực và hạn mức — đừng nhầm: | Lỗi | Nghĩa | Cách xử lý | |---|---|---| | InstanceLimitExceeded | chạm HẠN MỨC của tài khoản | xin tăng qua Service Quotas | | InsufficientInstanceCapacity | AWS hết năng lực ở AZ đó lúc này | đổi AZ, đổi loại máy, hoặc thử lại sau | | VcpuLimitExceeded | chạm hạn mức vCPU | xin tăng | | RequestLimitExceeded | gọi API quá nhanh | backoff luỹ thừa | | Client.VolumeLimitExceeded | chạm hạn mức EBS | xin tăng hạn mức EBS |
Từ khoá nhận diện:
"InstanceLimitExceeded" → Service Quotas, xin tăng vCPU "InsufficientInstanceCapacity" → năng lực của AWS, không phải hạn mức — đổi AZ/loại máy "cần chắc chắn có máy" → Capacity Reservation "sắp chạm hạn mức" → CloudWatch alarm trên
AWS/Usage"tài khoản mới cần hạn mức cao" → Quota Request Template
| Hạn mức EC2 — những điều phải nhớ | Nội dung |
|---|---|
| Đơn vị | vCPU, không phải số instance |
| Phạm vi | theo REGION và theo TÀI KHOẢN |
| Tách bạch | Standard / GPU / Inf / Spot / Dedicated Host — hạn mức riêng |
| Xem ở đâu | Service Quotas, và chỉ số AWS/Usage |
| Xin tăng | một số tự động duyệt, số lớn qua Support |
| Chuẩn bị | xin trước sự kiện lớn vài ngày |
| Chuẩn bị cho một đợt triển khai lớn | Bước |
|---|---|
| 1 | Tính tổng vCPU cần cho toàn bộ đội máy |
| 2 | So với hạn mức hiện tại trong Service Quotas |
| 3 | Xin tăng trước vài ngày, dư ra một khoảng an toàn |
| 4 | Cân nhắc Capacity Reservation nếu phải chắc chắn có máy |
| 5 | Đa dạng hoá loại instance và AZ để tránh thiếu năng lực |
| 6 | Đặt alarm ở 80% hạn mức để lần sau biết trước |
Nếu là InsufficientInstanceCapacity — cách khác hẳn |
Cách |
|---|---|
| Thử AZ khác | năng lực khác nhau theo AZ |
| Thử loại instance khác | trong cùng họ, hoặc họ tương đương |
| Thử lại sau vài phút | năng lực dao động liên tục |
| Capacity Reservation | giữ chỗ trước |
| Với ASG | khai nhiều loại instance trong launch template |
| Theo dõi hạn mức chủ động | Cách |
|---|---|
CloudWatch alarm trên AWS/Usage |
metric math tính phần trăm |
| Trusted Advisor → Service Limits | rà soát định kỳ |
| Service Quotas console | xem mức dùng và xin tăng |
| Quota Request Template | áp cho tài khoản mới trong Organizations |
| Nhân rộng | dựng alarm bằng StackSets cho mọi tài khoản |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Hạn mức hiện tại | Service Quotas → tìm "Running On-Demand Standard instances" | | Đang dùng bao nhiêu | chỉ số AWS/Usage, hoặc cộng vCPU từ describe-instances | | Yêu cầu tăng tới đâu rồi | list-requested-service-quota-change-history |
Và một điều rất dễ gây bất ngờ với người mới quen hệ thống hạn mức mới: con số hạn mức là vCPU, không phải số máy. Một hạn mức "640" nghe rất rộng rãi, nhưng nếu đội máy của bạn dùng m5.4xlarge thì đó chỉ là 40 instance — và đây chính là lý do một đợt triển khai theo lô có thể chạy trơn tru vài lô đầu rồi đột ngột dừng lại.
A SysOps administrator manages an Amazon Elasticsearch Service (Amazon ES) domain that is configured with a public endpoint. Users connect to the Amazon ES domain over AWS Site-to-Site VPN connections from multiple branch offices. The Administrator needs to ensure that Amazon ES can be accessed only from the branch offices while preserving existing data.
Which solution will meet these requirements?
-
A
Configure an identity-based access policy on Amazon ES. Add an allow statement to the policy that includes the Amazon Resource Name (ARN) for each branch office VPN connection.
-
B
Reconfigure the Amazon ES domain in private subnets in a VPC. Create a security group that allows inbound traffic from the branch office CIDR blocks.
-
C
Reconfigure the Amazon ES domain in private subnets in a VPC. Configure an IP-based domain access policy on Amazon ES and allow the private IP CIDR blocks from each branch office network.
-
D
Configure an IP-based domain access policy on Amazon ES. Add an allow statement to the policy that includes the private IP CIDR blocks from each branch office network.
Xem giải thích
Đáp án
D — Cấu hình IP-BASED DOMAIN ACCESS POLICY trên Amazon ES, thêm câu lệnh Allow chứa các dải CIDR RIÊNG của từng văn phòng chi nhánh.
Vì sao đúng
Đề có hai ràng buộc quan trọng: chỉ cho phép từ các chi nhánh, và GIỮ NGUYÊN DỮ LIỆU hiện có.
⚠ Điểm mấu chốt — ràng buộc "preserve existing data" loại hai phương án:
Domain đang có PUBLIC ENDPOINT
↓
Muốn chuyển vào VPC
↓
→ KHÔNG chuyển tại chỗ được
→ phải TẠO DOMAIN MỚI trong VPC
rồi di chuyển dữ liệu sang
↓
Đề nói "while preserving existing data"
↓
→ phương án B và C đều đòi dựng lại domain
→ không thoả ràng buộc này
⚠ Giải pháp giữ nguyên domain — dùng access policy theo IP:
{
"Effect": "Allow",
"Principal": { "AWS": "*" },
"Action": "es:*",
"Resource": "arn:aws:es:...:domain/ten-domain/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"10.10.0.0/16",
"10.20.0.0/16"
]
}
}
}
→ chỉ request đến TỪ các dải IP đó
mới được chấp nhận
→ mọi nơi khác trên internet bị TỪ CHỐI
⚠ Vì sao dùng IP RIÊNG của chi nhánh chứ không phải IP công cộng:
Người dùng kết nối qua SITE-TO-SITE VPN
↓
Lưu lượng đi qua đường hầm VPN vào VPC
↓
IP nguồn mà AWS nhìn thấy là
IP RIÊNG của mạng chi nhánh
↓
→ khai đúng các dải CIDR riêng đó
↓
(Nếu họ đi thẳng qua internet thì mới
phải khai IP công cộng của văn phòng)
Xem thêm câu #11930 (cùng lô): ghi nhớ về việc Amazon Elasticsearch Service đã đổi tên thành Amazon OpenSearch Service từ tháng 9/2021 — cùng một dịch vụ, tên mới.
Vì sao các phương án khác sai
-
C (dựng lại domain trong private subnet của VPC và đặt IP-based policy) — đây là phương án gần nhất và về bảo mật thì tốt hơn hẳn, nhưng chuyển domain vào VPC đòi tạo domain MỚI và di chuyển dữ liệu — trái ràng buộc "giữ nguyên dữ liệu hiện có" mà đề nêu rõ.
-
B (dựng lại domain trong VPC với security group cho phép CIDR của chi nhánh) — cùng vấn đề như C: phải dựng lại domain.
-
A (identity-based policy với ARN của từng kết nối VPN làm Allow statement) — kết nối VPN không phải là một IAM principal; không có cách nào cấp quyền cho một "ARN của VPN connection".
Ghi nhớ
⚠ Ba cách bảo vệ truy cập OpenSearch — bảng phải thuộc: | Cách | Nội dung | |---|---| | Domain access policy theo IP | aws:SourceIp với dải CIDR — dùng được với public endpoint | | Domain access policy theo IAM | principal là IAM user/role — request phải được ký SigV4 | | VPC access | domain nằm trong VPC, dùng security group — an toàn nhất | | Fine-grained access control | phân quyền tới index, document, field | | Kết hợp | VPC + FGAC + Cognito cho Dashboards |
Từ khoá nhận diện:
"giới hạn theo IP mà giữ nguyên domain" → IP-based access policy "an toàn nhất, chấp nhận dựng lại" → chuyển domain vào VPC "phân quyền tới từng index" → fine-grained access control "đăng nhập Dashboards bằng danh tính công ty" → Cognito + IdP "chuyển domain vào VPC" → KHÔNG chuyển tại chỗ được
| Public endpoint ↔ VPC endpoint của OpenSearch | Khác nhau |
|---|---|
| Public | truy cập từ internet, bảo vệ bằng access policy |
| VPC | chỉ truy cập được từ trong VPC, bảo vệ bằng security group |
| Chuyển đổi | KHÔNG đổi tại chỗ được — phải tạo domain mới |
| Di chuyển dữ liệu | snapshot sang S3 rồi khôi phục, hoặc reindex từ xa |
| Khuyến nghị | VPC cho mọi triển khai mới |
| Di chuyển dữ liệu sang domain mới | Bước |
|---|---|
| 1 | Tạo domain mới trong VPC |
| 2 | Đăng ký snapshot repository trỏ tới bucket S3 |
| 3 | Chụp manual snapshot từ domain cũ |
| 4 | Khôi phục vào domain mới |
| 5 | Hoặc dùng _reindex từ xa để đồng bộ dần |
| 6 | Đổi endpoint trong ứng dụng, kiểm chứng, rồi xoá domain cũ |
| Các khoá điều kiện hay dùng cho access policy | Nội dung |
|---|---|
aws:SourceIp |
giới hạn theo dải IP |
aws:SourceVpc |
giới hạn theo VPC (với VPC endpoint) |
aws:SourceVpce |
đúng một VPC endpoint |
aws:PrincipalOrgID |
chỉ danh tính trong tổ chức |
| Lưu ý | aws:SourceIp không dùng được khi request đi qua VPC endpoint |
| Bảo vệ OpenSearch toàn diện | Lớp |
|---|---|
| Domain trong VPC | không lộ ra internet |
| Security group | chỉ cho phép nguồn cần thiết |
| Fine-grained access control | phân quyền tới index và field |
| Mã hoá | khi lưu (KMS) và node-to-node |
| Cognito | đăng nhập Dashboards bằng danh tính công ty |
| CloudTrail và audit log | ghi lại truy cập |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Chính sách hiện tại | describe-domain-config → AccessPolicies | | Chặn có đúng không | thử gọi endpoint từ ngoài dải cho phép — phải nhận 403 | | IP nguồn AWS nhìn thấy | bật audit log, hoặc kiểm tra từ chính máy ở chi nhánh |
Và một hướng đi nên đặt vào lộ trình dù hôm nay chọn IP-based policy: chuyển domain vào VPC ở lần bảo trì lớn tiếp theo. Chính sách theo IP là biện pháp hợp lý khi không được phép dựng lại domain, nhưng endpoint vẫn nằm trên internet công cộng — nghĩa là chỉ cần một sai sót khi chỉnh sửa chính sách là toàn bộ dữ liệu lộ ra ngoài, một rủi ro mà mô hình VPC loại bỏ hoàn toàn.
A company has multiple accounts that are managed using AWS Organizations. A SysOps administrator must setup a shared S3 bucket in a central account and grant read-only access for all users in any account within the AWS Organization. There should be no public access to the S3 bucket data.
Which parameters should the Administrator use to MOST efficiently accomplish this goal?
-
A
Specify the organization's master account as the principal.
-
B
Specify aws:PrincipalOrgld as the principal with the organization ID value.
-
C
Specify '*' as the principal and aws:PrincipalOrgld as a condition.
-
D
Specify all account numbers within an array as the principal.
Xem giải thích
Đáp án
C — Khai Principal là "*" và dùng aws:PrincipalOrgID làm ĐIỀU KIỆN.
Vì sao đúng
Đây là mẫu chuẩn của AWS để chia sẻ tài nguyên cho toàn bộ một tổ chức mà không mở công khai.
⚠ Điểm mấu chốt — Principal và Condition đóng hai vai khác nhau:
Principal: "*"
↓
Nghĩa là "bất kỳ ai" — NHƯNG chưa xong
↓
Condition: aws:PrincipalOrgID = o-xxxxxxxxxx
↓
→ LỌC LẠI: chỉ danh tính THUỘC tổ chức đó
↓
Kết quả:
- mọi tài khoản trong tổ chức: ĐỌC ĐƯỢC
- người ngoài, người ẩn danh: BỊ TỪ CHỐI
↓
→ không hề công khai
⚠ Chính sách viết đầy đủ:
{
"Effect": "Allow",
"Principal": "*",
"Action": ["s3:GetObject", "s3:ListBucket"],
"Resource": [
"arn:aws:s3:::bucket-dung-chung",
"arn:aws:s3:::bucket-dung-chung/*"
],
"Condition": {
"StringEquals": {
"aws:PrincipalOrgID": "o-abc123xyz"
}
}
}
Chú ý HAI Resource:
bucket → cho s3:ListBucket
bucket/* → cho s3:GetObject
↓
Thiếu /* → không đọc được đối tượng nào
⚠ Vì sao đây là cách HIỆU QUẢ NHẤT:
Liệt kê từng account id (phương án D)
↓
→ tài khoản MỚI vào tổ chức
→ PHẢI SỬA chính sách
→ tài khoản rời đi
→ phải nhớ gỡ ra
→ chính sách phình to, có giới hạn kích thước
↓
aws:PrincipalOrgID
↓
→ tài khoản mới TỰ ĐỘNG có quyền
→ tài khoản rời tổ chức TỰ ĐỘNG mất quyền
→ chính sách luôn ngắn gọn
Xem thêm câu #11852 (lô 128): cùng kỹ thuật — bucket policy với
Condition(aws:sourceVpce) để giới hạn nguồn truy cập. Khoá nhất quán.
Vì sao các phương án khác sai
-
B (khai
aws:PrincipalOrgIDlàm PRINCIPAL với giá trị là organization ID) — đây là phương án gần nhất và dùng đúng khoá, nhưng sai vị trí:aws:PrincipalOrgIDlà một khoá ĐIỀU KIỆN, không phải một principal. TrườngPrincipalchỉ nhận ARN, account id, dịch vụ AWS, hoặc"*". -
D (liệt kê toàn bộ số tài khoản trong một mảng làm principal) — hoạt động được nhưng không hiệu quả: phải cập nhật mỗi khi tổ chức thay đổi, và bucket policy có giới hạn 20 KB.
-
A (khai tài khoản quản lý của tổ chức làm principal) — chỉ cấp quyền cho đúng tài khoản đó, không cấp cho các tài khoản thành viên.
Ghi nhớ
⚠ Trường Principal nhận những gì — bảng phải thuộc: | Hợp lệ | Ví dụ | |---|---| | ARN của IAM user/role | arn:aws:iam::111122223333:role/Doc | | Account id hoặc root ARN | "111122223333" hoặc arn:aws:iam::111122223333:root | | Dịch vụ AWS | {"Service": "cloudtrail.amazonaws.com"} | | "*" | bất kỳ ai — PHẢI kèm Condition | | KHÔNG hợp lệ | aws:PrincipalOrgID (đó là khoá điều kiện) | | Không hợp lệ | tên IAM group |
Từ khoá nhận diện:
"chia sẻ cho toàn tổ chức" →
Principal: "*"+aws:PrincipalOrgID"không được public" → luôn kèm Condition khi dùng"*""chỉ một OU cụ thể" →aws:PrincipalOrgPaths"chỉ từ VPC của mình" →aws:sourceVpcehoặcaws:SourceVpc"ép mã hoá khi tải lên" → Deny +Nulltrêns3:x-amz-server-side-encryption
| Các khoá điều kiện về tổ chức | Nội dung |
|---|---|
aws:PrincipalOrgID |
thuộc tổ chức nào |
aws:PrincipalOrgPaths |
thuộc OU nào — chi tiết hơn |
aws:PrincipalAccount |
account id cụ thể |
aws:PrincipalArn |
ARN cụ thể |
aws:PrincipalTag/<khoá> |
theo tag của danh tính — ABAC |
aws:SourceAccount, aws:SourceArn |
chống confused deputy khi dịch vụ gọi hộ |
| Bảo vệ bucket dùng chung | Lớp |
|---|---|
| Block Public Access | bật ở cả cấp tài khoản và bucket |
Bucket policy với aws:PrincipalOrgID |
giới hạn theo tổ chức |
| Deny khi không dùng HTTPS | aws:SecureTransport |
| Mã hoá SSE-KMS | và chia sẻ khoá cho tổ chức qua key policy |
| Versioning + lifecycle | chống xoá nhầm |
| CloudTrail data event | ghi lại ai đọc gì |
Bẫy Resource với S3 — nhắc lại |
Nội dung |
|---|---|
s3:GetObject, PutObject, DeleteObject |
arn:aws:s3:::bucket/* |
s3:ListBucket, GetBucketLocation |
arn:aws:s3:::bucket |
| Chia sẻ đọc | cần CẢ HAI |
| Cách nhớ | thao tác trên ĐỐI TƯỢNG → có /* |
| Nếu dùng mã hoá SSE-KMS | Nội dung |
|---|---|
| Bucket policy | chưa đủ |
| Cần thêm | key policy cho phép tổ chức kms:Decrypt |
| Cùng khoá điều kiện | dùng lại aws:PrincipalOrgID trong key policy |
| Triệu chứng khi thiếu | AccessDenied khi tải xuống, dù bucket policy đúng |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Bucket có bị public không | IAM Access Analyzer — phải không báo public | | Người ngoài tổ chức có vào được không | thử từ một tài khoản ngoài — phải 403 | | Người trong tổ chức đọc được không | aws s3 ls s3://bucket từ một tài khoản thành viên |
Và một cấu hình rất nên bật cùng lúc với chính sách này: Block Public Access ở cấp tài khoản. Nó không cản trở việc chia sẻ trong tổ chức — vì aws:PrincipalOrgID không phải là truy cập công khai — nhưng nó là lưới an toàn nếu sau này có ai đó vô tình xoá mất mệnh đề Condition, biến một bucket nội bộ thành bucket mở ra internet chỉ bằng một lần chỉnh sửa.
A company runs a web application on several Amazon EC2 instances in an Auto Scaling group. The EC2 instances share a file system that is delivered using Amazon EFS. Though the volume of data does not change much, during periods of heavy utilization users have reported that file retrieval latency increases.
Which action should a SysOps administrator take to improve the performance of the file system?
-
A
Configure the file system for Provisioned Throughput.
-
B
Configure the file system for Bursting Throughput.
-
C
Enable encryption in transit on the file system.
-
D
Remove any unused files from the file system.
Xem giải thích
Đáp án
A — Cấu hình file system ở chế độ PROVISIONED THROUGHPUT.
Vì sao đúng
Đề có một manh mối rất đặc trưng: "khối lượng dữ liệu không thay đổi nhiều" nhưng độ trễ tăng khi tải cao.
⚠ Điểm mấu chốt — chế độ Bursting gắn thông lượng với DUNG LƯỢNG:
EFS Bursting Throughput (chế độ cũ, mặc định)
↓
Thông lượng cơ sở tỉ lệ với DUNG LƯỢNG lưu trữ
khoảng 50 KB/s cho mỗi GB
↓
File system NHỎ → thông lượng cơ sở THẤP
↓
Có BURST CREDIT để vượt lên tạm thời
↓
Tải cao kéo dài → CREDIT CẠN
↓
→ thông lượng bị bóp về mức cơ sở
→ ĐỘ TRỄ TĂNG
↓
Dữ liệu ít mà tải cao
→ đúng kịch bản tệ nhất của Bursting
⚠ Provisioned Throughput tách thông lượng khỏi dung lượng:
Provisioned Throughput
↓
Bạn KHAI THẲNG mức MB/s cần
↓
→ độc lập hoàn toàn với dung lượng
→ không có credit để cạn
→ thông lượng ổn định mọi lúc
↓
Đúng cho: dữ liệu ít, truy cập nhiều
⚠ Nhưng lựa chọn hiện đại còn tốt hơn — Elastic Throughput:
EFS Elastic Throughput (mặc định cho file system mới)
↓
Tự co giãn theo nhu cầu thật
↓
→ không phải đoán mức cần
→ không có credit
→ chỉ trả tiền cho lượng dữ liệu ĐỌC/GHI thật
↓
Phù hợp nhất khi tải BIẾN ĐỘNG
↓
Provisioned vẫn tốt hơn khi:
tải cao ỔN ĐỊNH và đoán được
→ chi phí rẻ hơn Elastic
Vì sao các phương án khác sai
-
B (cấu hình chế độ Bursting Throughput) — đây là phương án gần nhất vì cũng là một chế độ thông lượng, nhưng Bursting chính là chế độ đang gây ra vấn đề. Chuyển sang nó (hoặc giữ nguyên) không giải quyết gì.
-
D (xoá các tệp không dùng khỏi file system) — đi ngược lại: với chế độ Bursting, dung lượng ÍT HƠN nghĩa là thông lượng cơ sở THẤP HƠN, làm vấn đề tệ thêm.
-
C (bật mã hoá khi truyền) — mã hoá không cải thiện hiệu năng; nếu có thì nó thêm một chút chi phí tính toán.
Ghi nhớ
⚠ Ba chế độ thông lượng của EFS — bảng phải thuộc: | Chế độ | Cơ chế | Dùng khi | |---|---|---| | Elastic | tự co giãn, trả theo lượng đọc/ghi | tải BIẾN ĐỘNG — mặc định hiện nay | | Provisioned | khai thẳng MB/s | tải cao ỔN ĐỊNH, dữ liệu ít | | Bursting | thông lượng theo DUNG LƯỢNG + burst credit | dữ liệu lớn, tải nhẹ | | Triệu chứng Bursting cạn | BurstCreditBalance về 0, độ trễ tăng | |
Từ khoá nhận diện:
"dữ liệu ít, tải cao, độ trễ tăng" → Provisioned (hoặc Elastic) Throughput "tải biến động khó đoán" → Elastic Throughput "độ trễ EFS cao" → kiểm tra
BurstCreditBalancetrước tiên "cần thông lượng cực cao cho HPC" → FSx for Lustre "chi phí EFS cao" → lifecycle policy chuyển sang IA / Archive
| Chỉ số EFS cần theo dõi | Ý nghĩa |
|---|---|
BurstCreditBalance |
về 0 là bị bóp — triệu chứng của đề này |
PermittedThroughput |
thông lượng đang được phép, tính bằng byte/giây |
MeteredIOBytes |
lượng đọc/ghi thật |
PercentIOLimit |
chỉ với chế độ Max I/O — gần 100% là nghẽn |
ClientConnections |
số máy đang gắn kết |
| Alarm nên có | BurstCreditBalance xuống dưới ngưỡng |
| Hai chế độ HIỆU NĂNG (khác với chế độ thông lượng) | Nội dung |
|---|---|
| General Purpose | độ trễ thấp nhất — mặc định, hợp hầu hết trường hợp |
| Max I/O | thông lượng cao hơn nhưng ĐỘ TRỄ CAO HƠN — cho hàng nghìn máy |
| Lưu ý | không đổi được sau khi tạo |
| Với Elastic Throughput | AWS khuyến nghị General Purpose |
| Các lớp lưu trữ EFS — giảm chi phí | 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 |
| 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 |
| Tối ưu hiệu năng EFS ở phía client | Cách |
|---|---|
Dùng amazon-efs-utils |
tối ưu hơn NFS client thường |
Tăng rsize/wsize |
mặc định của efs-utils đã tốt |
| Nhiều thread song song | EFS mở rộng theo số kết nối đồng thời |
| Tránh rất nhiều tệp nhỏ | mỗi thao tác metadata là một vòng đi-về |
| Cân nhắc | nếu cần độ trễ cực thấp cho một máy → dùng EBS |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Có cạn credit không | vẽ BurstCreditBalance trong khung giờ chậm | | Đang ở chế độ nào | describe-file-systems → ThroughputMode | | Thông lượng thật là bao nhiêu | PermittedThroughput và MeteredIOBytes |
Và một điều nghe rất phản trực giác nhưng đúng với chế độ Bursting: file system càng ít dữ liệu thì càng chậm. Đó là lý do một số đội từng "khắc phục" bằng cách nạp thêm dữ liệu rác vào EFS để tăng thông lượng cơ sở — một cách làm có hiệu quả thật nhưng rất lãng phí, và Provisioned hoặc Elastic Throughput chính là câu trả lời đúng cho vấn đề đó.
A SysOps administrator is checking some performance data for an Amazon EC2 instance in Amazon CloudWatch. The administrator reviews the DiskReadBytes metric and notices that the metric shows that 0 bytes have been read during the day.
What is the most likely explanation for the metric value showing 0 bytes?
-
A
An instance store volume is not attached to the EC2 instance.
-
B
An Amazon EBS volume is not attached to the EC2 instance.
-
C
The CloudWatch agent is not installed on the EC2 instance.
-
D
Detailed monitoring is not enabled on the EC2 instance.
Xem giải thích
Đáp án
A — Instance store volume KHÔNG được gắn vào máy EC2.
Vì sao đúng
Đây là một chi tiết rất dễ nhầm: chỉ số DiskReadBytes của EC2 KHÔNG đo hoạt động của EBS.
⚠ Điểm mấu chốt — hai họ chỉ số đĩa hoàn toàn khác nhau:
DiskReadBytes / DiskWriteBytes
DiskReadOps / DiskWriteOps
↓
→ ĐO INSTANCE STORE (ổ đĩa cục bộ, ephemeral)
↓
Máy KHÔNG CÓ instance store
↓
→ chỉ số luôn bằng 0
→ đúng hiện tượng trong đề
VolumeReadBytes / VolumeWriteBytes
VolumeReadOps / VolumeWriteOps
VolumeQueueLength, VolumeIdleTime
↓
→ ĐO EBS VOLUME
↓
Namespace: AWS/EBS
⚠ Vì sao rất nhiều máy có chỉ số này bằng 0:
Phần lớn loại instance hiện đại
(t3, m5, c5, r5…)
↓
KHÔNG CÓ instance store
↓
→ DiskReadBytes luôn 0
→ hoàn toàn bình thường, không phải lỗi
↓
Các họ CÓ instance store:
hậu tố `d` → m5d, c5d, r5d, i3, i4i
họ lưu trữ → d3, h1
↓
→ chỉ những máy này mới có số liệu
⚠ Và nhớ: chỉ số đĩa của hypervisor KHÔNG cho biết dung lượng còn trống:
Muốn biết ổ còn bao nhiêu chỗ
↓
→ PHẢI cài CloudWatch agent
→ chỉ số disk_used_percent
↓
Hypervisor chỉ thấy HOẠT ĐỘNG đọc ghi,
không thấy bên trong file system
Vì sao các phương án khác sai
-
B (EBS volume không được gắn vào máy) — đây là phương án gần nhất và là nhầm lẫn phổ biến nhất về chủ đề này, nhưng hoạt động của EBS được đo bằng
VolumeReadBytes, không phảiDiskReadBytes. Hơn nữa mọi máy EBS-backed đều có ít nhất một volume gốc, nên tình huống này gần như không thể xảy ra. -
C (chưa cài CloudWatch agent) —
DiskReadByteslà chỉ số có sẵn từ hypervisor, không cần agent. Agent chỉ cần cho bộ nhớ và dung lượng đĩa đã dùng. -
D (chưa bật detailed monitoring) — detailed monitoring chỉ tăng tần suất từ 5 phút xuống 1 phút, không thêm chỉ số mới và không làm giá trị 0 thành khác 0.
Ghi nhớ
⚠ Chỉ số đĩa — đo cái gì, bảng phải thuộc: | Chỉ số | Đo gì | Namespace | |---|---|---| | DiskReadBytes / DiskWriteBytes | INSTANCE STORE | AWS/EC2 | | DiskReadOps / DiskWriteOps | INSTANCE STORE | AWS/EC2 | | VolumeReadBytes / VolumeWriteBytes | EBS | AWS/EBS | | VolumeQueueLength | hàng đợi I/O của EBS — cao là nghẽn | AWS/EBS | | EBSReadBytes / EBSWriteBytes | EBS, nhìn từ phía instance (máy hỗ trợ) | AWS/EC2 | | disk_used_percent | dung lượng đã dùng — CẦN AGENT | CWAgent |
Từ khoá nhận diện:
"
DiskReadBytesbằng 0" → máy không có instance store — bình thường "hoạt động của EBS" →VolumeReadBytes, namespaceAWS/EBS"dung lượng đĩa còn lại" → CloudWatch agent "detailed monitoring" → chỉ đổi TẦN SUẤT, không thêm chỉ số "EBS chậm" →VolumeQueueLength,EBSIOBalance%,EBSByteBalance%
| Instance store ↔ EBS — bảng phải thuộc | Khác nhau |
|---|---|
| Instance store | ổ vật lý gắn trực tiếp, TỐC ĐỘ CAO NHẤT |
| Instance store | MẤT DỮ LIỆU khi stop/terminate |
| EBS | ổ mạng, BỀN, tồn tại độc lập với máy |
| EBS | snapshot được, gắn lại được, mã hoá được |
| Instance store dùng cho | cache, dữ liệu tạm, thư mục scratch |
| Nhận biết | loại máy có hậu tố d, hoặc họ i, d, h |
| Chẩn đoán EBS chậm | Chỉ số |
|---|---|
VolumeQueueLength |
cao kéo dài là I/O đang xếp hàng |
VolumeReadOps / WriteOps |
so với IOPS đã cấp phát |
EBSIOBalance% |
credit I/O còn lại (với gp2 và họ T) |
EBSByteBalance% |
credit thông lượng |
VolumeIdleTime |
thời gian rảnh |
| Cách chữa | gp3 với IOPS/thông lượng cấp phát riêng, hoặc io2 |
| gp2 ↔ gp3 — nên biết | Khác nhau |
|---|---|
| gp2 | IOPS gắn với dung lượng (3 IOPS mỗi GB), có burst credit |
| gp3 | IOPS và thông lượng cấp phát ĐỘC LẬP với dung lượng |
| Cơ sở gp3 | 3.000 IOPS và 125 MB/s miễn phí |
| Chi phí | gp3 thường RẺ HƠN gp2 khoảng 20% |
| Khuyến nghị | chuyển gp2 sang gp3 — đổi tại chỗ, không gián đoạn |
| Chỉ số nào cần agent — nhắc lại | Nội dung |
|---|---|
| Có sẵn | CPU, mạng, Disk*/Volume*, status check |
| Cần agent | bộ nhớ, dung lượng đĩa đã dùng, inode, swap, procstat |
| Agent | unified CloudWatch agent |
| Namespace | CWAgent |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Máy có instance store không | describe-instances → xem InstanceStoreSupported của loại máy | | Hoạt động EBS thế nào | CloudWatch → namespace AWS/EBS → VolumeReadBytes | | Ổ còn bao nhiêu chỗ | cài CloudWatch agent, hoặc df -h trên máy |
Và một hệ quả thực tế của sự nhầm lẫn này: nhiều đội dựng dashboard theo dõi I/O bằng DiskReadBytes rồi thấy đường đồ thị phẳng lì ở 0 và kết luận hệ thống rất nhàn. Trong khi thực tế toàn bộ hoạt động đọc ghi đang diễn ra trên EBS và được ghi ở một namespace hoàn toàn khác — nên khi chọn chỉ số cho dashboard, hãy kiểm tra namespace trước khi tin vào một đường đồ thị đẹp.
An Amazon RDS database is encrypted using a customer managed AWS KMS key. Snapshots of the database need to be shared with another AWS account owned by the same company. The database must always remain encrypted.
How can a SysOps administrator share the encrypted database snapshots?
-
A
Add the second AWS account as a key user in the key policy of the customer managed KMS key that is used to encrypt the database. Copy and share the database snapshot with the target account using the KMS key.
-
B
Extract the data from the database snapshot using an AWS Lambda function and write it to an encrypted Amazon S3 bucket. Use a second AWS Lambda function in the target account that retrieves the data from bucket and creates an encrypted snapshot.
-
C
Create an unencrypted copy of the database snapshot. Share the database snapshot with the target account and use a customer managed KMS key to encrypt the snapshot.
-
D
Create a copy of the database snapshot and encrypt it with the default AWS KMS encryption key. Add the second AWS account as a key user in the key policy of the KMS key. Copy and share the database snapshot with the target account.
Xem giải thích
Đáp án
A — Thêm tài khoản thứ hai làm KEY USER trong key policy của customer managed KMS key, rồi COPY và CHIA SẺ snapshot với tài khoản đích bằng chính khoá đó.
Vì sao đúng
Có một quy tắc rất cứng: chia sẻ snapshot mã hoá thì phải chia sẻ CẢ KHOÁ.
⚠ Điểm mấu chốt — snapshot mã hoá không tự đọc được ở tài khoản khác:
Snapshot được mã hoá bằng CMK ở tài khoản A
↓
Chia sẻ snapshot với tài khoản B
↓
Tài khoản B THẤY snapshot
↓
Nhưng KHÔNG có quyền dùng khoá
↓
→ không copy được, không khôi phục được
→ lỗi AccessDenied liên quan tới KMS
↓
→ PHẢI cấp quyền dùng khoá cho tài khoản B
trong KEY POLICY
⚠ Quyền KMS cần cấp cho tài khoản đích:
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<tai-khoan-B>:root"
},
"Action": [
"kms:Decrypt",
"kms:DescribeKey",
"kms:CreateGrant",
"kms:GenerateDataKey*",
"kms:ReEncrypt*"
],
"Resource": "*"
}
⚠ Và một quy tắc TUYỆT ĐỐI phải nhớ:
KHOÁ MẶC ĐỊNH CỦA AWS (aws/rds)
↓
KHÔNG chia sẻ liên tài khoản được
KHÔNG sửa key policy được
↓
→ snapshot mã hoá bằng aws/rds
KHÔNG BAO GIỜ chia sẻ được
↓
→ BẮT BUỘC dùng CUSTOMER MANAGED KEY
↓
Đây là lý do phương án D sai
⚠ Quy trình đầy đủ, ba bước:
1. Tài khoản A: sửa KEY POLICY,
thêm tài khoản B làm key user
↓
2. Tài khoản A: chia sẻ snapshot
modify-db-snapshot-attribute
--attribute-name restore
--values-to-add <tai-khoan-B>
↓
3. Tài khoản B: COPY snapshot về,
mã hoá lại bằng KHOÁ CỦA CHÍNH HỌ
copy-db-snapshot --kms-key-id <CMK-cua-B>
↓
→ tài khoản B có bản độc lập
→ A xoá snapshot cũng không ảnh hưởng
Xem thêm câu #11867 (lô 128): cùng chủ đề chia sẻ snapshot RDS, ở đó trọng tâm là snapshot TỰ ĐỘNG không chia sẻ được, phải dùng snapshot THỦ CÔNG. Khoá nhất quán.
Vì sao các phương án khác sai
-
D (copy snapshot rồi mã hoá bằng KHOÁ MẶC ĐỊNH của AWS, thêm tài khoản thứ hai làm key user) — đây là phương án gần nhất và quy trình gần đúng, nhưng không thêm key user vào khoá mặc định
aws/rdsđược — key policy của khoá do AWS quản lý là không sửa được. -
C (tạo bản copy KHÔNG mã hoá rồi chia sẻ) — vi phạm thẳng yêu cầu "CSDL phải luôn được mã hoá". Và đó cũng là một rủi ro bảo mật thật.
-
B (dùng Lambda trích dữ liệu ra S3 rồi Lambda thứ hai tạo lại snapshot) — tự dựng lại một quy trình rất phức tạp cho việc mà AWS đã có sẵn cơ chế; rủi ro mất hoặc sai dữ liệu rất cao.
Ghi nhớ
⚠ Chia sẻ snapshot RDS — bảng phải thuộc: | Loại snapshot | Chia sẻ được | |---|---| | Manual, KHÔNG mã hoá | được, đơn giản | | Manual, mã hoá bằng CUSTOMER MANAGED KEY | được — phải chia sẻ CẢ KHOÁ | | Manual, mã hoá bằng aws/rds | KHÔNG BAO GIỜ | | Automated snapshot | KHÔNG — phải copy thành manual trước | | Chia sẻ công khai | KHÔNG với snapshot mã hoá |
Từ khoá nhận diện:
"chia sẻ snapshot mã hoá" → customer managed key + chia sẻ key policy "snapshot tự động" → KHÔNG chia sẻ được — copy thành manual trước "khoá mặc định
aws/rds" → không chia sẻ liên tài khoản được "tự động hoá việc sao chép định kỳ" → AWS Backup với cross-account copy "mã hoá CSDL đã tồn tại" → snapshot → copy có mã hoá → restore
| Ba loại khoá KMS — nhắc lại | Nội dung |
|---|---|
| AWS owned key | không thấy, không kiểm soát |
AWS managed key (aws/rds) |
không sửa key policy, KHÔNG chia sẻ được |
| Customer managed key | toàn quyền: policy, grant, xoay, chia sẻ |
| Kết luận | cần chia sẻ hay kiểm toán → luôn dùng customer managed |
| Quyền KMS cần cho tài khoản đích | Nội dung |
|---|---|
kms:Decrypt |
giải mã dữ liệu |
kms:DescribeKey |
đọc thông tin khoá |
kms:CreateGrant |
RDS tạo grant thay mặt |
kms:GenerateDataKey* |
sinh khoá dữ liệu |
kms:ReEncrypt* |
mã hoá lại khi copy |
| Ghi ở đâu | key policy — IAM policy một mình không đủ |
| Vì sao nên COPY ở tài khoản đích | Nội dung |
|---|---|
| Snapshot được chia sẻ | vẫn thuộc sở hữu tài khoản NGUỒN |
| Rủi ro | nguồn xoá snapshot → đích mất luôn |
| Sau khi copy | đích có bản riêng, mã hoá bằng khoá của họ |
| Lợi ích thêm | không còn phụ thuộc vào key policy của nguồn |
| AWS Backup — cách hiện đại hơn | Nội dung |
|---|---|
| Cross-account copy | tự động theo lịch |
| Cross-Region copy | cho khôi phục thảm hoạ |
| Backup vault lock | sao lưu bất biến — chống ransomware |
| Bao phủ | RDS, EBS, EFS, DynamoDB, S3, FSx, EC2 |
| Phù hợp khi | cần sao chép định kỳ, không muốn chạy tay |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Snapshot đã chia sẻ chưa | describe-db-snapshot-attributes | | Key policy có đúng không | get-key-policy --key-id ... --policy-name default | | Tài khoản đích copy được không | ở tài khoản B: copy-db-snapshot — lỗi thường là thiếu quyền KMS |
Và một lời khuyên nên áp dụng ngay từ khi tạo CSDL: luôn mã hoá bằng customer managed key thay vì khoá mặc định aws/rds. Chi phí gần như không đáng kể, nhưng nó giữ cho bạn khả năng chia sẻ snapshot, khả năng kiểm toán việc dùng khoá qua CloudTrail, và khả năng thu hồi quyền truy cập — ba thứ mà khoá mặc định không bao giờ cho bạn.
A stateless web application runs on a fleet of Amazon EC2 instances. Amazon Route 53 is used to direct incoming traffic using a multivalue answer routing policy. A SysOps administrator attempted to add more instances ahead of an expected increase in demand and experienced an InstanceLimitExceeded error.
What should the SysOps administrator do to resolve this error?
-
A
Launch new EC2 instances in another VPC.
-
B
Use Service Quotas to request an EC2 quota increase.
-
C
Add new EC2 instances in a placement group.
-
D
Launch the EC2 instances in a different Availability Zone.
Xem giải thích
Đáp án
B — Dùng SERVICE QUOTAS để xin TĂNG HẠN MỨC EC2.
Vì sao đúng
Lỗi InstanceLimitExceeded có đúng một nghĩa: tài khoản đã chạm hạn mức số instance (tính bằng vCPU) trong Region đó.
⚠ Điểm mấu chốt — hạn mức theo TÀI KHOẢN và theo REGION:
InstanceLimitExceeded
↓
Không phải AWS hết máy
Không phải AZ nào có vấn đề
↓
→ là TRẦN do AWS đặt cho tài khoản của bạn
↓
Phạm vi: THEO REGION, THEO TÀI KHOẢN
↓
→ đổi AZ, đổi VPC, đổi subnet
đều KHÔNG giúp gì
⚠ Đơn vị hạn mức nay là vCPU:
"Running On-Demand Standard
(A, C, D, H, I, M, R, T, Z) instances"
↓
Tính bằng SỐ vCPU, không phải số máy
↓
m5.4xlarge = 16 vCPU
→ hạn mức 640 vCPU chỉ đủ cho 40 máy
↓
→ chạm trần nhanh hơn nhiều so với cảm giác
⚠ Xin tăng và chuẩn bị trước:
Service Quotas console
↓
Tìm đúng quota → Request increase
↓
Một số duyệt TỰ ĐỘNG trong vài phút
Yêu cầu lớn → qua Support, có thể vài NGÀY
↓
Đề nói "ahead of an expected increase in demand"
↓
→ xin TRƯỚC vài ngày là việc phải làm
→ và đặt alarm ở 80% để lần sau biết sớm
Xem thêm câu #11945 (CÙNG LÔ): gần như cùng một câu hỏi, cùng đáp án Service Quotas. Chỉ khác chữ cái vì bộ đề xáo thứ tự phương án (ở đó là D, ở đây là B). Và #11822 (lô 127): cùng chủ đề chạm hạn mức, ở đó là hạn mức 5 VPC mỗi Region. Khoá nhất quán ở cả ba câu.
Vì sao các phương án khác sai
-
D (khởi chạy ở một Availability Zone khác) — đây là phương án gần nhất và đúng cho một lỗi KHÁC:
InsufficientInstanceCapacity(AWS tạm hết năng lực ở AZ đó). Nhưng hạn mức thì áp cho cả Region, nên đổi AZ không giúp gì. -
A (khởi chạy ở một VPC khác) — hạn mức không liên quan gì tới VPC.
-
C (thêm máy vào một placement group) — placement group ảnh hưởng tới VỊ TRÍ ĐẶT MÁY, không nâng hạn mức. (Thực tế nó còn có thể làm khó hơn vì đòi năng lực liền kề nhau.)
Ghi nhớ
⚠ Hai lỗi rất dễ nhầm — bảng phải thuộc: | Lỗi | Nghĩa | Cách xử lý | |---|---|---| | InstanceLimitExceeded | chạm HẠN MỨC của tài khoản | xin tăng qua Service Quotas | | InsufficientInstanceCapacity | AWS tạm hết năng lực ở AZ đó | đổi AZ, đổi loại máy, thử lại sau | | VcpuLimitExceeded | chạm hạn mức vCPU | xin tăng | | RequestLimitExceeded | gọi API quá nhanh | backoff luỹ thừa | | SpotMaxPriceTooLow | giá Spot đặt quá thấp | nâng giá trần |
Từ khoá nhận diện:
"InstanceLimitExceeded" → Service Quotas "InsufficientInstanceCapacity" → đổi AZ hoặc loại máy — không phải hạn mức "phải chắc chắn có máy" → Capacity Reservation "sắp chạm hạn mức" → CloudWatch alarm trên
AWS/Usage"chuẩn bị cho đợt tăng tải đã biết trước" → xin tăng hạn mức TRƯỚC vài ngày
| Hạn mức EC2 — điều phải nhớ | Nội dung |
|---|---|
| Đơn vị | vCPU, không phải số instance |
| Phạm vi | theo REGION và theo TÀI KHOẢN |
| Tách bạch | Standard / GPU (G,P) / Inf,Trn / Spot / Dedicated Host |
| Xem ở đâu | Service Quotas, chỉ số AWS/Usage |
| Nâng | một số tự động duyệt, số lớn qua Support |
| Chuẩn bị cho đợt tăng tải đã biết trước | Bước |
|---|---|
| 1 | Tính tổng vCPU cần cho mức đỉnh |
| 2 | So với hạn mức hiện tại, xin tăng dư một khoảng |
| 3 | Xin trước vài ngày, đừng đợi tới hôm sự kiện |
| 4 | Cân nhắc Capacity Reservation nếu không được phép thiếu máy |
| 5 | Đa dạng hoá loại instance và AZ trong launch template |
| 6 | Scheduled scaling nếu biết trước khung giờ |
| Theo dõi hạn mức chủ động | Cách |
|---|---|
CloudWatch alarm trên AWS/Usage |
metric math: (m1/SERVICE_QUOTA(m1))*100 |
| Service Quotas console | xem mức dùng và xin tăng |
| Trusted Advisor → Service Limits | rà soát định kỳ |
| Quota Request Template | áp cho tài khoản mới trong Organizations |
| Nhân rộng | dựng alarm bằng StackSets |
| Nếu vẫn thiếu máy sau khi đã nâng hạn mức | Cách |
|---|---|
| Đa dạng hoá loại instance | 10-15 loại tương đương trong ASG |
| Đa dạng hoá AZ | dùng mọi AZ trong Region |
| Capacity Reservation | giữ chỗ trước cho phần quan trọng |
Spot với price-capacity-optimized |
cho phần chịu được gián đoạn |
| Kiến trúc | cân nhắc trải sang Region thứ hai |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Hạn mức hiện tại | Service Quotas → "Running On-Demand Standard instances" | | Đang dùng bao nhiêu vCPU | chỉ số AWS/Usage, hoặc cộng từ describe-instances | | Yêu cầu tăng tới đâu | list-requested-service-quota-change-history |
Và một việc rất nên làm ngay sau khi xử lý xong sự cố này: đặt CloudWatch alarm ở mức 80% hạn mức vCPU cho mọi Region đang dùng. Chi phí gần như bằng không, và nó biến một sự cố phát hiện giữa lúc triển khai thành một thông báo đến vài tuần trước đó — đúng khoảng thời gian cần để một yêu cầu nâng hạn mức lớn được duyệt.
A SysOps administrator has been asked to review an IAM policy that has been created to allow a new hire to access specific AWS services. The following policy is presented:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"rds:CreateDBInstance",
"elasticloadbalancing:*",
"lambda:*",
"sns:ListTopics*"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
Which actions does this policy allow? (Select TWO.)
-
A
Delete an Amazon RDS database.
-
B
Describe AWS load balancers.
-
C
Create an IAM role for an AWS Lambda function.
-
D
Delete an Amazon SNS topic.
-
E
Invoke an AWS Lambda function.
Xem giải thích
Đáp án
B và E — MÔ TẢ (describe) các load balancer, và GỌI (invoke) một hàm AWS Lambda.
Vì sao đúng
Chính sách cấp bốn nhóm quyền, và chỉ cần đọc kỹ dấu * đặt ở đâu.
⚠ Điểm mấu chốt — đọc từng dòng Action:
"rds:CreateDBInstance"
↓
→ CHỈ tạo instance RDS
→ KHÔNG có Delete, KHÔNG có Modify
"elasticloadbalancing:*"
↓
→ MỌI hành động với load balancer
→ bao gồm DescribeLoadBalancers ← đáp án B
"lambda:*"
↓
→ MỌI hành động với Lambda
→ bao gồm InvokeFunction ← đáp án E
"sns:ListTopics*"
↓
→ chỉ các action BẮT ĐẦU bằng ListTopics
→ KHÔNG có DeleteTopic
⚠ Vì sao lambda:* KHÔNG cho tạo IAM role:
Tạo role cho Lambda cần:
↓
iam:CreateRole
iam:AttachRolePolicy
iam:PassRole
↓
Đây là các action của DỊCH VỤ IAM,
không phải của Lambda
↓
→ `lambda:*` không bao gồm chúng
→ phương án C sai
↓
Đây là bẫy rất hay gặp: mỗi tiền tố dịch vụ
chỉ phủ action của CHÍNH dịch vụ đó
⚠ Và một điều nữa cần nhớ về Resource: "*":
Resource: "*"
↓
→ mọi tài nguyên trong tài khoản
↓
Kết hợp với `lambda:*` và
`elasticloadbalancing:*`
↓
→ người mới này XOÁ được mọi hàm Lambda
và mọi load balancer
↓
→ chính sách QUÁ RỘNG cho một người mới vào
Vì sao các phương án khác sai
-
A (xoá một CSDL RDS) — đây là phương án gần nhất vì chính sách có nhắc tới RDS, nhưng chỉ cấp đúng
rds:CreateDBInstance. Xoá cầnrds:DeleteDBInstance— không có trong danh sách. -
D (xoá một SNS topic) — chính sách chỉ cấp
sns:ListTopics*. Xoá cầnsns:DeleteTopic. -
C (tạo IAM role cho một hàm Lambda) — cần
iam:CreateRolevàiam:PassRole, thuộc dịch vụ IAM, không nằm tronglambda:*.
Ghi nhớ
⚠ Đọc một IAM policy — bảng phải thuộc: | Trường | Ý nghĩa | |---|---| | Version | luôn là "2012-10-17" — không phải ngày tháng bạn đặt | | Effect | Allow hoặc Deny | | Action | dichvu:HanhDong — wildcard * áp trong CÙNG dịch vụ | | Resource | ARN — "*" là mọi tài nguyên | | Principal | chỉ có trong resource policy, không có trong identity policy | | Condition | ràng buộc thêm |
Từ khoá nhận diện:
"
dichvu:*" → mọi action CỦA DỊCH VỤ ĐÓ, không lan sang dịch vụ khác "iam:PassRole" → cần khi giao một role cho dịch vụ khác dùng "chính sách quá rộng" → IAM Access Analyzer, siết theo dữ liệu thật "Deny thắng Allow" → explicit Deny luôn thắng "chính sách không có tác dụng" → kiểm tra SCP, permissions boundary, Resource
| Cách IAM quyết định cho phép hay không | Thứ tự |
|---|---|
| 1 | Explicit DENY ở bất kỳ đâu → TỪ CHỐI (SCP, identity, resource, session, boundary) |
| 2 | SCP phải cho phép |
| 3 | Permissions boundary phải cho phép |
| 4 | Session policy phải cho phép |
| 5 | Identity policy hoặc resource policy phải có Allow |
| Mặc định | không có Allow → TỪ CHỐI |
iam:PassRole — quyền hay bị bỏ sót |
Nội dung |
|---|---|
| Khi nào cần | giao một IAM role cho một dịch vụ (Lambda, EC2, ECS…) |
| Vì sao quan trọng | không kiểm soát → người dùng tự nâng quyền bằng cách gán role mạnh |
| Cách siết | Resource giới hạn đúng các role được phép truyền |
| Kèm theo | Condition: iam:PassedToService |
| Triệu chứng thiếu | tạo được hàm nhưng không gán được role |
| Thu hẹp một chính sách quá rộng | Bước |
|---|---|
| 1 | IAM Access Advisor — dịch vụ nào thực sự được dùng |
| 2 | Access Analyzer policy generation — sinh chính sách từ CloudTrail |
| 3 | Thay dichvu:* bằng danh sách action cụ thể |
| 4 | Siết Resource về đúng ARN cần |
| 5 | Thêm Condition (Region, tag, MFA) |
| 6 | Permissions boundary nếu người đó tạo được role |
| Các mẫu action hay ra thi | Nội dung |
|---|---|
s3:Get* |
mọi action bắt đầu bằng Get |
ec2:Describe* |
mọi action đọc thông tin |
sns:ListTopics* |
chỉ ListTopics và biến thể — không phải mọi List |
* một mình trong Action |
toàn quyền — chỉ dùng cho quản trị |
| Nhớ | wildcard KHÔNG lan sang dịch vụ khác |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Một action cụ thể có được phép không | IAM Policy Simulator | | Người dùng thực sự dùng gì | Access Advisor, tab "Last accessed" | | Vì sao bị từ chối | CloudTrail — errorMessage nói rõ chính sách nào chặn |
Và một công cụ nên dùng thay cho việc đọc chính sách bằng mắt: IAM Policy Simulator. Nó nhận vào một danh tính, một action và một tài nguyên, rồi trả lời cho phép hay từ chối kèm lý do — bao gồm cả ảnh hưởng của SCP và permissions boundary, những thứ rất khó suy ra chỉ bằng cách đọc một tài liệu JSON đơn lẻ.
An AWS Lambda function is used to process data received by a web application and store the processed data in an Amazon RDS database. The credentials for accessing the RDS database are stored in the Lambda function code.
A SysOps administrator needs to update the configuration so the database credentials are not stored in plaintext and the password is rotated every 30 days.
Which solution will meet these requirements in the MOST operationally efficient manner?
-
A
Use AWS Systems Manager Parameter Store to create a secure string to store credentials for the database. Create a custom Lambda function that rotates the password. Use Amazon EventBridge to schedule the custom function to run every 30 days. Update the Lambda function to use the credentials from Parameter Store.
-
B
Use AWS Key Management Service (KMS) to create a key that can encrypt the database password. Create a custom Lambda function that rotates the password and uses the KMS key to encrypt it. Store the encrypted password in environment variables.
-
C
Use AWS Secrets Manager to store credentials for the database. Create a secret in Secrets Manager, select the RDS database, and configure and automatic rotation schedule. Update the Lambda function to use the credentials stored from Secrets Manager.
-
D
Use AWS Certificate Manager to create a public certificate that automatically rotates every 30 days. Update the RDS database to use certificate-based authentication and configure the Lambda function with the private key.
Xem giải thích
Đáp án
C — Dùng AWS SECRETS MANAGER: tạo secret cho CSDL, chọn instance RDS, cấu hình lịch XOAY TỰ ĐỘNG, và sửa hàm Lambda đọc thông tin đăng nhập từ đó.
Vì sao đúng
Đề đòi hai thứ — không lưu mật khẩu dạng thô, và xoay mỗi 30 ngày — với ít công vận hành nhất. Chỉ Secrets Manager 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:
Chọn "Credentials for Amazon 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 từng động cơ)
↓
Đặt chu kỳ: 30 ngày
↓
→ KHÔNG viết một dòng mã xoay nào
⚠ Và chiến lược bốn nhãn giữ cho ứng dụng không đứt:
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
ĐÃ KẾT NỐI THÀNH CÔNG
→ không có khoảng thời gian mất kết nối
⚠ Lambda đọc secret thế nào cho hiệu quả:
Gọi GetSecretValue qua SDK
↓
Quyền: secretsmanager:GetSecretValue
trên ĐÚNG ARN của secret đó
↓
CACHE trong biến toàn cục
→ tái sử dụng qua các lần gọi
→ làm mới khi gặp lỗi xác thực
↓
Hoặc dùng LAMBDA EXTENSION của
Parameter Store & Secrets Manager
→ có cache sẵn, không phải tự viết
Xem thêm câu #11844 (lô 128): gần như cùng một câu hỏi, cùng đáp án Secrets Manager với xoay tự động. Chỉ khác chữ cái vì bộ đề xáo thứ tự phương án (ở đó là D, ở đây là C). Khoá nhất quán.
Vì sao các phương án khác sai
-
A (Parameter Store 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. Trái với "hiệu quả vận hành nhất".
-
B (dùng KMS mã hoá mật khẩu rồi lưu vào biến môi trường) — mỗi lần xoay phải cập nhật biến môi trường và triển khai lại hàm; rất nhiều việc và dễ sót.
-
D (dùng ACM tạo chứng chỉ công khai tự xoay 30 ngày, xác thực CSDL bằng chứng chỉ) — hiểu sai vai trò của ACM: chứng chỉ công khai dùng cho TLS của website, không phải để xác thực người dùng CSDL. (Xác thực không mật khẩu cho RDS là IAM database authentication, một cơ chế khác hẳn.)
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 | Standard MIỄN PHÍ | | Sao chép đa Region | có sẵn | không | | Chia sẻ liên 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ố |
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ùng tính năng có sẵn, đừng tự viết "mật khẩu trong biến môi trường" → luôn SAI "bỏ hẳn mật khẩu CSDL" → IAM database authentication
| Hai chiến lược xoay | Nội dung |
|---|---|
| Một người dùng | đổ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 | hai tài khoản CSDL đổi nhau — KHÔNG gián đoạn |
| Khuyến nghị production | luân phiên hai người dùng |
| Điều kiện | cần một tài khoản quản trị để tạo/sửa user |
| Lambda + CSDL — thực hành tốt | Nội dung |
|---|---|
| Cache secret | trong biến toàn cục, làm mới khi lỗi xác thực |
| Lambda extension | của Parameter Store & Secrets Manager — có cache sẵn |
| RDS Proxy | gộp kết nối VÀ tự lấy secret — rất hợp với Lambda |
| Quyền | chỉ GetSecretValue trên đúng ARN |
| Mã hoá | CMK riêng nếu cần kiểm toán việc dùng khoá |
| IAM database authentication — lựa chọn không mật khẩu | Nội dung |
|---|---|
| Cơ chế | sinh TOKEN tạm thời (15 phút) từ IAM |
| Lợi ích | không có mật khẩu nào để lưu hay để xoay |
| Hỗ trợ | MySQL, PostgreSQL, MariaDB, Aurora |
| Giới hạn | có trần số kết nối mỗi giây |
| Kết hợp | thường dùng cùng RDS Proxy |
| Theo dõi việc xoay | Nội dung |
|---|---|
RotationEnabled, RotationRules |
describe-secret |
LastRotatedDate |
lần xoay gần nhất |
| Alarm trên lỗi của hàm xoay | bắt buộc nên có |
| CloudTrail | ghi mọi GetSecretValue — biết ai đọc bí mật |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Lịch xoay đã bật chưa | describe-secret → RotationEnabled | | Xoay có hỏng không | CloudWatch Logs của hàm xoay | | Ứng dụng có chịu được không | rotate-secret --rotate-immediately ở staging |
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. Đây là tác vụ chỉ 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à mọi hàm Lambda đồng loạt mất kết nối tới CSDL.