Câu hỏi thường gặp về đám mây AWS

 

 

FAQ: Amazon Web Services (AWS)
1. Hỏi: AWS EC2 là gì?
EC2 là dịch vụ máy chủ ảo trên đám mây, cho phép bạn chạy ứng dụng theo nhu cầu.
2. Hỏi: S3 là gì và có miễn phí không?
Amazon S3 là dịch vụ lưu trữ đối tượng của AWS. Có gói miễn phí cho 12 tháng đầu với dung lượng nhất định.
3. Hỏi: Phần Edge Location hình như bị nhầm. Mục đích làm giảm thời gian xử lý (giảm độ trễ) 1 request mới đúng chứ không phải làm giảm tốc độ xử lý?
Trả lời:

Thanks bạn vì đã có ý kiến về bài giảng. Đúng, bạn đã hiểu đúng. Edge Location không ảnh hưởng đến tốc độ xử lý trên máy chủ web server. Mục đích chính của Edge Location là giảm thời gian độ trễ (latency) trong việc truy cập dữ liệu từ máy tính người dùng đến các máy chủ web servers. Khi người dùng yêu cầu truy cập dữ liệu, Edge Location sẽ cung cấp dữ liệu từ các điểm gần nhất với người dùng cuối, giúp giảm thời gian mà dữ liệu phải đi qua qua mạng và tới đích. Việc này giúp cải thiện trải nghiệm người dùng bằng cách giảm độ trễ và tăng tốc độ truy cập.

Và trong bài giảng mình cũng nói rõ là Edge Location giúp giảm thời gian độ trễ (latency). Tuy nhiên trong slide thì có để câu: “Giúp tăng tốc độ trong việc xử lý thông tin cho hệ thống AWS”. Có thể gây hiểu lầm chút nhé!

4. Hỏi: Hi anh! bài lab cuối, lab260 (5 phần), khi tạo cloudformation, báo faile, mình thử 2 account khác gõ cloud9 cũng hiện ra thông báo không thể truy cập coud9. vậy thực hiện bài lab cuối thể nào?

Trả lời:

Hello Vinh! Mình đã update bài Lab 260 (5 phần) “Sử dụng ECS Fargate, RDS, Parameter Store, và Secrets Manager để cấu hình một WordPress Application” với file Yaml Cloudformation và file PDF hướng dẫn để tạo môi trường hạ tầng cho bài lab, không còn sử dụng Cloud 9 nữa, mà thay vào đó hạ tầng hệ thống sẽ sử dụng một EC2 AWS Linux cho việc Pull và Push Docker image lên ECR Repo. Vậy bạn có thể làm bài lab nhé.

5. Hỏi: Hi anh! cho mình hỏi bài thực hành 225, phút 6:25, chỗ này đăng nhập user IAM phải có account ID, trong bài không thấy account id của user db-1, nhập account id theo như hình trên video 959764676190, user db-1, pass 6!AY36^5h1 không vào được ( báo sai user /pass). (Ý mình muốn hỏi là không thấy link đăng nhập cho user db-1, trong đó có account id)?

Trả lời:

Hello Vinh, Mỗi một 1 AWS user có 1 Console sign-in link nhé! Do đó bạn cần làm như sau: Để lấy link đăng nhập vào AWS console của user db-1, Vinh vào dịch vụ IAM> Users > click vào user db-1 > Click vào Tab Security credentials > Copy Console sign-in link của riêng user này. Sau đó mở trình duyệt web và paste link vào, nhập user và password như mình đã hướng dẫn trong video bài học nhé.

6. Hỏi: Cho mình hỏi chỗ thực hành lab 191 aws config, mình có vào thực hành theo video, xong kết thúc. aws config này muốn tắt, hoặc disable thì vào đâu tắt nó, do vào chỗ bill thấy nó phát sinh 0.34 USD (vào aws config không thấy chỗ nào tắt dịch vụ này hoặc xóa nó )?

 

Cách AWS Config tính phí

AWS Config tính phí dựa trên ba yếu tố chính:

Số lượng configuration items: Mỗi khi có thay đổi cấu hình tài nguyên, một configuration item được ghi lại.

Số lần đánh giá của các Config rules: Mỗi lần một rule được đánh giá (evaluation), bạn sẽ bị tính phí.

Số lần đánh giá của conformance packs: Tương tự như trên, nhưng áp dụng cho các gói quy tắc.

Cụ thể, theo thông tin từ trang AWS Config Pricing:Amazon Web Services, Inc.

$0.003 cho mỗi configuration item được ghi lại.

$0.001 cho mỗi lần đánh giá của một Config rule.vantage.sh

$0.001 cho mỗi lần đánh giá của một conformance pack

– Conformance Pack:  Là  một tập hợp các AWS Config Rules và các hành động khắc phục (remediation actions) được đóng gói sẵn, dùng để kiểm tra mức độ tuân thủ (compliance) của hệ thống AWS với các tiêu chuẩn, quy định hoặc chính sách bảo mật nội bộ.

– Vậy trường hợp này có thể bạn đã tạo 1 rule nào đó cho việc thực hành của bạn, VD như: ec2-ebs-encryption-by-default.

– Do đó để không bị tính phí, bạn vào AWS config , click Rules> tick vào chọn rule cần xóa > Click Actions > và xóa các rules đã tạo nhé như trong hình sau:

7. Hỏi: Vấn đề với policy trong role. Thưa thầy, trong bài lab tạo và assume role thì thầy có để any các resources không phải bucket, vậy có phải user vẫn truy cập được những resources khác như accesspoint của bucket client không ạ ? Và có cách nào để chỉ cho phép mọi quyền đối với 2 bucket appconfig mà không bị thừa quyền sang các tài nguyên khác không ạ ?
Trả lời:

Chào em,

Câu hỏi của em rất hay, vậy tôi làm rõ để em nắm vững hơn nhé:

Trong bài lab, tôi đã sử dụng quyền cao nhất là user root để tạo 4 bucket, trong đó chỉ 2 bucket appconfig01 và appconfig02 được gán quyền qua policy S3RestrictedPolicy. Ở phần cấu hình policy, mặc dù có chọn “Any in this account” cho các resources khác như object, access point, hay objectlambdaaccess, nhưng:

Chỉ cấu hình 2 bucket appconfig được cấp quyền cho user truy cập rất rõ ràng trong phần Bucket ARN.

Các bucket khác như clientdata01clientdata02 hoặc access point của các bucket này đều không được chỉ định trong policy, nên IAM users (như dev-user1dev-user2) đều không thể truy cập được, trừ khi có chính sách bổ sung khác.

✅ Nói cách khác:
Cách cấu hình trong bài lab đã đảm bảo giới hạn quyền là 2 users (nếu dev-user2 được assume role) này chỉ được truy cập vào 2 bucket appconfig, mà không bị “thừa quyền” truy cập sang các tài nguyên khác.

Anh nghĩ có thể em chưa xem kỹ video bài lab,  hoặc làm theo bài lab, xong tìm hiểu thật kỹ để hiểu chính sách đã áp dụng. Em vui lòng xem lại phần tạo policy và gán bucket ARN, và làm kỹ bài lab, sẽ thấy rõ cách quyền được giới hạn nhé.

Giải thích chi tiết:

dev-user1: Được gán trực tiếp policy S3RestrictedPolicy, cho phép thực hiện tất cả các hành động s3:* nhưng chỉ giới hạn trên hai bucket appconfig01 và appconfig02.

dev-user2: Được phép “assume” IAM Role có gán S3RestrictedPolicy, do đó cũng chỉ có quyền truy cập tương tự như dev-user1.

Các bucket khác (như clientdata01clientdata02) và các tài nguyên khác không được chỉ định trong policy, nên cả hai users này không thể truy cập.

️ Lưu ý quan trọng:

Dù trong policy có chọn “Any in this account” cho các resource khác ngoài bucket, nhưng vì không có ARN cụ thể được chỉ định, nên các quyền này không có hiệu lực.

Để đảm bảo an toàn và tuân thủ nguyên tắc “least privilege” (ít đặc quyền nhất), chúng ta cần chỉ định rõ ràng ARN cho từng resource mà chúng ta muốn cấp quyền.

8. Hỏi: về tài khoản aws close và mở mới cho mình chỏi chút, mình có các tài khoảng aws mở sử dụng gần 1 năm thì close lại do đã sử dụng hết các dịch vụ free. trong thời gian sử dụng đó có phát sinh chi phí thì mình cũng thanh toán đúng hạn. các tài khoản đó đã đóng hơn 90 ngày, giờ mình tạo tài khoản aws mới, sử dụng lại địa chỉ mail cũ các tài khoản đã mở trước đó được không, khi tạo xong dùng lại địa chỉ mail cũ trước đó nó hiện ra màn hình yêu cầu mở lại tài khoản đã đóng. Nếu chọn mở lại tài khoản đã đóng, thì aws có ghi nhớ tài khoản cũ mình đã sử dụng hết các dịch vụ free trước đó không. hay vẫn được sử dụng các dịch vụ free 12 tháng như tạo mới?

Trả lời:

❓ Có thể sử dụng lại địa chỉ email cũ để tạo tài khoản AWS mới không?

Không được bạn nhé. Sau khi bạn đóng tài khoản AWS, địa chỉ email liên kết với tài khoản đó sẽ bị khóa và không thể sử dụng để tạo tài khoản mới. AWS khuyến nghị, nếu bạn muốn sử dụng lại địa chỉ email đó cho tài khoản mới, thì phải thay đổi địa chỉ email của tài khoản cũ trước khi đóng nó. ​Tài liệu AWS

Có thể mở lại tài khoản đã đóng sau 90 ngày không?

Không thể mở lại. Sau 90 ngày kể từ khi đóng, tài khoản AWS sẽ bị đóng vĩnh viễn và không thể khôi phục. Nếu bạn cứ đăng nhập bằng địa chỉ email cũ, AWS sẽ yêu cầu bạn mở lại tài khoản cũ, nhưng điều này chỉ khả thi trong vòng 90 ngày sau khi đóng tài khoản. ​

Có thể tạo tài khoản mới và nhận lại ưu đãi Free Tier 12 tháng không?

Có thể, nhưng với điều kiện:​

Sử dụng địa chỉ email hoàn toàn mới chưa từng đăng ký AWS trước đó.

Không sử dụng lại địa chỉ email cũ đã liên kết với tài khoản AWS trước đây.​

AWS xác định tính đủ điều kiện cho Free Tier dựa trên địa chỉ email. Việc sử dụng lại địa chỉ email cũ sẽ làm bạn không đủ điều kiện nhận ưu đãi Free Tier. ​

✅ Cách tạo tài khoản mới để nhận lại Free Tier:

Sử dụng địa chỉ email mới: Chọn một địa chỉ email chưa từng đăng ký AWS.

Đăng ký tài khoản AWS mới: Truy cập https://aws.amazon.com và tạo tài khoản mới với địa chỉ email mới.

Xác minh thông tin: Cung cấp thông tin thanh toán và xác minh tài khoản theo hướng dẫn của AWS.

Bắt đầu sử dụng Free Tier: Sau khi tài khoản được kích hoạt, bạn sẽ nhận được ưu đãi Free Tier 12 tháng.​

⚠️ Lưu ý:

Không thể sử dụng lại địa chỉ email cũ đã liên kết với tài khoản AWS trước đây, ngay cả khi tài khoản đó đã bị đóng hơn 90 ngày.

9. Hỏi: về S3 cho mình hỏi chút, trong bài S3, mình thấy bạn nói S3 là dịch vụ Global( section 3, bài 19, phút thứ 4:50), nhưng sau tới các bài thực hành, mình thấy gõ chữ S3, có chọn theo region được vậy. Vậy S3 là dịch vụ Global hay dịch vụ theo region?

Trả lời:

Amazon S3 là dịch vụ lưu trữ các đối tượng trên đám mây do AWS cung cấp. Mặc dù S3 có thể truy cập từ bất kỳ ở đâu trên thế giới, nhưng dữ liệu được lưu trữ trong các “buckets” mà bạn tạo ra, và mỗi bucket này được gắn với một khu vực địa lý (region) cụ thể. Khi bạn tạo một bucket mới, bạn cần chọn region để xác định nơi dữ liệu sẽ được lưu trữ vật lý. Việc chọn region phù hợp giúp tối ưu hóa hiệu suất truy cập và tuân thủ các yêu cầu về quy định dữ liệu. ​ Vì vậy, mặc dù S3 là một dịch vụ Global, nhưng dữ liệu và các bucket trong S3 được quản lý theo từng region cụ thể.

Bạn có thể tham khảo Link: https://aws.amazon.com/vi/s3/ và https://aws.amazon.com/vi/s3/faqs/

10. Hỏi: Cấu hình Truy cập EC2 theo rule. Nếu em muốn cấu hình chỉ cho phép Remote vào EC2 theo phạm vi địa lý, theo dải IP public riêng của công ty (Tức là chỉ cho phép những máy tính đang kết nối mạng công ty) mới có thể remote được tới EC2 thì có làm đc ko thầy? Còn lại các khu vực ngoài phạm vi sẽ không cho phép remote ấy ạ?

Trả lời:

Được, em có thể cấu hình để chỉ cho phép Remote (SSH, RDP) đến EC2 từ một dải IP public cụ thể, VD như dải IP của mạng công ty em, thông qua việc thiết lập các quy tắc inbound trong security groupsNhư sau:

Security Groups:
Em có thể cấu hình một security group cho instance EC2 của mình với quy tắc inbound chỉ cho phép kết nối từ dải IP public của công ty (ví dụ: 203.0.113.0/28). Việc này có nghĩa là chỉ những máy tính trong dải IP đó mới có thể truy cập (remote) vào EC2.

Khu vực ngoài phạm vi:
Vì security group chỉ cho phép các IP public trong dải mà em chỉ định, nên tất cả các kết nối từ ngoài dải IP đó sẽ bị deny.
Đây là phương pháp thường được áp dụng để giới hạn truy cập từ các địa chỉ IP không mong muốn.

Lưu ý:

AWS không cung cấp trực tiếp chức năng “geo-block” (dựa trên vị trí địa lý) cho việc Remote vào EC2; Mà dựa trên whitelisting IP.

Nếu mạng công ty có IP động hoặc thay đổi, em sẽ cần có giải pháp theo dõi và cập nhật các IP này.

Nếu cần bảo mật mạnh hơn, em có thể kết hợp với các giải pháp VPN, để nhân viên từ công ty khi remote được cấp IP nội bộ hoặc IP đã được cố định.

