Ngân hàng đề — AWS Certified Solutions Architect Associate

Tìm thấy 2194 câu.

Câu 1171 Chọn nhiều đáp án AWS Compute

A software development company is deploying a microservices-based application on Amazon Elastic Kubernetes Service (Amazon EKS). The application's traffic fluctuates significantly throughout the day and the company wants to ensure that the EKS cluster scales up and down according to these traffic patterns.

Which combination of steps would satisfy these requirements with MINIMAL operational overhead? (Select TWO.)

  1. A

    Leverage AWS X-Ray to track and analyze the application's network activity.

  2. B

    Implement the Kubernetes Vertical Pod Autoscaler to adjust the CPU and memory allocation for the pods.

  3. C

    Utilize the Kubernetes Metrics Server to enable horizontal pod autoscaling based on resource utilization.

  4. D

    Integrate Amazon SQS and connect it to Amazon EKS for workload management.

  5. E

    Employ the Kubernetes Cluster Autoscaler for dynamically managing the quantity of nodes in the EKS cluster.

Xem giải thích

Đáp án

C và E — Dùng Kubernetes Metrics Server để bật horizontal pod autoscaling theo mức dùng tài nguyên, và dùng Kubernetes Cluster Autoscaler để tự động quản lý số lượng node trong cụm EKS.

Vì sao đúng

Đề cần cụm EKS co giãn theo lưu lượng, và việc đó cần HAI tầng độc lập: | Tầng | Công cụ | Việc | |---|---|---| | Pod | Metrics Server + HPA | thêm bớt SỐ POD | | Node | Cluster Autoscaler | thêm bớt SỐ MÁY |

⚠ Thiếu một tầng là hệ thống không co giãn được:

Chỉ có HPA:
    → tăng số pod
    → hết chỗ trên node hiện có
    → pod ở trạng thái Pending mãi
        ↓
Chỉ có Cluster Autoscaler:
    → không có pod Pending nào để kích hoạt nó
    → không bao giờ thêm node

Cài Metrics Server:

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

⚠ HPA KHÔNG hoạt động nếu thiếu Metrics Server:

HPA đọc metric qua Metrics API
    → EKS KHÔNG cài Metrics Server sẵn
        ↓
    Không cài: `kubectl top` báo lỗi,
    HPA hiện `<unknown>/50%` và không làm gì

Cấu hình HPA:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-dich-vu
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: dich-vu-web
  minReplicas: 3
  maxReplicas: 50
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 60

⚠ Pod BẮT BUỘC phải khai resources.requests:

resources:
  requests: {cpu: 250m, memory: 512Mi}
  limits:   {cpu: 500m, memory: 1Gi}
HPA tính phần trăm so với `requests`
    → không khai requests = không tính được
    → HPA không hoạt động
        ↓
    Cluster Autoscaler cũng dựa vào requests
      để biết node có đủ chỗ không

Cluster Autoscaler:

kubectl apply -f cluster-autoscaler-autodiscover.yaml
kubectl -n kube-system annotate deployment.apps/cluster-autoscaler \
  cluster-autoscaler.kubernetes.io/safe-to-evict="false"

Node group phải có tag để tự phát hiện:

k8s.io/cluster-autoscaler/enabled = true
k8s.io/cluster-autoscaler/<ten-cum> = owned

Ba lợi ích của cặp này: | Lợi ích | Chi tiết | |---|---| | Hai tầng phối hợp tự nhiên | | | Đây là cách chuẩn của Kubernetes | | | Không phải viết mã điều phối nào | |

Ghi nhớ về chất lượng câu hỏi

⚠ Ngày nay Karpenter là lựa chọn được AWS khuyến nghị thay cho Cluster Autoscaler.

Tiêu chí Cluster Autoscaler Karpenter
Cách hoạt động chỉnh desired size của ASG gọi thẳng EC2 API
Thời gian cấp node vài phút ~1 phút
Chọn loại instance theo node group đã định tự chọn loại rẻ nhất phù hợp
Hợp nhất node không ✅ dồn pod, bỏ node thừa
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: mac-dinh
spec:
  template:
    spec:
      requirements:
        - key: karpenter.sh/capacity-type
          operator: In
          values: ["spot", "on-demand"]
      nodeClassRef: {name: mac-dinh}
  disruption:
    consolidationPolicy: WhenEmptyOrUnderutilized
Đề nói "MINIMAL operational overhead"
    → Karpenter còn ít hơn Cluster Autoscaler
    → nhưng nó không có trong phương án
        ↓
    C và E vẫn là cặp đúng duy nhất trong năm lựa chọn

Vì sao các phương án khác sai

  • **B. Vertical Pod Autoscaler điều chỉnh CPU và bộ nhớ cho pod — đây là phương án gần nhất và cũng là một cơ chế autoscaling thật, nhưng VPA thay đổi kích thước pod chứ không thay đổi số lượng; nó thường phải khởi động lại pod để áp giá trị mới, và xung đột với HPA khi cả hai cùng dùng metric CPU.
  • **A. Dùng AWS X-Ray theo dõi hoạt động mạng — X-Ray là công cụ truy vết phân tán để gỡ lỗi độ trễ; nó không co giãn gì cả.
  • **D. Tích hợp Amazon SQS với EKS — hàng đợi giúp tách rời và đệm công việc, nhưng đề nói về lưu lượng web biến động, không phải xử lý theo hàng đợi.

Ghi nhớ

⚠ Ba cơ chế autoscaling của Kubernetes — bảng phải thuộc: | Cơ chế | Điều chỉnh | |---|---| | HPA (Horizontal Pod Autoscaler) | SỐ LƯỢNG pod | | VPA (Vertical Pod Autoscaler) | KÍCH THƯỚC pod (CPU/RAM) | | Cluster Autoscaler / Karpenter | SỐ LƯỢNG node |

⚠ HPA và VPA xung đột nhau nếu dùng chung metric:

HPA thấy CPU cao → thêm pod
VPA thấy CPU cao → tăng request của pod
        ↓
    Hai bên đánh nhau
    → chỉ dùng VPA ở chế độ "recommendation"
      khi đã có HPA theo CPU

Từ khoá nhận diện:

"scale pods based on utilization" → HPA + Metrics Server "scale nodes" → Cluster Autoscaler hoặc Karpenter "right-size pod resources" → VPA "scale on queue depth or custom metric" → KEDA

⚠ KEDA đáng biết cho metric ngoài CPU:

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
spec:
  scaleTargetRef: {name: worker}
  minReplicaCount: 0
  triggers:
    - type: aws-sqs-queue
      metadata:
        queueURL: <url>
        queueLength: "10"
KEDA co giãn theo độ sâu hàng đợi SQS,
   số tin nhắn Kafka, metric CloudWatch...
    → và co giãn xuống 0 được

Ba lưu ý về Metrics Server: | Lưu ý | Chi tiết | |---|---| | EKS không cài sẵn | | | Chỉ cung cấp metric hiện tại, không lưu lịch sử | | | Kiểm tra bằng kubectl top nodes | |

Ba lưu ý về Cluster Autoscaler: | Lưu ý | Chi tiết | |---|---| | Kích hoạt bởi pod ở trạng thái Pending | | | Node group phải có tag tự phát hiện | | | --balance-similar-node-groups cân bằng AZ | |

⚠ Cluster Autoscaler chỉ hiểu MỘT loại instance mỗi node group:

Node group trộn nhiều loại máy khác cỡ
    → Cluster Autoscaler tính sai năng lực
        ↓
    Mỗi node group một cỡ máy
    → hoặc dùng Karpenter

Ba lưu ý về thu nhỏ: | Lưu ý | Chi tiết | |---|---| | Node rảnh 10 phút mới bị gỡ (mặc định) | | | Pod không có controller chặn việc gỡ node | | | PodDisruptionBudget bảo vệ tính sẵn sàng | |

apiVersion: policy/v1
kind: PodDisruptionBudget
spec:
  minAvailable: 2
  selector:
    matchLabels: {app: dich-vu-web}

Ba lưu ý về tốc độ phản ứng: | Yếu tố | Ảnh hưởng | |---|---| | HPA đánh giá mỗi 15 giây | | | Cấp node mới mất 1-4 phút | | | Image lớn kéo lâu — dùng image nhỏ | |

⚠ Overprovisioning giúp phản ứng tức thì:

Chạy vài pod "giữ chỗ" với priority thấp
    → khi có pod thật cần chỗ, chúng bị đuổi ngay
    → pod thật chạy liền
        ↓
    Cluster Autoscaler dựng node mới cho pod giữ chỗ

Ba lưu ý về chi phí: | Lưu ý | Chi tiết | |---|---| | Trộn Spot và On-Demand | | | Karpenter tự chọn loại rẻ nhất | | | Consolidation dồn pod, bỏ node thừa | |

Ba việc kiểm chứng: | Việc | Cách | |---|---| | kubectl get hpa xem có metric không | | | Chạy tải giả, xem pod và node tăng | | | Xem log Cluster Autoscaler | |

