Servisphere

Module 2 · SAA-C03

IAM và quản lý truy cập

User, group, role, policy, cách AWS đánh giá quyền, quyền tạm thời qua STS, nhiều tài khoản với Organizations và IAM Identity Center.

  • DomainThiết kế bảo mật
  • 9 sơ đồ
  • 10 tình huống
  • 9 dịch vụ

5 phút phải nhớ

  1. Mặc định mọi request đều bị từ chối (implicit deny); cần ít nhất một Allow phù hợp, và một Deny tường minh ở bất kỳ policy nào thắng mọi Allow.Đọc câu hỏi quyền: tìm Deny trước, rồi tới SCP, rồi resource / identity policy, permissions boundary, session policy.
  2. User = danh tính lâu dài (mật khẩu, access key); role = danh tính được "mượn" bằng thông tin tạm thời từ STS.AWS khuyên dùng role và federation thay cho access key lâu dài; ứng dụng trên EC2 / Lambda / ECS luôn dùng role.
  3. EC2 nhận quyền qua instance profile (role gắn vào máy); SDK tự lấy thông tin tạm thời từ instance metadata.Đáp án "lưu access key trong file cấu hình trên EC2" luôn sai.
  4. Role có trust policy (ai được assume) và permission policy (assume xong làm được gì).Cho tài khoản B vào tài khoản A: tạo role ở A tin tưởng B, người ở B cần quyền sts:AssumeRole tới role đó. Bên thứ ba thì thêm External ID.
  5. Policy dựa trên tài nguyên (bucket policy, key policy, queue policy…) có trường Principal, cho phép truy cập khác tài khoản không cần assume role.Khác tài khoản với resource policy: người gọi giữ nguyên quyền của mình; với role: người gọi đổi sang quyền của role.
  6. SCP của Organizations đặt trần quyền cho user / role ở tài khoản thành viên, không cấp quyền nào; không áp dụng cho tài khoản quản lý và service-linked role."Cấm mọi tài khoản tắt CloudTrail / dùng Region ngoài danh sách" → SCP Deny gắn vào OU hoặc root.
  7. Permissions boundary đặt trần quyền cho một user / role cụ thể; quyền thật = giao của identity policy và boundary.Cho developer tự tạo role nhưng không leo thang quyền: bắt buộc role mới phải gắn boundary.
  8. IAM Identity Center: đăng nhập một lần vào nhiều tài khoản trong Organizations, gán quyền bằng permission set, nối được với IdP ngoài (Entra ID, Okta…).Nhân viên dùng tài khoản công ty để vào nhiều tài khoản AWS: Identity Center là đáp án hiện đại, thay cho tạo IAM user ở từng tài khoản.
  9. Cognito user pool là thư mục người dùng (đăng ký, đăng nhập, MFA, mạng xã hội); identity pool đổi danh tính đó lấy thông tin tạm thời AWS.Ứng dụng di động / web cho khách hàng truy cập S3, DynamoDB trực tiếp: Cognito, không phải IAM user.
  10. Bảo vệ root: bật MFA, không tạo access key, chỉ dùng cho vài việc bắt buộc.Việc hằng ngày dùng user / role có quyền tối thiểu; root chỉ cho các tác vụ như đổi gói support, đóng tài khoản.
  11. Thông tin tạm thời của role sống 1–12 giờ tuỳ cấu hình; role chaining (từ role này assume role khác) giới hạn 1 giờ.Phiên bị ngắt sau 1 giờ dù đã đặt 12 giờ: thường là do role chaining.
  12. IAM Access Analyzer tìm tài nguyên đang chia sẻ ra ngoài vùng tin cậy (tài khoản / tổ chức) và kiểm tra policy trước khi áp dụng."Tìm bucket, key, role đang cho bên ngoài truy cập" → Access Analyzer.
  13. Điều kiện (Condition) trong policy: aws:SourceIp, aws:MultiFactorAuthPresent, aws:RequestedRegion, aws:PrincipalOrgID, tag (ABAC)…Cho phép theo tag (ABAC) giúp ít policy hơn khi số dự án tăng; aws:PrincipalOrgID chia sẻ cho cả tổ chức mà không liệt kê từng tài khoản.