Vậy, nếu em cấu hình đúng security group với dải IP public của mạng công ty, thì chỉ những máy tính từ mạng đó mới có thể remote đến EC2, còn các địa chỉ khác sẽ không được phép.

11. Hỏi: Khi tạo 1 EC2 thì thường sẽ có 2 loại IP (Public và Private) thì cả 2 địa chỉ này có set tĩnh cố định được không thầy? Ví dụ em muốn quản lý 1 con EC2 cố định theo địa chỉ IP để nó tương ứng với 1 rule nào đó về audit trên AWS?

Trả lời:

Về địa chỉ IP Private và IP Public, tôi trả lời em như sau nhé:

Địa chỉ IP Private: Khi tạo một instance EC2 trong VPC, địa chỉ IP private được gán cho network interface (ENI) của instance. Địa chỉ này thường được cấp khi instance được khởi tạo và sẽ không thay đổi trong suốt thời gian hoạt động của instance (trừ khi em thực hiện thay đổi cấu hình mạng thủ công). Như vậy, địa chỉ IP private có thể coi là tĩnh cố định đối với instance đó.

Địa chỉ IP Public: Nếu em bật tính năng “Auto-assign public IP” khi tạo instance, thì AWS sẽ gán một địa chỉ IP public cho instance. Tuy nhiên, địa chỉ IP public tự động này không phải là địa chỉ IP tĩnh cố định; nó có thể thay đổi nếu em dừng instance và sau đó khởi động lại (stop/start). Để có được địa chỉ IP public cố định, em cần tạo sau đó gán một Elastic IP cho instance. Elastic IP là một địa chỉ IP public tĩnh do AWS cung cấp và sẽ không thay đổi cho instance cho đến khi em xóa nó.

Tóm lại:

Địa chỉ IP Private: Có thể được coi là tĩnh cố định (cho đến khi em thay đổi cấu hình mạng của instance).

Địa chỉ IP Public: Mặc định là động (ephemeral) nếu được gán tự động; để có IP tĩnh, cần sử dụng Elastic IP.

Nếu em cần quản lý một instance theo địa chỉ IP cố định để áp dụng các quy tắc audit hoặc các yêu cầu khác, em có thể sử dụng:

Elastic IP cho địa chỉ public (nếu cần kết nối từ bên ngoài).

Và địa chỉ private sẽ tự động cố định coi như static IP cho instance khi được tạo ra.

12. Hỏi: User và AWS Account Khác Nhau Như Nào. Trong bài học này em thấy thầy tạo 2 kiểu tài khoản:

1 là AWS account: dev-user1, dev-user2

2 là User: user1, user2

Vậy 2 cái này mục đích chính có gì khác nhau và nên hiểu như nào trong môi trường Microsoft cho dễ hiểu thầy nhỉ?

Trả lời:

Hello em,

Tất cả các tài khoản mà tôi đã tạo trong bài học đều là IAM User. Tuy nhiên, mỗi loại tài khoản được cấp quyền truy cập vào các tài nguyên khác nhau. Em hãy xem kỹ các video bài giảng và tài liệu hướng dẫn trong phần tài nguyên để hiểu rõ hơn nhé.

Về sự khác biệt giữa AWS Account và IAM User, em có thể hình dung tương tự như trong môi trường Microsoft:

1. AWS Account

– Là một “container” riêng biệt chứa tất cả tài nguyên, cấu hình, và hóa đơn (billing) của em.

– Mỗi AWS Account có phạm vi bảo mật và quản lý riêng, giống như một subscription hoặc domain trong Active Directory.

– Ví dụ: nguyennh@gmail.com là một AWS Account, chứa các tài nguyên và chính sách riêng.

2. User (IAM User)

– Là danh tính IAM được tạo trong một AWS Account để cấp quyền truy cập vào các tài nguyên cụ thể.

– Trong môi trường Microsoft, IAM User tương tự như một user account được tạo trong một domain.

– Ví dụ: user1 và user2 là các IAM User trong một AWS Account, được phân quyền để thực hiện các tác vụ cụ thể.

Tóm lại:

AWS Account giống như một domain hoặc subscription trong Microsoft, nơi quản lý toàn bộ tài nguyên và thanh toán.

IAM User giống như một user account trong domain, chỉ có quyền truy cập vào tài nguyên trong tài khoản AWS mà nó thuộc về.

13. Hỏi: Em cảm ơn thầy đã phản hồi, em có thể summary lại theo cách em hiểu như sau, thầy correct xem đúng ko nhé.

1. AWS Account: Nó giống như khi em mua 1 số lượng licenses của Microsoft, em đã được cấp 1 tài khoản gọi là quản trị toàn bộ tài nguyên của MS licenses để tạo các dịch vụ như EntraID, Intune, Exchange, Quản lý Subscription, Bill

2. IAM User: Chính là các Users được tạo ra trên EntraID (Azure AD), các IAM này cũng có những tài khoản set quyền Administrator để quản lý toàn bộ các IAM Users

Thầy correct giúp xem em hiểu đúng ko nhé?

Trả lời:

Em hiểu theo cách liên tưởng với Microsoft là khá tốt, nhưng có một số điểm chưa hoàn toàn chính xác. Vậy tôi giải thích lại để giúp em hiểu đúng hơn nhé:

1. AWS Account

– AWS Account giống như một tài khoản gốc (root account) để quản lý toàn bộ tài nguyên và dịch vụ AWS.

– Nó tương tự như khi em mua một Microsoft Tenant ( Microsoft 365 Org) để quản lý các dịch vụ như Entra ID (trước đây là Azure AD), Intune, Exchange, nhưng AWS Account không phải là một tập hợp các license vì đây là chúng ta đăng ký một AWS Account chứ không phải là mua bản quyền phần mềm .

-Một AWS Account có thể chứa nhiều dự án, dịch vụ và tài nguyên khác nhau, không hoàn toàn tương đương với cách Microsoft Subscription hoạt động. Trong AWS, chúng ta không có “gói dịch vụ” cố định mà chỉ sử dụng tài nguyên theo nhu cầu và trả tiền theo mức sử dụng (pay-as-you-go). Em có thể quản lý Billing (Hóa Đơn Thanh toán), chính sách bảo mật, và tạo nhiều người dùng IAM để quản trị họ và cho phép họ sử dụng các tài nguyên AWS.

2. IAM User

– IAM User trong AWS không hoàn toàn giống với Entra ID Users (Azure AD Users).

– IAM User là một tài khoản người dùng được tạo trong dịch vụ AWS IAM để cấp quyền truy cập cho IAM User vào các dịch vụ AWS.

– Khác với Entra ID Users (Azure AD Users), IAM User không phải là một directory tập trung như Azure AD để Azure AD User có mục đích là có thể đăng nhập vào nhiều ứng dụng SaaS hoặc dịch vụ Microsoft như Microsoft 365, Exchange, Intune, SharePoint, Teams, cũng như các ứng dụng SaaS bên ngoài (nếu được cấp quyền).

– IAM User chỉ có thể truy cập các tài nguyên trong chính AWS Account mà nó được tạo ra, và chỉ khi nào chúng ta sử dụng IAM Policies cấp quyền cho IAM User thì IAM User mới có thể truy cập vào 1 số tài nguyên được chỉ định trong chính AWS Account này.

– IAM User có thể có quyền quản trị (Administrator), nhưng tài khoản IAM mạnh nhất không phải IAM User, mà là Root User của AWS Account.

Tóm lại, em hiểu theo hướng Microsoft là khá tốt, nhưng cần điều chỉnh lại một số điểm:

+ AWS Account khác với Microsoft Licenses, nhưng gần giống với Microsoft Tenant.

+ IAM Users có 1 số điểm khác với Azure AD Users, Azure AD User có thể đăng nhập vào nhiều ứng dụng SaaS, nhưng IAM User KHÔNG có khả năng này.

14. Hỏi: Anh Phương ơi Em hỏi 1 chút. Em muốn đi theo và học thêm nữa về mảng Cloud. Cụ thể Em muốn học về Cái bảo mật đám mây (Cloud Native Application Protection Platform – CNAPP) Nội dung học cụ thể cho món này thì Em cũng tìm hiểu trên mạng, tuy nhiên chính xác và tỷ mỉ thì nhờ Anh Phương advice thêm giúp Em chỗ này với Anh nhé?

Trả lời:

CNAPP (Cloud Native Application Protection Platform), thường yêu cầu các kỹ năng và kiến thức sau em nhé:

– Kiến thức nền tảng về Cloud Computing:

Thành thạo ít nhất một trong các nền tảng đám mây chính như AWS, Azure hoặc Google Cloud.

Hiểu biết về kiến trúc cloud, mô hình dịch vụ (IaaS, PaaS, SaaS) và cách thiết lập các dịch vụ này một cách an toàn.

– Công nghệ container và Kubernetes:

Làm việc với Docker và các công nghệ container khác.

Quản lý và bảo mật các cluster Kubernetes là một điểm mạnh được nhiều nhà tuyển dụng đánh giá cao.

– DevSecOps và CI/CD:

Kiến thức về tích hợp bảo mật vào quy trình phát triển phần mềm (DevOps), bao gồm việc tự động hóa kiểm tra bảo mật và triển khai (CI/CD pipeline).

Sử dụng các công cụ quét lỗ hổng và kiểm tra bảo mật tự động.

Hiểu biết về bảo mật ứng dụng và bảo mật hạ tầng:

Nắm vững các khái niệm về kiểm soát truy cập, mã hóa, giám sát và phát hiện xâm nhập.

Kiến thức về các tiêu chuẩn, framework và best practices bảo mật.

– Kỹ năng về tự động hoá và scripting:

Biết sử dụng các ngôn ngữ scripting như Python, Bash… để tự động hóa quy trình bảo mật.

– Các chứng chỉ chuyên môn:

Các chứng chỉ liên quan đến bảo mật (như CISSP, CCSP) và các chứng chỉ của nền tảng đám mây (ví dụ AWS Certified Security Specialty) sẽ tạo lợi thế lớn.

– Kiến thức chuyên sâu về CNAPP:

Hiểu các thành phần cấu thành của CNAPP như quản lý cấu hình bảo mật, quét lỗ hổng, bảo vệ runtime và giám sát hoạt động.

Thông thường, CNAPP tích hợp các giải pháp bảo mật cho các workload trên cloud native, từ việc xây dựng (build time) đến triển khai (runtime).

15. Hỏi: Ý tưởng của em là xây dựng một hệ thống bảo mật cho mạng AWS bằng cách:

(1)Triển khai các máy chủ EC2 (loại t3.medium) trong vùng mạng public DMZ, đóng vai trò như một tường lửa kết hợp hệ thống phát hiện và ngăn chặn xâm nhập (IDPS).

(2) Sử dụng Auto Scaling để đảm bảo hệ thống có thể mở rộng tự động khi lưu lượng tăng.

(3) Các máy chủ này sẽ phân tích lưu lượng đến từ Internet và phát hiện các hành vi bất thường dựa trên mô hình đã được huấn luyện trước bằng Amazon SageMaker.

(4) Dữ liệu về lưu lượng mạng (logs) sẽ được lưu vào VPC Flow Logs, sau đó chuyển vào bộ lưu trữ S3.

(5) Các logs này sẽ được gán nhãn (bình thường/bất thường) và sử dụng để huấn luyện lại mô hình, giúp cải thiện khả năng phát hiện của hệ thống IDPS trên các máy chủ EC2 ở vùng public.”

Dạ anh có thể cho em lời khuyên mô hình VPC và Security Group trên AWS mà em đã tạo từ mô hình mạng doanh nghiệp như vậy đã hợp lý chưa ạ? Em vận dụng được kiến thức về EC2, S3, VPC ở trong mô hình này ạ?

Trả lời:
Nhìn chung, mô hình VPC và Security Group của em đã đúng với kiến trúc mạng doanh nghiệp: có vùng DMZ (public subnet) dành cho Web Server/Firewall/IDPS, vùng private cho hệ thống nội bộ (cơ sở dữ liệu, backup, dịch vụ nội bộ), và kết nối an toàn ra Internet. Tuy nhiên anh có một số gợi ý  để mô hình của em an toàn và hiệu quả hơn:

1. Phân chia Subnet và Kiến trúc DMZ

  1. Tách biệt subnet theo chức năng
    • Public subnet (DMZ): Chứa các thành phần cần truy cập trực tiếp từ Internet (Web Server, Firewall/IDPS).
    • Private subnet (Server Farm): Chứa Database Server, Backup Server, Web Service nội bộ. Các subnet này chỉ cho phép lưu lượng từ DMZ hoặc mạng nội bộ, không mở trực tiếp ra Internet.
    • Subnet quản trị (Management subnet – tùy chọn): Để tách biệt luồng quản trị (SSH, RDP, VPN) khỏi luồng ứng dụng, tăng cường bảo mật.
  2. Triển khai Multi-AZ (nếu cần HA)
    • Mỗi loại subnet (public, private) đặt ở ít nhất 2 Availability Zones khác nhau để có khả năng chịu lỗi (fault tolerance) và tăng tính sẵn sàng (high availability).
  3. Sử dụng NAT Gateway cho Private Subnet
    • Khi các EC2 ở private subnet cần cập nhật gói (yum/apt update) hoặc kết nối ra ngoài, dùng NAT Gateway thay vì gán Elastic IP cho từng instance.
    • NAT Gateway nên đặt ở public subnet và private subnet chỉ định tuyến (route) ra NAT Gateway để đảm bảo bảo mật outbound.

2. Cấu hình Security Group

  1. Tuân thủ nguyên tắc “least privilege”
    • Chỉ mở đúng cổng, đúng nguồn (source) cần thiết. Ví dụ, chỉ cho phép SSH từ IP quản trị, HTTP/HTTPS từ Internet, DB chỉ mở cho Web Server trong DMZ.
    • Hạn chế sử dụng 0.0.0.0/0 cho inbound trừ khi bắt buộc (VD: web traffic cổng 80/443).
  2. Phân nhóm security groups
    • SG_DMZ_Web: Cho Web Server ở DMZ (mở cổng 80/443 từ Internet, SSH/RDP chỉ từ IP quản trị).
    • SG_Private_DB: Cho DB Server (chỉ cho phép inbound từ SG_DMZ_Web cổng 3306 hoặc cổng DB, outbound tùy biến).
    • SG_Internal_Apps: Cho các dịch vụ nội bộ, mở inbound/outbound cần thiết giữa các subnets.
  3. Security Group references (SG-to-SG)
    • Thay vì dùng CIDR nội bộ, nên cho phép traffic “Source = SG_DMZ_Web” đến cổng DB. Điều này giúp quản lý dễ dàng và giảm rủi ro sai sót.
  4. Kiểm soát outbound
    • Security Group mặc định thường cho phép outbound 0.0.0.0/0. Nếu có yêu cầu bảo mật cao, có thể block outbound và chỉ mở đến các đích (hoặc cổng) thật sự cần.