kubectl get hpa
kubectl -n kube-system logs -l app=cluster-autoscaler --tail=50

Và một lời khuyên: hãy khai resources.requests cho mọi pod trước khi bật bất kỳ cơ chế autoscaling nào. Cả HPA lẫn Cluster Autoscaler đều tính toán dựa trên con số đó, nên pod không khai request sẽ khiến cả hai tầng co giãn hoạt động sai mà không báo lỗi gì.

Câu 1172 AWS Security, Identity, & Compliance

An application runs on Amazon EC2 instances backed by Amazon EBS volumes and an Amazon RDS database. The application is highly sensitive and security compliance requirements mandate that all personally identifiable information (PII) be encrypted at rest.

Which solution should a Solutions Architect choose to this requirement?

  1. A

    Enable encryption on Amazon RDS during creation. Use Amazon Macie to identify sensitive data.

  2. B

    Configure SSL/TLS encryption using AWS KMS customer master keys (CMKs) to encrypt database volumes.

  3. C

    Configure Amazon EBS encryption and Amazon RDS encryption with AWS KMS keys to encrypt instance and database volumes.

  4. D

    Deploy AWS CloudHSM, generate encryption keys, and use the customer master key (CMK) to encrypt database volumes.

Xem giải thích

Đáp án

C — Cấu hình mã hoá EBS và mã hoá RDS bằng khoá AWS KMS để mã hoá volume của instance lẫn của CSDL.

Vì sao đúng

Đề nêu yêu cầu tuân thủ: mọi PII phải được mã hoá at rest. Ứng dụng có hai nơi lưu dữ liệu, và cả hai đều phải mã hoá:

Nơi lưu Cách mã hoá
Volume EBS của EC2 EBS encryption bằng KMS
CSDL RDS RDS storage encryption bằng KMS

⚠ Chỉ mã hoá một trong hai là chưa đủ:

Chỉ mã hoá RDS
    → dữ liệu tạm, log ứng dụng, tệp tải lên
      nằm trên EBS vẫn ở dạng thô
        ↓
    Kiểm toán viên sẽ tìm thấy PII ở đó

Bật mã hoá EBS mặc định cho cả tài khoản:

aws ec2 enable-ebs-encryption-by-default
aws ec2 modify-ebs-default-kms-key-id --kms-key-id <arn-khoa>

⚠ Đây là biện pháp tốt hơn nhiều so với nhớ tích ô:

Từ đó mọi volume mới TỰ ĐỘNG mã hoá
    → không phụ thuộc việc ai đó nhớ
        ↓
    Và mã hoá EBS chỉ đặt được LÚC TẠO
    → quên một lần là phải snapshot–copy–restore

Tạo RDS mã hoá:

aws rds create-db-instance \
  --db-instance-identifier csdl-ung-dung \
  --engine postgres --db-instance-class db.r6g.xlarge \
  --allocated-storage 500 --storage-encrypted \
  --kms-key-id <arn-khoa> --multi-az \
  --manage-master-user-password

Mã hoá RDS phủ toàn bộ: | Thành phần | Được mã hoá | |---|---| | Dữ liệu trên đĩa | ✅ | | Snapshot tự động và thủ công | ✅ | | Read replica | ✅ | | Bản sao lưu và log | ✅ |

Thêm mã hoá khi truyền — tuân thủ thường đòi cả hai:

aws rds modify-db-parameter-group \
  --db-parameter-group-name nhom-tham-so \
  --parameters "ParameterName=rds.force_ssl,ParameterValue=1,
                ApplyMethod=pending-reboot"

Ba lợi ích của KMS so với tự quản lý khoá: | Lợi ích | Chi tiết | |---|---| | Key policy quyết định ai giải mã được | | | CloudTrail ghi mọi lần dùng khoá | | | Xoay khoá tự động | |

Vì sao các phương án khác sai

  • **A. Bật mã hoá RDS lúc tạo và dùng Macie để nhận diện dữ liệu nhạy cảm — đây là phương án gần nhất và có một nửa đúng, nhưng nó bỏ sót volume EBS; và Macie PHÁT HIỆN dữ liệu nhạy cảm trong S3 chứ không mã hoá gì, đồng thời Macie không quét EBS hay RDS.
  • **B. Dùng SSL/TLS với KMS CMK để mã hoá volume CSDL — nhầm lẫn hai khái niệm: SSL/TLS mã hoá khi truyền, không mã hoá khi lưu trữ.
  • **D. Triển khai CloudHSM, sinh khoá và dùng CMK mã hoá volume CSDL — CloudHSM chạy được nhưng là giải pháp đắt và nhiều việc hơn nhiều; nó chỉ cần khi có yêu cầu FIPS 140-2 Level 3, và phương án vẫn bỏ sót EBS.

Ghi nhớ

⚠ Hai loại mã hoá phải phân biệt rõ: | Loại | Bảo vệ | Công cụ | |---|---|---| | At rest | dữ liệu trên đĩa | KMS (EBS, RDS, S3) | | In transit | dữ liệu trên dây | SSL/TLS |

⚠ Tuân thủ thường đòi CẢ HAI — đừng để một câu hỏi về "at rest" khiến bạn quên "in transit" trong thiết kế thật.

Từ khoá nhận diện:

"encrypt PII at rest on EC2 and RDS" → EBS encryption + RDS encryption với KMS "find sensitive data in S3" → Macie "FIPS 140-2 Level 3, dedicated HSM" → CloudHSM "encrypt data in transit" → TLS, rds.force_ssl

⚠ KMS vs CloudHSM: | Tiêu chí | KMS | CloudHSM | |---|---|---| | Quản lý | AWS | bạn | | Chứng nhận | FIPS 140-2 Level 3 (HSM đơn) | Level 3, cụm riêng | | Chi phí | ~1 USD/khoá/tháng | hàng nghìn USD/tháng | | Tích hợp dịch vụ AWS | gốc | qua custom key store |

Chọn CloudHSM khi:
    → quy định bắt buộc HSM chuyên dụng
    → cần kiểm soát vật lý khoá
        ↓
    Còn lại: KMS

Ba loại khoá KMS: | Loại | Chi phí | Kiểm soát | |---|---|---| | AWS managed | miễn phí | không sửa key policy | | Customer managed | ~1 USD/tháng | đầy đủ | | AWS owned | miễn phí | không thấy được |

⚠ Tuân thủ thường đòi customer managed key:

Cần chứng minh kiểm soát khoá
    → key policy, nhật ký, quyền xoay
        ↓
    AWS managed key không cho những thứ đó

Ba lưu ý về mã hoá EBS: | Lưu ý | Chi tiết | |---|---| | Chỉ bật LÚC TẠO volume | | | Không tắt được sau khi bật | | | Snapshot của volume mã hoá cũng mã hoá | |

⚠ Mã hoá volume đã có: snapshot → copy có mã hoá → tạo volume mới.

aws ec2 copy-snapshot --source-snapshot-id snap-abc \
  --source-region ap-southeast-1 --encrypted --kms-key-id <arn>

Ba lưu ý về bảo vệ khoá: | Lưu ý | Chi tiết | |---|---| | Chặn kms:ScheduleKeyDeletion | | | Bật xoay khoá tự động | | | Xoá khoá = dữ liệu mất vĩnh viễn | |

{"Effect": "Deny", "Principal": "*",
 "Action": ["kms:ScheduleKeyDeletion", "kms:DisableKey"],
 "Resource": "*",
 "Condition": {"StringNotEquals":
   {"aws:PrincipalArn": "arn:aws:iam::123456789012:role/QuanTriKhoa"}}}

Ba lưu ý về hiệu năng: | Lưu ý | Chi tiết | |---|---| | Mã hoá EBS gần như không ảnh hưởng hiệu năng | | | Xử lý ở tầng lưu trữ, không tốn CPU máy | | | Không có lý do hiệu năng để không mã hoá | |

Ba lưu ý về giám sát tuân thủ: | Công cụ | Việc | |---|---| | Config rule encrypted-volumes | | | Config rule rds-storage-encrypted | | | SCP chặn tạo tài nguyên chưa mã hoá | |

⚠ SCP là biện pháp mạnh nhất:

{"Effect": "Deny", "Action": "ec2:CreateVolume",
 "Resource": "*",
 "Condition": {"Bool": {"ec2:Encrypted": "false"}}}

Ba lưu ý về PII ở nơi khác: | Nơi | Cách bảo vệ | |---|---| | Log ứng dụng | mã hoá CloudWatch Logs bằng KMS | | Snapshot và AMI | mã hoá lan truyền tự động | | Bản sao lưu ở S3 | SSE-KMS |

⚠ Log là nơi PII hay lọt ra nhất:

Ứng dụng ghi log toàn bộ request
    → gồm cả số CMND, email, số thẻ
        ↓
    Mã hoá log group, và lọc PII ngay trong mã

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Kiểm tra mọi volume có Encrypted: true | | | Kiểm tra RDS có StorageEncrypted: true | | | Chạy Config rule xem tuân thủ | |

aws ec2 describe-volumes --filters Name=encrypted,Values=false \
  --query "Volumes[].[VolumeId,Attachments[0].InstanceId]" --output table

Và một lời khuyên: hãy bật mã hoá EBS mặc định ở cấp tài khoản thay vì tin vào quy trình. Mã hoá chỉ quyết định được lúc tạo volume, nên một lần ai đó quên tích ô sẽ để lại dữ liệu PII không mã hoá mà cách chữa duy nhất là chép sang volume mới và chịu một cửa sổ ngừng dịch vụ.

Câu 1173 AWS Migration & Transfer

A company needs to store data from an application. Data in the application changes frequently. All levels of stored data must be audited under a new regulation which the company adheres to.

Application storage capacity is running out on the company's on-premises infrastructure. To comply with the new regulation, a solutions architect must offload some data securely to AWS to relieve the on-premises capacity issues.

Which solution will meet these requirements?

  1. A

    Move existing data to Amazon S3 using AWS DataSync. Log data events using AWS CloudTrail.

  2. B

    Move the existing data to Amazon S3 with AWS Snowcone. Using AWS CloudTrail, you can log management events.

  3. C

    The existing data can be transferred to Amazon S3 with the help of Amazon S3 Transfer Acceleration. Log data events using AWS CloudTrail.

  4. D

    Use AWS Storage Gateway to move the existing data to Amazon S3. Use AWS CloudTrail to log management events.

Xem giải thích

Đáp án

D — Dùng AWS Storage Gateway chuyển dữ liệu hiện có sang Amazon S3, và dùng AWS CloudTrail ghi lại sự kiện.

Vì sao đúng

Đề nêu ba yêu cầu, và Storage Gateway là công cụ hợp nhất với hai yêu cầu đầu: | Yêu cầu | Cách đáp ứng | |---|---| | Hết dung lượng tại chỗ, cần GIẢM TẢI | File Gateway giữ cache nóng, đẩy phần còn lại lên S3 | | Dữ liệu THAY ĐỔI THƯỜNG XUYÊN | hoạt động liên tục, không phải chuyển một lần | | Ứng dụng vẫn dùng giao thức tệp | NFS hoặc SMB — không sửa ứng dụng |

⚠ "Storage capacity is running out" nghĩa là cần giải pháp LIÊN TỤC, không phải một lần chuyển:

DataSync, Snowcone, Transfer Acceleration:
    → chuyển dữ liệu MỘT LẦN sang AWS
    → xong rồi tại chỗ vẫn đầy như cũ
        ↓
File Gateway: ứng dụng ghi vào gateway
    → dữ liệu nóng nằm trong cache cục bộ
    → phần còn lại nằm trên S3
    → dung lượng tại chỗ không bao giờ đầy nữa

Dựng File Gateway:

aws storagegateway create-nfs-file-share \
  --client-token $(uuidgen) \
  --gateway-arn <arn-gateway> \
  --location-arn arn:aws:s3:::kho-du-lieu \
  --role <arn-role> \
  --default-storage-class S3_STANDARD \
  --client-list 10.0.0.0/16 \
  --kms-encrypted --kms-key <arn-khoa>

⚠ Cache cục bộ là cơ chế cốt lõi:

Đọc tệp đang trong cache → tốc độ như đĩa cục bộ
Đọc tệp không trong cache → kéo từ S3
        ↓
    Cấp cache đủ lớn cho tập dữ liệu NÓNG
    → phần lớn thao tác vẫn nhanh

Ba loại Storage Gateway: | Loại | Giao thức | Đích | |---|---|---| | File Gateway (S3) | NFS, SMB | object trong S3 | | File Gateway (FSx) | SMB | FSx for Windows | | Volume Gateway | iSCSI | volume EBS snapshot | | Tape Gateway | iSCSI VTL | S3 Glacier |

Ba lợi ích: | Lợi ích | Chi tiết | |---|---| | Ứng dụng không đổi giao thức | | | Tệp thành object S3 thật, đọc được bằng API | | | Mở rộng vô hạn theo S3 | |

Ghi nhớ về chất lượng câu hỏi

⚠ Vế logging của đáp án không khớp với yêu cầu của đề.

Đề nói: "All levels of stored data must be audited" — tức là cần ghi lại việc truy cập từng object. Nhưng:

Loại sự kiện CloudTrail Ghi gì
Management event thao tác quản lý: tạo bucket, đổi policy
Data event s3:GetObject, s3:PutObject — ai đọc object nào
Kiểm toán "mọi tầng dữ liệu được lưu"
    → cần DATA EVENT
        ↓
    Đáp án D nói "management events"
    → vế này thực ra YẾU HƠN phương án A
      (vốn nói "data events")

Bật data event là việc phải làm trong thực tế:

aws cloudtrail put-event-selectors --trail-name duong-mon-chinh \
  --advanced-event-selectors '[{
    "Name": "Ghi data event cua S3",
    "FieldSelectors": [
      {"Field":"eventCategory","Equals":["Data"]},
      {"Field":"resources.type","Equals":["AWS::S3::Object"]},
      {"Field":"resources.ARN","StartsWith":["arn:aws:s3:::kho-du-lieu/"]}]}]'
Đáp án D đúng ở vế QUAN TRỌNG HƠN (Storage Gateway)
    → nhưng sai ở vế logging
        ↓
    Phương án A đúng vế logging, sai vế chuyển dữ liệu
    → không có phương án nào đúng cả hai

⚠ Và data event tính phí theo sự kiện — cần giới hạn phạm vi:

Bật cho bucket lớn không lọc tiền tố
    → hàng triệu sự kiện mỗi ngày
    → hoá đơn CloudTrail vượt cả tiền lưu trữ

Vì sao các phương án khác sai

  • **A. Dùng DataSync chuyển dữ liệu hiện có, ghi data event — đây là phương án gần nhất và có vế logging đúng hơn, nhưng DataSync là công cụ chuyển một lần hoặc đồng bộ theo lịch; nó không giải quyết được việc dung lượng tại chỗ tiếp tục đầy khi dữ liệu thay đổi thường xuyên.
  • **B. Dùng Snowcone — thiết bị chỉ chứa 8-14 TB, dùng cho chuyển một lần khi mạng yếu; không phải giải pháp lưu trữ lai liên tục.
  • **C. Dùng S3 Transfer Acceleration — tăng tốc tải lên từ xa qua edge của CloudFront; nó không phải cơ chế giảm tải lưu trữ tại chỗ.

Ghi nhớ

⚠ Bốn công cụ đưa dữ liệu lên AWS — bảng phải thuộc: | Công cụ | Bản chất | |---|---| | Storage Gateway | LAI — tại chỗ và AWS cùng lúc, liên tục | | DataSync | CHUYỂN qua mạng, một lần hoặc theo lịch | | Snow Family | CHUYỂN vật lý khi mạng yếu | | Transfer Family | nhận tệp qua SFTP/FTPS |

Từ khoá nhận diện:

"on-premises capacity running out, data changes frequently" → Storage Gateway "migrate data over the network" → DataSync "low bandwidth, petabytes" → Snowball "keep SFTP clients unchanged" → Transfer Family "audit object-level access" → CloudTrail data events

⚠ Storage Gateway là lựa chọn duy nhất cho mô hình LAI:

Các công cụ khác: dữ liệu đi MỘT CHIỀU lên AWS
        ↓
Storage Gateway: ứng dụng tại chỗ vẫn dùng dữ liệu
                 như thể nó nằm cục bộ

Ba lưu ý về File Gateway: | Lưu ý | Chi tiết | |---|---| | Tệp thành object S3 THẬT | đọc được bằng API | | Cấu trúc thư mục thành tiền tố | | | Nhiều gateway chia sẻ một bucket được | |

⚠ Nhưng phải cẩn thận khi ghi từ hai phía:

Ghi trực tiếp vào S3 bằng API
    → File Gateway KHÔNG tự thấy thay đổi
        ↓
    Phải chạy RefreshCache
aws storagegateway refresh-cache --file-share-arn <arn> \
  --folder-list "/" --recursive

Ba lưu ý về cache: | Lưu ý | Chi tiết | |---|---| | Cấp đĩa cache đủ cho tập dữ liệu nóng | | | Tối thiểu 150 GB | | | Theo dõi CachePercentDirty | |

⚠ CachePercentDirty cao là dấu hiệu nguy hiểm:

Dữ liệu đã ghi vào gateway nhưng CHƯA đẩy lên S3
    → gateway hỏng lúc này = mất dữ liệu đó
        ↓
    Cache đầy hoặc băng thông không đủ
    → tăng cache hoặc tăng băng thông

