Giới thiệu về IAM
IAM (Identity and Access Management - Trình quản lý danh tính và truy cập) là một trong số những dịch vụ toàn cầu của AWS bên cạnh các dịch vụ nhưu EC2 hay Route53. IAM là một dịch vụ quản lý danh tính và truy cập vào các tài nguyên và dịch vụ AWS một cách bảo mật. IAM cho phép bạn quản lý người dùng và các quyền truy cập của chúng đến các tài nguyên và dịch vụ AWS. IAM là một dịch vụ toàn cầu, có nghĩa là bạn có thể sử dụng IAM để quản lý người dùng và quyền truy cập của chúng đến các tài nguyên và dịch vụ AWS ở bất kỳ khu vực nào.
AWS được dùng để làm gì?
Nhìn chung, từ vào tên gọi của AWS IAM ta có thể kết luận được rằng dịch vụ này cho phép người dùng có thể quyết định xem ai sẽ có quyền truy cập vào các tài nguyên trên tài khoản của mình cũng như học có thể truy cập vào các dịch vụ nào. Tuy nhiên một cách chi tiết hơn, AWS IAM có thể thực hiện được các chứ năng sau:
- Thiết lập, quản lý các quy tắc bảo mật cũng như kiểm soát truy cập một cách chi tiết đối với đội ngũ nhân sự cũng như các tác vụ liên quan. >>>
- Quản lý danh tính đối với một hoặc tập trung nhiều tài khoản AWS. >>>
- Cung cấp các quyền truy cập tạm thời đối với người dùng và ứng dụng cần truy cập vào các tài nguyên AWS. >>>
- Liên tục phân tích truy cập để điều chỉnh quy mô về quyền nhằm tối ưu hóa, đảm bảo nguyên tắc đặc quyền tối thiểu (Nguyên tắc đăc quyền tối thiểu có thể hiểu rằng một đơn vị chỉ nên được cung cấp quyền truy cập tới các tài nguyên mà nó thật sự cần). >>>
IAM hoạt động như thế nào?
IAM giúp bạn có thể chỉ định những cá nhân hoặc thiết bị có thể truy cập các dịch vụ và tài nguyên trong AWS, quản lý tập trung các quyền chi tiết và phân tích truy cập để tinh chỉnh quyền trên AWS. Để làm được điều này, IAM phân chia người dùng (Users) vào các nhóm (Groups) và quản lý các nhóm này thông qua các quyền (Policies).
Người dùng và nhóm trong IAM
Đầu tiên, ta cần đến với khái niệm Root Account. Đây là tài khoản mặc định của người dùng sở hữu tài khoản đăng ký AWS. Root Account có thể được sử dụng để quản lý tài khoản AWS, nhưng nó không được khuyến khích để sử dụng cho các hoạt động quản trị. Vì vậy, cần tạo một tài khoản IAM riêng để sử dụng cho các hoạt động quản trị. Tài khoản IAM này có thể được thêm vào nhóm quản trị (Admin) để có thể quản lý tài khoản AWS của bạn một cách dễ dàng với nhiều quyền hành không kém gì người dùng Root.
Tài khoản Admin được nhắc đến ở trên được gọi là User - Người dùng. Khi ta đăng nhập vào AWS, giao diện đăng nhập sẽ luôn hỏi xem ta cần đăng nhập vào Account Root hay chỉ dưới vai trò IAM User thông thường. Nếu ta chọn đăng nhập vào Account Root, ta sẽ được đăng nhập vào tài khoản Root và có thể quản lý tài khoản AWS của mình một cách tự do. Tuy nhiên, nếu ta chọn đăng nhập vào tài khoản IAM User thông thường, ta sẽ chỉ có thể truy cập vào các tài nguyên mà tài khoản IAM User đó được phân quyền. Ví dụ, nếu tài khoản IAM User này chỉ được phân quyền truy cập vào các tài nguyên của một máy chủ EC2, ta sẽ không thể truy cập vào các tài nguyên khác như S3 hay Route53.
Nói một cách khái quát, User - Người dùng là những cá nhân nằm trong tổ chức của bạn, và các User này có thể được nhóm lại vào một hay nhiều nhóm.
Khái niệm tiếp theo được nhắc đến đó là Nhóm - Group, trong AWS IAM, Group bao gồm một hoặc nhiều User, tuy nhiên nó sẽ không bao gồm các Group khác.
Một User không nhất thiết phải nằm trong Group nào, tuy nhiên cũng có thể thuộc về nhiều group.
Quyền (Permission) và chính sách (Policy) trong IAM
IAM: Permission
- User hoặc Groups có thể được gán cho một chuỗi JSON, chuỗi này gọi là Policies (Chính sách).
- Các chính sách này định nghĩa quyền truy cập của User hoặc Group đó.
- Và như đã nói ở phía trên, trong AWS luôn áp dụng một chính sách đặc quyền tối thiểu (the least privilege principle) - đừng bao giờ cấp quyền cho một User nhiều hơn họ cần.
IAM: Policies
Policies - Chính sách, là các tệp dữ liệu có cấu trúc (JSON) định nghĩa quyền truy cập của một User hoặc Groups, nói cách khác, các một User hoặc Group muốn được truy cập vào các tài nguyên AWS, thì nó cần phải được cấp phép thông qua các Policies.
Các chính sách này cũng có tính kế thừa, điều này có thể hiểu là một User hoặc Group có thể được gán cho nhiều chính sách khác nhau. Điều này có thể được diễn giải như sau:
- Một tổ chức
X
gồm nhiều Groups và Users, tất cả các Users này sẽ được gán cho một chính sách mặc định có tên làX-Human
. - Groups
Avenger
trong tổ chức X có thể được gán cho một chính sách có tên làX-Member
. Điều này có nghĩa là các User trong GroupAvenger
sẽ có quyềnX-Member
và quyềnX-Human
- Groups
Avenger
chứa 1 User tên làTony Stark
, User này được gắn thêm một quyềnX-UseIronManArmor
nữa. Điều này có nghĩa là UserTony Stark
sẽ có quyềnX-Member
,X-Human
vàX-UseIronManArmor
. (Tony Stark làcon người
, làthành viên
của Avenger và là người duy nhất có quyềnsử dụng
bộ giáp Ironman )
Để dễ hiểu, Policies trong AWS IAM thường chia thành các loại sau:
- Service control policies (SCPs)
- Management policy types
- AI services opt-out policies
- Backup policies
- Tag policies
- AI services opt-out policies
Để hệ thống của AWS IAM có thể hiểu cũng như người quản trị có thể dễ dàng cấu hình, các Policies được định nghĩa dưới dạng JSON.
Một Policies có cấu trúc dưới dạng JSON bao gồm nhiều trường như sau:
Trong đó bao gồm các trường:
- Version
: Policy Language Version, đây là phiên bản của ngôn ngữ được Amazon sử dụng để xử lý các policy, trường này KHÔNG phải là phiên bản của Policy (Policy Version) và có 2 giá trị 2012-10-17
đối với phiên bản hiện nay và 2008-10-17
đối với phiên bản cũ hơn. Hiện nay, trường này mặc định là “2012-10-17”.
- Id
: Trường này là mã định danh mà bạn đặt cho Policy của mình, có thể có hoặc không (Optional)
- Statement
: Trường này bao gồm nhiều thông tin cấu hình khác của Policy, một Policy có thể có một hoặc nhiều Statement độc lập, tuy nhiên vì trường này là bắt buộc nên bạn cần tối thiểu 01 Statement. Các trường trong Statement bao gồm:
- Sid
: Mã định danh cho Statement (Optional)
- Effect
: Trường này quyết định xem Statement cho phép hay từ chối quyền truy cập vào một resource. Có 2 giá trị là Allow
và Deny
- Principal
: Trường này quyết định xem Statement này sẽ được áp dụng cho group/user/role
nào.
- Action
: Trường này quyết định xem Statement này cho phép hay từ chối một hoặc nhiều action nào. (2 giá trị Allow
và Deny
trên phần Effect)
- Resource
: Trường này quyết định xem Statement này được áp dụng cho resource nào.
- Condition
: Trường này quyết định xem Statement này được áp dụng khi nào. (Optional)
IAM: Roles for Services
Ở phần trên, bên cạnh 02 giá trị quen thuộc là group/user
, chúng ta còn có thêm giá trị role
.
Một vài dịch vụ trên AWS cần được cấp phép để thực thi các tác vụ một cách tự động khi User không có mặt tại đó để cấp phép, để làm được điều này thì dịch vụ đó cần được cấp quyền truy cập tới dịch vụ AWS đích thông qua IAM Roles
Tồn tại nhiều Roles trên AWS IAM, tuy nhiên chúng ta có sẵn một số Role phổ biến như sau:
- EC2 Instance Roles
- Lambda Function Roles
- Roles for CloudFormation.