Sơ đồ

AWS đánh giá một request thế nào

AWS đánh giá một request thế nào1không2có3có4có4có4có12không3RequestDeny tường minh?SCP / RCP cho phép?Identity / resourcepolicy cho phép?Boundary cho phép?Session policy?ALLOWDENY
Gặp Deny tường minh ở bất kỳ đâu là từ chối ngay. Sau đó mỗi lớp rào chắn (SCP, boundary, session policy) phải cho phép, và phải có ít nhất một Allow từ identity hoặc resource policy.

Từng bước

  1. Có Deny ở bất kỳ policy nào áp dụng → DENY ngay.
  2. SCP / RCP của tổ chức không cho phép → DENY.
  3. Không có Allow nào từ identity hay resource policy → DENY (implicit deny).
  4. Permissions boundary và session policy (nếu có) cũng phải cho phép → ALLOW.

EC2 gọi S3 bằng role, không cần access key

EC2 gọi S3 bằng role, không cần access keyVPCgắn vào máy1lấy credentials2gọi API bằng credentials tạm3App trên EC2Instance metadatathông tin tạm thờiRole (instance profile)s3:GetObjectS3
Role gắn vào EC2 qua instance profile. SDK lấy thông tin tạm thời từ instance metadata; AWS tự làm mới trước khi hết hạn.

Từng bước

  1. Role gắn vào EC2 qua instance profile; quyền nằm trong permission policy của role.
  2. SDK tự đọc thông tin tạm thời từ instance metadata (IMDSv2).
  3. Gọi S3 bằng thông tin tạm thời; không có khoá lâu dài nào trên máy.

Người ở tài khoản B dùng role ở tài khoản A

Người ở tài khoản B dùng role ở tài khoản AUser ở tài khoản BSTSRole ở tài khoản AS3 ở tài khoản A1. AssumeRole (ARN role, External ID nếu có)2. Trust policy có cho tài khoản B?3. Thông tin tạm thời của role4. Gọi API bằng quyền của role
Cần hai nửa: trust policy của role ở A tin tài khoản B, và người ở B có quyền sts:AssumeRole tới role đó.

Permissions boundary: quyền thật là phần giao

Permissions boundary: quyền thật là phần giaoIdentity policy cho phépPermissions boundary cho phépiam:CreateUserchỉ identity: bị chặns3:GetObjectcả hai: được phépec2:TerminateInstanceschỉ boundary: không có
Identity policy cấp quyền, boundary đặt trần. Hành động chỉ được phép khi nằm trong cả hai.

SCP đặt trần cho cả OU

SCP đặt trần cho cả OUOrganization11kế thừa22Tài khoản quản lýSCP không áp dụngRootOU ProdSCP: Deny ngoài ap-*OU DevTài khoản appTài khoản dataSandbox
SCP gắn ở root / OU kế thừa xuống mọi tài khoản bên dưới. Tài khoản quản lý không bị SCP giới hạn.

Từng bước

  1. Tài khoản xếp vào OU; SCP gắn ở root hoặc OU.
  2. Mọi tài khoản trong OU Prod kế thừa SCP: không ai (kể cả root của tài khoản đó) dùng Region ngoài danh sách.

IAM Identity Center: một lần đăng nhập, nhiều tài khoản

IAM Identity Center: một lần đăng nhập, nhiều tài khoảnOrganizationđăng nhập1SAML / SCIM1222Nhân viênIdP công tyEntra ID / OktaIAM Identity Centerpermission setProdReadOnlyDevPowerUserLogAudit
Người dùng / nhóm lấy từ IdP công ty. Permission set gán cho nhóm trên từng tài khoản sẽ thành role trong tài khoản đó.

Từng bước

  1. Nhân viên đăng nhập bằng tài khoản công ty; nhóm đồng bộ sang Identity Center (SCIM).
  2. Mỗi nhóm có permission set khác nhau trên từng tài khoản; nghỉ việc thì tắt ở IdP.

Federation SAML 2.0 vào console