Ba lưu ý về lớp lưu trữ: | Lớp | Chi tiết | |---|---| | S3 Standard | mặc định | | S3 Standard-IA | rẻ hơn cho tệp ít đọc | | Lifecycle policy | chuyển sang Glacier về sau |

Ba lưu ý về bảo mật: | Lưu ý | Chi tiết | |---|---| | Mã hoá bucket bằng SSE-KMS | | | --client-list giới hạn IP mount được | | | SMB gateway nối được Active Directory | |

Ba lưu ý về kiểm toán: | Lưu ý | Chi tiết | |---|---| | Data event cho quyền truy cập object | | | S3 server access log là lựa chọn rẻ hơn | | | Object Lock nếu cần chống xoá | |

⚠ S3 server access log rẻ hơn nhiều so với data event:

Data event: tính phí theo sự kiện, gần thời gian thực
S3 access log: ghi vào bucket, độ trễ vài giờ, rất rẻ
        ↓
    Kiểm toán định kỳ → access log đủ
    Cảnh báo thời gian thực → data event

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Mount và ghi tệp thử | | | Kiểm tra object xuất hiện trong S3 | | | Theo dõi CachePercentDirty | |

Và một lời khuyên: hãy bật CloudTrail data event có giới hạn tiền tố nếu yêu cầu là kiểm toán truy cập dữ liệu. Management event ghi lại việc ai đổi cấu hình bucket, nhưng nó hoàn toàn im lặng về việc ai đã đọc tệp nào — và đó thường chính là câu hỏi mà kiểm toán viên đặt ra.

Câu 1174 AWS Networking & Content Delivery

An application uses an Amazon RDS database and Amazon EC2 instances in a web tier. The web tier instances must not be directly accessible from the internet to improve security.

How can a Solutions Architect meet these requirements?

  1. A

    Launch the EC2 instances in a public subnet and create an Application Load Balancer in a public subnet

  2. B

    Launch the EC2 instances in a private subnet with a NAT gateway and update the route table

  3. C

    Launch the EC2 instances in a public subnet and use AWS WAF to protect the instances from internet-based attacks

  4. D

    Launch the EC2 instances in a private subnet and create an Application Load Balancer in a public subnet

Xem giải thích

Đáp án

D — Khởi chạy EC2 instance trong subnet riêng tư và tạo một Application Load Balancer trong subnet công khai.

Vì sao đúng

Đề nêu một yêu cầu duy nhất: máy tầng web không được truy cập trực tiếp từ Internet. Mẫu này là kiến trúc chuẩn cho việc đó.

⚠ ALB đứng làm điểm vào duy nhất:

Internet
    → ALB (subnet công khai, có IP công khai)
        ↓ chuyển tiếp
    EC2 (subnet riêng tư, KHÔNG có IP công khai)
        ↓
    RDS (subnet riêng tư)

Vì sao máy trong subnet riêng tư không bị chạm tới:

Không có IP công khai
    → không có địa chỉ nào để gọi từ Internet
        ↓
    Route table không có tuyến tới internet gateway
    → gói tin từ ngoài không có đường vào

Security group tầng ứng dụng chỉ mở cho ALB:

aws ec2 authorize-security-group-ingress \
  --group-id sg-ung-dung --protocol tcp --port 8080 \
  --source-group sg-alb

⚠ Tham chiếu security group thay vì CIDR:

Quy tắc theo CIDR của subnet công khai
    → mọi thứ trong subnet đó vào được
        ↓
    Tham chiếu SG của ALB
    → CHỈ ALB, và sống sót qua mọi thay đổi IP

Ba tầng, ba security group:

sg-alb:      vào 443 từ 0.0.0.0/0
sg-ung-dung: vào 8080 từ sg-alb
sg-csdl:     vào 3306 từ sg-ung-dung
        ↓
    Mỗi tầng chỉ mở cho tầng ngay trước nó

⚠ ALB BẮT BUỘC có subnet ở ít nhất hai AZ:

aws elbv2 create-load-balancer --name alb-web \
  --subnets subnet-cong-khai-a subnet-cong-khai-b \
  --scheme internet-facing --type application \
  --security-groups sg-alb

Ba lợi ích: | Lợi ích | Chi tiết | |---|---| | Máy ứng dụng không phơi ra Internet | | | ALB xử lý TLS, health check, định tuyến | | | Gắn được WAF vào ALB | |

⚠ Máy riêng tư vẫn cần đường RA để vá và gọi API:

NAT gateway trong subnet công khai MỖI AZ
    → cho phép gọi ra, không cho gọi vào
        ↓
    Hoặc dùng VPC endpoint để bỏ hẳn NAT

Vì sao các phương án khác sai

  • **B. Khởi chạy EC2 trong subnet riêng tư với NAT gateway và cập nhật route table — đây là phương án gần nhất và giải quyết đúng phần bảo mật, nhưng NAT gateway chỉ cho lưu lượng đi ra; không có gì đưa lưu lượng người dùng vào ứng dụng. Ứng dụng web sẽ không phục vụ được ai.
  • **A. EC2 trong subnet công khai với ALB trong subnet công khai — máy vẫn có IP công khai và vẫn bị quét từ Internet; vi phạm yêu cầu.
  • **C. EC2 trong subnet công khai và dùng WAF bảo vệ — WAF không gắn trực tiếp vào EC2 instance; nó gắn vào CloudFront, ALB, API Gateway. Và máy vẫn phơi ra Internet.

Ghi nhớ

⚠ Định nghĩa subnet công khai và riêng tư:

Subnet CÔNG KHAI:  route table có 0.0.0.0/0 → internet gateway
Subnet RIÊNG TƯ:   route table KHÔNG có tuyến đó
        ↓
    Không có cờ "public/private" nào cả
    → chỉ là route table khác nhau

⚠ Bốn nơi WAF gắn được — bảng phải thuộc: | Gắn được | Không gắn được | |---|---| | CloudFront | EC2 instance | | Application Load Balancer | Network Load Balancer | | API Gateway | Classic Load Balancer | | AppSync, Cognito, App Runner | |

Từ khoá nhận diện:

"web servers must not be directly accessible" → private subnet + ALB ở public subnet "private instances need outbound internet" → NAT gateway "protect from SQL injection, XSS" → WAF trên ALB hoặc CloudFront "reach AWS services privately" → VPC endpoint

Ba lưu ý về ALB: | Lưu ý | Chi tiết | |---|---| | Cần subnet ở ít nhất 2 AZ | | | Target có thể ở subnet riêng tư | | | Target type ip hoặc instance | |

⚠ ALB nội bộ cho tầng giữa:

aws elbv2 create-load-balancer --name alb-noi-bo \
  --subnets subnet-rieng-tu-a subnet-rieng-tu-b \
  --scheme internal --type application
Tầng web gọi tầng ứng dụng
    → ALB nội bộ, không có IP công khai

Ba lưu ý về NAT gateway: | Lưu ý | Chi tiết | |---|---| | Đặt trong subnet CÔNG KHAI | | | Một cái MỖI AZ cho sẵn sàng cao | | | Không gắn security group được | |

⚠ VPC endpoint bỏ được NAT trong nhiều trường hợp: | Endpoint | Loại | Phí | |---|---|---| | S3, DynamoDB | Gateway | miễn phí | | SSM, ECR, Secrets Manager | Interface | có phí |

Máy riêng tư chỉ cần vá và lấy bí mật
    → ba endpoint SSM + Secrets Manager
    → bỏ hẳn NAT gateway

Ba lưu ý về bastion: | Lưu ý | Chi tiết | |---|---| | Session Manager thay bastion | | | Không cần mở cổng 22 | | | Mọi phiên ghi log vào CloudTrail | |

⚠ Session Manager là cách vào máy riêng tư tốt hơn bastion:

aws ssm start-session --target i-abc
Không cổng nào mở, không khoá SSH nào để mất
    → và có bản ghi mọi lệnh đã gõ

Ba lưu ý về TLS: | Lưu ý | Chi tiết | |---|---| | Chứng chỉ ACM miễn phí cho ALB | | | TLS kết thúc ở ALB | | | Mã hoá tiếp tới target nếu cần | |

Ba lưu ý về health check: | Lưu ý | Chi tiết | |---|---| | Dùng trang nhẹ, KHÔNG truy vấn CSDL | | | Health check nặng có thể gây sự cố dây chuyền | | | deregistration_delay đủ cho request đang chạy | |

Ba lưu ý về NACL: | Lưu ý | Chi tiết | |---|---| | Stateless — phải mở cả hai chiều | | | Nhớ mở dải cổng tạm (1024-65535) | | | Chỉ dùng khi cần chặn IP cụ thể | |

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Thử gọi thẳng IP của EC2 từ Internet | phải không tới | | Truy cập qua DNS của ALB | phải được | | Chạy Reachability Analyzer | |

aws ec2 describe-instances --instance-ids i-abc \
  --query "Reservations[0].Instances[0].PublicIpAddress"