3. Network ACL (NACL) (Tùy chọn)

  • Nếu muốn bổ sung lớp bảo mật bổ sung, có thể cấu hình NACL ở mức subnet.
  • NACL là FW stateless, phải tạo rule cho inbound và outbound tương ứng.
  • Dùng NACL để chặn một số IP/port “nhạy cảm” hoặc blacklist tấn công. Tuy nhiên, quản lý NACL phức tạp hơn, nên cân nhắc giữa lợi ích và độ phức tạp.

4. Logging và Giám sát

  1. VPC Flow Logs
    • Kích hoạt VPC Flow Logs cho toàn bộ VPC hoặc cho từng subnet/ENI. Lưu vào S3 hoặc CloudWatch Logs để theo dõi lưu lượng mạng, phát hiện bất thường.
  2. AWS CloudTrail
    • Kích hoạt CloudTrail để theo dõi hoạt động API trên tài khoản, ai tạo/sửa/xóa resource nào.
    • Kết hợp GuardDuty để phát hiện các hành vi bất thường (quét cổng, đăng nhập trái phép…).
  3. Centralized Logging
    • Thu thập logs (VD: hệ thống firewall, IDPS) về S3 hoặc Elasticsearch/OpenSearch để phân tích tập trung.
    • Nếu dùng SageMaker để huấn luyện mô hình anomaly detection, em có thể thiết lập pipeline để tự động gửi logs vào S3 rồi chạy batch inference hoặc real-time inference.

5. Tích hợp Firewall/IDPS

  1. Triển khai tường lửa trong DMZ
    • Nếu em tự có và quản lý tường lửa/IDPS, đặt nó ở public subnet (DMZ) để kiểm tra lưu lượng trước khi vào private subnet.
    • Hoặc dùng các dịch vụ Managed Firewall (AWS Network Firewall) nếu muốn ít tốn công quản lý.
  2. Quy tắc Firewall
    • Firewall nên giới hạn traffic, logging đầy đủ, và có cơ chế IDS/IPS quét xâm nhập.
    • Tích hợp Alerting (SNS, CloudWatch Alarms) khi phát hiện luồng tấn công.

6. S3 Endpoint và Bảo mật Dữ liệu

  1. S3 VPC Endpoint
    • Để các instance trong VPC truy cập vào S3 mà không đi qua Internet, em có thể tạo S3 Gateway Endpoint hoặc Interface Endpoint.
    • Bảo đảm S3 bucket policy giới hạn truy cập từ VPC Endpoint (thay vì public access).
  2. Mã hóa dữ liệu
    • Bật server-side encryption (SSE) cho bucket (SSE-S3 hoặc SSE-KMS) để bảo vệ logs/dữ liệu lưu trữ.
    • IAM policy chỉ cho phép một số role được đọc/ghi logs.

7. Mở rộng Khả năng Bảo mật

  • AWS WAF + ALB: Nếu ứng dụng web, có thể thêm WAF (Web Application Firewall) chặn các attack như SQL injection, XSS.
  • AWS Shield: Bảo vệ trước DDoS layer 3/4 (Shield Standard miễn phí, Shield Advanced trả phí).
  • GuardDuty: Phát hiện hành vi bất thường trên tài khoản, EC2, DNS, S3…

Tóm lại

  • Mô hình của em đã nắm đúng nguyên tắc DMZ (public subnet) và private subnet để bảo vệ tài nguyên nội bộ.
  • Cần chú trọng cấu hình Security Group theo nguyên tắc “ít quyền nhất” và tránh mở 0.0.0.0/0 cho SSH/RDP.
  • Sử dụng VPC Flow Logs, CloudTrail, GuardDuty… để tăng khả năng giám sát và phát hiện sớm tấn công.
  • Tận dụng NAT Gateway, VPC Endpoint, mã hóa S3, WAF, Firewall/IDPS… để đảm bảo mô hình vừa linh hoạt vừa bảo mật.

Với những gợi ý trên của anh, em có thể tinh chỉnh kiến trúc VPC và Security Group để vừa tuân thủ best practices của AWS, vừa đáp ứng yêu cầu của mô hình mạng doanh nghiệp (DMZ, server farm, người dùng nội bộ). Chúc em triển khai thành công!

Em có thể tham khảo thêm bài viết best practices của AWS: https://www.wiz.io/academy/aws-security-groups-best-practices

16. Hỏi: Sự khác nhau của Roles và User group trong IAM. Em chào anh, e là người mới nên nếu câu hỏi của em có stupid thì mong anh bỏ qua. Em có xem bài thực hành về Role và assume role cho user, e thấy việc assume role này và việc gắn policy vào group rồi thêm user vào group đều có chung mục đích là kiểm soát quyền truy cập của user vào các AWS resources, vậy sự khác nhau của Role và user group là gì, khi nào thì sử dụng role, khi nào thì sử dụng user group ạ. Em cảm ơn anh?

Trả lời:

Hello em! Câu hỏi của em rất là hay và quan trọng, và không “stupid” chút nào nhé. Anh sẽ giải thích cụ thể để em có thể rõ hơn nhé.

1. Về User Group và Policy:

  –  User Group: Được sử dụng để quản lý quyền hạn cho một nhóm user. Khi gắn một policy vào group, tất cả các users trong group đó đều có quyền hạn giống nhau. Cách này rất hiệu quả khi em có nhiều người dùng cần có quyền truy cập giống nhau, giúp em tiết kiệm thời gian khi chỉ cần gán policy một lần cho group thay vì cho từng user.

  –  Policy: Là tập hợp các quyền (permissions) xác định hay định nghĩa các hành động (actions) và tài nguyên (resources) nào mà users hoặc group  có thể truy cập.

2. Về Role:

–  Role: Cũng được sử dụng để gán quyền truy cập AWS, nhưng cũng có mục đích khác. Role được thiết kế cho các trường hợp sử dụng tạm thời tài nguyên, khi một dịch vụ hoặc user cần quyền hạn đặc biệt trong một khoảng thời gian ngắn. Khi một user “assume role,” thì user đó chỉ tạm thời có quyền của role trong thời gian thực hiện nhiệm vụ công việc, sau đó sẽ quay lại quyền hạn ban đầu của user đó.

3. Khi nào sử dụng User Group, khi nào sử dụng Role:

–  User Group: Dùng khi em muốn quản lý quyền cho các users với quyền cố định lâu dài trong cùng một tài khoản AWS.

    + VD: Các users của nhóm phát triển DEV có thể cần quyền truy cập vào S3 hoặc EC2 theo policy chung.

  Role: Dùng khi user hoặc service cần quyền tạm thời hoặc cần truy cập chéo giữa các tài khoản AWS. Ví dụ, khi một ứng dụng của tài khoản A cần truy cập vào dịch vụ của tài khoản B, hoặc khi user thực hiện một nhiệm vụ đặc biệt ngoài quyền hạn cho phép của user này. Role cũng có thể được dùng để thay thế cho access key của user, và AWS khuyến khích sử dụng Role trong nhiều trường hợp thay vì dùng access key.

          + VD: Thay vì cấu hình access key trong ứng dụng chạy trong 01 EC2 để truy cập vào các dịch vụ khác, em có thể gán IAM Role trực tiếp vào EC2 instance. EC2 sẽ tự động nhận các quyền để truy cập các tài nguyên AWS. Và Lambda Function: Tương tự như EC2, Lambda cũng có thể được gán Role để truy cập vào các dịch vụ AWS khác.

Hy vọng giải thích này giúp em hiểu rõ hơn sự khác biệt và cách sử dụng User Group và Role!

17. Hỏi: Em cảm ơn anh rất nhiều, e đã hiểu phần nào về sự khác nhau rồi ạ, em xin phép hỏi anh 1 câu nữa để làm rõ hơn 1 việc.
Hôm qua e cũng có lùng sục stackoverflow cho câu hỏi của em, mọi người có bảo Role thường dùng cho các service (ví dụ EC2 instance cần truy cập vào S3) hoặc dùng cho trường hợp cấp quyền truy cập cho các “user” từ các identity provider khác (SSO), và rất nhiều người nói là không dùng Role cho IAM user. Vậy có phải best practive là IAM user thì sẽ dùng group/ policy và các trường hợp khác là auto xài role không ạ, hay các câu trả lời trên stackoverflow đã bị outdated ạ. Em cảm ơn anh?
Trả lời:

OK em, vậy anh giải thích rõ hơn nhé!

1. IAM Role và IAM User: Đúng là IAM Role thường được dùng để cấp quyền truy cập tạm thời cho các dịch vụ hoặc cho người dùng từ các Identity Provider khác (qua SSO, Federation). Đây là một trong những best practice hiện nay vì nó giúp bảo mật hơn, tránh tình trạng phải tạo nhiều IAM users cố định và phải cấp quyền cũng như phải quản lý các users này.

2. IAM User với Group/Policy: Thông thường, IAM User được tạo cho các trường hợp cần có một tài khoản dài hạn cho người dùng của chúng ta sử dụng (vd: Nhân viên quản lý bộ phận Dev Nguyễn Tuấn Anh cần 01 user để làm việc với một số tài nguyên như EC2, S3, Lambda function). Để quản lý hiệu quả, chúng ta dùng IAM Groups và Policy để gán quyền cho IAM User đó. Việc này cho phép quản lý quyền truy cập dễ dàng và thay đổi quyền cho nhiều người dùng cùng một lúc thông qua Group.

3. Best Practice hiện tại:

   + IAM Role: Chủ yếu dùng để cấp quyền tạm thời cho dịch vụ AWS (ví dụ như EC2 cần truy cập vào S3) và cho SSO/Federated user.

   + IAM User và Group: Nên dùng cho những tài khoản mà người dùng thật cần truy cập thường xuyên và lâu dài vào AWS Console hoặc API.

Như vậy nói chung, best practice hiện nay là hạn chế dùng Role cho IAM User trừ khi có lý do đặc biệt. A thấy StackOverflow nói đúng theo các nguyên tắc bảo mật hiện tại, không outdated đâu em nhé!

18. Hỏi: em newbie, đã làm việc với aws cũng vài service như là s3,ec2, kms, thì có học khóa này được ko ạ?

Trả lời:

Được em, khóa học này ngoài các kiến thức về s3,ec2, kms, còn giúp em hiểu về  các AWS services khác như IAM, VPC, EKS, Fargate, load balancer, Auto scaling, RDS databse, DynamoDB, VVV.. và giúp e nắm được kiến thức sâu hơn về các dịch vụ AWS nhé. Cảm ơn em đã tham gia khóa học và chúc em học tốt , thành công nha. Trong quá trình học nếu có gì không hiểu rõ, thì đừng ngại hỏi anh nhé.

19. Hỏi: e có một thắc mắc: như tròn bài giảng s3 là một dịch vụ toàn cầu, nhưng khi e học (2/10/2024) thì thấy region không phải global mà là N.Virginia như trong hình, vì sao vậy ạ?

Trả lời:

Amazon S3 là một dịch vụ lưu trữ dữ liệu toàn cầu (global) nhưng được quản lý ở cấp độ khu vực (regional).

Em có thể hình dung như sau:

Toàn cầu: Dữ liệu của em lưu trữ trên S3 có thể truy cập được từ bất kỳ nơi nào trên thế giới. Ví dụ: em có thể lưu trữ một bức ảnh lên S3 và truy cập nó từ một ứng dụng di động ở bất cứ quốc gia nào.

Khu vực: Mặc dù có tính toàn cầu, nhưng dữ liệu của em sẽ được lưu trữ vật lý trong một khu vực cụ thể của AWS (ví dụ: US East, EU West). Việc chọn khu vực sẽ ảnh hưởng đến hiệu suất truy cập và chi phí.

Tại sao lại như vậy?

Hiệu suất: Lưu trữ dữ liệu gần với người dùng sẽ giúp giảm độ trễ khi truy cập.

Khả năng phục hồi: Phân tán dữ liệu ra nhiều khu vực giúp bảo vệ dữ liệu tốt hơn trong trường hợp xảy ra sự cố.

Quy định: Một số quy định yêu cầu dữ liệu phải được lưu trữ trong một khu vực cụ thể.

Tóm lại : S3 là một dịch vụ toàn cầu, nhưng việc quản lý và lưu trữ dữ liệu lại diễn ra ở cấp độ khu vực.

20. Hỏi: Mục đích thực sự của Role là gì ạ? Em chào thầy, cho em hỏi mục đích thực sự của role là gì ạ?

Ví dụ :như đối với dev-user02, lúc nào cũng có thể access vào S3 nếu change role, có chăng việc add role chỉ để cộng thêm bước thao tác phức tạp cho user??

Câu hỏi 2: em có thể tạo role với expiration chỉ định được không ạ?

Trả lời:

Anh trả lời các câu hỏi của em như sau:

Câu hỏi 1: Mục đích thực sự của role là gì?

– Role trong AWS IAM có mục đích chính là cung cấp quyền truy cập tạm thời cho người dùng hoặc dịch vụ mà không cần cung cấp thông tin đăng nhập (username và password) hoặc khóa truy cập (access keys) cố định.

– Việc sử dụng roles giúp:

   + Tăng cường bảo mật: Roles cho phép áp dụng quyền hạn tạm thời, giảm thiểu rủi ro liên quan đến việc lộ thông tin đăng nhập cố định.

   + Quản lý quyền truy cập một cách linh hoạt: Roles giúp dễ dàng cấp và thu hồi quyền truy cập dựa trên nhu cầu hiện tại mà không cần thay đổi các quyền  cho user.

   + Đơn giản hóa quản lý quyền truy cập: Thay vì cấp quyền trực tiếp cho từng user, em có thể gán roles với các quyền cụ thể và cho phép users assume roles này khi cần.

+ Như công ty của anh, phòng bảo mật họ yêu cầu quản trị hệ thống chỉ được phép cung cấp quyền truy cập vào một tài nguyên cụ thể trong AWS cho khách hàng theo phương pháp Assume Role. Để đảm bảo việc bảo mật thông tin.

  + Ví dụ:

Dev-user02 có thể access vào S3 nếu assume role. Việc thêm bước assume role không phải để làm phức tạp mà để đảm bảo rằng user chỉ có quyền truy cập vào S3 khi cần và trong một khoảng thời gian cần thiết. Điều này giúp kiểm soát tốt hơn việc sử dụng các tài nguyên AWS và giảm nguy cơ truy cập trái phép gây ra các vấn đề về bảo mật.

