Ngân hàng đề — AWS Certified SysOps Administrator Associate
Tìm thấy 936 câu.
A media company uses Amazon EC2 instances with EBS volumes as the instance storage. The volumes have scheduled backups as part of the maintenance plans mandated by the company. One of the EBS volumes shows the status of error.
As a SysOps Administrator, how will you restore the data and get the EBS volume working again?
-
A
The
errorstatus indicates that the communication channel between EBS volume and the instance has been disrupted. Restart the instance to fix the error -
B
You can restore the EBS volume from Amazon Data Lifecycle Manager, by shifting the volume to another EC2 instance configured with the Data Lifecycle Manager
-
C
Restart the instance the EBS volume is connected to. In case the data doesn't show up, you can restore the data from the scheduled backups
-
D
The
errorstatus indicates that the underlying hardware related to the EBS volume has failed. The given EBS volume cannot be recovered but the data can be restored from the backup to a new EBS volume
Xem giải thích
Đáp án
D — Trạng thái error cho biết phần cứng bên dưới của EBS volume đã hỏng. Volume đó KHÔNG khôi phục được, nhưng dữ liệu khôi phục được từ bản sao lưu sang một volume MỚI.
Vì sao đúng
Trạng thái error của EBS có một ý nghĩa rất cụ thể và rất dứt khoát.
⚠ Điểm mấu chốt — error nghĩa là hỏng phần cứng, không phải hỏng kết nối:
EBS volume ở trạng thái "error"
↓
Hạ tầng lưu trữ bên dưới đã hỏng
và AWS KHÔNG khôi phục được volume đó
↓
→ khởi động lại instance KHÔNG giúp gì
→ tháo ra gắn lại KHÔNG giúp gì
↓
→ cách duy nhất: TẠO VOLUME MỚI từ snapshot
⚠ Quy trình khôi phục:
# 1. Tìm snapshot gần nhất của volume hỏng
aws ec2 describe-snapshots --owner-ids self \
--filters Name=volume-id,Values=vol-xxxxxxxx \
--query 'sort_by(Snapshots,&StartTime)[-1]'
# 2. Tạo volume mới từ snapshot đó, CÙNG AZ với instance
aws ec2 create-volume --snapshot-id snap-xxxx \
--availability-zone ap-southeast-1a --volume-type gp3
# 3. Tháo volume hỏng, gắn volume mới vào cùng device name
aws ec2 detach-volume --volume-id vol-hong --force
aws ec2 attach-volume --volume-id vol-moi \
--instance-id i-xxxx --device /dev/xvdf
⚠ Và điều quan trọng nhất phải chấp nhận:
Bạn MẤT toàn bộ dữ liệu phát sinh SAU snapshot gần nhất
↓
→ khoảng cách giữa hai snapshot chính là RPO của bạn
↓
→ đây là lý do lịch snapshot phải khớp với
mức mất mát mà nghiệp vụ chấp nhận được
Vì sao các phương án khác sai
-
C (khởi động lại instance, nếu dữ liệu không hiện thì khôi phục từ backup) — đây là phương án gần nhất và vế thứ hai đúng. Nhưng vế đầu là lãng phí thời gian: trạng thái
errorlà kết luận dứt khoát về hỏng phần cứng, khởi động lại không bao giờ sửa được nó. -
A (kênh liên lạc giữa volume và instance bị gián đoạn, khởi động lại là hết) — chẩn đoán sai: nếu chỉ là vấn đề kết nối thì volume vẫn ở trạng thái
in-use, không phảierror. -
B (khôi phục volume từ Data Lifecycle Manager bằng cách chuyển volume sang instance khác) — hiểu sai công dụng: DLM chỉ TẠO và XOÁ snapshot theo lịch, nó không có chức năng khôi phục nào. Khôi phục là thao tác EC2 thông thường từ snapshot.
Ghi nhớ
⚠ Các trạng thái của EBS volume — bảng phải thuộc: | Trạng thái | Nghĩa | |---|---| | creating | đang tạo | | available | sẵn sàng, chưa gắn vào máy nào | | in-use | đang gắn vào instance | | deleting / deleted | đang xoá / đã xoá | | error | PHẦN CỨNG HỎNG — không khôi phục được |
Từ khoá nhận diện:
"volume ở trạng thái
error" → tạo volume mới từ snapshot "volume vẫnin-usenhưng không đọc được" → kiểm tra hệ thống tệp,fsck"tăng dung lượng màdfkhông đổi" → chưaresize2fs/xfs_growfs"snapshot tự động theo lịch" → DLM hoặc AWS Backup "khôi phục snapshot" →create-volume --snapshot-id
| EBS snapshot — chi tiết đáng nhớ | Nội dung |
|---|---|
| Tăng dần (incremental) | chỉ lưu khối đã thay đổi |
| Xoá snapshot cũ | an toàn — AWS giữ khối mà snapshot sau còn cần |
| Phạm vi | theo Region, copy sang Region khác được |
| Nhất quán | crash-consistent trừ khi fsfreeze/VSS trước khi chụp |
| Nhiều volume cùng lúc | create-snapshots (số nhiều) — chụp cả bộ tại một thời điểm |
| Fast Snapshot Restore | volume tạo từ snapshot đạt hiệu năng tối đa ngay, có phí |
⚠ Một chi tiết hiệu năng rất hay bị bỏ qua khi khôi phục:
Volume tạo từ snapshot được nạp LƯỜI (lazy loading)
↓
Khối dữ liệu chỉ được kéo từ S3 khi lần đầu được đọc
↓
→ những lần đọc đầu tiên CHẬM HƠN đáng kể
↓
Cách khắc phục:
- bật Fast Snapshot Restore (có phí), hoặc
- đọc trước toàn bộ volume:
sudo dd if=/dev/xvdf of=/dev/null bs=1M
| Hai công cụ quản lý snapshot | Nội dung |
|---|---|
| Data Lifecycle Manager (DLM) | chỉ EBS snapshot và AMI, chọn theo tag, miễn phí |
| AWS Backup | mọi dịch vụ, nhiều tài khoản, nhiều Region, có Vault Lock |
| Cả hai | chỉ TẠO và XOÁ, việc khôi phục là thao tác thủ công |
| Phòng ngừa để lần sau đỡ đau | Việc |
|---|---|
| Lịch snapshot khớp với RPO đã thống nhất | |
| Recycle Bin cho snapshot | chống xoá nhầm |
| Copy snapshot sang Region khác | chống sự cố cấp Region |
| Diễn tập khôi phục | bản sao lưu chưa từng khôi phục thì chưa phải bản sao lưu |
| Cảnh báo | EventBridge bắt sự kiện EBS volume chuyển sang error |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Trạng thái volume | describe-volumes, xem State | | Snapshot gần nhất khi nào | describe-snapshots lọc theo volume-id | | Volume mới đã gắn đúng chưa | lsblk trong máy, rồi mount lại |
Và một lời khuyên rút ra từ chính sự cố này: hãy tính xem lịch snapshot hiện tại tương ứng với RPO bao nhiêu giờ, và xác nhận con số đó với bộ phận nghiệp vụ. Khi một volume chuyển sang error, lượng dữ liệu bạn mất chính xác bằng khoảng thời gian từ snapshot gần nhất tới lúc sự cố — và đó là con số nên được thống nhất từ trước, chứ không phải thứ được phát hiện ra trong lúc đang khôi phục.
A company uses Amazon Elastic File System (EFS) to share storage space across multiple instances of an application. As a SysOps Administrator, you work with an EFS mount helper to mount the file system.
Which of the following options are available with the EFS mount helper? (Select two)
-
A
Mounting from Amazon EC2 Windows instances
-
B
Auto-mounting when an EC2 instance reboots
-
C
Mounting with Amazon Cognito authentication
-
D
Mounting with IAM authorization
-
E
Mounting from on-premises Windows instances
Xem giải thích
Đáp án
B, D — hai tính năng của EFS mount helper:
- D — Mount với IAM authorization.
- B — Tự động mount lại khi EC2 instance khởi động lại.
Vì sao đúng
EFS mount helper (amazon-efs-utils) là một công cụ bọc quanh lệnh mount chuẩn, và nó thêm vào những thứ mà NFS thuần không có.
⚠ Điểm mấu chốt — mount helper thêm bốn khả năng:
1. Mã hoá khi truyền (TLS)
mount -t efs -o tls fs-xxxx:/ /mnt/efs
→ dựng đường hầm stunnel, mã hoá toàn bộ lưu lượng NFS
2. IAM authorization ← điều D
mount -t efs -o tls,iam fs-xxxx:/ /mnt/efs
→ dùng IAM role của instance để xác thực
3. Access point
mount -t efs -o tls,accesspoint=fsap-xxxx fs-xxxx:/ /mnt/efs
4. Tự mount lại khi khởi động ← điều B
thêm dòng vào /etc/fstab với tuỳ chọn _netdev
⚠ Điều D — IAM authorization giải quyết vấn đề gì:
NFS thuần xác thực bằng UID/GID của tiến trình
↓
→ ai giả được UID thì truy cập được
→ không kiểm toán được ai đã mount
↓
IAM authorization
↓
→ dùng IAM role của instance
→ file system policy quyết định ai được mount
→ CloudTrail ghi lại việc mount
↓
→ phân quyền và kiểm toán theo mô hình AWS
⚠ Điều B — dòng /etc/fstab để tự mount lại:
fs-xxxxxxxx:/ /mnt/efs efs _netdev,tls,iam 0 0
↓
Tuỳ chọn _netdev rất quan trọng
↓
→ báo cho hệ thống chờ MẠNG SẴN SÀNG rồi mới mount
↓
→ thiếu nó thì máy có thể treo lúc khởi động,
hoặc mount thất bại vì mạng chưa lên
Vì sao các phương án khác sai
-
A (mount từ EC2 chạy Windows) — đây là phương án gần nhất vì nghe như một khả năng hợp lý. Nhưng EFS chỉ dùng NFS, và mount helper chỉ có cho Linux. Windows cần SMB, tức là FSx for Windows File Server.
-
E (mount từ máy Windows tại chỗ) — cùng lý do; và máy tại chỗ dù chạy Linux thì cũng cần Direct Connect hoặc VPN để tới được mount target.
-
C (mount với xác thực bằng Amazon Cognito) — không tồn tại. Cognito dành cho danh tính người dùng ứng dụng, không dùng để mount hệ thống tệp.
Ghi nhớ
⚠ Tính năng của EFS mount helper — bảng phải thuộc: | Tuỳ chọn | Việc | |---|---| | tls | mã hoá khi truyền (qua stunnel) | | iam | xác thực bằng IAM role của instance | | accesspoint=fsap-xxxx | mount qua access point | | _netdev (trong fstab) | chờ mạng sẵn sàng — tự mount khi khởi động | | awscredsuri | dùng chứng chỉ từ một URI (cho container) |
Từ khoá nhận diện:
"mã hoá khi truyền cho EFS" →
-o tls"xác thực bằng IAM" →-o iam(cần cảtls) "tự mount khi reboot" →/etc/fstabvới_netdev"mount từ Windows" → KHÔNG ĐƯỢC với EFS, dùng FSx for Windows "mỗi ứng dụng một thư mục riêng" → access point
| Ba lớp bảo mật của EFS — nhắc lại | Nội dung |
|---|---|
| Security Group trên mount target | cổng 2049, ai tới được về mặt mạng |
| File system policy (resource-based) | ai được mount, ép tls và iam |
| Access point + IAM | thấy thư mục nào, với quyền POSIX nào |
| File system policy ép bảo mật | Ví dụ |
|---|---|
| Ép mã hoá khi truyền | Deny khi elasticfilesystem:AccessedViaMountTarget không kèm aws:SecureTransport |
| Ép dùng IAM | Deny ClientMount cho "AWS": "*" không xác thực |
| Giới hạn theo access point | điều kiện elasticfilesystem:AccessPointArn |
| Mount EFS từ đâu | Nội dung |
|---|---|
| EC2 Linux trong VPC | trực tiếp qua mount target |
| ECS / EKS | qua volume, dùng access point |
| Lambda | gắn EFS access point vào hàm |
| Máy tại chỗ (Linux) | qua Direct Connect hoặc VPN |
| Windows | KHÔNG hỗ trợ — dùng FSx for Windows |
| Cài mount helper | Lệnh |
|---|---|
| Amazon Linux | sudo yum install -y amazon-efs-utils |
| Ubuntu/Debian | build từ mã nguồn, hoặc dùng gói của AWS |
| Không có mount helper | vẫn mount được bằng NFS thuần, nhưng mất tls và iam |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Đã mount chưa | df -hT — thấy kiểu nfs4 | | Có mã hoá khi truyền không | kiểm tra tiến trình stunnel đang chạy | | Vì sao mount thất bại | log tại /var/log/amazon/efs/mount.log |
Và một lời khuyên khi đưa EFS vào tự động hoá: luôn thêm _netdev vào dòng /etc/fstab, và cân nhắc thêm nofail. Thiếu _netdev thì máy có thể cố mount trước khi mạng sẵn sàng và treo hẳn lúc khởi động — một tình huống đặc biệt khó chịu với instance trong Auto Scaling group, vì máy không bao giờ qua được health check, ASG giết nó đi, rồi khởi chạy một máy mới lặp lại đúng chu trình đó.
A company has inherited a legacy relational database that produces a multitude of reports needed for accounting and operations. Now, the company also wants to use Amazon DynamoDB for customer-facing applications that need millisecond latencies.
Which is the most optimal way to integrate the existing relational system with DynamoDB?
-
A
Configure Amazon ElastiCache to use in-memory caching to integrate relational systems with DynamoDB
-
B
DynamoDB Streams and AWS Lambda can be used to integrate DynamoDB seamlessly with the relational system
-
C
Configure Kinesis Data Streams to carry real-time updates from the relational system to DynamoDB
-
D
DynamoDB Accelerator (DAX) can be used to seamlessly integrate relational system with DynamoDB
Xem giải thích
Đáp án
B — Dùng DynamoDB Streams kết hợp với AWS Lambda để tích hợp DynamoDB với hệ thống quan hệ.
Vì sao đúng
Đề mô tả một kiến trúc rất phổ biến: hai cơ sở dữ liệu phục vụ hai loại tải khác nhau, và cần một cầu nối giữa chúng.
⚠ Điểm mấu chốt — DynamoDB Streams là dòng sự kiện của mọi thay đổi:
Mỗi lần một mục trong bảng DynamoDB được
thêm, sửa, hoặc xoá
↓
Một bản ghi được đẩy vào DynamoDB Stream
↓
Lambda được kích hoạt tự động
↓
→ Lambda ghi thay đổi đó sang cơ sở dữ liệu quan hệ
↓
→ DynamoDB phục vụ ứng dụng (mili giây)
→ hệ thống quan hệ vẫn có đủ dữ liệu để làm báo cáo
⚠ Bốn chế độ StreamViewType — chọn đúng là quan trọng:
KEYS_ONLY → chỉ khoá của mục bị thay đổi
NEW_IMAGE → trạng thái SAU khi thay đổi
OLD_IMAGE → trạng thái TRƯỚC khi thay đổi
NEW_AND_OLD_IMAGES → cả hai ← thường dùng cho đồng bộ
↓
Có cả hai ảnh thì mới dựng được câu UPDATE chính xác
và biết được trường nào đã đổi
⚠ Và vì sao đây là mẫu kiến trúc chuẩn:
Không cần polling
↓
Lambda được đẩy sự kiện, không phải hỏi liên tục
↓
Thứ tự được đảm bảo trong mỗi partition
↓
Tự động thử lại khi Lambda lỗi
↓
Có Dead Letter Queue cho bản ghi xử lý hỏng mãi
↓
→ gần như không phải viết hạ tầng nào
Vì sao các phương án khác sai
-
C (dùng Kinesis Data Streams để mang cập nhật thời gian thực từ hệ thống quan hệ sang DynamoDB) — đây là phương án gần nhất vì Kinesis đúng là công cụ cho dòng dữ liệu. Nhưng nó đi sai chiều (từ quan hệ sang DynamoDB, trong khi đề cần chiều ngược lại), và nó là giải pháp tự dựng trong khi DynamoDB đã có Streams sẵn. (Có Kinesis Data Streams for DynamoDB cho tình huống cần fan-out nhiều consumer, nhưng vẫn là chiều từ DynamoDB đi ra.)
-
D (DynamoDB Accelerator — DAX) — là bộ nhớ đệm trong bộ nhớ cho chính DynamoDB, giúp đọc nhanh hơn nữa. Nó không tích hợp với hệ thống nào bên ngoài.
-
A (dùng ElastiCache làm bộ nhớ đệm để tích hợp) — ElastiCache là cache, không phải cơ chế đồng bộ dữ liệu giữa hai cơ sở dữ liệu.
Ghi nhớ
⚠ DynamoDB Streams — bảng phải thuộc: | Đặc điểm | Nội dung | |---|---| | Ghi lại | mọi thay đổi ở mức ITEM (insert, update, delete) | | Giữ dữ liệu | 24 giờ | | Thứ tự | đảm bảo trong mỗi partition key | | Tiêu thụ bởi | Lambda (phổ biến nhất), hoặc Kinesis Client Library | | Không tính phí riêng cho stream | chỉ trả tiền cho lời gọi đọc |
Từ khoá nhận diện:
"phản ứng khi dữ liệu DynamoDB thay đổi" → DynamoDB Streams + Lambda "tăng tốc ĐỌC DynamoDB" → DAX "sao chép DynamoDB sang Region khác" → Global Tables (dùng Streams bên dưới) "xuất DynamoDB sang S3 để phân tích" → export to S3 (không tốn RCU) "di chuyển từ cơ sở dữ liệu quan hệ sang DynamoDB" → DMS
| Các mẫu dùng DynamoDB Streams | Ví dụ |
|---|---|
| Đồng bộ sang hệ thống khác | câu này |
| Global Tables | AWS dùng Streams bên dưới để sao chép đa Region |
| Đánh chỉ mục vào OpenSearch | để tìm kiếm toàn văn |
| Kiểm toán và audit trail | ghi lại mọi thay đổi |
| Kích hoạt quy trình nghiệp vụ | gửi email, cập nhật tồn kho |
| Tính toán tổng hợp | cập nhật bảng thống kê |
| Lưu ý khi dùng Lambda với Streams | Nội dung |
|---|---|
| Batch size | số bản ghi mỗi lần gọi — cân bằng giữa độ trễ và hiệu quả |
| Bisect on error | chia đôi lô khi lỗi để tìm bản ghi hỏng |
| Maximum retry attempts | tránh một bản ghi hỏng chặn cả stream |
| Dead Letter Queue | nơi chứa bản ghi xử lý hỏng mãi |
| Parallelization factor | nhiều Lambda xử lý song song trên một shard |
| Cẩn thận | Lambda ghi ngược vào chính bảng đó → vòng lặp vô tận |
| Tích hợp DynamoDB với phân tích — các lựa chọn | Nội dung |
|---|---|
| Export to S3 | không tốn RCU, xuất PITR snapshot ra S3 |
| Kinesis Data Streams for DynamoDB | fan-out cho nhiều consumer, giữ tới 365 ngày |
| Zero-ETL với Redshift | đồng bộ tự động sang Redshift để phân tích |
| Athena | truy vấn dữ liệu đã xuất ra S3 |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Stream đã bật chưa | describe-table, xem StreamSpecification | | Lambda có xử lý kịp không | chỉ số IteratorAge — cao là đang tụt hậu | | Có bản ghi nào hỏng không | kiểm tra Dead Letter Queue |
Và một chỉ số cần theo dõi sát khi vận hành mẫu kiến trúc này: IteratorAge của Lambda. Nó cho biết bản ghi cũ nhất đang chờ xử lý đã nằm trong stream bao lâu — và vì DynamoDB Streams chỉ giữ dữ liệu 24 giờ, một IteratorAge đang leo đều đặn nghĩa là đồng hồ đếm ngược tới lúc dữ liệu bị mất vĩnh viễn mà không có cách nào lấy lại.
A firm is looking at automating their network configuration so that it allows seamless network infrastructure duplication for on-demand development and staging environments.
As a SysOps Administrator, which option will you suggest for this use case?
-
A
Use AWS Elastic Beanstalk for managing and maintaining the network resources
-
B
Use AWS Service Catalog for managing and maintaining the network infrastructure
-
C
Use AWS Config for managing and maintaining the network infrastructure
-
D
Use AWS CloudFormation templates for managing and maintaining the network infrastructure
Xem giải thích
Đáp án
D — Dùng AWS CloudFormation template để quản lý và duy trì hạ tầng mạng.
Vì sao đúng
Đề nêu đúng bài toán mà hạ tầng dạng mã (Infrastructure as Code) sinh ra để giải: nhân bản hạ tầng mạng theo yêu cầu.
⚠ Điểm mấu chốt — template là bản mô tả nhân bản được vô hạn:
Một template mô tả toàn bộ mạng:
VPC, subnet, route table, IGW, NAT Gateway,
security group, NACL, VPC endpoint
↓
Tạo stack với tham số MoiTruong = "dev"
↓
Tạo stack với tham số MoiTruong = "staging"
↓
→ hai môi trường GIỐNG HỆT NHAU về cấu trúc
→ khác nhau ở CIDR, tên, kích thước — do tham số quyết định
↓
→ xoá stack là dọn sạch, không sót tài nguyên nào
⚠ Và những thứ khiến CloudFormation hợp với hạ tầng mạng hơn cả:
Tự tính THỨ TỰ PHỤ THUỘC
↓
→ IGW phải có trước route table trỏ tới nó
→ NAT Gateway phải có subnet và Elastic IP trước
→ bạn không phải sắp xếp gì cả
Xoá stack = dọn theo THỨ TỰ NGƯỢC LẠI
↓
→ không còn ENI mồ côi, không còn Elastic IP bị bỏ quên
Template nằm trong Git
↓
→ có lịch sử thay đổi, có code review, có rollback
⚠ Kết hợp với cross-stack reference cho kiến trúc sạch:
Stack MẠNG → export VpcId, SubnetIds
Stack BẢO MẬT → export SecurityGroupIds
Stack ỨNG DỤNG → ImportValue từ hai stack trên
↓
→ triển khai lại ứng dụng KHÔNG đụng tới mạng
Vì sao các phương án khác sai
-
B (AWS Service Catalog) — đây là phương án gần nhất và thường được dùng CÙNG với CloudFormation. Nhưng Service Catalog là lớp phía trên: nó quản lý danh mục các template đã được duyệt để người dùng tự cấp phát. Bản thân nó không định nghĩa hạ tầng — nội dung của mỗi product vẫn là một CloudFormation template.
-
A (Elastic Beanstalk) — nền tảng triển khai ỨNG DỤNG: bạn đưa mã lên, nó lo EC2, ELB, ASG. Nó không dùng để mô tả hạ tầng mạng tuỳ ý.
-
C (AWS Config) — dịch vụ theo dõi và đánh giá cấu hình, cho biết tài nguyên có đúng chuẩn hay không. Nó không tạo ra hạ tầng nào.
Ghi nhớ
⚠ Các công cụ hạ tầng dạng mã trên AWS — bảng phải thuộc: | Công cụ | Nội dung | |---|---| | CloudFormation | template JSON/YAML — chuẩn của AWS | | AWS CDK | viết bằng TypeScript, Python, Java… → sinh ra CloudFormation | | AWS SAM | mở rộng CloudFormation cho serverless | | Terraform | công cụ của HashiCorp, đa nhà cung cấp | | Service Catalog | lớp quản trị phía trên template đã duyệt |
Từ khoá nhận diện:
"nhân bản hạ tầng, môi trường theo yêu cầu" → CloudFormation "người dùng tự cấp phát theo danh mục đã duyệt" → Service Catalog "triển khai ứng dụng, không quan tâm hạ tầng" → Elastic Beanstalk "kiểm tra cấu hình có đúng chuẩn không" → AWS Config "triển khai ra nhiều tài khoản và Region" → StackSets
| Các mục của template dùng cho môi trường nhiều biến thể | Nội dung |
|---|---|
Parameters |
tên môi trường, CIDR, kích thước instance |
Mappings |
tra AMI theo Region, kích thước theo môi trường |
Conditions |
chỉ tạo NAT Gateway ở prod, chẳng hạn |
Outputs + Export |
chia sẻ VpcId, SubnetIds cho stack khác |
!If + AWS::NoValue |
bỏ hẳn một thuộc tính khi không cần |
| Mẫu tổ chức stack cho hạ tầng mạng | Nội dung |
|---|---|
| Stack mạng | VPC, subnet, route table — ít thay đổi |
| Stack bảo mật | security group, IAM role |
| Stack ứng dụng | ASG, ALB, RDS — thay đổi liên tục |
| Lợi ích | mỗi phần có vòng đời riêng, triển khai độc lập |
| Bảo vệ hạ tầng mạng đã dựng | Việc |
|---|---|
| Termination protection | chặn xoá nhầm cả stack |
| Stack policy | chặn Update:Replace trên tài nguyên trọng yếu |
DeletionPolicy: Retain |
giữ lại tài nguyên có dữ liệu |
| Drift detection | phát hiện có ai sửa tay ngoài template |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Template có hợp lệ không | validate-template, và cfn-lint | | Update sẽ động vào gì | tạo change set, đọc cột Replacement | | Có ai sửa tay không | detect-stack-drift |
Và một thói quen đáng xây dựng ngay từ template đầu tiên: chạy detect-stack-drift định kỳ cho mọi stack hạ tầng mạng. Toàn bộ giá trị của hạ tầng dạng mã nằm ở giả định "template chính là thực tế" — và chỉ cần một người sửa tay một luật security group trong lúc xử lý sự cố là giả định đó đã sai, một cách âm thầm, cho tới lần triển khai tiếp theo khi CloudFormation lặng lẽ khôi phục lại trạng thái cũ và làm hỏng thứ mà người kia đã sửa.
A SysOps Administrator has created AWS CloudFormation StackSets to be used in different target accounts spread across AWS Regions.
Which of the following statements are correct for creating and configuring the StackSets (Select two)?
-
A
Stack sets can be created using either self-managed, service-managed or resource-managed permissions
-
B
For stack sets created with service-managed permissions, you don't have to create the necessary IAM roles
-
C
When you delete stacks from your stack set but save them to run independently, such stacks need to be maintained at individual resource level and are unavailable in CloudFormation
-
D
You must set up a trust relationship between the administrator and target accounts before creating stacks in target accounts
-
E
For stack sets created using self-managed permissions, you don't have to create the necessary IAM roles
Xem giải thích
Đáp án
B, D — hai điều đúng khi tạo và cấu hình StackSets:
- D — Phải thiết lập QUAN HỆ TIN CẬY giữa tài khoản quản trị và tài khoản đích TRƯỚC khi tạo stack ở tài khoản đích.
- B — Với stack set dùng service-managed permissions, bạn KHÔNG phải tự tạo các IAM role.
Vì sao đúng
StackSets có hai mô hình quyền, và sự khác biệt giữa chúng là toàn bộ nội dung câu hỏi.
⚠ Hai mô hình quyền — bảng quyết định:
SELF-MANAGED permissions
↓
BẠN tự tạo hai IAM role:
- AWSCloudFormationStackSetAdministrationRole (ở tài khoản quản trị)
- AWSCloudFormationStackSetExecutionRole (ở MỖI tài khoản đích)
↓
Và phải thiết lập TRUST giữa chúng ← điều D
↓
→ dùng khi các tài khoản KHÔNG thuộc cùng một Organization
SERVICE-MANAGED permissions
↓
AWS TỰ TẠO và TỰ QUẢN các role cần thiết ← điều B
↓
→ chỉ dùng được khi có AWS Organizations
→ triển khai theo OU, tài khoản MỚI thêm vào OU
được TỰ ĐỘNG triển khai (automatic deployment)
⚠ Điều D đúng với cả hai mô hình:
Dù tự tạo role hay để AWS tạo
↓
Vẫn phải có QUAN HỆ TIN CẬY giữa
tài khoản quản trị và tài khoản đích
↓
→ self-managed: bạn tự viết trust policy
→ service-managed: AWS thiết lập qua Organizations
↓
→ thiếu trust là không triển khai được stack nào
Vì sao các phương án khác sai
-
E (với self-managed permissions, bạn KHÔNG phải tạo IAM role) — đây là phương án gần nhất và đảo ngược đúng ý nghĩa của hai mô hình. Chính self-managed mới là mô hình bạn PHẢI tự tạo role; service-managed mới là mô hình AWS lo hộ.
-
A (stack set tạo được bằng self-managed, service-managed hoặc resource-managed permissions) — "resource-managed" KHÔNG TỒN TẠI. Chỉ có hai mô hình quyền.
-
C (khi xoá stack khỏi stack set nhưng giữ lại để chạy độc lập, chúng phải quản ở mức từng tài nguyên và không còn trong CloudFormation) — sai: khi bạn giữ lại stack (
--retain-stacks), chúng vẫn là stack CloudFormation bình thường ở tài khoản đích, chỉ là không còn thuộc stack set nữa. Bạn quản lý chúng như mọi stack khác.
Ghi nhớ
⚠ Hai mô hình quyền của StackSets — bảng phải thuộc: | | Self-managed | Service-managed | |---|---|---| | Ai tạo IAM role | BẠN | AWS | | Cần Organizations | không | CÓ | | Triển khai theo | danh sách tài khoản | OU | | Tài khoản mới trong OU | phải thêm tay | TỰ ĐỘNG triển khai | | Dùng khi | tài khoản ngoài tổ chức | đã có Organizations |
Từ khoá nhận diện:
"AWS tự tạo role" → service-managed "tự tạo AdministrationRole và ExecutionRole" → self-managed "tài khoản mới tự động được triển khai" → service-managed + automatic deployment "resource-managed permissions" → KHÔNG TỒN TẠI "triển khai một stack ra nhiều tài khoản và Region" → StackSets
| Các khái niệm của StackSets | Nội dung |
|---|---|
| Stack set | định nghĩa template + tham số |
| Stack instance | một stack ở MỘT tài khoản, MỘT Region |
| Administrator account | nơi tạo và quản stack set |
| Target account | nơi stack instance được tạo |
| Deployment target | danh sách tài khoản, hoặc OU |
| Operation preferences | số tài khoản đồng thời, ngưỡng lỗi |
| Kiểm soát rủi ro khi triển khai hàng loạt | Tham số |
|---|---|
MaxConcurrentPercentage |
bao nhiêu tài khoản cùng lúc |
FailureTolerancePercentage |
quá bao nhiêu lỗi thì dừng hẳn |
RegionConcurrencyType |
SEQUENTIAL (an toàn) hay PARALLEL (nhanh) |
RegionOrder |
thứ tự Region — nên triển khai Region ít quan trọng trước |
| Xoá stack instance — hai lựa chọn | Nội dung |
|---|---|
--no-retain-stacks |
xoá luôn stack và tài nguyên ở tài khoản đích |
--retain-stacks |
giữ stack lại — nó trở thành stack độc lập, vẫn quản qua CloudFormation |
| Lưu ý | stack giữ lại không còn nhận cập nhật từ stack set |
| StackSets và Service Catalog — khi nào dùng cái nào | Nội dung |
|---|---|
| StackSets | quản trị viên ĐẨY hạ tầng xuống nhiều tài khoản |
| Service Catalog | người dùng TỰ cấp phát theo danh mục đã duyệt |
| Kết hợp | StackSets triển khai nền tảng, Service Catalog cho ứng dụng |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Stack set dùng mô hình nào | describe-stack-set, xem PermissionModel | | Tài khoản nào triển khai thành công | list-stack-instances, xem Status | | Vì sao một tài khoản thất bại | describe-stack-instance — đọc StatusReason |
Và một lời khuyên khi triển khai StackSets ra quy mô lớn: luôn đặt FailureTolerancePercentage thấp và triển khai Region tuần tự cho lần đầu tiên. Một template có lỗi được đẩy đồng thời xuống năm mươi tài khoản ở mười Region sẽ tạo ra năm trăm stack thất bại cần dọn dẹp — trong khi cùng template đó với ngưỡng lỗi bằng 0 sẽ dừng lại sau tài khoản đầu tiên và để bạn sửa trong yên bình.
A web application runs on a fleet of Amazon EC2 instances configured behind an Application Load Balancer (ALB). The ALB is configured as the origin for Amazon CloudFront distribution. ALB has sticky sessions enabled. However, the users are being forced into re-authentication.
What could be the issue and how can it be resolved?
-
A
Use CloudFront Origin Shield feature to forward authentication information to ALB
-
B
Sticky sessions need to be enabled on CloudFront distribution too for avoiding re-authentication error
-
C
CloudFront cache behavior needs to be configured to forward all cookies to origin
-
D
Configure CloudFront to cache requests at edge locations to minimize the necessity for re-authentication
Xem giải thích
Đáp án
C — Cần cấu hình cache behavior của CloudFront để CHUYỂN TIẾP TẤT CẢ COOKIE tới origin.
Vì sao đúng
Nguyên nhân nằm ở chỗ CloudFront mặc định KHÔNG chuyển tiếp cookie — và sticky session của ALB thì hoạt động bằng cookie.
⚠ Điểm mấu chốt — chuỗi phụ thuộc bị đứt ở giữa:
ALB sticky session hoạt động bằng cookie AWSALB
↓
ALB gắn cookie vào phản hồi
↓
CloudFront nhận phản hồi, chuyển về client
↓
Client gửi request tiếp theo KÈM cookie
↓
CloudFront LOẠI BỎ cookie (mặc định) ← chỗ đứt
↓
ALB không thấy cookie → chọn target NGẪU NHIÊN
↓
→ phiên làm việc nằm ở máy khác → BẮT ĐĂNG NHẬP LẠI
⚠ Cách sửa — dùng cache policy và origin request policy:
Cách hiện đại (khuyến nghị):
Origin Request Policy → CookiesConfig: all
↓
→ chuyển tiếp mọi cookie tới origin
MÀ KHÔNG đưa chúng vào khoá cache
Cache Policy → CookiesConfig: none (hoặc chỉ cookie cần thiết)
↓
→ cache vẫn hiệu quả
Cách cũ (legacy cache settings):
Forward Cookies = All
↓
→ cookie đi vào KHOÁ CACHE
→ mỗi người dùng một bản cache riêng
→ TỶ LỆ TRÚNG CACHE gần như bằng 0
⚠ Đây chính là chỗ đánh đổi quan trọng nhất:
Đưa cookie vào KHOÁ CACHE
↓
→ mỗi tổ hợp cookie là một mục cache riêng
→ cookie phiên là duy nhất cho mỗi người
↓
→ CloudFront gần như không cache được gì
↓
Vì vậy: tách "cái gì gửi tới origin" khỏi
"cái gì tạo nên khoá cache"
Vì sao các phương án khác sai
-
B (bật sticky session trên chính CloudFront distribution) — đây là phương án gần nhất vì nó nhắm đúng vào khái niệm sticky session. Nhưng CloudFront KHÔNG có tính năng sticky session: nó là CDN, không phải load balancer. Việc gắn phiên với target là chuyện của ALB.
-
D (cấu hình CloudFront cache ở edge để giảm nhu cầu xác thực lại) — cache làm vấn đề tệ hơn: nếu CloudFront trả nội dung đã cache thì request thậm chí không tới ALB, và trang cá nhân hoá của người này có thể bị phục vụ cho người khác.
-
A (dùng Origin Shield để chuyển tiếp thông tin xác thực tới ALB) — Origin Shield là một lớp cache trung gian giúp giảm tải cho origin. Nó không liên quan tới việc chuyển tiếp cookie.
Ghi nhớ
⚠ CloudFront chuyển tiếp gì tới origin — mặc định là gần như không gì cả: | Thành phần | Mặc định | |---|---| | Cookie | KHÔNG chuyển tiếp | | Query string | KHÔNG chuyển tiếp | | Header | chỉ một số header tối thiểu | | Lý do | để tối đa hoá tỷ lệ trúng cache |
Từ khoá nhận diện:
"đăng nhập lại liên tục sau CloudFront" → cookie không được chuyển tiếp "nội dung cá nhân hoá bị lẫn giữa người dùng" → cache sai khoá — kiểm tra cache policy "sticky session trên CloudFront" → KHÔNG TỒN TẠI "giảm tải cho origin" → Origin Shield "nội dung khác nhau theo thiết bị" → header
CloudFront-Is-Mobile-Viewer
⚠ Hai loại policy của CloudFront — hiểu đúng là giải quyết được hầu hết vấn đề: | Policy | Quyết định | |---|---| | Cache Policy | cái gì tạo nên KHOÁ CACHE (và TTL) | | Origin Request Policy | cái gì được GỬI TỚI ORIGIN | | Mẹo quan trọng | thứ trong origin request policy mà không có trong cache policy thì được gửi đi mà không phá cache | | Response Headers Policy | header thêm vào phản hồi (CORS, bảo mật) |
| Mẫu cấu hình cho ứng dụng có đăng nhập | Nội dung |
|---|---|
Nội dung tĩnh (/static/*) |
cache policy CachingOptimized, không chuyển cookie |
Nội dung động (/api/*, /) |
cache policy CachingDisabled, origin request policy AllViewer |
| Tách bằng | cache behavior theo đường dẫn |
| Kết quả | tĩnh được cache tốt, động luôn tươi và giữ được phiên |
| Managed policy dựng sẵn của AWS | Việc |
|---|---|
CachingOptimized |
cache tốt nhất, không chuyển cookie/query |
CachingDisabled |
không cache gì |
AllViewer (origin request) |
chuyển tiếp mọi header, cookie, query string |
CORS-S3Origin |
cho bucket S3 có CORS |
| Kiến trúc tốt hơn về lâu dài | Nội dung |
|---|---|
| Bỏ sticky session | đẩy phiên ra ElastiCache hoặc dùng JWT |
| Lợi ích | tải phân bố đều, máy chết không mất phiên, cache hiệu quả hơn |
| Sticky session | nên coi là giải pháp tạm |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Cookie có tới origin không | ALB access log — xem có cookie trong request không | | Tỷ lệ trúng cache | chỉ số CacheHitRate của CloudFront | | Cache hit hay miss | header X-Cache trong phản hồi |
Và một cảnh báo về cách sửa vội vàng cho loại sự cố này: đừng bật "Forward all cookies" trong cache settings kiểu cũ rồi coi là xong. Nó sửa được lỗi đăng nhập, nhưng đồng thời đưa cookie phiên vào khoá cache — nghĩa là mỗi người dùng có một bản cache riêng, tỷ lệ trúng cache tụt về gần 0, và bạn vừa trả tiền cho một CDN không còn cache gì cả. Hãy dùng origin request policy để tách hai chuyện đó ra.
A SysOps Administrator has come across this CloudFormation template while doing the general maintenance work on the AWS resources used by his team.
What does this template represent? (Select three)
AWSTemplateFormatVersion: 2010-09-09
Resources:
S3Bucket:
Type: AWS::S3::Bucket
Properties:
AccessControl: PublicRead
WebsiteConfiguration:
IndexDocument: index.html
ErrorDocument: error.html
DeletionPolicy: Retain
BucketPolicy:
Type: AWS::S3::BucketPolicy
Properties:
PolicyDocument:
Id: MyPolicy
Version: 2012-10-17
Statement:
- Sid: PublicReadForGetBucketObjects
Effect: Allow
Principal: '*'
Action: 's3:GetObject'
Resource: !Join
- ''
- - 'arn:aws:s3:::'
- !Ref S3Bucket
- /*
Bucket: !Ref S3Bucket
Outputs:
WebsiteURL:
Value: !GetAtt
- S3Bucket
- WebsiteURL
Description: URL for website hosted on S3
S3BucketSecureURL:
Value: !Join
- ''
- - 'https://'
- !GetAtt
- S3Bucket
- DomainName
Description: Name of S3 bucket to hold website content
-
A
This template creates a bucket as a website
-
B
The S3 bucket created is configured to store objects from the
PublicReadAPI of Amazon RDS -
C
The
outputsection takes the website URL and bucket URL for another stack, that is part of the nested stack configuration -
D
AWS CloudFormation will delete this bucket when it deletes the stack
-
E
When run from AWS CLI, URL of the website hosted on S3 will be displayed as output
-
F
AWS CloudFormation will not delete this bucket when it deletes the stack
Xem giải thích
Đáp án
A, E, F — ba điều đúng về template này:
- A — Template tạo một bucket S3 được cấu hình làm WEBSITE.
- F — CloudFormation sẽ KHÔNG xoá bucket này khi xoá stack.
- E — Khi chạy từ AWS CLI, URL của website trên S3 sẽ được hiển thị ở phần output.
Vì sao đúng
⚠ Điều A — WebsiteConfiguration là dấu hiệu rõ ràng:
WebsiteConfiguration:
IndexDocument: index.html
ErrorDocument: error.html
→ bật static website hosting cho bucket
→ tạo ra WEBSITE ENDPOINT (bucket.s3-website-<region>.amazonaws.com)
↓
Kèm bucket policy cho phép "s3:GetObject" với Principal "*"
↓
→ ai cũng đọc được nội dung → đúng nghĩa một website công khai
⚠ Điều F — DeletionPolicy: Retain là câu trả lời:
DeletionPolicy: Retain
→ khi xoá stack, CloudFormation GIỮ LẠI bucket
↓
→ bucket trở thành TÀI NGUYÊN MỒ CÔI
→ không còn stack nào quản, phải tự dọn tay
↓
Đây chính là chỗ phân biệt điều F (đúng) với điều D (sai)
⚠ Điều E — mục Outputs in ra sau khi stack tạo xong:
Outputs:
WebsiteURL:
Value: !GetAtt [S3Bucket, WebsiteURL]
aws cloudformation describe-stacks --stack-name <ten>
↓
→ phần Outputs hiển thị URL của website
↓
(Console cũng hiện ở tab "Outputs" của stack)
Vì sao các phương án khác sai
-
D (CloudFormation sẽ XOÁ bucket khi xoá stack) — đây là phương án gần nhất và trực tiếp mâu thuẫn với điều F. Nó sẽ đúng nếu template không có
DeletionPolicy, vì mặc định làDelete. Nhưng template này khai rõRetain. -
C (mục Outputs truyền URL cho stack khác trong cấu hình nested stack) — mục
Outputsở đây không có trườngExport, nên không stack nào import được. Nó chỉ hiển thị giá trị cho người đọc. -
B (bucket được cấu hình để lưu đối tượng từ "PublicRead API của Amazon RDS") — vô nghĩa về mặt kỹ thuật:
PublicReadlà một giá trị ACL của S3, không phải API, và RDS hoàn toàn không liên quan.
Ghi nhớ
⚠ Ba DeletionPolicy — bảng phải thuộc: | Giá trị | Khi xoá stack | |---|---| | Delete (mặc định) | xoá tài nguyên | | Retain | GIỮ LẠI — trở thành tài nguyên mồ côi | | Snapshot | chụp snapshot rồi mới xoá — RDS, EBS, ElastiCache, Redshift |
Từ khoá nhận diện:
"
DeletionPolicy: Retain" → tài nguyên KHÔNG bị xoá theo stack "WebsiteConfiguration" → static website hosting, WEBSITE endpoint "Outputskhông cóExport" → chỉ để hiển thị, stack khác KHÔNG import được "!GetAtt" → lấy thuộc tính của tài nguyên "!Refcho S3 bucket" → trả về TÊN bucket
Các thuộc tính lấy được từ !GetAtt của S3 bucket |
Nội dung |
|---|---|
WebsiteURL |
URL của website endpoint |
DomainName |
bucket.s3.amazonaws.com |
RegionalDomainName |
bucket.s3.<region>.amazonaws.com |
Arn |
ARN của bucket |
DualStackDomainName |
tên miền hỗ trợ IPv4 và IPv6 |
⚠ Một lưu ý về template này trong bối cảnh hiện nay:
Template dùng "AccessControl: PublicRead" (ACL)
↓
Từ tháng 4/2023, AWS BẬT SẴN Block Public Access
và đặt Object Ownership = BucketOwnerEnforced
↓
→ ACL bị VÔ HIỆU HOÁ
→ template này có thể THẤT BẠI khi chạy trên tài khoản mới
↓
Cách làm hiện đại:
- bỏ AccessControl, chỉ dùng bucket policy
- hoặc tốt hơn: đặt CloudFront + OAC phía trước
và giữ bucket HOÀN TOÀN riêng tư
Outputs có Export và không có Export |
Nội dung |
|---|---|
Không có Export |
chỉ hiển thị giá trị — như template này |
Có Export |
stack khác !ImportValue được |
| Nested stack | stack cha đọc output của con bằng !GetAtt ConStack.Outputs.Ten |
| Bảo vệ tài nguyên trong CloudFormation — bốn lớp | Chặn gì |
|---|---|
DeletionPolicy |
mất dữ liệu khi xoá stack |
UpdateReplacePolicy |
mất dữ liệu khi update gây thay thế |
| Stack policy | sửa tài nguyên khi update |
| Termination protection | xoá cả stack |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Xem output của stack | describe-stacks --stack-name <ten> --query 'Stacks[0].Outputs' | | Tài nguyên nào sẽ được giữ | rà template tìm DeletionPolicy | | Bucket còn sau khi xoá stack không | list-buckets sau khi delete-stack |
Và một lưu ý về hệ quả của Retain mà nhiều người không nghĩ tới: tài nguyên được giữ lại sẽ trở thành mồ côi và VẪN TÍNH TIỀN. Với một bucket website thì khoản đó nhỏ, nhưng cùng chính sách ấy áp cho RDS hay NAT Gateway thì bạn có một tài nguyên không ai quản, không ai nhớ, và tiếp tục xuất hiện trong hoá đơn mỗi tháng cho tới khi có người tình cờ tìm ra nó.
A web application is hosted on an Amazon S3 bucket. To provide access over the internet, the DNS record in Amazon Route 53 has been configured to point to the static website. However, the domain is not resolving thereby resulting in an error.
Which of the following could be the most plausible reason for the error?
-
A
Amazon S3 website endpoints need SSL certificate for supporting HTTPS requests. Check the certificate expiry and validation
-
B
Confirm that the HOSTNAME record for the domain is pointing to the correct website endpoint
-
C
The domain should resolve to the same IP address every time, check if this works
-
D
You must give the S3 bucket the same name as the record that you want to use to route traffic to the bucket
Xem giải thích
Đáp án
D — Bạn phải đặt TÊN BUCKET S3 GIỐNG HỆT tên bản ghi DNS mà bạn muốn dùng để định tuyến lưu lượng tới bucket đó.
Vì sao đúng
Đây là một ràng buộc cứng của S3 static website hosting, và nó là nguyên nhân phổ biến nhất của lỗi này.
⚠ Điểm mấu chốt — tên bucket phải khớp CHÍNH XÁC tên miền:
Muốn phục vụ website tại: www.congty.com
↓
Bucket PHẢI có tên: www.congty.com
↓
Muốn phục vụ tại tên miền gốc: congty.com
↓
Bucket PHẢI có tên: congty.com
⚠ Vì sao lại có ràng buộc kỳ lạ này:
S3 website endpoint dùng HEADER "Host" của request
↓
để xác định phục vụ bucket nào
↓
Client gửi: Host: www.congty.com
↓
S3 tìm bucket có TÊN đúng bằng "www.congty.com"
↓
Không có → trả về lỗi "NoSuchBucket" hoặc 404
↓
→ đây chính là triệu chứng của đề
⚠ Cấu hình đầy đủ cho một website tĩnh trên S3:
1. Tạo bucket TÊN ĐÚNG BẰNG tên miền
2. Bật Static website hosting, khai index và error document
3. Bucket policy cho phép s3:GetObject với Principal "*"
(và tắt Block Public Access — hoặc dùng CloudFront + OAC)
4. Route 53: tạo ALIAS record trỏ tới
S3 WEBSITE ENDPOINT (không phải REST endpoint)
Vì sao các phương án khác sai
-
B (kiểm tra bản ghi HOSTNAME có trỏ đúng website endpoint không) — đây là phương án gần nhất và trỏ đúng endpoint đúng là điều cần kiểm tra. Nhưng không có loại bản ghi DNS nào tên "HOSTNAME" — các loại thật là A, AAAA, CNAME, ALIAS, MX, TXT… Cách diễn đạt sai khiến phương án này không thể là đáp án.
-
A (website endpoint cần chứng chỉ SSL cho HTTPS) — S3 website endpoint KHÔNG hỗ trợ HTTPS, nên không có chứng chỉ nào để kiểm tra. Muốn HTTPS thì phải đặt CloudFront phía trước.
-
C (tên miền phải phân giải ra cùng một IP mỗi lần) — sai về nguyên lý: S3 và CloudFront cố ý trả về nhiều IP khác nhau để cân bằng tải và chịu lỗi. Đó là hành vi bình thường.
Ghi nhớ
⚠ Hai endpoint của S3 — bảng phải thuộc: | | REST endpoint | Website endpoint | |---|---|---| | Dạng | bucket.s3.<region>.amazonaws.com | bucket.s3-website-<region>.amazonaws.com | | HTTPS | CÓ | KHÔNG | | Tài liệu chỉ mục (index.html mỗi thư mục) | không | CÓ | | Trang lỗi tuỳ chỉnh | không | CÓ | | Quy tắc chuyển hướng | không | CÓ | | OAC / OAI | dùng được | KHÔNG | | Tên bucket phải khớp tên miền | không bắt buộc | BẮT BUỘC |
Từ khoá nhận diện:
"tên miền không phân giải tới website S3" → tên bucket phải bằng tên miền "cần HTTPS cho website S3" → phải dùng CloudFront "tài liệu chỉ mục cho mỗi thư mục" → website endpoint "trỏ tên miền GỐC về S3" → Route 53 ALIAS (CNAME không dùng được ở zone apex) "website S3 mà giữ bucket riêng tư" → CloudFront + OAC, và bỏ website endpoint
Cấu hình www và tên miền gốc cùng lúc |
Cách |
|---|---|
Bucket congty.com |
chứa nội dung website |
Bucket www.congty.com |
cấu hình redirect sang congty.com |
| Route 53 | ALIAS cho cả hai, trỏ tới website endpoint tương ứng |
| Kết quả | cả hai tên miền đều hoạt động, một cái chuyển hướng |
⚠ Kiến trúc hiện đại hơn — và nên dùng cho website thật:
CloudFront + OAC + bucket RIÊNG TƯ (REST endpoint)
↓
→ có HTTPS với chứng chỉ ACM (us-east-1)
→ có cache ở edge, nhanh hơn và rẻ hơn
→ bucket KHÔNG công khai — an toàn hơn hẳn
→ có WAF, geo restriction, signed URL
↓
Đánh đổi: mất tài liệu chỉ mục cho thư mục con
↓
→ thay bằng CloudFront Function viết lại URI
| Bẫy hay gặp với website tĩnh trên S3 | Nội dung |
|---|---|
| Block Public Access bật sẵn | từ 4/2023 — phải tắt hoặc dùng CloudFront |
| Tên bucket không khớp tên miền | câu này |
| Trỏ ALIAS tới REST endpoint thay vì website endpoint | mất tài liệu chỉ mục |
Quên index.html ở thư mục con |
website endpoint xử lý được, CloudFront thì không |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Website endpoint có hoạt động không | curl http://bucket.s3-website-<region>.amazonaws.com | | DNS trỏ đi đâu | dig www.congty.com | | Bucket có công khai không | get-public-access-block và get-bucket-policy |
Và một lời khuyên về hướng đi cho website tĩnh: hãy dùng CloudFront với OAC thay vì phơi bucket ra công khai, kể cả khi nội dung vốn đã công khai. Bạn được HTTPS miễn phí, được cache ở edge, chi phí truyền dữ liệu thấp hơn, và quan trọng nhất là bucket của bạn không bao giờ xuất hiện trong danh sách "S3 bucket mở công khai" mà các công cụ quét bảo mật vẫn rà internet để tìm.
A company uses Amazon S3 to store shared data that is aggregated and accessed by different applications, teams, and individuals for analytics. Managing access to this shared bucket requires a single bucket policy that controls access for dozens to hundreds of applications with different permission levels. The company wants to make sure that any changes to the bucket policy don’t have an unexpected impact on another application.
What is the best way to build a solution for this requirement?
-
A
Configure S3 Batch Operations to manage access to shared data on S3
-
B
Configure S3 Acceleration on the S3 bucket
-
C
Configure Amazon S3 Access Points on S3 buckets
-
D
Configure Amazon S3 VPC Endpoints for the buckets
Xem giải thích
Đáp án
C — Cấu hình Amazon S3 Access Points cho các bucket.
Vì sao đúng
Đề mô tả chính xác vấn đề mà S3 Access Points sinh ra để giải: một bucket policy khổng lồ phục vụ hàng trăm ứng dụng.
⚠ Điểm mấu chốt — access point tách một chính sách lớn thành nhiều chính sách nhỏ độc lập:
Không có access point
↓
MỘT bucket policy chứa quyền cho hàng trăm ứng dụng
↓
→ chạm giới hạn 20 KB của bucket policy
→ sửa cho ứng dụng A có thể phá ứng dụng B
→ không ai dám đụng vào
Có access point
↓
Mỗi ứng dụng có MỘT access point riêng
Mỗi access point có CHÍNH SÁCH RIÊNG của nó
↓
→ sửa chính sách của ứng dụng A KHÔNG ảnh hưởng ứng dụng B
→ đúng yêu cầu của đề
⚠ Mỗi access point có một tên miền riêng, ứng dụng dùng nó thay cho tên bucket:
Bucket: s3://du-lieu-chung/
Access point: arn:aws:s3:ap-southeast-1:111122223333:accesspoint/ung-dung-a
↓
Ứng dụng gọi qua ARN của access point
↓
→ S3 áp CẢ bucket policy LẪN access point policy
→ quyền hiệu lực là GIAO của hai bên
⚠ Và ba khả năng nữa của access point:
Giới hạn theo TIỀN TỐ
↓
access point chỉ cho phép truy cập s3://bucket/doi-tac-a/*
Giới hạn theo MẠNG
↓
NetworkOrigin = VPC → chỉ gọi được từ trong VPC đó
Block Public Access riêng cho từng access point
Vì sao các phương án khác sai
-
D (cấu hình VPC Endpoint cho bucket) — đây là phương án gần nhất vì nó cũng liên quan tới kiểm soát truy cập. Nhưng VPC endpoint kiểm soát truy cập theo ĐƯỜNG MẠNG (từ trong VPC, không qua internet), không tách bạch được quyền giữa hàng trăm ứng dụng. Vấn đề của đề là quản lý chính sách, không phải đường mạng.
-
A (S3 Batch Operations) — dùng để thực hiện thao tác hàng loạt trên hàng triệu đối tượng (copy, đổi lớp lưu trữ, gọi Lambda). Không liên quan tới phân quyền.
-
B (S3 Transfer Acceleration) — tăng tốc tải lên từ xa qua edge location. Không liên quan tới quyền.
Ghi nhớ
⚠ S3 Access Points — bảng phải thuộc: | Đặc điểm | Nội dung | |---|---| | Mục đích | tách chính sách truy cập theo từng ứng dụng | | Mỗi access point có | tên miền riêng + chính sách riêng | | Quyền hiệu lực | GIAO của bucket policy và access point policy | | NetworkOrigin | Internet hoặc VPC (chỉ gọi được từ VPC đó) | | Giới hạn tiền tố | khai trong chính sách của access point | | Số lượng | hàng nghìn access point mỗi bucket |
Từ khoá nhận diện:
"một bucket policy quá lớn, nhiều ứng dụng" → S3 Access Points "chỉ truy cập S3 từ trong VPC" → VPC endpoint, hoặc access point với
NetworkOrigin=VPC"thao tác hàng loạt trên hàng triệu đối tượng" → S3 Batch Operations "tải lên từ xa chậm" → Transfer Acceleration "truy cập bucket ở nhiều Region qua một endpoint" → Multi-Region Access Points
| Ba loại access point | Nội dung |
|---|---|
| S3 Access Point | cho một bucket, một Region |
| Multi-Region Access Point | một endpoint toàn cầu cho bucket ở nhiều Region, tự định tuyến |
| Object Lambda Access Point | biến đổi dữ liệu khi đọc — che dữ liệu nhạy cảm, đổi định dạng |
| Giới hạn của bucket policy — lý do access point ra đời | Nội dung |
|---|---|
| Kích thước tối đa | 20 KB |
| Một chính sách duy nhất | mọi ứng dụng dùng chung |
| Sửa nhầm | ảnh hưởng tất cả |
| Access point | mỗi cái một chính sách, tối đa 20 KB riêng |
| Object Lambda Access Point — đáng biết | Nội dung |
|---|---|
| Cơ chế | Lambda chạy khi ĐỌC đối tượng, biến đổi dữ liệu trước khi trả về |
| Dùng cho | che số thẻ tín dụng cho một nhóm người dùng |
| Hoặc | đổi định dạng, lọc cột, thêm watermark |
| Lợi ích | một bản dữ liệu, nhiều góc nhìn — không phải nhân bản |
| Kết hợp access point với VPC endpoint | Nội dung |
|---|---|
Access point NetworkOrigin = VPC |
chỉ gọi được từ VPC được khai |
| Cộng với VPC endpoint policy | lớp kiểm soát thứ hai ở tầng mạng |
| Kết quả | quyền tối thiểu ở cả tầng ứng dụng lẫn tầng mạng |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Có những access point nào | list-access-points --bucket <ten> | | Chính sách của một access point | get-access-point-policy | | Ứng dụng có gọi qua access point không | rà mã nguồn xem dùng ARN access point hay tên bucket |
Và một lời khuyên khi chuyển đổi sang mô hình access point: hãy chuyển từng ứng dụng một, và giữ bucket policy hiện tại cho tới khi mọi ứng dụng đã đổi xong. Vì quyền hiệu lực là giao của bucket policy và access point policy, bạn có thể để hai cơ chế cùng tồn tại trong giai đoạn chuyển đổi — rồi mới thu gọn bucket policy lại thành một chính sách tối thiểu khi không còn ai gọi thẳng vào bucket nữa.
As a SysOps Administrator, you have been asked to set up a private network connection between a File Gateway and Amazon S3 for secure access.
How will you configure this requirement cost-effectively?
-
A
Use VPC Peering to set up a private connection between on-premises and AWS Cloud resources
-
B
Setup AWS Transit Gateway for accessing S3 privately from File Gateway
-
C
Setup the private connection within an Amazon Virtual Private Cloud (Amazon VPC) by using VPC endpoints
-
D
Setup AWS Direct Connect for accessing S3 privately
Xem giải thích
Đáp án
C — Thiết lập kết nối riêng bên trong Amazon VPC bằng cách dùng VPC endpoint.
Vì sao đúng
Đề nêu hai ràng buộc: kết nối riêng tới S3 và TIẾT KIỆM CHI PHÍ. VPC endpoint thoả cả hai.
⚠ Điểm mấu chốt — File Gateway nói chuyện với S3 qua VPC endpoint:
File Gateway (tại chỗ hoặc trên EC2)
↓
Kết nối vào VPC (qua Direct Connect, VPN, hoặc chạy trong VPC)
↓
Trong VPC có:
- Interface endpoint cho Storage Gateway
- Gateway endpoint cho S3 ← MIỄN PHÍ
↓
→ lưu lượng KHÔNG ra internet công cộng
→ đi trong mạng riêng của AWS
⚠ Hai loại VPC endpoint — và vì sao chọn đúng loại là tiết kiệm được nhiều tiền:
Gateway endpoint (S3, DynamoDB)
↓
Thêm một TUYẾN vào route table
↓
→ HOÀN TOÀN MIỄN PHÍ
→ không tính phí giờ, không tính phí GB
Interface endpoint (PrivateLink, hầu hết dịch vụ khác)
↓
Tạo một ENI có IP riêng trong subnet
↓
→ tính phí THEO GIỜ và THEO GB
⚠ Cấu hình đầy đủ cho File Gateway dùng VPC endpoint:
1. Interface endpoint cho storagegateway
com.amazonaws.<region>.storagegateway
→ để gateway liên lạc với mặt phẳng điều khiển
2. Gateway endpoint cho S3 (MIỄN PHÍ)
com.amazonaws.<region>.s3
→ để dữ liệu đi thẳng vào S3 không qua internet
3. Security Group cho phép gateway tới các endpoint
Vì sao các phương án khác sai
-
D (dùng Direct Connect để truy cập S3 riêng tư) — đây là phương án gần nhất và về kỹ thuật thì đúng: public VIF của Direct Connect truy cập S3 qua cáp riêng. Nhưng nó đắt hơn rất nhiều — phí cổng theo giờ cộng phí đối tác viễn thông — và mất hàng tuần tới hàng tháng để triển khai. Đề hỏi cách tiết kiệm chi phí.
-
B (dùng Transit Gateway để truy cập S3 riêng tư) — Transit Gateway nối nhiều VPC và mạng tại chỗ với nhau. Nó không phải cơ chế truy cập S3, và tự nó cũng tốn phí gắn kết cộng phí xử lý dữ liệu.
-
A (dùng VPC Peering giữa tại chỗ và AWS) — hiểu sai khái niệm: VPC peering nối hai VPC, không nối trung tâm dữ liệu tại chỗ với AWS.
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Í | theo giờ + theo GB | | Cơ chế | thêm tuyến vào route table | ENI có IP riêng trong subnet | | Máy tại chỗ dùng được | KHÔNG | CÓ (qua DX/VPN) | | DNS | dùng tên công khai | có private DNS | | Bảo mật | endpoint policy | endpoint policy + Security Group |
Từ khoá nhận diện:
"truy cập S3 riêng tư từ TRONG VPC, rẻ nhất" → gateway endpoint (miễn phí) "truy cập S3 riêng tư từ TẠI CHỖ" → interface endpoint, hoặc Direct Connect public VIF "gọi dịch vụ AWS khác không ra internet" → interface endpoint "lộ dịch vụ của mình cho tài khoản khác" → PrivateLink endpoint service "nối nhiều VPC" → Transit Gateway hoặc peering
⚠ Mẹo tiết kiệm chi phí lớn nhất liên quan tới endpoint:
VPC có NAT Gateway và fleet đọc ghi S3 nhiều
↓
Không có gateway endpoint
↓
→ mọi lưu lượng tới S3 đi qua NAT Gateway
→ tính phí XỬ LÝ DỮ LIỆU theo từng GB
↓
Thêm gateway endpoint cho S3 (MIỄN PHÍ)
↓
→ lưu lượng S3 đi thẳng, KHÔNG qua NAT
→ cắt được một khoản đáng kể mỗi tháng
↓
→ nên làm cho MỌI VPC có NAT Gateway
| Endpoint policy — lớp kiểm soát thêm | Nội dung |
|---|---|
| Gắn vào endpoint | giới hạn bucket nào truy cập được qua đó |
| Ví dụ | chỉ cho phép bucket của công ty, chặn bucket lạ |
| Chống | nhân viên đẩy dữ liệu ra bucket cá nhân |
| Kết hợp | với aws:PrincipalOrgID để chỉ cho phép tài khoản trong tổ chức |
| Các endpoint hay cần cho instance ở private subnet | Dịch vụ |
|---|---|
s3 (gateway, miễn phí) |
tải gói, đọc ghi dữ liệu |
dynamodb (gateway, miễn phí) |
|
ssm, ssmmessages, ec2messages |
Systems Manager |
logs |
CloudWatch Logs |
ecr.api, ecr.dkr |
kéo image container |
secretsmanager, kms |
bí mật và mã hoá |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Endpoint đã tạo chưa | describe-vpc-endpoints | | Route table đã có tuyến chưa | gateway endpoint thêm tuyến vào route table — kiểm tra đúng bảng | | Lưu lượng có đi qua endpoint không | VPC Flow Logs — thấy đích là IP nội bộ của endpoint |
Và một việc nên làm ngay hôm nay trong mọi VPC đang có NAT Gateway: thêm gateway endpoint cho S3 và DynamoDB. Chúng hoàn toàn miễn phí, cấu hình mất vài phút, và với một fleet thường xuyên đọc ghi S3 thì chúng cắt đi phần lớn khoản phí xử lý dữ liệu của NAT — một khoản mà rất nhiều đội trả đều đặn hằng tháng suốt nhiều năm mà không biết rằng nó hoàn toàn tránh được.