Và một lời khuyên: hãy dùng tham chiếu security group thay vì dải CIDR ở mọi ranh giới giữa các tầng. Quy tắc theo CIDR đúng vào ngày bạn viết nó và sai dần theo mỗi lần hạ tầng thay đổi — còn quy tắc theo security group diễn đạt đúng điều bạn thật sự muốn: "chỉ load balancer được gọi tầng web".

Câu 1175 AWS Networking & Content Delivery

A corporation has a web-based multiplayer gaming service that operates using both TCP and UDP protocols. Amazon Route 53 is currently employed to direct application traffic to a set of Network Load Balancers (NLBs) in various AWS Regions. To prepare for an increase in user activity, the company must enhance application performance and reduce latency.

Which approach will best meet these requirements?

  1. A

    Substitute the NLBs with Application Load Balancers (ALBs) and set Route 53 to utilize latency-based routing.

  2. B

    Incorporate Amazon CloudFront in front of the NLBs and extend the duration of the Cache-Control max-age directive.

  3. C

    Insert an Amazon API Gateway endpoint behind the NLBs, enable API caching, and customize method caching across different stages.

  4. D

    Implement AWS Global Accelerator ahead of the NLBs and align the Global Accelerator endpoint to use the appropriate listener ports.

Xem giải thích

Đáp án

D — Triển khai AWS Global Accelerator trước các NLB và cấu hình endpoint của Global Accelerator dùng đúng các cổng listener.

Vì sao đúng

Đề cho ba dữ kiện, và cả ba đều chỉ vào Global Accelerator: | Dữ kiện | Ý nghĩa | |---|---| | Game dùng CẢ TCP LẪN UDP | loại ngay CloudFront và API Gateway | | NLB ở NHIỀU Region | cần định tuyến toàn cầu | | Cần giảm độ trễ, tăng hiệu năng | đi trên mạng xương sống AWS |

⚠ UDP là từ khoá loại bỏ mạnh nhất:

CloudFront: chỉ HTTP/HTTPS
API Gateway: chỉ HTTP/HTTPS và WebSocket
ALB: chỉ HTTP/HTTPS
        ↓
    Chỉ NLB và Global Accelerator nói được UDP

⚠ Cách Global Accelerator giảm độ trễ:

Người chơi kết nối tới edge GẦN NHẤT
    → từ edge, lưu lượng đi trên MẠNG RIÊNG của AWS
      tới Region đích
        ↓
    Thay vì đi qua Internet công cộng với nhiều
      bước nhảy và định tuyến không đoán trước

Dựng:

aws globalaccelerator create-accelerator \
  --name tang-toc-game --ip-address-type IPV4 --enabled

aws globalaccelerator create-listener \
  --accelerator-arn <arn> \
  --protocol UDP --port-ranges FromPort=7000,ToPort=8000 \
  --client-affinity SOURCE_IP

aws globalaccelerator create-endpoint-group \
  --listener-arn <arn-listener> \
  --endpoint-group-region ap-southeast-1 \
  --endpoint-configurations EndpointId=<arn-nlb>,Weight=100 \
  --traffic-dial-percentage 100

⚠ --client-affinity SOURCE_IP quan trọng với game:

Mặc định: mỗi kết nối có thể vào endpoint khác nhau
    → người chơi bị chuyển giữa các máy chủ
        ↓
    SOURCE_IP: cùng một người chơi luôn vào
      cùng một endpoint

Hai địa chỉ IP tĩnh anycast:

Global Accelerator cấp 2 IP tĩnh
    → quảng bá từ mọi edge trên thế giới
        ↓
    Client dùng cùng một IP dù ở đâu
    → không phụ thuộc DNS, không phụ thuộc TTL

⚠ Đây là lợi thế lớn với ứng dụng di động:

Route 53 chuyển vùng: phụ thuộc TTL và cache DNS
    → client giữ IP cũ vài phút
        ↓
Global Accelerator: IP không đổi
    → chuyển vùng diễn ra ở tầng mạng
    → thường dưới 30 giây

Ba lợi ích: | Lợi ích | Chi tiết | |---|---| | Độ trễ giảm nhờ mạng riêng AWS | | | IP tĩnh — dễ đưa vào allowlist | | | Chuyển vùng nhanh khi health check hỏng | |

Vì sao các phương án khác sai

  • **B. Đặt CloudFront trước NLB và kéo dài Cache-Control max-age — đây là phương án gần nhất và cũng dùng mạng edge của AWS, nhưng CloudFront chỉ hỗ trợ HTTP/HTTPS; game dùng UDP nên nó không dùng được. Và lưu lượng game là động, không cache được.
  • **A. Thay NLB bằng ALB với latency-based routing — ALB không hỗ trợ UDP; thay NLB bằng ALB làm hỏng chính giao thức mà ứng dụng cần.
  • **C. Đặt API Gateway sau NLB, bật cache — API Gateway chỉ xử lý HTTP và WebSocket; và mô tả "đặt sau NLB" cũng ngược với cách nó hoạt động.

Ghi nhớ

⚠ CloudFront vs Global Accelerator — bảng phải thuộc: | Tiêu chí | CloudFront | Global Accelerator | |---|---|---| | Giao thức | HTTP/HTTPS | TCP và UDP | | Cache | ✅ | ❌ | | Địa chỉ IP | thay đổi | 2 IP tĩnh anycast | | Chuyển vùng | theo origin failover | tầng mạng, rất nhanh | | Dùng cho | web, video, API | game, VoIP, IoT, MQTT |

⚠ Cách nhớ ngắn nhất:

Nội dung cache được, HTTP → CloudFront
Không cache được, hoặc không phải HTTP → Global Accelerator

Từ khoá nhận diện:

"TCP and UDP, multiple Regions, reduce latency" → Global Accelerator "static content, video, global users" → CloudFront "need static IP addresses" → Global Accelerator hoặc NLB "route by latency (DNS level)" → Route 53 latency routing

⚠ Global Accelerator vs Route 53 latency routing: | Tiêu chí | Route 53 | Global Accelerator | |---|---|---| | Tầng hoạt động | DNS | mạng | | Chuyển vùng | phụ thuộc TTL | gần tức thì | | Tối ưu đường đi | ❌ | ✅ mạng riêng AWS | | Chi phí | rất thấp | ~18 USD/tháng + phí dữ liệu |

Ba tính năng đáng biết: | Tính năng | Việc | |---|---| | Traffic dial | giảm % lưu lượng vào một Region | | Endpoint weight | chia tỷ lệ giữa các endpoint | | Client affinity | giữ người dùng ở một endpoint |

⚠ Traffic dial rất hữu ích khi triển khai hoặc bảo trì:

aws globalaccelerator update-endpoint-group \
  --endpoint-group-arn <arn> --traffic-dial-percentage 0
Đặt về 0 → rút Region đó khỏi lưu lượng
    → bảo trì xong thì đặt lại 100
        ↓
    Không đụng gì tới DNS

Ba lưu ý về health check: | Lưu ý | Chi tiết | |---|---| | Global Accelerator tự kiểm endpoint | | | NLB có health check riêng của nó | | | Endpoint hỏng bị rút tự động | |

Ba lưu ý về NLB: | Lưu ý | Chi tiết | |---|---| | Hoạt động ở tầng 4, độ trễ rất thấp | | | Hỗ trợ TCP, UDP, TLS | | | Giữ IP nguồn nếu target type là instance | |

⚠ NLB với target type ip KHÔNG giữ IP nguồn:

Máy chủ game cần biết IP người chơi
    → dùng target type `instance`
    → hoặc bật Proxy Protocol v2

Ba lưu ý về chi phí: | Khoản | Chi tiết | |---|---| | ~0,025 USD/giờ mỗi accelerator | ~18 USD/tháng | | Phí truyền dữ liệu theo GB | | | Rẻ hơn khi lưu lượng lớn xuyên vùng | |

Ba lưu ý về bảo mật: | Lưu ý | Chi tiết | |---|---| | Shield Standard bảo vệ DDoS tự động | | | Không gắn WAF được | vì không phải HTTP | | Bảo vệ tầng 7 phải làm ở ứng dụng | |

⚠ Đây là đánh đổi phải biết:

Global Accelerator không hiểu HTTP
    → không lọc được payload độc hại
        ↓
    Với game UDP, bảo vệ phải nằm ở logic
      máy chủ game

Ba lưu ý về BYOIP: | Lưu ý | Chi tiết | |---|---| | Mang dải IP của mình vào được | | | Hữu ích khi client đã cứng hoá IP | | | Cần chứng minh quyền sở hữu dải | |

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Đo độ trễ từ nhiều nơi trước và sau | | | Thử rút một Region bằng traffic dial | | | Kiểm tra UDP thông suốt | |

aws globalaccelerator describe-accelerator --accelerator-arn <arn> \
  --query "Accelerator.[Status,IpSets[0].IpAddresses]"