Federation SAML 2.0 vào consoleNhân viênIdP (AD FS)Sign-in / STSConsole AWS1. Đăng nhập bằng tài khoản công ty2. SAML assertion (nhóm → role)3. AssumeRoleWithSAML4. Thông tin tạm thời5. Vào console với quyền của role
Không có IAM user nào cho nhân viên: AD xác thực, AWS cấp thông tin tạm thời theo role ánh xạ từ nhóm.

Cognito: khách hàng của app truy cập S3

Cognito: khách hàng của app truy cập S3App mobileUser poolIdentity poolS31. Đăng nhập (mật khẩu / Google / MFA)2. ID token (JWT)3. Đổi token lấy thông tin AWS4. Thông tin tạm thời của role5. PUT vào prefix của chính mình
User pool lo đăng nhập; identity pool đổi token lấy thông tin tạm thời của role, policy giới hạn theo id người dùng.

IAM Access Analyzer tìm truy cập từ bên ngoài

IAM Access Analyzer tìm truy cập từ bên ngoàiVùng tin cậy (tổ chức)11đọc policy1bucket policy cho phép2truy cập ra ngoài2Access AnalyzerBucketKMS keyRoleTài khoản ngoàiFinding
Vùng tin cậy là tài khoản hoặc cả tổ chức. Policy nào cho principal ngoài vùng đó truy cập sẽ thành finding.

Từng bước

  1. Access Analyzer phân tích policy của bucket, key, role, queue…
  2. Bucket policy cho tài khoản ngoài tổ chức → sinh finding để xem và xử lý.

So sánh nhanh

Các loại policy

LoạiGắn vàoCấp quyền?Dùng khi
Identity-basedUser, group, roleCóCấp quyền cho danh tính trong tài khoản
Resource-basedBucket, key, queue, topic, role (trust)…Có (kể cả khác tài khoản)Cho principal khác tài khoản vào tài nguyên
Permissions boundaryUser, roleKhông, chỉ đặt trầnUỷ quyền tạo role mà không leo thang
SCP (Organizations)Root, OU, tài khoảnKhông, chỉ đặt trầnRào chắn cho cả tài khoản / OU
RCP (Organizations)Root, OU, tài khoảnKhông, chỉ đặt trầnRào chắn trên tài nguyên trong tổ chức
Session policyPhiên assume role / federationKhông, chỉ đặt trầnThu hẹp quyền cho một phiên

Truy cập khác tài khoản

Assume roleResource-based policy
Cách làmNgười gọi đổi sang quyền của role ở tài khoản đíchTài nguyên tự cho principal khác tài khoản
Quyền ở tài khoản gốcTạm bỏ trong phiênGiữ nguyên (ví dụ chép từ bucket A sang bucket B cùng lúc)
Dịch vụ hỗ trợMọi dịch vụChỉ dịch vụ có resource policy (S3, SQS, SNS, KMS, Lambda…)
Bên thứ baThêm External ID để chống confused deputyDùng điều kiện aws:SourceAccount / SourceArn

Danh tính cho ai

AiDùngGhi chú
Nhân viên, nhiều tài khoảnIAM Identity Center (+ IdP công ty)Permission set → role ở từng tài khoản
Nhân viên, một tài khoản, có ADSAML 2.0 federation → AssumeRoleWithSAMLHoặc Identity Center nối AD
Ứng dụng trên EC2 / ECS / LambdaRole (instance profile, task role, execution role)Không lưu access key
Khách hàng của app web / mobileCognito user pool + identity poolĐăng nhập mạng xã hội, MFA
Máy chủ ngoài AWSIAM Roles Anywhere (chứng chỉ X.509)Thay access key lâu dài
Tình huống khẩn cấpIAM user break-glass có MFAGiữ chặt, theo dõi

Organizations và Control Tower

OrganizationsControl Tower
Là gìGom tài khoản thành cây OU, thanh toán hợp nhất, SCP / RCPDựng landing zone nhiều tài khoản theo mẫu tốt nhất
Rào chắnBạn tự viết SCPControls có sẵn (preventive = SCP, detective = Config)
Dùng khiCần kiểm soát linh hoạtCần dựng nhanh môi trường nhiều tài khoản đúng chuẩn

Tình huống đề hay gặp

1Ứng dụng trên EC2 cần đọc một bucket S3.