Câu hỏi 2: Em có thể tạo role với expiration chỉ định được không?

– Em không thể tạo role với expiration trực tiếp trong IAM, nhưng em có thể gán thời gian expiration cho các temporary security credentials khi user assume role. Khi một user hoặc service assume role, em có thể chỉ định duration (khoảng thời gian ) của session, tức là khoảng thời gian mà các temporary security credentials sẽ có hiệu lực.

– Ví dụ:

Khi dev-user02 assume role, em có thể chỉ định thời gian expiration cho session này, ví dụ có thể là 1 giờ, 6 giờ hoặc 12 giờ tùy theo yêu cầu bảo mật và chính sách của em. Sau thời gian này, user sẽ phải assume lại role để tiếp tục sử dụng quyền truy cập.

Cách thực hiện:

Khi sử dụng AWS CLI hoặc API để assume role, em có thể chỉ định DurationSeconds:

aws sts assume-role –role-arn “arn:aws:iam::123456789012:role/example-role” –role-session-name “example-session” –duration-seconds 3600

+ Trong ví dụ trên, DurationSeconds được đặt là 3600 giây (1 giờ). Sau 1 giờ, temporary security credentials sẽ hết hạn và user phải assume lại role để tiếp tục sử dụng quyền truy cập vào tài nguyên cụ thể được chỉ định.

– Em có thể tham khảo thêm qua Link: https://stackoverflow.com/questions/50659155/aws-assume-role-with-credentials-that-last-more-than-an-hour#:~:text=You%20can%20assume%20a%20role,for%20more%20than%20an%20hour.

21. Hỏi: Em đã làm theo các bước trong bài 17 nhưng dev-user1 và dev-user2 không có quyền truy cập bucket S3 ?

Trả lời:

Khi em login vào các dev-user, sau đó truy cập vào S3 bucket nó thông báo như nào em?

Trong phần tài nguyên của bài học có tài liệu hướng dẫn, vậy em download tài liệu và đọc và kết hợp xem video kỹ nhé, sau đó làm theo từng bước 1 (ko bỏ qua bước nào nhé) .

Em lưu ý bước này nhé: Trong dòng 7, xóa ARN, và paste vào ARN của user2 mà bạn vừa copied, đảm bảo có 2 dấu nháy(“YOUR ARN”) cho ARN của user2.

22. Hỏi: lỗi tạo stack section 19, 3 bài lab 159,160,161. Hi anh Phương! mình đang gặp lỗi thực hành section 19, 3 bài lab 159,160,161 cấu hình VPC Flow logs gởi logi vào s3… dowload file stack về add stack chưa được, báo lỗi  ROLLBACK_COMPLETE, đã thử load cả 3 file ở 159,160,16, nhờ anh Phương check và up lại file tạo stack 159,160,161 nhé?

Trả lời:

Hi Vinh, Mình thử test Stack File thấy chạy vẫn bình thường OK. Và mình thấy như trong hình chụp của Vinh thấy báo lỗi là stack không thể tạo được internet GW, VPC. Vậy Vinh xem lại xem account AWS mà Vinh đang sử dụng có phải là có quyền quản trị FULL ACCESS (như root account) toàn bộ tài nguyên và dịch vụ AWS của Vinh ko nhé.

23. Hi anh Phương! mình đang thực hành section 19, lab 163, tới bước tạo Distributions, sau khi làm theo hướng dẫn, tới phần cuối cùng click Create Distributions thì hiện báo lỗi:

Your account must be verified before you can add new CloudFront resources. To verify your account, please contact AWS Support (https://console.aws.amazon.com/support/home#/) and include this error message.

Trả lời:

Hi Vinh, Lỗi này bạn cần liên hệ bộ phận AWS Support để họ hỗ trở xử lý nhé.

Bạn vào Link này để xem cách hướng dẫn request AWS support xử lý lỗi này (chỗ nào đọc không hiểu bạn dùng google translate nhé:

https://maxrohde.com/2022/06/10/solving-error-creating-cloudfront-distribution-accessdenied-your-account-must-be-verified/

Nếu có thể bạn thử đăng ký mới 1 aws account khác xong thử làm lại bài lab này xem sao nhé.

24. Hỏi: NLBs + ALB cái này thực tế có ứng dụng như thế nào a nhỉ?

Trả lời:

Chào em! Câu hỏi của em về kết hợp NLB và ALB (Network Load Balancer và Application Load Balancer) là một câu rất hay, vì trong thực tế doanh nghiệp, việc phối hợp cả hai loại Load Balancer này có nhiều ứng dụng trong việc bảo mật, tăng hiệu suất và linh hoạt hệ thống. Tôi sẽ giải thích theo hướng thực chiến như sau:


Tổng quan nhanh:

Tiêu chí ALB (Application Load Balancer) NLB (Network Load Balancer)
Layer Layer 7 (HTTP/HTTPS) Layer 4 (TCP/UDP)
Tính năng thông minh Có thể routing theo path, host-based, header-based Cực nhanh, hỗ trợ TCP/UDP, TLS Offloading
Tốc độ xử lý Trung bình (có xử lý logic ứng dụng) Rất nhanh, gần như realtime
Hỗ trợ WebSocket
Hỗ trợ IP gốc (Preserve client IP) Không giữ IP thật (trừ khi dùng X-Forwarded-For) Có giữ IP gốc thật

Vậy khi nào dùng kết hợp NLB + ALB?

1. Tăng hiệu suất + bảo vệ tầng ứng dụng

  • NLB  được đặt phía trước giao tiếp trực tiếp với internet , để:

    • Chấp nhận hàng triệu kết nối TCP cực nhanh từ clients.

    • Giữ lại IP thật của client (rất hữu ích cho các hệ thống bảo mật như IDS/IPS).

    • Có thể dùng TLS offloading nếu cần.

  • ALB phía sau, để:

    • Routing (định tuyến) theo logic HTTP/HTTPS như: /admin, /api, /user

    • Chuyển tiếp đến các target group khác nhau hoặc microservices.

    • Gắn tường lửa WAF (Web Application Firewall) ở tầng HTTP giúp bảo vệ hệ thống ứng dụng đằng sau.

Thực tế ứng dụng:
Trong các hệ thống bảo mật hoặc ngân hàng, họ muốn ghi nhận IP gốc thật của khách hàng + xử lý TLS sớm + routing logic thì sẽ cấu hình hệ thống để NLB đứng trước → ALB.


2. Triển khai trong môi trường EKS hoặc ECS với ALB Ingress Controller

  • Một số môi trường Kubernetes trên AWS (EKS) dùng NLB để expose service TCP, UDP, hoặc WebSocket.

  • Còn nếu ứng dụng chạy HTTP thì dùng ALB Ingress Controller để route thông minh đến từng pod/container.

Thực tế ứng dụng:
Microservice sử dụng ALB routing đến từng service cụ thể, nhưng bên ngoài vẫn dùng NLB để bảo vệ kết nối và giảm độ trễ truy cập từ phía người dùng.


3. Hybrid TCP/HTTP routing

Ví dụ hệ thống có:

  • API HTTP (qua ALB)

  • MQTT hoặc dịch vụ TCP riêng (qua NLB)

→ Dùng NLB làm entry point duy nhất, sau đó route đến ALB hoặc EC2 TCP tuỳ theo cổng/host.


Tóm lại:

  • NLB rất phù hợp khi cần tốc độ cao, hỗ trợ các giao thức không phải HTTP (như TCP/UDP, WebSocket, TLS).

  • ALB rất mạnh khi cần routing thông minh theo nội dung HTTP.

  • Kết hợp NLB + ALB giúp em xây dựng hệ thống:

    • Hiệu suất cao (NLB)

    • Linh hoạt và bảo mật tốt (ALB + WAF)

    • Giữ IP client thật để phân tích log và bảo mật

25. Hỏi: Vì sao NAT gateway của DB lại chọn subnet public-subnet? Trong bài giảng, e đang hiểu là DB server đang chọn subnet là private subnet, vì sao nat lại mở cho subnet public a nhỉ?

Trả lời:
Do NATGW nó cần nhận địa chỉ IP public và nó cần phải ra ngoài Internet (NATGW e hình dung nó giống như PFsense hay 1 Router) nên mình cần chọn subnet cho nó là public subnet, vì public subnet đang đc cho phép ra ngoài internet. Sau đó mình mới cấu hình định tuyến để private subnet mà DB Server đang trong đó có thể ra ngoài internet qua Nat GW. Có gì khó hiểu em cứ hỏi a nhé.
26. Hỏi: AWS Snowball chào thầy. Trong bài giảng bài 23. phần AWS Snowball thầy có ghi là AWS Snowball “Truyền dữ liệu bên trong và bên ngoài” thầy có thể giải thích rõ hơn được câu này không, cám ơn thầy?
Trả lời:

OK em về AWS Snowball là một dịch vụ của Amazon Web Services (AWS) cung cấp các thiết bị vật lý (có thể hình dung như là một thiết bị lưu trữ dữ liệu như ổ cứng, NAS… ) được sử dụng để di chuyển dữ liệu lớn từ môi trường dữ liệu trong công ty của chúng ta vào cloud của AWS hoặc ngược lại. Các thiết bị Snowball có dung lượng lưu trữ lớn (từ vài TB đến hàng chục TB) và được thiết kế để chịu được điều kiện môi trường khắc nghiệt khi vận chuyển. Snowball giúp khách hàng tiết kiệm thời gian và chi phí so với việc truyền dữ liệu qua Internet trong các tình huống khi kết nối Internet chậm hoặc không ổn định.

Cách thức hoạt động VD chúng ta muốn chuyển dữ liệu lớn từ môi trường trong cty của chúng ta lên đám mây AWS

Trong aws console Dòng sản phẩm AWS Snowball trong tài khoản aws, Có thể chọn thiết bị ưa thích của em, Snowball Edge Compute Optimized hoặc Snowball Edge Storage Optimized. Tạo một tác vụ với vùng lưu trữ Amazon S3, chọn Dịch vụ thông báo đơn giản của Amazon (Amazon SNS) để theo dõi và cấu hình các tùy chọn như AMI Amazon EC2 và GPU. AWS sẽ chuẩn bị và vận chuyển thiết bị cho e. Sau khi e nhận được thiết bị, bật nguồn và sử dụng AWS OpsHub để mở khóa. Kết nối với LAN của e. Sử dụng AWS OpsHub để quản lý thiết bị, truyền dữ liệu từ Servers của em vào thiết bị hoặc khởi chạy các  EC2 instances. Sau khi hoàn thành công việc, tắt và trả thiết bị về AWS. Sau đó thiết bị lưu trữ sẽ đc vận chuyển đi và dữ liệu sẽ đc copy vào đám mây AWS trong tài khoản của e. Sau đó, tất cả dữ liệu và thông tin khách hàng sẽ được xóa khỏi thiết bị một cách an toàn.

27. Hỏi: Em chào thầy, lỗi này là lỗi gì vậy thầy?

Trả lời:

– Đọc lỗi trên anh thấy tài khoản aws của em đã bị tạm ngừng hoạt động, có thể do em đã sử dụng tài nguyên và bị tính phí vượt quá số tiền có trong thẻ VISA hoặc MasterCard mà em đã đăng ký account này. Em nên đọc mail của AWS họ gửi đến để hiểu rõ hơn nguyên nhân.

– Theo kinh nghiệm của anh, nếu em ko có tài nguyên gì quan trọng trong account aws này thì em bỏ account này đi, và sau đó tạo một gmail mới và đăng ký 1 account aws mới.

Em có thể vào Link này để xem cách hướng dẫn tạo AWS Account nhé:

https://cloudfly.vn/blog/tao-tai-khoan-aws-mien-phi-don-gian

28. Hỏi: Liên quan đến việc tạo healthcheck cho ALB khi config healthcheck trong Aws shield advanced

Như tiêu đề em đang gặp vấn đề chưa rõ như sau ạ

– Em đã thêm service ALB vào trong Aws Shield Advanced để bảo vệ DDoS

– Tiếp theo e tiến hành config phần healthcheck cho ALB thì em có tạo một healthcheck cho ALB ở trong route53 với thiết lập sau ạ

– domain name: test-alb-1034534534(.)ap-northeast-1(.)elb(.)amazonaws(.)com (ví dụ)

– Protocol: HTTPS

– path: “”

– Nhưng sau khi tạo thành công thì healtcheck luôn hiện là unhealthy và không có bất kỳ một request nào thành công

– Bên trong alb này gồm nhiều target group đã được thiết lập trước đó rồi ạ

Vâỵ nên em muốn hỏi a chút

– Việc tạo healtcheck cho ALB có cần thiết không ạ, nếu không tạo thì làm sao SRT có thể dựa vào để phát hiện ra DDoS cho mình được ạ

– Nếu cần thiết thì việc em config như bên trên thì sai do đâu được ạ, em đang hiểu không đúng điều gì mong anh chỉ dạy ạ?

Trả lời: 

Do việc trả lời chính xác 1 câu hỏi như của em thì cần phải có time để tìm hiểu kỹ (a cũng khá bận và a sẽ cố gắng trả lời các câu hỏi về cơ bản có liên quan đến chủ đề học chứng chỉ AWS. Còn về chủ đề liên quan đến công việc cụ thể của mọi người thì nó sẽ tốn time tìm hiểu và phải kiểm tra cụ thể môi trường mới có thể đưa ra giải pháp ), và phải xem và kiểm tra cụ thể về môi trường infrastructure của em. Vì có nhiều nguyên nhân gây ra vấn đề. Tuy nhiên a có một số gợi ý như sau, để em có hướng xử lý vấn đề này nhé:

-Việc tạo health check cho Application Load Balancer (ALB) là rất cần thiết, đặc biệt là khi em đã tích hợp ALB vào AWS Shield Advanced để bảo vệ chống lại các cuộc tấn công DDoS. Health check giúp kiểm tra các máy chủ hoạt động đúng cách và có thể xử lý các yêu cầu (requests) từ clients. Nếu health check không được cấu hình hoặc không hoạt động đúng cách, ALB sẽ không thể xác định được trạng thái hoạt động của các máy chủ và có thể dẫn đến việc gửi yêu cầu đến các máy chủ không hoạt động hoặc không phản hồi, ảnh hưởng đến hiệu suất và khả năng cung cấp dịch vụ của ứng dụng.

– Về việc cấu hình health check cho ALB, thì em thử test kiểm tra xem từ bên ngoài em có thể truy cập đc vào ALB thông qua https ko, vì bản chất healthcheck của Route53 nó sẽ kiểm tra việc truy cập vào ALB và ALB dựa vào các target groups nhận requests và gửi vào các servers back-end, sau đó phản hồi lại các yêu cầu cho clients. Ngoài ra e cần kiểm tra lại các thiết lập để đảm bảo cấu hình đúng,

Có một số lưu ý khi cấu hình health check:

Domain Name: Cần chắc chắn rằng tên miền được cấu hình chính xác, địa chỉ ALB của e phải là chính xác. Nếu địa chỉ không chính xác, hoặc không trỏ đúng đến ALB, health check sẽ báo failed.

Protocol (http hoặc https) và Path: Protocol và path của health check cần phản ánh đúng cách hoạt động của ứng dụng và cách ALB truy cập vào các máy chủ back-end. Cần kiểm tra lại là protocol và path được cấu hình đúng để ALB có thể gửi yêu cầu kiểm tra sức khỏe đến các máy chủ một cách chính xác.

– Ngoài ra, cần kiểm tra lại các thiết lập khác của health check như timeout, interval, và threshold để đảm bảo rằng chúng phù hợp với yêu cầu của ứng dụng và môi trường của em.

– Cuối cùng, cần kiểm tra logs và metric của health check để xác định nguyên nhân cụ thể gây ra trạng thái “unhealthy” của health check, và check access log của ALB để em có hướng xử lý vấn đề này.

– Em có thể tham khảo thêm:

1. Amazon Route 53: Health Checks: https://www.stormit.cloud/blog/route-53-health-check/

2. Route 53 health checks integrate with CloudWatch metrics: https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/monitoring-health-checks.html

3. Access logs for your Application Load Balancer: https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html

4. Automatic application layer DDoS mitigation with AWS Shield Advanced: https://youtu.be/hyGuV2e8SDw

29. Hỏi: Có cần thiết phải kết hợp cới webacl trong quá trình config protected resource Route53, Cloudfront trong AWS Shield Advanced hay không ?

Như tiêu đề thì em đang đảm nhận phần thiết lập aws shield advanced ở công ty

– Khi add protected resource thì em đang chưa hiểu rõ lý do mình có nên thêm webacl liên kết với route53, cloudfront hay không.
– Cụ thể thì website công ty vẫn đang hoạt động bình thường, việc add thêm webacl nhưng không có config gì thì có cần thiết hay không ạ? Em thấy mình có thể add limit reuquest vậy nếu em không set phần đó thì liệu có cần thiết thêm vào không ạ?

– Mong được anh hỗ trợ xíu, em cảm ơn ạ?

Trả lời:

– Việc add limit WebACL Application đối với Load Balancer (ALB) có thể cần thiết trong một số trường hợp ví dụ chống tấn công DDOS, tuy nhiên còn tùy thuộc vào do yêu cầu cụ thể của ứng dụng và môi trường của em.

– Việc add này nó sẽ giới hạn số lượng requests  được accepts từ traffic mạng của người dùng. Do đó nó có thể dẫn đến việc ảnh hưởng đến việc truy cập của người dùng vào ứng dụng web của em, nếu việc cấu hình này là quá chặt chẽ . Theo anh thì nếu websites của em đang chạy bình thường thì mình có thể cứ để nguyên hiện trạng. E có thể sử dụng các công cụ monitor để theo dõi xem có vấn đề gì ko, thì mới nghĩ đến việc cấu hình ACL. Ngoài ra e có thể thao khảo giới hạn access cho ALB:

https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/restrict-access-to-load-balancer.html

– Còn Route53 thì nó là dịch vụ phân giải tên miền của AWS, vì nó thường đi cùng với việc cung cấp dịch vụ websites, cùng với cân bằng tải ALB, chúng ta cứ nói đến ở đây cũng đc e nhé.

30. Hỏi: Truy cập https. Em đã cấu hình Inbound rules 3 port rồi nhưng chỉ có https thì không vào được, anh xem giúp em với?

Trả lời:

Trong bài học này thì bash script nó setup apache web server trên máy ảo, là chỉ cung cấp dịch vụ http/ port 80. Và không cấu hình web server https/443. Do đó em không thể truy cập vào đc https nhé.

31. Hỏi: Giải thích rõ hơn về Event bus. Em có đang tiến hành làm một cross access event bus mặc dù đã làm được nhưng e cũng chưa hiểu rõ lắm

– Đơn giản là em có 2 account, tại acc A e có một eventbridge rule put event sang cho một event bus ở acc B

Điều em muốn hỏi là tại sao lại put event cho event bus mà không phải trực tiếp đến Eventbridge rule ạ?

Bản chất của event bus là đường truyền phải không ạ?

Trả lời: 

Cross access event bus có nghĩa là:

1. Cross-Access Event Bus: cho phép cấu hình EventBridge để gửi và nhận sự kiện giữa các event bus thuộc các tài khoản AWS khác nhau. Điều này giúp tạo ra một mô hình tương tác giữa các hệ thống và ứng dụng trong các tài khoản AWS khác nhau.

2. Quản lý Quyền Truy Cập: Khi cấu hình EventBridge để gửi và nhận sự kiện giữa các tài khoản, chúng ta có thể quản lý quyền truy cập bằng cách thiết đặt các chính sách IAM và roles phù hợp. Việc này bao gồm quyền truy cập vào các event bus và các quy tắc (rules) liên quan.

3. Xác định Người Gửi và Người Nhận: Chúng ta có thể xác định rõ ràng tài khoản AWS nào có quyền gửi sự kiện đến event bus của chúngta và tài khoản nào có quyền nhận sự kiện từ event bus của của chúng ta.

4. Kiểm Soát Các Quy Tắc (rules) và Nguồn events: Chúng ta có thể kiểm soát quyền truy cập đến event bus và các sự kiện thông qua việc thiết lập allow hoặc deny cho các quy tắc cụ thể và các nguồn events cụ thể.

– Vậy event bus Chúng ta có thể hiểu nó  là nơi mà các sự kiện được tập trung và quản lý. Và nó có thể phân phối sự kiện đến nhiều đích khác nhau, tùy thuộc vào cách chúng ta cấu hình quy tắc và điều kiện xử lý sự kiện.

Trong trường hợp cross-account, event bus có thể được cấu hình để nhận sự kiện từ nhiều tài khoản khác nhau và chuyển giao chúng đến các quy tắc xử lý trong tài khoản đích.

Việc em put event cho event bus mà không phải trực tiếp đến EventBridge rules, là giúp giảm độ phức tạp và tăng tính linh hoạt trong quản lý events.

VD: Các quy tắc xử lý trong EventBridge rules thường được cấu hình với các điều kiện và bộ lọc(filters) để xác định xem events có nên kích hoạt rules hay không. Bằng cách chúng ta put event trực tiếp vào event bus, chúng ta có thể giảm bớt filters và điều kiện, giúp đơn giản hóa quá trình xử lý sự kiện (event).

Vậy em có thể tham khảo VD này để hiểu rõ hơn nhé: https://aws.amazon.com/vi/blogs/compute/simplifying-cross-account-access-with-amazon-eventbridge-resource-policies/

32. Hỏi: Cho em hỏi, em đang thiết lập static web trên s3 nhưng truy cập thông qua cloudfront sử dụng CFn. Vấn đề em gặp phải là e tạo cloudfront và webacl ở 2 file khác nhau, ở trong phần cloudfront WEBACLID em có sử dụng !Ref WebaclName để trỏ đc WEBACL Arn đến đó nhưng mà khi dùng như vậy lại báo lỗi “Invalid webACL identifier provided” không biết em dùng sai ở đâu a nhỉ, em có đỗi scope của webacl thành CLOUDFRONT để có thể truy cập global rồi. Hay là e phải dùng GetAtt Webacl.Arn a nhỉ?

Trả lời:

Anh cũng không rõ về 2 files mà em tạo ra, vì em không cung cấp nội dung của 2 files ở đây để anh có thể xem. Tuy nhiên a nghĩ là có thể em gặp phải vấn đề với cách em tham chiếu đến WebACL khi sử dụng !Ref. Để giải quyết vấn đề này, em thử  sử dụng hàm Fn::Sub hoặc Fn::GetAtt để trỏ đến ARN của WebACL xem sao nhé.

VD: # Tham chiếu đến WebACL ARN WebACLId: !Sub “arn:aws:wafv2:${AWS::Region}:${AWS::AccountId}:regional/webacl/${WebACLName}/WEBACL-ID

33. Hỏi: Ủa sao lưu trữ không giới hạn lại có giới hạn là 5TB nhỉ?

Trả lời:

Có nghĩa là tổng số lượng objects mà chúng ta có thể lưu trữ trên S3 là không giới hạn “The total volume of data and number of objects you can store in Amazon S3 are unlimited“. Và S3 có cho phép lưu trữ dung lượng S3 Objects lên đến 5 TB em nhé. https://aws.amazon.com/vi/s3/faqs/#:~:text=The%20total%20volume%20of%20data,single%20PUT%20is%205%20GB.

34. Hỏi: Không thấy “Import managed policy” ở bài 13. Em chào thầy, Ở phút 8:27, sau khi click vào “Create inline policy”, màn hình của em không có “Import managed policy” để làm theo như hướng dẫn của thầy. Vậy em có thể chọn “Attach policies” và chọn các Policy giống như trên màn hình mà thầy đã chọn được không ạ?

Trả lời:

Em Click vào Action, và chọn Import policy như hình dưới nhé.

35. Hỏi: Anh cho em hỏi xíu về thiết lập custom matrics để monitor những thứ cần thiết với ạ. Giả sử em có 1 api với method GET được deploy trên API Gateway, các logs về response của api đó được đẩy vào Cloudwatch. Hiện tại thì em đã tạo 1 alarm gắn với cái metrics default là 4xx, cái alarm đó sẽ gửi email về thông qua SNS, nên là các lỗi 4xx đều gửi tất về email. Bây giờ em muốn lọc những cái lỗi thoả mãn điều kiện là param của api phải có thuộc tính là “type_id=null” và httpStatus thuộc lỗi 4xx, nếu lỗi đủ 5 lần trong 1 phút thì mới send email. Còn lại các lỗi khác 4xx thì vẫn gửi như bthg. Anh giúp em case này với ạ ?
Trả lời:

Vấn đề này có thể được giải quyết bằng cách cấu hình CloudWatch Alarm để lọc và gửi thông báo chỉ khi điều kiện cụ thể được đáp ứng. Dưới đây là cách em có thể thực hiện việc này:

1. Tạo CloudWatch Metric Filter:

Bắt đầu bằng việc tạo một Metric Filter trong CloudWatch để lọc log dựa trên yêu cầu của em. Metric Filter này sẽ theo dõi dòng log để kiểm tra xem liệu nó có “type_id=null”  và “httpStatus” thuộc loại lỗi 4xx không(Nhớ đảm bảo là emđã bật việc xuất log tương ứng từ API Gateway trong Settings>Logs/Tracing Tab).

2. Tạo Metric từ Metric Filter:

Sau khi e cần tạo Metric Filter, việc này sẽ tạo ra  một Metric trong CloudWatch, dựa trên dữ liệu được lọc từ các log của e.

Ví dụ Filter pattern: [uuid, level, timestamp, statusCode=%4[0-9]{2}%, type_id=null]

3.Tạo CloudWatch Alarm:

Sau khi e đã tạo ra một Metric cho điều kiện lọc dữ liệu cụ thể của em, e có thể tạo CloudWatch Alarm như sau:

Chọn Metric em đã tạo từ Metric Filter.

Thiết lập ngưỡng 5 lần cho “Threshold”.

Thiết lập khoảng thời gian 1 phút (60 giây) cho “Period”.

Chọn hành động cảnh báo, em có thể chọn gửi thông báo qua SNS khi alarm được cảnh báo.

– Sau Khi em đã hoàn thành các bước trên thì có thể đáp ứng được với yêu cầu của em.

Good luck.

36. Hỏi: làm sao để biết tài khoản AWS có Free tier. Chào Thầy Phương, mình có 1 tài khoản AWS được tạo cách đây vài năm ( mình nhớ lúc đó là loại Free Tier), hiện nay mình muốn dùng lại tài khoản này để thực hành tiếp, nhưng không rõ là còn Free Tier ko, lúc đó mình chỉ tạo ra và để đó không sử dụng. Thầy hướng dẫn giúp cách xác định xem thông tin Free Tier ở đâu trên AWS. Cám ơn?

Trả lời:

– Bạn có thể đăng ký tạo tài khoản, và thao khảo thông tin AWS miễn phí theo Link này nhé: https://aws.amazon.com/vi/free/?trk=947f595b-f07f-42a1-bfc4-acf832730bac&sc_channel=ps&ef_id=Cj0KCQjwj5mpBhDJARIsAOVjBdr2XAtTUOGWhTT9GDGQtOxG76F7AJ1WGC4BNOS1p6Vx-Knvd5JNnpkaAv-aEALw_wcB:G:s&s_kwcid=AL!4422!3!566333972317!p!!g!!t%C3%A0i%20kho%E1%BA%A3n%20aws!15461586425!133325774289&all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc&awsf.Free%20Tier%20Types=*all&awsf.Free%20Tier%20Categories=*all

– Về cơ bản thì sau khi mình đăng ký xong, thì mình có thể sử dụng miễn phí :

750 giờ sử dụng phiên bản t2.micro hoặc t3.micro trên Linux, RHEL hoặc SLES tùy theo khu vực mỗi tháng

750 giờ sử dụng phiên bản t2.micro hoặc t3.micro trên Windows tùy theo khu vực mỗi tháng

Amazon S3 5GB,

750 Giờ sử dụng các Phiên bản db.t2.micro, db.t3.micro và db.t4g.micro một vùng sẵn sàng của Amazon RDS chạy cơ sở dữ liệu MySQL, MariaDB, PostgreSQL mỗi tháng (các công cụ DB được áp dụng)

Và các dịch vụ khác như SNS, VPC, DynamoDB..

– Để học và thực hành AWS, tốt nhất chúng ta chọn Region Us-east-1 để triển khai các tài nguyên nhé, vì Region này có mức chi phí gần như thấp nhất trong tất cả các Region:

– Khi bạn tạo tài khoản AWS xong, bạn sẽ thấy mình có thể tạo EC2 miễn phí Free Tier nhé:

 37. Hỏi: Anh cho em hỏi xíu phần SQS. Theo như bài giảng video em thấy SQS nằm giữa FE và BE. Giả sử em có sử dụng ALB và AutoScaling cho ứng dụng web phía BE của em, vậy thì thg SQS này sẽ nằm ở chỗ nào trong mô hình trên ạ?

Trả lời:

– Amazon Simple Queue Service (SQS) thường được sử dụng để xử lý các tác vụ xử lý nền (background processing) trong mô hình ứng dụng. SQS không nằm trực tiếp trong phần front-end (FE) hoặc back-end (BE) của ứng dụng, mà nó thường được đặt ở giữa FE và BE, tại nơi nó làm nhiệm vụ xử lý các tác vụ không đồng bộ.

– Vậy Với mô hình như em nói là sử dụng Application Load Balancer (ALB) và Auto Scaling cho phía BE, thì SQS thường sẽ nằm ở phần BE của ứng dụng. Cụ thể, khi một yêu cầu từ FE gửi đến để yêu cầu BE xử lý và cần thực hiện các tác vụ xử lý nền (VD như xử lý hàng đợi công việc hoặc gửi email xác nhận, xử lý dữ liệu lớn), BE có thể đặt các thông điệp(messages) vào trong SQS. Sau đó, các máy chủ hoặc workers trong BE có thể lấy các thông điệp từ SQS và thực hiện xử lý không đồng bộ.

– Cách mà SQS (Amazon Simple Queue Service) thường được sử dụng trong mô hình sử dụng Application Load Balancer (ALB) và Auto Scaling cho phía back-end (BE). Cụ thể như sau:

Yêu cầu từ phía trước (FE): Yêu cầu ban đầu từ phía người dùng hoặc ứng dụng client được gửi đến BE thông qua ALB và các máy chủ BE.

Xử lý hàng đợi công việc(jobs): BE có thể đặt các thông điệp (messages) vào trong SQS thay vì thực hiện xử lý công việc (VD như:  xử lý hàng đợi công việc, gửi email xác nhận, xử lý dữ liệu lớn) ngay lập tức. Việc này giúp giảm thời gian xử lý yêu cầu(requets) và đảm bảo là BE sẽ không bị quá tải.

Workers trong BE: Các máy chủ hoặc workers trong BE có thể lấy các thông điệp từ SQS để thực hiện xử lý không đồng bộ. Việc này giúp tạo ra một mô hình xử lý chia tải (load balancing) và có khả năng mở rộng khi có nhiều thông điệp đang chờ xử lý.

Xử lý không đồng bộ: Việc sử dụng SQS cho phép BE xử lý các công việc mà cần thời gian  xử lý lâu hơn mà không cần chờ đợi trong quá trình xử lý yêu cầu chính. Việc này giúp cải thiện hiệu suất và khả năng đáp ứng của ứng dụng.

– Note: workers là các thành phần hoặc tiến trình trong hệ thống đảm nhiệm nhiệm vụ lấy các công việc từ hàng đợi (queue) và thực hiện xử lý chúng

Vậy thì các workers thường sẽ là các server tách biệt hoàn toàn với BE ( chỉ xử lý messages trong queue ) đúng ko ạ? vì nếu các workers đó chính là các server chạy BE luôn thì việc dùng SQS nó hơi thừa đúng ko ạ?

Trả lời:

OK e đã hiểu đúng. Vậy nếu em đã có các máy chủ workers để xử lý các tác vụ không đồng bộ và chúng được quản lý một cách hiệu quả, thì em có thể không cần sử dụng Amazon Simple Queue Service (SQS) trong trường hợp này. SQS thường được sử dụng để quản lý hàng đợi thông điệp và giúp phân phối các tác vụ đến các workers một cách phân tán và bảo đảm tính nhất quán.

Nếu trường hợp em đã có cơ chế quản lý hàng đợi hoặc các giải pháp khác để đảm bảo phân phối công việc(jobs) và không muốn sử dụng SQS, em có thể tiếp tục sử dụng cơ chế đó. Tuy nhiên, nếu em đang tìm kiếm một giải pháp quản lý hàng đợi đám mây và muốn sử dụng dịch vụ đã được quản lý, SQS là một lựa chọn tốt.

Tuy nhiên, nếu hệ thống của em đã triển khai load balancing và auto scaling một cách hiệu quả và không gặp phải vấn đề về tải quá lớn hoặc tính nhất quán dữ liệu, em có thể không cần sử dụng SQS. Quyết định cuối cùng nên dựa trên yêu cầu cụ thể của ứng dụng và kiến trúc hệ thống của em.

Và việc sử dụng Amazon Simple Queue Service (SQS) có thể tiết kiệm chi phí so với việc triển khai và quản lý các máy chủ workers, do nó loại bỏ được chi phí về hạ tầng hệ thống. Nếu tải công việc cao

Nhưng trong trường hợp tải công việc thấp, việc triển khai và duy trì một số máy chủ workers có thể có chi phí thấp hơn.

38. Hỏi: Anh cho em hỏi về phần Auto Scaling với ạ. Giả sử em mà đẩy code mới nhất lên các nơi lưu trữ mã nguồn như Git chẳng hạn, thì cấu hình hay là làm cách nào để Auto Scaling nó biết để nó cập nhật lại các tài nguyên trong EC2 để nó nhận code mới nhất vậy ạ? Anh có thể chia sẻ thêm về luồng hoạt động trong trường hợp này ko ạ?

Trả lời:

-Trong AWS e có thể Sử dụng các dịch vụ như AWS CodePipeline hoặc Jenkins, và có thể xây dựng quy trình Continuous Integration/Continuous Deployment (CI/CD) để tự động xây dựng và triển khai code mới vào môi trường EC2.

–  Ngoài ra Trong quá trình triển khai, e có thể sử dụng dịch vụ AWS CodeDeploy để cập nhật code trên các EC2 trong Auto Scaling Group. CodeDeploy cho phép em tự động triển khai code mới và quản lý việc ngừng(stop), khởi động lại(restart), và cập nhật(update) các EC2.

– Vậy về việc tự động cập nhật code cho các EC2 chạy trong Auto Scaling Group, thì có thể sử dụng phương pháp cấu hình blue/green deployment. Blue/green deployment là một phương pháp triển khai app code cho phép em có thể  triển khai EC2 instance mới của ứng dụng (gọi là “green”) trong khi các EC2 hiện tại (gọi là “blue”) vẫn đang chạy và cung cấp dịch vụ cho người dùng. Sau khi  EC2 mới đã đc triển khai thành công và được kiểm tra, em có thể chuyển dịch vụ hoặc traffic (có thể sử dụng chuyển traffic trong dịch vụ DNS route53 từ EC2 cũ sang EC2 mới)từ EC2 cũ sang EC2 mới một cách an toàn.

Em có thể tham khảo Link này để hiểu về Blue/green deployment nhé: https://aws.amazon.com/vi/blogs/devops/bluegreen-infrastructure-application-deployment-blog/

+ Cái Link tiếng Nhật này CI/CD for EC2(Auto Scaling)e dùng google tool dịch ra tiếng anh là ok: https://blog.serverworks.co.jp/cicd-autoscaling-blue-green-deploy

+ E có thể Xem 1 video trên Youtube về AWS EC2 &  Autoscaling & Load Balancer & CodeDeploy | Deploy Code At Scale để có thể hiểu hơn về AWS CodeDeploy, LINK sau : https://youtu.be/Ekgi2HfnJcw?t=5

– Và e có thể tham khảo thêm về Triển khai CI/CD cho ứng dụng Java với Github, AWS Codebuild, Codepipeline, Route 53, ECR, ECS EC2, hỗ trợ AutoScaling, Blue green deployment, để có thêm kiến thức trong Link: https://nobodycodewithme.com/004-trien-khai-ci-cd-cho-ung-dung-java-voi-github-aws-codebuild-codepipeline-route-53-ecr-ecs-ec2-ho-tro-autoscaling-blue-green-deployment/

39. Hỏi: Phần Edge Location hình như bị nhầm. Mục đích làm giảm thời gian xử lý (giảm độ trễ) 1 request mới đúng chứ không phải làm giảm tốc độ xử lý?

Trả lời:

Thanks bạn vì đã có ý kiến về bài giảng. Đúng, bạn đã hiểu đúng. Edge Location không ảnh hưởng đến tốc độ xử lý trên máy chủ web server. Mục đích chính của Edge Location là giảm thời gian độ trễ (latency) trong việc truy cập dữ liệu từ máy tính người dùng đến các máy chủ web servers. Khi người dùng yêu cầu truy cập dữ liệu, Edge Location sẽ cung cấp dữ liệu từ các điểm gần nhất với người dùng cuối, giúp giảm thời gian mà dữ liệu phải đi qua qua mạng và tới đích. Việc này giúp cải thiện trải nghiệm người dùng bằng cách giảm độ trễ và tăng tốc độ truy cập.

Và trong bài giảng mình cũng nói rõ là Edge Location giúp giảm thời gian độ trễ (latency). Tuy nhiên trong slide thì có để câu: “Giúp tăng tốc độ trong việc xử lý thông tin cho hệ thống AWS”. Có thể gây hiểu lầm chút nhé!

40. Hỏi: e muốn hỏi anh là, tầm mới sử dụng aws đươc vài tháng nhưu em,,, thì có khóa associate nào phù hợp với level của em không ạ?

Trả lời:

Hello em,

– Em nên bắt đầu với khóa AWS Solution Architect Associate của anh, vì khóa này phù hợp cho người mới và sẽ nâng cao dần mức độ chuyên sâu.

Tuy nhiên khóa này cũng cần 1 số kiến thức liên quan đến Linux, nên nếu được em có thể học Linux trước, rồi sau đó học AWS và Azure.

Để xây dựng nền tảng tốt cho công việc, em nên đặt mục tiêu thi các chứng chỉ như LPIC-1 (Linux), AWS Solution Architect Associate, hoặc Azure AZ-104.

Những chứng chỉ này sẽ giúp tăng cơ hội xin việc với mức lương cao hơn nhé  (đây cũng là kinh nghiệm của anh trong quá trình đi xin việc nên anh chia sẻ với em).

– Về cách học thì trong quá trình học thì em cần tuân thủ làm theo chính xác các bước như trong tài liệu và trong các videos hướng dẫn ( ko bỏ qua bất kỳ bước nào),

mà không cần lo lắng về việc phải hiểu chi tiết về bài học. Vì sau khi em đã thực hiện làm thành thạo các bước (Khi đã quen tay), hiểu biết của em sẽ tự nhiên dần dần cải thiện

và em sẽ hiểu rõ hơn về các vấn đề kỹ thuật.

1. Cần làm các bài thực hành Hand-On Labs nhiều lần để để nắm vững kiến thức.

2. Sau khi em đã làm thành thạo các bài demo và thực hành, em có thể thử điều chỉnh làm theo cách làm của riêng em.

Good luck,

Phương.

41. Hỏi:hỏi câu 1 Practice Exam 1. Em chào anh, anh cho em hỏi câu 1 Practice Exam 1.đề bài có hỏi là How many minutes after the first instance is launched will Auto Scaling accept another scaling actMty request? tức là sau bao nhiêu phút sau khi instance đầu tiên khởi động xong thì sẽ nhận request mới. mà instance đầu tiên khởi động ở phút 3, đến phút 10 hết cool down nên em đang hiểu đáp án là 10-3 = 7 phút, chứ không phải đến phút 11 như đáp án. anh giải thích giúp em ạ?

Trả lời:

Hello Thắng,
Đây là câu hỏi thường gây nhầm lẫn trong các bài practice exam AWS. Vậy tính toán như sau:
Instance được launch ở phút 3 Scaling tiếp theo được phép vào phút 13. Vậy thời gian chờ là: 13-3=10 phút.
Vậy tại sao câu trả lời là: 11 phút.
Vì họ tính theo mốc “hoàn thành cooldown” = đầu phút 14, nên lấy: Bắt đầu: phút 3 Và Kết thúc: phút 14, vậy 14-3=11 phút. Vì tính phút bắt đầu là phút thứ 3 và phút cuối là đầu phút 14-> 11 phút. Và đọc kỹ Câu hỏi thì câu hỏi không hỏi về “phút bao nhiêu sẽ được phép scale tiếp”, mà hỏi “bao nhiêu phút SAU khi instance đầu tiên launch” thì mới scale tiếp được
Chúc e học và thi tốt nhé..
Regards,
Phương.

42. Câu 48 trong phần Practice Exam 1. Đáp án là không thể thay đổi Security Groups khi đang chạy EC2. Tuy nhiên, theo như em tìm hiểu ở: docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-security-groups.html thì vẫn cho phép.
“When you launch an instance in a VPC, you must specify a security group that’s created for that VPC. After you launch an instance, you can change its security groups.”

Trả lời:

Câu này là về EC2-Classic em: “EC2-Classic is the original release of Amazon EC2. With this platform, instances run in a single, flat network that is shared with other customers. With EC2-VPC, instances run in a virtual private cloud (VPC) that is logically isolated to only one AWS account“. Do đó câu trả lời là đúng em nhé. E có thể tham khảo về EC2 classic trong link: https://docs.rightscale.com/faq/clouds/aws/What_is_an_EC2-Classic_network.html#:~:text=EC2%2DClassic%20is%20the%20original,to%20only%20one%20AWS%20account.

43. Khi em đăng nhập EC2 bằng key .pem thành công qua Git Bash, nhưng sau khi tắt máy (máy local), hôm sau vào lại thì phải cấu hình lại key hay làm lại từ đầu. Có cách nào vào lại nhanh hơn không?

Chào em, đây là câu hỏi rất hay và cũng là vấn đề nhiều bạn mới gặp phải. Anh sẽ giải thích chi tiết nhé:

1. Key .pem không cần cấu hình lại nếu em đã lưu đúng Key .pem dùng để xác thực khi SSH vào EC2.

Một khi đã có file .pem và quyền truy cập phù hợp, em không cần cấu hình lại mỗi lần login.

Em chỉ cần chạy lại lệnh SSH như sau:

ssh -i “ten_file.pem” ec2-user@<Public-IP>

Lưu ý: thay ten_file.pem và Public-IP theo thông tin của em.

2. Trường hợp mất kết nối hoặc tắt Git Bash thì sao?

Khi em tắt máy local hoặc tắt Git Bash, thì máy EC2 trên AWS vẫn chạy bình thường, trừ khi:

Em stop hoặc terminate instance từ AWS Console.

Instance dùng Elastic IP hay Dynamic IP: Nếu không gán Elastic IP (Là 1 kiểu thuê IP public tĩnh phải trả tiền cho IP này), mỗi lần EC2 restart sẽ có IP mới → em cần sửa lại IP trong lệnh SSH.

3. Làm thế nào để đăng nhập vào EC2 instance nhanh hơn?

Có cách giúp em đăng nhập nhanh mà không phải gõ lại lệnh dài mỗi lần login đó là tạo file script SSH.

Em tạo file connect.sh trong Git Bash với nội dung như sau:

#!/bin/bash

ssh -i “/path/to/key.pem” ec2-user@<Public-IP>

Sau đó chỉ cần chạy:  ./connect.sh

Tóm lại:

+ Không cần cấu hình lại key .pem mỗi lần nếu đã có sẵn file.

+ EC2 chắc chắn không bị mất đi trừ khi bị stop hoặc terminate.

+ Nên dùng Elastic IP và alias/script để đăng nhập nhanh hơn.

Chúc em học tốt và thành công nhé!

44. Trường hợp tạo 1 bản sao S3 backup đích thì hệ thống có tính thêm tiền không thầy ơi? Trường hợp Thư mục nguồn và đích mình có thể chọn chung 1 Region có được không thầy ơi? hay bắt buộc phải chọn thư mục đích khác Region và tại sao phải thế? xin vui lòng giải thích?

Trả lời:

Có thể chọn cùng Region, không bắt buộc phải khác Region em nhé.

· AWS hỗ trợ cả:

Same-Region Replication (SRR) – Replication trong cùng một region.

Cross-Region Replication (CRR) – Replication sang region khác.

1. Same-Region Replication (SRR):

Sao chép dữ liệu từ một bucket này sang một bucket khác trong cùng một Region.

Ví dụ: từ bucket-a sang bucket-b, đều ở ap-southeast-1 (Singapore).

  • Mục đích SRR:

Phân quyền truy cập (khách hàng khác nhau dùng bucket khác nhau).

Phân tách môi trường PROD và DEV.

Giữ bản sao backup riêng biệt trong cùng region nhưng tách biệt về bảo mật.

  • Ưu điểm:

Không bị tính phí transfer giữa region.

Chi phí thấp hơn CRR.

2. Cross-Region Replication (CRR):

Sao chép dữ liệu sang bucket tại một Region khác.

Ví dụ: từ Singapore sang Tokyo.

 – Mục đích CRR:

Disaster Recovery (DR): nếu cả region Singapore gặp sự cố, dữ liệu vẫn còn ở Tokyo.

Tuân thủ quy định pháp lý hoặc chính sách dữ liệu (ví dụ dữ liệu phải nằm ở quốc gia cụ thể).

Tối ưu độ trễ truy cập nếu người dùng ở nhiều khu vực khác nhau.

  – Nhược điểm:

Tính phí truyền dữ liệu liên region (data transfer) – có thể chi phí truyền dữ liệu cao.

✅ Kết luận

  • Không bắt buộc phải khác Region.

  • Nếu mục tiêu chỉ là backup nội bộ, tách quyền hoặc môi trường, thì nên dùng SRR cho tiết kiệm chi phí.

  • Nếu cần Disaster Recovery thực sự hoặc tuân thủ bảo mật cao hơn, hãy chọn CRR sang Region khác.

45. Trong bài trước khi Thầy tạo máy EC2 thầy Dùng GIT Bash để login vào. Cho em hỏi trong các bài đầu tiên thầy Dùng GIT để login vào máy EC2, trong bài này mình thực hành trên web? vậy có sự khác nhau như thế nào ạ?

Trả lời:

Tôi dùng GIT để login vào máy EC2 để trình bày cho các bạn biết cách sử dụng key pair aws từ PC của mình và SSH vào EC2. Và tôi login vào EC2 trên Web cũng là để cho các bạn biết cách login vào EC2 trên Web, và cách Login vào EC2 trên web thì nó đơn giản và tiện hơn cho chúng ta.

46. Nếu delete data trong Bucket nguồn? Cho em hỏi khi đã cấu hình Backup Relication xong, việc xóa data trong Bucket nguồn có ảnh hưởng tới Bucket đích không? nếu có xin cho giải pháp khắc phục?

Trả lời:

Không bị mất dữ liệu em nhé, mặc định xóa dữ liệu ở bucket nguồn không ảnh hưởng đến bucket đích, trừ khi em kích hoạt tính năng “delete marker replication” trong cấu hình link: https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-marker-replication.html .

47. Trường hợp tạo 1 bản sao S3 backup đích thì hệ thống có tính thêm tiền không thầy ơi?

Trả lời:

, khi em tạo một bản sao backup đích (replica) của một bucket S3, AWS sẽ tính thêm chi phí (VD: khoảng $0.0125/GB mỗi tháng cho S3 Standard‑Infrequent Access (IA)) cụ thể là các khoản phí sau:

1. Chi phí lưu trữ tại vùng đích

Khi em sao chép dữ liệu từ bucket nguồn sang bucket đích (có thể là ở cùng region hoặc khác region), AWS sẽ tính phí lưu trữ riêng biệt cho bucket đích.

Ví dụ: Nếu em sao chép từ S3 Standard ở ap-southeast-1 sang S3 Standard ở us-east-1, thì mỗi bên đều bị tính phí lưu trữ như nhau.

2. Chi phí truyền dữ liệu (data transfer)

Nếu bucket đích trong một region khác (Cross-Region Replication – CRR) với bucket nguồn, thì AWS sẽ tính phí truyền dữ liệu giữa các region. Ví dụ: truyền dữ liệu từ Singapore sang Hoa Kỳ sẽ bị tính thêm chi phí outbound từ Singapore.

Nếu bucket đích trong cùng một region (Same-Region Replication – SRR) với bucket nguồn thì không tính phí truyền dữ liệu, nhưng vẫn tính chi phí lưu trữ như bình thường.

3. Chi phí PUT request

Mỗi đối tượng được sao chép sang bucket đích sẽ tạo ra một PUT request, và AWS tính phí cho từng request này.

48. Hỏi đáp về Read Preplicas: Thưa thầy cho em hỏi trưởng hơp tạo Read Replicas có tốn tiền không?việc người quản trị có thể tạo được bao nhiêu Read Replicas? và việc Backup nó như thế nào?

Trả lời:

Chào em, câu hỏi này liên quan đến Amazon RDS (hoặc Aurora) và tính năng Read Replica, vậy tôi giải thích từng ý một nhé:

1. Tạo Read Replica có tốn tiền không?

– Có tốn phí, vì khi tạo Read Replica, AWS sẽ tạo ra một instance RDS mới độc lập để xử lý các truy vấn đọc (read) dữ liệu từ instance này.

Phí sẽ bao gồm:

Chi phí compute (giống như instance RDS thông thường, tính theo loại server, vCPU, RAM)

    + Chi phí storage (theo dung lượng lưu trữ dữ liệu)

    + Chi phí I/O, backup cho Replica

    + Chi phí truyền dữ liệu (nếu Replica khác Region)

– Nếu Replica ở cùng Region với DB gốc thì không mất phí Data Transfer nội region, nhưng vẫn mất phí vận hành instance.

– Ví dụ: Nếu DB gốc là db.m5.large thì Replica cũng sẽ tính tiền giống như một instance db.m5.large.

2. Người quản trị có thể tạo được bao nhiêu Read Replicas?

– Số lượng Read Replicas tối đa phụ thuộc vào engine:

   + Với RDS MySQL, MariaDB, PostgreSQL trên RDS: Tối đa được tạo 15 Read Replicas cho mỗi DB gốc.

+ Với Aurora: Có thể tạo tới 15 Aurora Replicas trong cùng cluster.

– Nếu muốn hơn giới hạn mặc định, có thể gửi yêu cầu tăng hạn mức Số lượng Read Replicas cho AWS Support, nhưng  hiếm khi cần.

3. Backup Read Replica như thế nào?

– Thông thường, backup dữ liệu được thực hiện trên DB gốc, vì Replica chỉ là bản sao để đọc dữ liệu.

– Nếu em muốn backup từ Replica:

+ Trên RDS MySQL/PostgreSQL: Có thể promote Replica thành một DB độc lập, sau đó bật tính năng backup.

+ Trên Aurora: Replica nằm trong cùng cluster nên backup áp dụng cho toàn cluster, không cần cấu hình riêng.

Lưu ý:
+ Nếu mục đích chính là tăng khả năng chịu tải đọc (read scalability) dữ liệu từ các ứng dụng, thì chúng ta dùng Read Replica là hợp lý.
+ Nếu mục đích chính là backup, thì không nên dùng Replica thay backup — hãy dùng tính năng Automated Backup hoặc Manual Snapshot của AWS.

49. Tại sao tài khoản User IAM không tạo được RDS : Thưa thầy tại sao mình không dùng user IAM để tạo RDS mà phải dùng User root để tạo? xin thầy giải thích?

Trả lời:

Không bắt buộc phải dùng root để tạo RDS em nhé, và AWS còn khuyến cáo không dùng root cho công việc hàng ngày vì rủi ro bảo mật.

Chỉ cần IAM user hoặc IAM role có đủ quyền liên quan tới RDS, VPC, IAM PassRole, KMS (nếu mã hóa) là tạo được.

Root chỉ dùng cho các tác vụ như cấp tài khoản như thanh toán, đóng account, bật MFA…

Để tạo một IAM user với quyền toàn quyền quản lý RDS, em chỉ cần:

1. Tạo IAM user (qua Console, CLI, hoặc API)

2. Gán policy quản lý có tên: AmazonRDSFullAccess cho user đó

Đây là cách nhanh – an toàn – chuẩn AWS để cấp quyền cho 1 user có quyền quản trị dịch vụ AWS RDS đầy đủ.

50. Về Cách Lưu Trữ Database: Trường hợp 2 Data base cùng lưu Az bị lỗi thì phải làm sao ạ, cách sao lưu như thế nào để phục hồi thảm hoạ ví dự data ngày 15 bị hư thì Máy A hư sẽ syn qua May B thì làm sao ạ? vì vậy em có thể backup ra từng ngày hay sao? nếu backup từng ngày thì cách lưu 2 máy A và B sẽ không có tác dụng? xin cho giải pháp?

Trả lời:

1. Vì sao 2 DB cùng AZ bị lỗi là nguy hiểm
Nếu cả Primary và Standby (Multi-AZ) đều nằm trong cùng Availability Zone, thì khi AZ đó gặp sự cố (mất điện, mất mạng, lỗi phần cứng diện rộng), cả 2 DB sẽ cùng bị ảnh hưởng , chúng ta có thể suy ra là DB không còn khả năng failover.
Thực tế Multi-AZ của RDS luôn đặt bản sao standby ở AZ khác để tránh rủi ro này, nên tình huống “2 DB cùng AZ” chỉ xảy ra nếu mình tự cài DB trên EC2 và cấu hình sai kiến trúc.

2. Giải pháp Backup để phục hồi thảm hoạ (DR)

– Tự động sao lưu hàng ngày (Automated Backups):
AWS RDS hỗ trợ backup hàng ngày + lưu giữ từ 1–35 ngày. Nếu DB ngày 15 bị hỏng, có thể restore về snapshot của ngày 14 hoặc trước đó. Dùng tùy chọn Point-in-Time Recovery (PITR) để khôi phục tới thời điểm ngay trước khi lỗi xảy ra.

– Snapshot thủ công (Manual Snapshot):
Có thể tạo snapshot bất kỳ lúc nào (trước khi nâng cấp, deploy…) và snapshot này không bị xóa khi DB bị delete.

– Cross-Region Snapshot Copy:
Để chống rủi ro nếu cả Region gặp sự cố, em có thể copy snapshot sang region khác hoặc lưu trữ offline.

3. Về việc “Máy A hư sẽ sync qua Máy B”

– Nếu dùng replication theo thời gian thực (Multi-AZ, Read Replica), khi DB instance A hỏng dữ liệu mà đã sync sang DB instance B thì cả B cũng hỏng → đây là replication dữ liệu DB không phải là backup DB data.

– Backup theo ngày không bị ảnh hưởng bởi data replication, vì snapshot là dữ liệu “đóng băng” tại thời điểm backup, không phải là sync tiếp dữ liệu hỏng.

– Về Replication (máy A và B) và Backup là hai mục đích khác nhau:

· Replication (A ↔ B): đảm bảo tính sẵn sàng (HA). Nếu A hỏng phần cứng hoặc AZ down → B lên thay ngay. Nhưng replication không bảo vệ khỏi lỗi logic (xoá nhầm, ghi sai dữ liệu), vì lỗi đó sẽ sync data ngay lập tức.

· Backup theo ngày: đảm bảo tính phục hồi (DR). Nếu ngày 15 dữ liệu hỏng → có thể khôi phục lại snapshot ngày 14 hoặc   trước đó. Lúc này replication không giúp gì, chỉ backup mới cứu được.

4. Trong thực tế công việc

Luôn bật Multi-AZ để chống lỗi phần cứng + backup hàng ngày để chống lỗi dữ liệu.

Nếu yêu cầu DR cao → thêm Cross-Region Backup hoặc Read Replica ở region khác.

Luôn kiểm tra RPO (Recovery Point Objective) và RTO (Recovery Time Objective) để thiết kế phù hợp.

51. MongoDB: Chào Thầy cho em hỏi?em đã buil 1 Mongodb trên máy Local Thây vì em import data từ máy Local lên AWS thì em Application Migration cả cụm có được không ạ?

Trả lời:

Hi em,

AWS Application Migration Service (MGN) là dịch vụ để dịch chuyển nguyên toàn bộ server, không phù hợp để migrate cụm MongoDB. Vậy nếu em muốn chuyển dữ liệu MongoDB từ máy local lên AWS, em nên dùng AWS DMS (Database Migration Service) để chuyển dữ liệu hoặc cấu hình đồng bộ. Nếu target là MongoDB Atlas, có thể dùng Atlas Live Migration Service để tiếp tục đồng bộ và giảm downtime nhé.

Em có thể tham khảo tài liệu “Using MongoDB as a source for AWS DMS“:  https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.MongoDB.html

53. Cho em hỏi máy Data server thông qua 1 Nat gateways để ra internet vậy bên ngoài có thể ping được ra internet vậy bên ngoài có ping vào máy đó được không?

Trả lời:

Không em nhé!. NAT Gateway chỉ cho phép EC2 trong private subnet đi ra ngoài Internet, chứ không cho phép kết nối từ Internet vào trong. Vì vậy bên ngoài không thể ping hay truy cập trực tiếp vào Data server qua NAT Gateway được.

Muốn bên ngoài truy cập thì phải  truy cập thông qua Bastion Host, VPN…hay có thể truy cập từ một EC2 trong public subnet cùng VPC với private subnet nhé.

54. Em có 1 con Data base kết nối với một con Primary web server, trường hợp Failover thêm 2 con nữa thì có cần tạo thêm vài server data base không? hay chỉ cần tạo kết nối các server Failover tới 1 con data base? xin thầy giải thích giúp trường hợp này?

Trả lời:

Chỉ cần một database (RDS) thôi em . Các web server (primary + failover) đều kết nối chung vào database đó, không cần tạo thêm database khác. RDS đã có cơ chế Multi-AZ để tự động failover cho DB nếu cần.

Và cần cấu hình bật tính năng Multi-AZ cho RDS, để AWS tự tạo một bản sao standby trong AZ khác và tự động failover khi cần em nhé.

55. Dear Thầy, trong bài tạo loadbalancer thấy thầy chỉ tạo service mà không thấy tạo ingress. Vậy khi nào ingress được tạo vậy thầy. Thầy có thể giải thích rõ thêm về điểm này không ạ?

Trả lời:

Hi em,

– Service type=LoadBalancer: khi tạo Service kiểu này, Kubernetes (qua cloud-provider) sẽ tạo một Load Balancer riêng và gán public IP/endpoint cho Service đó — không sinh Ingress.

– Ingress chỉ xuất hiện khi: Chúng ta tạo object Ingress  trong cluster có Ingress Controller (ví dụ: Nginx Ingress Controller, AWS ALB Ingress Controller). Controller này mới đi xử lý Ingress và (trên cloud) thường tự tạo 1 LB cho toàn bộ Ingress.

– Khi nào dùng Ingress? Khi chúng ta muốn gom nhiều service qua một điểm vào (một LB) và routing theo host/path (HTTP/HTTPS). Nếu chỉ expose 1 service nhanh gọn, dùng LoadBalancer service là đủ em nhé.

56. Hi thầy, em làm bài 17, Khi tạo policy S3RestrictedPolicy xong thì Access Level là Limitted, không như trong video là full access. Nên không truy cập được. Có sai xót gì ở đây không thầy?

Trả lời:

Em khi click vào nút Create policy em chọn service S3, sau đó tick chọn All S3 actions (s3:*), thì em sẽ thấy Access level chắc chắn là full access như trong Video (có nghĩa là Nếu trong IAM Policy em chọn Service: S3 và tick All S3 actions (s3:*) thì theo logic nó phải là Full access ). Lỗi ở đây có thể do account em đang sử dụng không có quyền admin, vậy em cần đảm bảo tài khoản aws đang sử dụng có quyền admin quản trị tất cả các tài nguyên để có quyền tạo IAM Policy nhé.

57. Cho em hỏi máy Data server thông qua 1 Nat gateways để ra internet vậy bên ngoài có thể ping được ra internet vậy bên ngoài có ping vào máy đó được không?

Không em nhé!. NAT Gateway chỉ cho phép EC2 trong private subnet đi ra ngoài Internet, chứ không cho phép kết nối từ Internet vào trong. Vì vậy bên ngoài không thể ping hay truy cập trực tiếp vào Data server qua NAT Gateway được.

Muốn bên ngoài truy cập thì phải  truy cập thông qua Bastion Host, VPN…hay có thể truy cập từ một EC2 trong public subnet cùng VPC với private subnet nhé.

58. Combine 2 phương pháp multi-AZ và Read Replica: Mình có thể kết hợp 2 phương pháp để đảm bảo tính toàn vẹn và đọc data không thầy?

Trả lời:

Em hoàn toàn có thể kết hợp Multi-AZ + Read Replica, và đó cũng là mô hình rất phổ biến: dùng Multi-AZ để đảm bảo tính toàn vẹn dữ liệu & HA, và dùng Read Replica để scale cho các tác vụ đọc dữ liệu của apps từ database nhé:

– Có thể và nên kết hợp:

  • Thiết lập instance Multi-AZ làm primary (writer) để bảo toàn dữ liệu & failover.
  • Tạo Read Replica(s) từ primary để xử lý các truy vấn đọc nặng.
  • Ứng dụng viết (writes) cần được truy cập qua writer endpoint.
  • Ứng dụng đọc (reads) cần được truy cập qua reader endpoints (replicas) nếu có thể chấp nhận độ trễ nhỏ trong đồng bộ dữ liệu , do dữ liệu trên replica có thể không hoàn toàn update đồng bộ dữ liệu lập tức.

59. Hi Thầy, Hiện tại em có đăng ký gói free nhưng mà không biết vì sao sử dụng thời gian thực hành theo bài EC2 và VPC xong. GIờ AWS khóa luôn?

Trả lời:

Hello em,

Theo anh biết thì có 1 số nguyên nhân sau làm account bị khóa, mặc dù mặc dù em chỉ sử dụng gói Free Tier và thực hành một vài dịch vụ như EC2 và VPC. Vậy em cần kiểm tra từng mục để xác định nguyên nhân và cách giải quyết nhé:

1. Nếu em dùng EC2 hoặc sử dụng dịch vụ mà vượt mức miễn phí (VD em quên không xóa hoặc tắt EC2 sau khi đã lab xong. Lưu ý là sử dụng EIP (IP public tĩnh) cũng bị tính phí nên sử dụng xong hãy xóa đi nhé), thì AWS sẽ tính phí. Nếu thông tin thanh toán không hợp lệ hoặc có dư nợ chưa trả thì tài khoản có thể bị suspend.

2. Nếu AWS phát hiện hoạt động bất thường (ví dụ mining crypto, DDoS, tài khoản bị tấn công) có thể khóa tài khoản để bảo vệ.

3. Với tài khoản Free Tier, nếu thông tin thẻ tín dụng, xác minh danh tính không rõ ràng, AWS có thể tạm dừng.

– Vậy em cần kiểm tra email từ AWS: Hãy tìm trong mail (và sạch thư spam) xem AWS đã gửi lý do khóa tài khoản chưa.

– Kiểm tra Free Tier usage: Nếu em chỉ làm lab nhỏ nhưng có EC2 instance bật liên tục, hoặc dịch vụ dùng IP public/ EBS lớn , như vậy có thể vượt mức miễn phí.

– Liên hệ AWS Support: Nếu em không rõ nguyên nhân hoặc đã thanh toán mà tài khoản vẫn bị khóa, em vào trang AWS mở case với “Billing & Account Support” để yêu cầu mở tài khoản lại nhé.

– Cuối cùng em cần lưu ý các vấn đề sau để tránh lặp lại lỗi:

  • Dừng hoặc terminate các instance/lưu trữ khi không dùng.
  • Bật billing alerts (như cảnh báo vượt Free Tier).
  • Sử dụng IAM User thay vì root để thực hành; bật MFA (em xem bài giảng bật MFA trong khóa học để biết cách làm nhé).
  • Xóa hoặc stop tất cả các tài nguyên sau khi đã lab xong.

Chúc em học tốt và thành công nhé!

60. Thực hành tạo và Assume Roles trong AWS-Phần 3. e làm theo hướng dẫn nhưng ko upload file dc ở user dev-user01.

{

“Version”: “2012-10-17”,

“Statement”: [

{

“Sid”: “VisualEditor0”,

“Effect”: “Allow”,

“Action”: [

“s3:ListAccessPointsForObjectLambda”,

“s3:GetAccessPoint”,

“s3:PutAccountPublicAccessBlock”,

“s3:ListAccessPoints”,

“s3:CreateStorageLensGroup”,

“s3:ListJobs”,

“s3:PutStorageLensConfiguration”,

“s3:ListMultiRegionAccessPoints”,

“s3:ListStorageLensGroups”,

“s3:ListStorageLensConfigurations”,

“s3:GetAccountPublicAccessBlock”,

“s3:ListAllMyBuckets”,

“s3:ListAccessGrantsInstances”,

“s3:PutAccessPointPublicAccessBlock”,

“s3:CreateJob”

],

“Resource”: “*”

},

{

“Sid”: “VisualEditor1”,

“Effect”: “Allow”,

“Action”: “s3:*”,

“Resource”: [

“arn:aws:s3::138383657684:accesspoint/*”,

“arn:aws:s3:*:138383657684:accesspoint/*/object/*”

]

},

{

“Sid”: “VisualEditor2”,

“Effect”: “Allow”,

“Action”: “s3:*”,

“Resource”: [

“arn:aws:s3-object-lambda:*:138383657684:accesspoint/*”,

“arn:aws:s3:::appconfig01tungpvkg”,

“arn:aws:s3:*:138383657684:access-grants/default”,

“arn:aws:s3:::appconfig01tungpvkg /appconfig01tungpvkg “,

“arn:aws:s3:::appconfig02tungpvkg /appconfig02tungpvkg “,

“arn:aws:s3:*:138383657684:accesspoint/*”,

“arn:aws:s3:us-west-2:138383657684:async-request/mrap/*/*”,

“arn:aws:s3:*:138383657684:job/*”,

“arn:aws:s3:*:138383657684:access-grants/default/grant/*”,

“arn:aws:s3:*:138383657684:access-grants/default/location/*”,

“arn:aws:s3:*:138383657684:storage-lens-group/*”,

“arn:aws:s3:*:138383657684:storage-lens/*”

]

}

]

}

Trả lời:

Hello Tùng,

Qua cấu hình em gửi, anh thấy em đã cấu hình không đúng format ở bước tạo S3RestrictedPolicy IAM Policy.

Trong S3, Bucket và Object là hai tài nguyên khác nhau, chỉ cần sai 1 ký tự hoặc 1 dấu cách là AWS sẽ trả về AccessDenied ngay.

– Trong bước cấu hình Resource bucket name, em chỉ cần:

+ Copy đúng tên bucket trong S3

+ Paste vào trường Resource bucket name tên bucket mà em vừa mới copied trong S3

+ Sau đó Click Add ARNs là đủ, không cần phải làm gì khác.

– Cụ thể, anh thấy em đang cấu hình sai chuẩn format ở dòng cấu hình này:

“arn:aws:s3:::appconfig01tungpvkg /appconfig01tungpvkg”,

“arn:aws:s3:::appconfig02tungpvkg /appconfig02tungpvkg”

– Cấu hình này sai vì:

+ Có dấu cách thừa

+ Trộn sai khái niệm bucket ARN và object path

+ AWS không chấp nhận kiểu bucket / bucket

– Cấu hình đúng chuẩn phải là:

“arn:aws:s3:::appconfig01tungpvkg”,

“arn:aws:s3:::appconfig02tungpvkg”

Vậy em kiểm tra lại bước này và cấu hình lại là upload files vào S3 Bucket sẽ thành công nhé.

61. dạ Thầy, trong video nói S3 thuộc global , nhưng hiện tại e thấy nhiều regions , vậy là AWS có thay đổi hay sao ạ

Trả lời:

Câu nói S3 là global trong video bài học là đúng về mặt quản lý và kiến trúc của AWS.

Nhưng về mặt lưu trữ dữ liệu, thì mỗi bucket S3 vẫn nằm trong một Region cụ thể.S3 chỉ ‘global’ ở chỗ: Tên bucket là toàn cầu, nên khi đặt tên bucket phải là duy nhất trên global giống như tên của một domain cho một website em nhé.

62. Dear Thầy, e thử SSH bằng phần mềm Putty thì tới bước login là bó tay, nhờ thầy hướng dẫn e truy cập bằng putty ạ?

Trả lời:

Hello Tùng,

EC2 không cho SSH bằng password. Khi em login mà nó hỏi password, nghĩa là SSH key không được chấp nhận, và trong trường hợp này là do em thiếu username ec2-user khi kết nối vào EC2.

Vậy Trong hộp Host Name (or IP address) của PUTTY, Em cần nhập “ec2-user@your_public_DNS” (Ví dụ: ec2-user@ec2-54-91-26-67.compute-1.amazonaws.com). Nhớ là phải có tên user ví dụ trường hợp này là ec2-user, sau đó Click vào Open và login được vào EC2 Instance nhé.

Em đọc kỹ “Hướng dẫn sử dụng Putty để truy cập vào Linux EC2 Instance” trên blog của anh nhé: Hướng dẫn sử dụng Putty để truy cập vào Linux EC2 Instance – Luu Ho Phuong Blog

63. Nội dung S3 có dung lượng tối đa 5TB có vẻ conflict với thông tin Lưu trữ không giới hạn của S3

Ở Slide 28, 4 phút 13s về nội dung S3 có dung lượng tối đa 5TB là chưa chính xác.
– S3 cung cấp không gian lưu trữ không giới hạn -> việc có dung lượng tối đa là không đúng.

– Thông tin dung lượng tối đa 5TB là cho 1 lần put đơn lẻ (thông tin thêm: AWS khuyến nghị với file trên 100MB thì sử dụng trình Miltipart Upload để có thể đạt được giới hạn cho phép). Thầy cập nhật lại nội dung cho các bạn học sinh khác không bị confused ạ.

Trả lời:

Hello em,

Cảm ơn em đã góp ý rất kỹ, và em nhận xét như vậy là đúng về mặt kỹ thuật.Vậy anh làm rõ lại để em (và các bạn khác) không bị hiểu nhầm nhé:

1. S3 có “không giới hạn” hay tối đa 5TB?

Cả hai thông tin không mâu thuẫn, vì cả 2 cái này nói về 2 khái niệm khác nhau:

–  Thứ nhất: S3 cung cấp không gian lưu trữ gần như không giới hạn, có nghĩa là tổng dung lượng bucket có thể lưu trữ là không giới hạn (theo thiết kế dịch vụ).

– Thứ 2: 5TB là dung lượng lưu trữ tối đa của một object, vì vậy mỗi một object trong S3 có thể có dung lượng đạt mức tối đa là 5TB.

2. Về phần Put Object, Em nói đúng: 5TB là giới hạn cho một object.

AWS khuyến nghị dùng Multipart Upload cho file lớn (thường từ >100MB trở lên), Multipart Upload cho phép upload nhiều phần của file để đạt đến giới hạn 5TB

3. Vậy Slide có sai không?

Nội dung trong slide là : “S3 có dung lượng tối đa 5TB”. Vậy cách diễn đạt này dễ gây hiểu nhầm là tổng dung lượng lưu trữ dữ liệu trên S3 chỉ có 5TB.

Cách nói đúng phải là: “Mỗi object trong S3 có dung lượng tối đa cho phép là 5TB, còn tổng dung lượng lưu trữ dữ liệu cho S3 là gần như không giới hạn.”

Vậy anh sẽ sẽ chỉnh lại slide để tránh gây nhầm lẫn cho các bạn khác!

Cảm ơn em đã học rất kỹ.