Và một lời khuyên: hãy bật client affinity theo IP nguồn cho ứng dụng game. Mặc định, Global Accelerator có thể đưa các kết nối của cùng một người chơi tới những endpoint khác nhau — và với một trận đấu đang diễn ra thì điều đó không phải là cân bằng tải mà là mất trạng thái.

Câu 1176
A company collects data for temperature, humidity, and atmospheric pressure in cities across multiple continents. The average volume of data that the company collects from each site daily is 500 GB. Each site has a high-speed Internet connection.
The company wants to aggregate the data from all these global sites as quickly as possible in a single Amazon S3 bucket. The solution must minimize operational complexity.
Which solution meets these requirements?
  1. A Turn on S3 Transfer Acceleration on the destination S3 bucket. Use multipart uploads to directly upload site data to the destination S3 bucket.
  2. B Upload the data from each site to an S3 bucket in the closest Region. Use S3 Cross-Region Replication to copy objects to the destination S3 bucket. Then remove the data from the origin S3 bucket.
  3. C Schedule AWS Snowball Edge Storage Optimized device jobs daily to transfer data from each site to the closest Region. Use S3 Cross-Region Replication to copy objects to the destination S3 bucket.
  4. D Upload the data from each site to an Amazon EC2 instance in the closest Region. Store the data in an Amazon Elastic Block Store (Amazon EBS) volume. At regular intervals, take an EBS snapshot and copy it to the Region that contains the destination S3 bucket. Restore the EBS volume in that Region.
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi mô tả một công ty thu thập dữ liệu môi trường (nhiệt độ, độ ẩm, áp suất khí quyển) từ các site trên nhiều châu lục. Mỗi site tạo ra trung bình 500 GB dữ liệu mỗi ngày, và tất cả site đều có kết nối internet tốc độ cao.

Yêu cầu chính:

  • Tập hợp (aggregate) dữ liệu từ tất cả site vào một bucket Amazon S3 duy nhất một cách nhanh nhất có thể.
  • Giảm thiểu độ phức tạp vận hành (minimize operational complexity) – nghĩa là ưu tiên giải pháp đơn giản, ít bước trung gian, không cần quản lý nhiều tài nguyên.

📘 Tài liệu tham khảo:

Giải pháp phải tận dụng kết nối internet cao tốc để upload trực tiếp, tránh các phương pháp vật lý hoặc nhiều bước replication phức tạp. ✅ Đáp án đúng: Turn on S3 Transfer Acceleration on the destination S3 bucket. Use multipart uploads to directly upload site data to the destination S3 bucket.

Lý do chọn đáp án đúng 🛠️:

  • S3 Transfer Acceleration sử dụng mạng biên toàn cầu của AWS (CloudFront edge locations) để tối ưu hóa đường truyền, giảm latency và tăng tốc upload lên đến 50-500% cho dữ liệu từ xa.
  • Multipart uploads hỗ trợ upload song song các phần lớn (500 GB), lý tưởng cho dữ liệu lớn.
  • Trực tiếp upload vào bucket đích → nhanh nhất, không complexity (chỉ bật feature trên bucket, dùng endpoint acceleration).
  • Phù hợp kiến thức mới nhất (2026): Transfer Acceleration hỗ trợ IPv6, tích hợp S3 Express One Zone cho tốc độ cao hơn.

📋 Giải thích chi tiết từng phương án

  • Turn on S3 Transfer Acceleration on the destination S3 bucket. Use multipart uploads to directly upload site data to the destination S3 bucket.
    ✅ Đúng 🏆: Giải pháp đơn giản nhất, tận dụng internet cao tốc để upload trực tiếp. Acceleration route traffic qua edge locations gần site nhất, tối ưu TCP/IP cho global upload. Không cần tài nguyên trung gian, chi phí thấp (chỉ phí data transfer). Hoàn hảo cho 500 GB/ngày/site.

  • Upload the data from each site to an S3 bucket in the closest Region. Use S3 Cross-Region Replication to copy objects to the destination S3 bucket. Then remove the data from the origin S3 bucket.
    ❌ Sai 🚫: Dù nhanh ở bước upload local, CRR thêm độ trễ replication (phút đến giờ) và complexity cao (quản lý nhiều bucket origin, rule CRR, lifecycle delete). Không "nhanh nhất" vì 2 bước + chi phí CRR gấp đôi data transfer.

  • Schedule AWS Snowball Edge Storage Optimized device jobs daily to transfer data from each site to the closest Region. Use S3 Cross-Region Replication to copy objects to the destination S3 bucket.
    ❌ Sai 🔄: Snowball Edge là thiết bị vật lý cho offline/high-latency, không phù hợp internet cao tốc (thêm logistics hàng ngày, setup job phức tạp). Daily schedule tạo overhead lớn (hàng trăm site?), cộng CRR → complexity cực cao, chậm hơn upload trực tiếp.

  • Upload the data from each site to an Amazon EC2 instance in the closest Region. Store the data in an Amazon Elastic Block Store (Amazon EBS) volume. At regular intervals, take an EBS snapshot and copy it to the Region that contains the destination S3 bucket. Restore the EBS volume in that Region.
    ❌ Sai 💥: Phức tạp nhất – quản lý EC2/EBS/site (scale, cost, security), snapshot/copy EBS cross-Region chậm (giờ/ngày cho 500 GB), restore rồi mới vào S3. Không tận dụng internet trực tiếp, chi phí cao (EC2 chạy liên tục), không "minimize complexity".

Câu 1177
A company needs the ability to analyze the log files of its proprietary application. The logs are stored in JSON format in an Amazon S3 bucket. Queries will be simple and will run on-demand. A solutions architect needs to perform the analysis with minimal changes to the existing architecture.
What should the solutions architect do to meet these requirements with the LEAST amount of operational overhead?
  1. A Use Amazon Redshift to load all the content into one place and run the SQL queries as needed.
  2. B Use Amazon CloudWatch Logs to store the logs. Run SQL queries as needed from the Amazon CloudWatch console.
  3. C Use Amazon Athena directly with Amazon S3 to run the queries as needed.
  4. D Use AWS Glue to catalog the logs. Use a transient Apache Spark cluster on Amazon EMR to run the SQL queries as needed.
Xem giải thích

🧩 Phân tích nội dung câu hỏi

Câu hỏi tập trung vào việc phân tích log files của một ứng dụng proprietary, được lưu trữ dưới dạng JSON trong Amazon S3 bucket. Các yêu cầu chính bao gồm:

  • Queries đơn giản và chạy on-demand (không cần xử lý liên tục hoặc phức tạp).
  • Thay đổi tối thiểu cho kiến trúc hiện tại (không di chuyển dữ liệu lớn hoặc xây dựng hạ tầng mới).
  • LEAST operational overhead (giảm thiểu công sức vận hành, quản lý, chi phí và tài nguyên).

🛠️ Mục tiêu: Solutions Architect cần chọn giải pháp serverless, không cần quản lý cluster, tận dụng trực tiếp dữ liệu trên S3 để chạy SQL queries một cách nhanh chóng và hiệu quả. Đây là tình huống điển hình cho phân tích dữ liệu ad-hoc trên object storage mà không cần ETL phức tạp.

✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng: Use Amazon Athena directly with Amazon S3 to run the queries as needed.

Lý do:

  • Amazon Athena là dịch vụ serverless query engine (không cần quản lý server/cluster), cho phép chạy SQL queries trực tiếp trên dữ liệu S3 (hỗ trợ JSON, CSV, Parquet, v.v.) mà không cần load dữ liệu vào bất kỳ nơi nào khác.
  • On-demand và queries đơn giản: Hoàn hảo cho log analysis, chỉ tính phí theo dữ liệu quét (pay-per-query), không có chi phí idle.
  • Minimal changes: Không thay đổi kiến trúc S3 hiện tại, chỉ cần tạo table schema qua AWS Glue Data Catalog (tùy chọn) hoặc trực tiếp.
  • Least overhead: Zero management (serverless đến năm 2026), tích hợp S3 Select cho JSON partitioning nếu cần tối ưu.
  • Theo AWS Well-Architected Framework (Operational Excellence pillar), đây là lựa chọn tối ưu cho analytics on S3.

📋 Giải thích tất cả các phương án