Xem đáp án

Đúng: Role có quyền s3:GetObject trên bucket, gắn vào EC2 qua instance profile
SDK tự lấy thông tin tạm thời từ metadata, AWS tự xoay vòng.

Sai: Tạo IAM user, lưu access key trong file cấu hình trên máy
Khoá lâu dài dễ lộ, phải tự xoay vòng.

Sai: Bucket policy cho phép mọi principal
Mở bucket cho cả thế giới.

2Người dùng có policy AdministratorAccess nhưng vẫn không tắt được CloudTrail ở tài khoản thành viên.

Xem đáp án

Đúng: Có SCP Deny cloudtrail:StopLogging ở OU / root
SCP đặt trần cho mọi user, role (kể cả root) của tài khoản thành viên; Deny thắng mọi Allow.

Sai: Thiếu quyền cloudtrail:StopLogging
AdministratorAccess đã có; quyền bị chặn ở tầng trên.

3Công ty kiểm toán (bên thứ ba) cần đọc tài nguyên trong tài khoản của bạn.

Xem đáp án

Đúng: Role cho tài khoản của họ assume, trust policy yêu cầu External ID
Thông tin tạm thời, thu hồi được; External ID chống confused deputy.

Sai: Tạo IAM user và gửi access key cho họ
Khoá lâu dài nằm ngoài tầm kiểm soát của bạn.

4Cho developer tự tạo role cho Lambda nhưng không để họ tạo role có quyền cao hơn chính mình.

Xem đáp án

Đúng: Permissions boundary: cho phép iam:CreateRole chỉ khi role mới gắn boundary đã định
Quyền thật của role mới không vượt quá boundary.

Sai: Chỉ dặn developer không gán AdministratorAccess
Không có gì ngăn được.

Sai: SCP
SCP áp cho cả tài khoản, không phân biệt role do ai tạo.

5500 nhân viên đăng nhập bằng tài khoản Microsoft Entra ID để vào 40 tài khoản AWS.

Xem đáp án

Đúng: IAM Identity Center nối với Entra ID, gán permission set cho nhóm theo tài khoản
Đăng nhập một lần, quyền theo nhóm, nghỉ việc thì tắt ở IdP là mất quyền.

Sai: Tạo IAM user cho từng người ở từng tài khoản
20.000 user, không quản lý nổi, thêm khoá lâu dài.

6App di động cho người dùng đăng nhập bằng Google rồi tải ảnh lên thư mục riêng của họ trên S3.

Xem đáp án

Đúng: Cognito user pool (đăng nhập Google) + identity pool cấp role tạm; policy giới hạn prefix theo id người dùng
Mỗi người chỉ có quyền tạm thời trên thư mục của mình.

Sai: Nhúng access key vào app
Ai giải nén app cũng lấy được khoá.

7Cần biết bucket, KMS key, role nào đang cho tài khoản ngoài tổ chức truy cập.

Xem đáp án

Đúng: IAM Access Analyzer với vùng tin cậy là tổ chức
Tự phân tích policy, báo finding cho mỗi đường truy cập ra ngoài.

Sai: Đọc thủ công từng policy
Không theo kịp khi số tài nguyên lớn, dễ sót.

8Chia sẻ bucket cho mọi tài khoản trong tổ chức, kể cả tài khoản tạo sau này.

Xem đáp án

Đúng: Bucket policy với điều kiện aws:PrincipalOrgID bằng ID tổ chức
Tài khoản mới trong tổ chức tự có quyền, tài khoản ngoài thì không.

Sai: Liệt kê từng ID tài khoản trong bucket policy
Phải sửa policy mỗi khi có tài khoản mới.

9Script assume role A rồi từ A assume role B với DurationSeconds 4 giờ thì lỗi.

Xem đáp án

Đúng: Role chaining giới hạn phiên tối đa 1 giờ
Muốn phiên dài: assume B trực tiếp bằng danh tính gốc.

Sai: Role B có max session duration 1 giờ
Có thể, nhưng ở đây lý do chắc chắn là role chaining.

10Cần MFA mới được xoá đối tượng trong bucket quan trọng.

Xem đáp án

