Tự học AWS [P5] - AWS Security - IAM - Identity and Access Management

Tự học AWS [P5] - AWS Security - IAM - Identity and Access Management

2020, Jul 30    

Trong một tổ chức ví dụ như một công ty, để công ty có thể hoạt động hiệu quả cần có sự phân quyền rõ ràng, từng thành viên sẽ được giao nhiệm vụ, quyền và lợi ích riêng. Hệ thống AWS cung cấp một service giúp bạn có thể phân quyền, góp phần đảm bảo bảo mật đó chính là IAM - Identity and Access Management hay còn gọi là Quản lý định danh và truy cập.

Vai trò của quản lý định danh và truy cập

Khi sử dụng hệ thống, chắc hẳn không ai muốn rằng các thành phần của hệ thống xung đột, hoặc có quyền truy cập vào những vùng dữ liệu bảo mật. Việc không phân quyền có thể dẫn tới lỗ hổng bảo mật, khiến cho dữ liệu và thông tin bị đánh cắp. Việc xác thực ai là người truy cập, và người đó có những quyền truy cập vào dữ liệu nào là vô cùng cần thiết.

Steal Data

IAM - Identity and Access Management

IAM là dịch vụ giúp bạn có thể phân quyền truy cập cho người dùng, dịch vụ hoạt động bên trong hệ thống AWS.

Một điều cần lưu ý đó là IAM là một Universal Service - không chịu sự tác động bởi Region, hay nói cách khác, thay đổi trong IAM sẽ gây ảnh hưởng lên tất cả các Region. Ngoài ra, IAM cũng có thể liên kết với những tổ chức cung cấp định danh khác như Active Directory, Facebook, Linkedin, …

Identity and Access Management

Để làm những việc này, IAM định nghĩa những thành phần như sau:

  • User
  • Group
  • Role
  • Policy

Đây là những thành phần chính của IAM phục vụ công việc định danh và phân quyền truy cập. Chúng ta sẽ cũng tìm hiểu từng thành phần trên.

User - Người dùng

User

Người dùng có quyền truy cập cao nhất ứng với tài khoản Root chính là Root Account hay còn gọi là tài khoản Admin. Admin có quyền truy cập tới mọi dịch vụ của AWS và có thể tạo và share quyền truy cập cho những thành phần khác. Với những user không phải admin sẽ phải tuân theo những quy tắc sau:

  • New User: User khi mới được tạo sẽ không có bất cứ quyền truy cập nào, chỉ có thể được truy cập vào những thành phần AWS khi được cho phép với Root Account. Quá trình phân quyền cho User sẽ được mô tả ở phần sau.
  • Mỗi user sẽ được cấp cho Access Key ID và Secret Access Keys dùng cho xác thực khi dùng API hoặc những service yêu cầu định danh, hoặc dùng Command Line. Tuy nhiên không thể dùngeđể đăng nhập vào AWS Console.
  • Chỉ có thể xem Access Key ID và Secret Access Keys khi khởi tạo User, nếu quên thì sẽ cần tạo lại. Cần lưu trữ Keys khi tạo lần đầu.
  • Có thể tạo Password Rotation Policy - Bắt buộc thay đổi password sau một chu kỳ thời gian nhất định.

Group - Nhóm người dùng

Mỗi Group quy định một nhóm các User có quyền truy cập tương tự nhau, mỗi User có thể được nhóm vào một hoặc nhiều Group. User thuộc group sẽ có đầy đủ quyền truy cập của Group đó.

Group

Mỗi Group sẽ mang một định danh - ID riêng được gọi là Group ARN - Group Amazon Resource Name. Ví dụ:

  • arn:aws:iam::403955622149:group/Developers

Role - Vai trò

Mỗi Role sẽ quy định một vai trò nào đó. Một Role sẽ bao gồm một hoặc nhiều Policy (sẽ nhắc tới ở phần sau) khác nhau. Quy định một hoặc nhiều quyền truy cập khác nhau. Role có vai trò nhằm cấp một hoặc nhiều quyền truy cập cho một hoặc những đối tượng khác nhau.

Lưu ý: Khác với Group, Role dùng để phân quyền cho những Service khác của AWS ví dụ như S3, EC2, …

Policy - Chính sách

Cuối cùng, thành phần nhỏ nhất, quy định quyền truy cập chi tiết tới một thành phần nào đó, và mô tả rõ ràng chúng dưới dạng JSON. Ví dụ với Policy cho phép quyền truy cập vào S3:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": "*"
        }
    ]
}

Mỗi Policy sẽ mô tả lại những hành động nào (Action), tài nguyên nào (Resource) được cho phép.

Mối liên hệ giữa các thành phần

User - Policy:

Có thể gán trực tiếp Policy cho mỗi User, một User có thể có nhiều Policy, đây thường là cách gán trực tiếp khi một User phát sinh ngoài dự tính tổ chức, cần có những Policy riêng biệt.

VD: Công ty thuê một chuyên gia về Networking để thiết kế mô hình mạng cho hệ thống, chuyên gia này cũng cần truy cập vào một vài service khác nhau của AWS. Vậy nên User này sẽ không phải nhân viên công ty, nên sẽ chỉ có một vài quyền truy cập nhất định vào những tài nguyên cần cung cấp. Không thể gán vào những Group đã có sẵn ví dụ những Hành chính nhân sự, Developer, …

Group - Policy

Như vừa nói ở ví dụ trên, công ty đã có những phòng ban, vị trí vai trò riêng được quy định như Developer, Tester. Mỗi vị trí sẽ được phân quyên cố định theo quy định. Nên có thể tạo những Group để nhóm những User lại và phân cho quyền - Policy tương ứng với vị trí công việc.

Role - Policy

Role dùng để phân quyền cho những dịch vụ của AWS như EC2, S3, Lamdba. Để những dịch vụ này có thể truy cập và giao tiếp lẫn nhau, chúng cần được phân cho Role riêng.

Ví dụ: Service Lambda cần truy cập vào S3 để lấy dữ liệu, để làm được điều này thì Lambda cần phải có một Role chứa những Policy quy định về việc truy cập vào S3. Bằng cách gán những Policy này cho một Role với tên gọi Lambda_Access_S3, Service Lambda có thể truy cập vào S3.

Group

Policy quy định quyền :

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Resource": "*"
        }
    ]
}

Ngoài ra với UserGroup đã được đề cập ở phần định nghĩa về Group.

Mọi ý kiến đóng góp vui lòng để lại comment ở phần bình luận của bài viết!