Dưới đây là phân tích chi tiết từng lựa chọn, với giữ nguyên văn bản gốc bằng tiếng Anh:

  • Use Amazon Redshift to load all the content into one place and run the SQL queries as needed.
    ❌ Sai: Redshift là data warehouse managed, yêu cầu load toàn bộ dữ liệu từ S3 vào cluster (qua COPY command hoặc Spectrum), gây overhead cao (quản lý cluster, scaling, chi phí lưu trữ kép). Không phù hợp on-demand đơn giản, vi phạm "minimal changes" vì phải di chuyển dữ liệu lớn và duy trì infra.

  • Use Amazon CloudWatch Logs to store the logs. Run SQL queries as needed from the Amazon CloudWatch console.
    ❌ Sai: CloudWatch Logs dành cho logs từ ứng dụng/EC2/Lambda, không hỗ trợ trực tiếp JSON từ S3 (phải export/push logs từ S3 vào CW Logs qua subscription filter hoặc Lambda trigger). Queries Insights chỉ cơ bản, overhead vận hành để ingest dữ liệu, không tối ưu cho S3-native.

  • Use Amazon Athena directly with Amazon S3 to run the queries as needed.
    ✅ Đúng: Như đã giải thích ở trên. Serverless hoàn toàn, query trực tiếp S3 JSON với federated queries nếu cần, hỗ trợ partitioning/compression để giảm chi phí (cập nhật 2025-2026 với Athena engine v3 cho JSON nhanh hơn 2x). Least overhead và zero changes.

  • Use AWS Glue to catalog the logs. Use a transient Apache Spark cluster on Amazon EMR to run the SQL queries as needed.
    ❌ Sai: Glue catalog tốt cho metadata, nhưng EMR Spark cluster (dù transient/auto-terminate) vẫn yêu cầu provisioning, monitoring cluster mỗi lần chạy (overhead cao hơn Athena). EMR phù hợp big data processing batch, không phải on-demand simple queries; chi phí và thời gian khởi động lớn hơn serverless.

📘 Tài liệu tham khảo (cập nhật mới nhất đến 2026)

  • AWS Athena Documentation: Querying JSON data from S3 – Hỗ trợ JSON encoding/decoding native.
  • AWS Well-Architected Framework (2024 update): Operational Excellence cho serverless analytics: S3 + Athena best practice.
  • AWS re:Invent 2025 sessions: Athena advancements với ML inference on S3 (serverless JSON parsing).
  • Exam Guide DOP-C02 (2026 version): Nhấn mạnh Athena cho S3 query với least overhead (domain: Design & Implementation).

🛠️ Kết luận: Athena là giải pháp serverless gold standard cho trường hợp này, giúp tiết kiệm 90%+ operational effort so với alternatives! Nếu cần demo, có thể test nhanh qua Athena console.

Câu 1178
A company uses AWS Organizations to manage multiple AWS accounts for different departments. The management account has an Amazon S3 bucket that contains project reports. The company wants to limit access to this S3 bucket to only users of accounts within the organization in AWS Organizations.
Which solution meets these requirements with the LEAST amount of operational overhead?
  1. A Add the aws PrincipalOrgID global condition key with a reference to the organization ID to the S3 bucket policy.
  2. B Create an organizational unit (OU) for each department. Add the aws:PrincipalOrgPaths global condition key to the S3 bucket policy.
  3. C Use AWS CloudTrail to monitor the CreateAccount, InviteAccountToOrganization, LeaveOrganization, and RemoveAccountFromOrganization events. Update the S3 bucket policy accordingly.
  4. D Tag each user that needs access to the S3 bucket. Add the aws:PrincipalTag global condition key to the S3 bucket policy.
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi tập trung vào việc giới hạn quyền truy cập vào một S3 bucket nằm trong management account của AWS Organizations. Công ty quản lý nhiều AWS accounts cho các bộ phận khác nhau, và bucket chứa project reports. Yêu cầu chính là chỉ cho phép users từ các accounts trong organization truy cập, đồng thời chọn giải pháp có LEAST operational overhead (ít nhất overhead vận hành).

📘 Bối cảnh quan trọng:

  • AWS Organizations giúp quản lý tập trung nhiều accounts, với management account là account gốc.
  • S3 bucket policy có thể sử dụng global condition keys để kiểm tra thuộc tính của principal (người truy cập) mà không cần quản lý IAM roles/users riêng lẻ.
  • Overhead thấp nghĩa là giải pháp tự động, không cần can thiệp thủ công thường xuyên, phù hợp với best practices AWS (cross-account access via Organizations).

🛠️ Mục tiêu: Tìm cách policy đơn giản nhất để deny access từ ngoài organization, sử dụng điều kiện dựa trên organization ID.

✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng: Add the aws PrincipalOrgID global condition key with a reference to the organization ID to the S3 bucket policy.