Đúng: Policy Deny s3:DeleteObject khi aws:MultiFactorAuthPresent không đúng (và cân nhắc MFA Delete khi bật versioning)
Điều kiện MFA áp lên đúng hành động cần bảo vệ.

Sai: Chỉ bật MFA cho đăng nhập console
Không ràng buộc với từng thao tác API.

Chọn nhanh

Cấp / giới hạn quyền bằng gì?

Khi cầnDùng
Ứng dụng trên EC2 / Lambda / ECS cần gọi AWSRole (instance profile, execution role, task role) · xem sơ đồ
Người ở tài khoản khác cần vàoRole + trust policy (bên thứ ba: External ID) · xem sơ đồ
Cho tài khoản khác dùng một tài nguyênResource-based policy (bucket / key / queue policy) · xem sơ đồ
Cấm hành động cho cả tài khoản / OUSCP · xem sơ đồ
Giới hạn trần quyền của một user / rolePermissions boundary · xem sơ đồ
Nhân viên đăng nhập một lần vào nhiều tài khoảnIAM Identity Center · xem sơ đồ
Đăng nhập bằng AD công ty vào một tài khoảnSAML 2.0 federation · xem sơ đồ
Khách hàng của app web / mobileCognito user pool + identity pool · xem sơ đồ
Tìm tài nguyên đang chia sẻ ra ngoàiIAM Access Analyzer · xem sơ đồ
Hiểu vì sao bị DenyĐi theo thứ tự đánh giá policy · xem sơ đồ

Bẫy hay gặp

  • Lưu access key trên EC2 hay trong code thay vì dùng role.
  • Nghĩ SCP cấp quyền: SCP chỉ đặt trần, vẫn cần identity policy.
  • Nghĩ SCP chặn được tài khoản quản lý: không áp dụng cho tài khoản quản lý.
  • Quên rằng Deny tường minh thắng mọi Allow, kể cả AdministratorAccess.
  • Cho bên thứ ba assume role mà không có External ID.
  • Dùng root cho việc hằng ngày, hoặc tạo access key cho root.
  • Dùng IAM user cho khách hàng của ứng dụng (đó là việc của Cognito).
  • Lẫn user pool (đăng nhập) với identity pool (đổi lấy thông tin AWS).
  • Liệt kê từng tài khoản trong bucket policy thay vì aws:PrincipalOrgID.
  • Tưởng permissions boundary cấp thêm quyền.
  • Quên role chaining giới hạn phiên 1 giờ.

Dịch vụ trong module

Số liệu dễ thay đổi (đã kiểm với tài liệu AWS)

  • Mặc định: 20 managed policy mỗi role (tối đa 25), 10 mỗi user (tối đa 20), 10 mỗi group; 1.000 role mỗi tài khoản (tối đa 10.000). kiểm ngày 2026-10-16 ↗
  • Managed policy tối đa 6.144 ký tự; tổng inline policy: user 2.048, group 5.120, role 10.240 ký tự (không tính khoảng trắng). kiểm ngày 2026-10-16 ↗
  • Phiên role từ 15 phút tới tối đa 12 giờ tuỳ max session duration; mặc định 1 giờ nếu không chỉ định. kiểm ngày 2026-10-16 ↗
  • Role chaining giới hạn phiên tối đa 1 giờ, bất kể max session duration của role. kiểm ngày 2026-10-16 ↗
  • Thứ tự đánh giá: Deny tường minh → RCP → SCP → resource-based → identity-based → permissions boundary → session policy; Deny tường minh thắng mọi Allow. kiểm ngày 2026-10-16 ↗
  • SCP không cấp quyền, không áp dụng cho user / role của tài khoản quản lý và service-linked role; áp dụng cả root của tài khoản thành viên. kiểm ngày 2026-10-16 ↗
  • SCP tối đa 10.240 ký tự; tối đa 10 SCP gắn trực tiếp vào root, mỗi OU, mỗi tài khoản; OU lồng tối đa 5 cấp. kiểm ngày 2026-10-16 ↗
  • Organizations mặc định tối đa 10 tài khoản (tăng được qua Service Quotas). kiểm ngày 2026-10-16 ↗
Luyện câu hỏi module này →