Identity and Access Management (IAM)

IAM là gì?
Viết tắt của Identity and Access Management.
Nhiệm vụ định danh và phân quyền, quản lý việc ai và cái gì có thể access như thế nào tới các resource trên AWS, quản lý một cách tập trung các quyền chi tiết, phân tích truy cập để tinh chỉnh quyền.
IAM usecase
Áp dụng quyền chi tiết và mở rộng quy mô với khả năng kiểm soát truy cập dựa trên thuộc tính. VD: Phòng bạn, job role, tên nhóm.
Quản lý truy cập theo từng tài khoản hoặc mở rộng quy mô truy cập trên các tài khoản và ứng dụng AWS.
Thiết lập quy tắc bảo vệ & phòng ngừa cho toàn tổ chức.
Thiết lập, xác minh và điều chỉnh quy mô quyền đối với đặc quyền tối thiểu thông qua việc thiết lập, xác minh, tùy chỉnh.
IAM Concept
Để có thể thiết kế & xây dựng hệ thống trên AWS đảm bảo tiêu chí về Security cũng như không gặp trouble, chúng ta cần nắm vững các concept cơ bản của IAM bao gồm:
User
Group
Role
Permission (Policy)
IAM Policy
Quy định việc ai/cái gì có thể hoặc không thể làm gì.
Một policy thường bao gồm nhiều Statement quy định Allow/Deny hành động trên resource dựa trên condition.
Mỗi statement cần định nghĩa các thông tin:
Effect: có 2 loại là Allow & Deny.(*** Deny được ưu tiên hơn**).
Action: tập hợp các action cho phép thực thi.
Resource: tập hợp các resource cho phép tương tác.
[Condition]: điều kiện kèm theo để apply statement này.
Policy có thể gắn vào Role/Group/User. Policy có 2 loại:
Inline policy: được đính trực tiếp lên Role/User/Group và không thể tái sử dụng ở Role/User/Group khác.
Managed policy: được tạo riêng và có thể gắn vào nhiều User/Role/Group. Được chia thành 2 loại;
AWS Managed: những policy mà Amazon họ đã thiết kế sẵn dành cho những nhu cầu nghiệp vụ hay gặp và họ thấy với policy này thì chúng đáp ứng được hầu hết các nhu cầu.
User Managed: chúng ta tự custom những policy theo ý của chúng ta.
Việc lựa chọn giữa Inline và Managed phải được tính toán dựa trên các yếu tố như:
Tính tái sử dụng
Quản lý thay đổi tập trung
Versioning & Rollback
IAM User
Đại diện cho 1 profile của 1 người dùng trên AWS account.
User có thể login vào AWS Console sử dụng username/password.
User mặc định khi tạo ra sẽ không có quyền gì. Cần cấp quyền cho user thông qua Policy hoặc Group.
User có thể phát hành access-key/secret-key để sử dụng cho CLI hoặc test SDK trong quá trình test code. Cặp access/secret key này cũng sẽ địa diện cho user ( thay vì dùng username/password).
IAM Role
Đại diện cho 1 quyền trên AWS. Không giống như khái niệm Role của 1 user như trong phân quyền hệ thống, cần lưu ý để tránh nhầm lẫn.
Sử dụng khi muốn cấp quyền cho 1 thực thể có thể tương tác với các resources khác trên AWS. Thường dùng để gắn vào EC2, Lambda, Container,…
Có thể sử dụng để cấp quyền cho 1 user nằm ở AWS account khác mà không muốn tạo ra user profile cho họ trên account AWS của mình. Bằng cách cho phép 1 user assume-role tới 1 role trên account, user có thể có các quyền tạm thời để thực hiện thao tác.
IAM Group
Đại diện cho 1 nhóm user trên hệ thống.
Sử dụng khi muốn phân chia quyền dựa theo vai trò trong dự án, phòng ban, …
Nên thiết kế các nhóm user và phân quyền hợp lý, sau đó khi có người mới chúng ta chỉ cần add user đó vào các nhóm cần thiết giúp tiết kiệm thời gian và tránh sai sót (cấp dư hoặc thiếu quyền).
Lưu ý tránh bị chồng chéo quyền ( ví dụ: 1 group allow action A nhưng group khác lại deny action A).
Một group không thể chưa group khác ( lồng nhau).
Một user có thể không thuộc group nào hoặc thuộc nhiều groups.
Môt group có thể không có user nào hoặc có nhiều users.
Giới thiệu về Switch Role & Assume role, Trust policy
Assume role
Yêu cầu AWS STS cung cấp 1 set temporary security credential để có thể access resource mà thông thường ta không có quyền access.
Có thể assume tới 1 role trên cùng account hoặc khác account.
Sử dụng trong các usecase cấp quyền tạm thời mà không muốn tạo nhiều user, quản lý tập trung user thông qua Single-Sign-On thay vì tạo user trên từng account.
Switch role
Khi muốn cấp quyền access cho user X vào account B nhưng không muốn tạo profile, ta có thể cho phép user X switch role sang role Y của account B từ đó có thể thực hiện các thao tác trên account B.
Sau khi switch role, user sẽ rời bỏ quyền ban đầu của mình và sẽ tương tác với các resource khác với tư cách là role Y.
Để switch role được, role Y phải thiết lập trust policy trước đó cho phép user X có thể switch role.
Trust policy
Quy định đối tượng nào có thể assume sang role được gắn trust policy này.
Đối tượng được trust có thể là User/Role/AWS service.
Best practices for IAM
Sử dụng group để gán quyền cho các user.
Cấp quyền vừa đủ cho user, không cấp quá dư thừa.
Chú ý các deny rule khi thiết kế policy để tránh bị conflict permission giữa các group (group này allow nhưng group kia deny).
Luôn force MFA cho các IAM user (không bật MFA sẽ không xài dc console). *Sẽ hơi phiền nếu dùng CLI kết hợp MFA nhưng nếu làm quen sẽ không mất nhiều thời gian.
Sử dụng Role khi muốn cấp quyền cho server/ứng dụng. Access/Secret key chỉ dùng để sử dụng khi gõ CLI trên local hoặc test các app đang trong quá trình phát triển.
Tuyệt đối KHÔNG share User hoặc Access/Secret key giữa các member trong dự án.
Subscribe to my newsletter
Read articles from Phan Văn Hoàng directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