Lý do chi tiết:

  • 🟢 aws:PrincipalOrgID là global condition key chuẩn của AWS IAM, kiểm tra xem principal (user/role từ account khác) có thuộc organization cụ thể không bằng cách so sánh với organization ID (lấy từ AWS Organizations console hoặc CLI).
  • Policy ví dụ:
    {
      "Sid": "AllowOrgAccess",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::bucket-name/*",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalOrgID": "o-xxxxxxxxxx"  // Thay bằng org ID thực
        }
      }
    }
    
  • Least overhead: Chỉ cần set policy một lần trên bucket, tự động áp dụng cho tất cả accounts trong org (kể cả mới join), không cần update thủ công khi accounts thay đổi. Hỗ trợ cross-account access an toàn.
  • ✅ Phù hợp best practices 2026: AWS khuyến nghị dùng key này cho Organizations (không deprecated, vẫn là preferred method theo AWS Well-Architected Framework - Security Pillar).

🔍 Giải thích tất cả các phương án (đúng/sai)

Dưới đây là phân tích từng lựa chọn một, giữ nguyên nội dung gốc bằng tiếng Anh. Mỗi phương án được đánh giá với lý do đúng/sai dựa trên overhead và tính khả thi.

  • ✅ Add the aws PrincipalOrgID global condition key with a reference to the organization ID to the S3 bucket policy.
    Đúng vì: Như giải thích trên, đây là cách đơn giản nhất, chỉ cần org ID một lần, tự động scale với mọi accounts trong org. Overhead = 0 (không cần maintain). Hoàn hảo cho yêu cầu "LEAST operational overhead". 📘 Nguồn: AWS Docs - Global Condition Keys (IAM User Guide): https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#AvailableKeys

  • ❌ Create an organizational unit (OU) for each department. Add the aws:PrincipalOrgPaths global condition key to the S3 bucket policy.
    Sai vì: aws:PrincipalOrgPaths kiểm tra đường dẫn OU đầy đủ (ví dụ: "r-oabc123/ou-rz8a1/ou-ab12"), yêu cầu tạo OU riêng cho từng dept → overhead cao (phải quản lý cấu trúc OU phức tạp). Không cần thiết vì câu hỏi chỉ giới hạn toàn org, không phải per dept. Nếu org thay đổi OU, policy phải update → không least overhead.

  • ❌ Use AWS CloudTrail to monitor the CreateAccount, InviteAccountToOrganization, LeaveOrganization, and RemoveAccountFromOrganization events. Update the S3 bucket policy accordingly.
    Sai vì: Dùng CloudTrail để monitor events rồi thủ công update policy mỗi khi account join/leave → overhead cực lớn (cần Lambda/automation phức tạp, alert, manual intervention). Không tự động như condition keys, vi phạm "LEAST operational overhead". Phù hợp audit hơn là access control.

  • ❌ Tag each user that needs access to the S3 bucket. Add the aws:PrincipalTag global condition key to the S3 bucket policy.
    Sai vì: Yêu cầu tag từng user/role trên mọi account → overhead khổng lồ (hàng nghìn users/depts, phải maintain tags liên tục). aws:PrincipalTag chỉ kiểm tra tag trên principal, không scale với Organizations. Không tự động cho accounts mới, dễ lỗi con người.

📚 Tài liệu tham khảo (Cập nhật đến 2026)

Giải pháp này đảm bảo zero-trust access chỉ trong org, dễ audit qua CloudTrail! 🚀

Câu 1179
An application runs on an Amazon EC2 instance in a VPC. The application processes logs that are stored in an Amazon S3 bucket. The EC2 instance needs to access the S3 bucket without connectivity to the internet.
Which solution will provide private network connectivity to Amazon S3?
  1. A Create a gateway VPC endpoint to the S3 bucket.
  2. B Stream the logs to Amazon CloudWatch Logs. Export the logs to the S3 bucket.
  3. C Create an instance profile on Amazon EC2 to allow S3 access.
  4. D Create an Amazon API Gateway API with a private link to access the S3 endpoint.
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi tập trung vào một ứng dụng chạy trên Amazon EC2 instance nằm trong VPC (Virtual Private Cloud). Ứng dụng này cần xử lý logs được lưu trữ trong Amazon S3 bucket, nhưng yêu cầu truy cập S3 mà không cần kết nối internet (private network connectivity). 🛡️

Mục tiêu chính là tìm giải pháp cung cấp kết nối mạng riêng tư (private connectivity) từ VPC/EC2 đến S3, tránh routing qua internet gateway (IGW) hoặc NAT gateway để đảm bảo bảo mật, hiệu suất cao và không phụ thuộc vào public internet. Đây là tình huống phổ biến trong kiến trúc AWS hiện đại (cập nhật đến 2026), nơi VPC Endpoints được ưu tiên cho các dịch vụ AWS như S3. 📘

Tình huống kỹ thuật chính:

  • EC2 trong VPC private subnet → Không có public IP hoặc IGW → Cần cơ chế endpoint nội bộ AWS để route traffic trực tiếp qua AWS backbone network.
  • Không dùng internet → Loại trừ NAT, proxy hoặc public endpoint.

✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng: Create a gateway VPC endpoint to the S3 bucket.

Lý do chi tiết:
🛠️ Gateway VPC Endpoint (hay S3 Gateway Endpoint) là giải pháp lý tưởng và được AWS khuyến nghị cho truy cập S3 từ VPC mà không cần internet. Nó tạo một endpoint trong route table của VPC subnet, route traffic trực tiếp đến S3 qua AWS private network (không charge data transfer, latency thấp).

  • Cách hoạt động: Thêm route entry kiểu pl-xxx (prefix list S3) vào route table → Traffic đến bucket.s3.region.amazonaws.com được route private.
  • Yêu cầu: IAM policy trên endpoint để control quyền truy cập bucket cụ thể.
  • Lợi ích: Scale tự động, không cần quản lý endpoint instance, hỗ trợ multi-region/multi-account (2026 updates vẫn giữ nguyên core feature).
    Đây là best practice theo AWS Well-Architected Framework (Security & Reliability pillars).

📋 Giải thích tất cả các phương án (đúng/sai)

  • ✅ Create a gateway VPC endpoint to the S3 bucket.
    🟢 Đúng vì: Như giải thích trên, đây là giải pháp native AWS cung cấp private connectivity trực tiếp đến S3 service (không phải interface endpoint). Không cần internet, chi phí thấp, hiệu suất cao. Hoàn hảo cho EC2 truy cập S3 logs.

  • ❌ Stream the logs to Amazon CloudWatch Logs. Export the logs to the S3 bucket.
    🔴 Sai vì: Phương án này không giải quyết vấn đề truy cập S3 từ EC2. Nó chỉ mô tả việc stream logs từ nguồn khác vào CloudWatch Logs rồi export ra S3 (sử dụng CloudWatch export feature). EC2 vẫn cần kết nối internet hoặc endpoint để đọc logs từ S3 gốc. Không cung cấp private connectivity.

  • ❌ Create an instance profile on Amazon EC2 to allow S3 access.
    🔴 Sai vì: Instance profile (IAM role attached to EC2) chỉ cấp quyền truy cập (authorization) qua STS, không xử lý network connectivity. EC2 vẫn cần route qua internet (NAT/IGW) hoặc VPC endpoint để reach S3. Thiếu network layer → Không đáp ứng "without connectivity to the internet".

  • ❌ Create an Amazon API Gateway API with a private link to access the S3 endpoint.
    🔴 Sai vì: API Gateway (dù có private API với VPC Link hoặc PrivateLink) không dành cho truy cập trực tiếp S3. S3 dùng Gateway Endpoint, không phải Interface Endpoint (cho API Gateway). Tạo overhead phức tạp, không hiệu quả cho log processing, và vẫn có thể yêu cầu public access nếu không config đúng. AWS không recommend cho use case này.

📘 Tài liệu tham khảo (AWS cập nhật 2026)

  • AWS VPC Endpoints docs: Gateway endpoints for Amazon S3 – Hướng dẫn tạo và route table config.
  • AWS Well-Architected: Security Pillar – Private access to S3.
  • Exam Guide DOP-C02: Topic "Networking & Content Delivery" – VPC Endpoints là key concept.
  • Re:Post & Blogs: AWS blogs về S3 private access (e.g., "Access S3 privately from VPC").

Hy vọng phân tích này giúp bạn nắm vững! 🚀 Nếu cần demo Terraform/CloudFormation, hỏi thêm nhé.

Câu 1180
A company is hosting a web application on AWS using a single Amazon EC2 instance that stores user-uploaded documents in an Amazon EBS volume. For better scalability and availability, the company duplicated the architecture and created a second EC2 instance and EBS volume in another Availability Zone, placing both behind an Application Load Balancer. After completing this change, users reported that, each time they refreshed the website, they could see one subset of their documents or the other, but never all of the documents at the same time.
What should a solutions architect propose to ensure users see all of their documents at once?
  1. A Copy the data so both EBS volumes contain all the documents
  2. B Configure the Application Load Balancer to direct a user to the server with the documents
  3. C Copy the data from both EBS volumes to Amazon EFS. Modify the application to save new documents to Amazon EFS
  4. D Configure the Application Load Balancer to send the request to both servers. Return each document from the correct server
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi mô tả một ứng dụng web được host trên một instance Amazon EC2 duy nhất với dữ liệu tài liệu người dùng upload lưu trữ trên Amazon EBS volume (lưu trữ block-level gắn trực tiếp vào EC2, chỉ khả dụng trong một Availability Zone - AZ). 🛠️ Để cải thiện scalability (khả năng mở rộng) và availability (tính sẵn sàng cao), công ty đã nhân bản kiến trúc: tạo thêm một EC2 instance và EBS volume ở AZ khác, đặt cả hai sau Application Load Balancer (ALB).

Tuy nhiên, sau thay đổi, người dùng gặp vấn đề: khi refresh trang web, họ chỉ thấy một phần tài liệu (subset) từ một server, không phải toàn bộ. 📉 Nguyên nhân gốc rễ: Mỗi EBS volume chỉ chứa dữ liệu riêng lẻ (không đồng bộ), và ALB phân phối traffic ngẫu nhiên giữa hai server, dẫn đến người dùng thấy dữ liệu không nhất quán (inconsistent view). Giải pháp cần đồng bộ hóa lưu trữ để cả hai server truy cập chung một nguồn dữ liệu duy nhất, hỗ trợ multi-AZ, scalable và highly available.

Đây là tình huống kinh điển trong AWS khi migrate từ single-AZ EBS sang shared file storage cho ứng dụng multi-instance. Kiến thức cập nhật đến 2026: EBS vẫn là single-AZ (trừ EBS Multi-Attach hạn chế), trong khi Amazon EFS hỗ trợ NFSv4.1/4.2 với performance mode mới (General Purpose v2) và throughput scaling tự động.

✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng: Copy the data from both EBS volumes to Amazon EFS. Modify the application to save new documents to Amazon EFS

Lý do:

  • Amazon EFS là shared file system hỗ trợ multi-AZ, cho phép nhiều EC2 mount chung một filesystem, đảm bảo tất cả server thấy toàn bộ documents ngay lập tức mà không cần copy thủ công liên tục. 🪂
  • Quy trình: Copy dữ liệu từ cả hai EBS sang EFS (sử dụng rsync hoặc AWS DataSync), sau đó sửa app để lưu mới trực tiếp vào EFS → giải quyết triệt để vấn đề scalability và consistency.
  • Ưu điểm: Highly available (99.99% SLA), elastic (scale theo nhu cầu), hỗ trợ encryption at rest/transit, và tích hợp IAM cho access control. Không ảnh hưởng downtime lớn nếu dùng EFS Access Points (tính năng mới 2023+).

📋 Giải thích tất cả các phương án (đúng/sai)

  • ❌ Copy the data so both EBS volumes contain all the documents
    Sai vì: EBS là single-AZ block storage, không tự động đồng bộ giữa các volume/AZ. Copy thủ công (script cron/rsync) sẽ tốn công, không scalable (phải sync liên tục cho new uploads), dễ lỗi consistency (race conditions), và không HA nếu AZ outage. Không khuyến nghị cho production multi-AZ.

  • ❌ Configure the Application Load Balancer to direct a user to the server with the documents
    Sai vì: ALB (Layer 7) chỉ route dựa trên path/host/header/sticky sessions/query, không biết vị trí documents (không có metadata tracking). Sticky sessions chỉ "dính" user vào server, nhưng vẫn chỉ thấy subset data của server đó, không merge all documents. Phức tạp và không giải quyết gốc rễ.

  • ✅ Copy the data from both EBS volumes to Amazon EFS. Modify the application to save new documents to Amazon EFS
    Đúng vì: Như giải thích trên, EFS thay thế hoàn hảo EBS cho shared storage multi-AZ. Copy ban đầu + redirect writes mới → users thấy all documents nhất quán sau ALB. Hỗ trợ thousands of connections, ideal cho web apps. (Đã phân tích chi tiết ở phần đáp án đúng).

  • ❌ Configure the Application Load Balancer to send the request to both servers. Return each document from the correct server
    Sai vì: ALB không hỗ trợ fan-out requests (gửi 1 request đến nhiều targets đồng thời). ALB là load balancer đơn lẻ, không phải message broker như SQS/SNS. Thực hiện sẽ cần custom logic app-level (microservices phức tạp), tăng latency, không feasible và vi phạm best practices AWS.

📘 Tài liệu tham khảo (AWS cập nhật 2026)

Giải pháp này đảm bảo 0% inconsistency và tuân thủ AWS best practices! 🚀 Nếu cần implement code Terraform/CloudFormation, hãy hỏi thêm nhé!