Bắt buộc việc tạo role trong một đường dẫn cụ thể và áp dụng việc đặt tên IAM role theo mô hình phân cấp

Một AWS Identity and Access Management (IAM) role là một IAM Identity mà bạn tạo trong AWS account của bạn có các permission cụ thể. Một IAM role tương tự như IAM user bởi vì nó là một AWS identity với permission policies, nó xác định Identity có thể hoặc không thể làm gì trên AWS. Tuy nhiên, như đã đề cập trong security best practices in IAM, AWS khuyến khích bạn sử dụng IAM roles thay vì IAM users. Một IAM user chỉ liên kết duy nhất với một người, trong khi role thì có thể được assume bởi bất kì ai cần nó. Một IAM role không có long-term credentials như password hoặc access key liên kết với nó. Thay vào đó khi bạn assume một role, nó cung cấp cho bạn một credentials tạm thời cho role session của bạn và chỉ hợp lệ trong một khoảng thời gian xác định.

Bài blog này sẽ khám phá cách triển khai hiệu quả của bảo mật trong IAM role, đặc biệt tập trung vào path feature của IAM role. Bằng cách tổ chức IAM role theo cấp bậc sử dụng đường dẫn. Bạn có thể giải quyết những thử thách này và đạt được giải pháp thực tế để nâng cao việc quản lý IAM role.

Lợi ích của việc sử dụng đường dẫn(path) IAM 

Một lợi ích cơ bản của việc sử dụng đường dẫn là hình thành một cấu trúc rõ ràng và có tổ chức. Bằng việc sử dụng đường dẫn bạn có thể xử lý đa dạng use cases trong khi tạo một well-defined framework cho việc tổ chức roles trên AWS. Sự rõ ràng có tổ chức có thể giúp bạn điều hướng qua những setup IAM phức tạp và thiết lập một cấu trúc chặt chẽ phù hợp với nhu cầu doanh nghiệp của bạn.

Hơn thế nữa, bằng việc tuân theo một cấu trúc cụ thể bạn có thể kiểm soát chính xác phạm vi các quyền được gán cho roles, giúp giảm thiểu rủi ro gán quá quyền. Bằng cách hỗ trợ trong việc ngăn chặn việc vô ý cấu hình sai policy hoặc hỗ trợ kết hợp các permission theo cấu trúc có tổ chức theo kế hoạch, giải pháp này cải thiện security. Cách tiếp cận này thì cực kì hiệu quả khi bạn thiết lập quy ước đặt tên cho đường dẫn, tên roles và policies. Việc tuân theo quy ước đặt tên role nâng cao tiêu chuẩn hoá và hiệu quả trong việc quản lý IAM roles. Điều này giúp hợp tác smooth và giảm rủi ro conflict name.

Path example

Trong IAM, một role path là cách để tổ chức và nhóm các role trong AWS account của bạn. Bạn chỉ định role path như 1 phần của role ARN(Amazon Resource Name).

Ví dụ, tưởng tượng bạn có group IAM roles liên quan đến development teams, và bạn muốn tổ chức theo dạng path. Bạn có thể cấu trúc nó như thế này.

Role name: Dev app1 admin

Role path: /D1/app1/admin

Full ARN: arn:aws:iam::123456789012:role/D1/app1/admin/DevApp1admin

Role name: Dev App2 admin

Role path: /D2/app2/admin/

Full ARN: arn:aws:iam::123456789012:role/D2/app2/admin/DevApp2admin

Trong ví dụ này, IAM roles DevApp1admin và DevApp2admin được tổ chức dưới development team paths khác nhau: D1/app1/admin và D2/app2/admin. Role path cung cấp quản lý các group role một cách logic, làm nó đơn giản hơn để quản lý và hiểu mục đích trong bối cảnh tổ chức của bạn.

Solution overview

Figure 1: Sample architecture

Kiến trúc ví dụ trong hình 1 cho ta thấy bạn có thể phân chia và phân loại enterprise role và development teams roles thành mô hình hệ thống phân cấp bằng cách sử dụng một path trong một IAM role. Việc sử dụng mô hình hierarchy (hệ thống phân cấp), bạn có thể cho phép vài several control security tại mức service control policy (SCP), IAM policy, permissions boundary, hoặc the pipeline. Tôi khuyến khích bạn nên tránh việc đặt tên doanh nghiệp trong path vì nó có thể thay đổi theo thời gian.

Đây là IAM role trông như 1 ARN

arn:aws:iam::123456789012:role/EnT/iam/adm/IAMAdmin

Trong ví dụ này, trong resource name, /EnT/iam/adm/ là role path, và IAMAdmin là role name

Bạn có thể sử role path như một phần của một policy, như ví dụ dưới đây: 

arn:aws:iam::123456789012:role/EnT/iam/adm/*

Trong ví dụ này, trong resource name, /EnT/iam/adm/ là role path, và * chỉ rằng bất kì IAM role trong path này

Một vài ví dụ cho preventative controls

Hãy xem qua vài ví dụ use cases và SCPs cho một preventative control mà bạn có thể sử dụng dựa trên path của một IAM role

PassRole preventative control example

SCP dưới đây denies passing a role cho enterprise roles, ngoại trừ những role là một phần của IAM admin hierarchy trong tổng thể doanh nghiệp hierarchy.

Với chỉ vài lệnh trong SCP, preventative control này giúp bảo vệ roles có quyền hạn cao cho enterprise roles, bất kể tên role và trạng thái hiện tại.

Ví dụ này sử dụng những path dưới đây:.

This example uses the following paths:

  • /EnT/ — enterprise roles (roles được sở hữu bởi central teams, như cloud center, central security và networking teams)
  • /fed/ — federated roles, có quyền truy cập tương tác
  • /iam/ — roles mà được cho phép để thực hiện những hành động IAM, như CreateRole, AttachPolicy, hoặc DeleteRole

Những ví dụ IAM actions preventative control 

SCP ràng buộc những hành động IAM, bao gồm CreateRole, DeleteRole, AttachRolePolicy, and DetachRolePolicy, trên enterprise path.

Preventative control denies một IAM role mà bên ngoài enterprise hierarchy (hệ thống phân cấp doanh nghiệp) từ việc thực hiện những hành động CreateRole, DeleteRole, DetachRolePolicy, và AttachRolePolicy trong hierarchy. Mỗi IAM role sẽ bị deny những API này ngoại trừ role có path là arn:aws:iam:::role/EnT/fed/iam/*

Ví dụ trên sử dụng những path dưới đây:

  • /EnT/ — enterprise roles (roles được sở hữu bởi central teams, như cloud center, central security và networking teams)
  • /fed/ — federated roles, có quyền truy cập tương tác
  • /iam/ — roles mà được cho phép để thực hiện những hành động IAM( trong trường hợp này như CreateRole, DeleteRole, DeleteRolePolicy và AttachRolePolicy)

Ví dụ AssumeRole preventative control

SCP dưới đây không cho phép non-production roles để assume một role trong production accounts. Đảm bảo việc thay <Your production OU ID><your org ID> với thông tin của bạn.

Ví dụ này sử dụng /np/path, chỉ rõ các non-production roles. SCP deny non-production IAM roles từ việc assume một role trong production organizational unit (OU) (trong ví dụ của chúng tôi, điều này được đại diện bởi  “<your org ID>/r-xxxx/<Your production OU ID>/*”).

Tuỳ vào cấu trúc của tổ chức của bạn, ResourceOrgPaths sẽ có một trong những format dưới đây:

  • “o-a1b2c3d4e5/*”
  • “o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/*”
  • “o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/ou-ab12-22222222/”

Một vài ví dụ monitor IAM roles (detective control)

AssumeRole in CloudTrail Lake

Ví dụ dưới đây của detective control ddeer monitor IAM roles trong AWS CloudTrail Lake.

Query này liệt kê AssumeRole events cho non-production roles trong tổ chức cho những lỗi AccessDenied. Kết quả được lưu trong Amazon Simple Storage Service (Amazon S3) bucket từ CloudTrail Lake, từ đó có thể tải xuống file csv. Dưới đây là một vài ví dụ output:

Username,eventTime,eventSource,eventName,sourceIPAddress,errorCode,errorMessage
arn:aws:sts::123456789012:assumed-role/np/test,2023-12-09 10:35:45.000,iam.amazonaws.com,AssumeRole,11.11.113.113,AccessDenied,User: arn:aws:sts::123456789012:assumed-role/np/test is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::123456789012:role/hello because no identity-based policy allows the sts:AssumeRole action

Bạn có thể chỉnh sửa query để kiểm tra productions roles.

CreateRole in CloudTrail Lake

Một ví dụ khác của CloudTrail Lake query cho một detective control:

Another example of a CloudTrail Lake query for a detective control is as follows:

Query này list kê CreateRole events cho roles trong /EnT/fed/iam/ hierarchy. Dưới đây là một vài ví dụ của output:

Username,eventTime,eventSource,eventName,sourceIPAddress,errorCode,errorMessage

arn:aws:sts::123456789012:assumed-role/EnT/fed/iam/security/test,2023-12-09 16:31:11.000,iam.amazonaws.com,CreateRole,10.10.10.10,AccessDenied,User: arn:aws:sts::123456789012:assumed-role/EnT/fed/iam/security/test is not authorized to perform: iam:CreateRole on resource: arn:aws:iam::123456789012:role/EnT/fed/iam/security because no identity-based policy allows the iam:CreateRole action

arn:aws:sts::123456789012:assumed-role/EnT/fed/iam/security/test,2023-12-09 16:33:10.000,iam.amazonaws.com,CreateRole,10.10.10.10,AccessDenied,User: arn:aws:sts::123456789012:assumed-role/EnT/fed/iam/security/test is not authorized to perform: iam:CreateRole on resource: arn:aws:iam::123456789012:role/EnT/fed/iam/security because no identity-based policy allows the iam:CreateRole action

Bởi vì những role này có thể tạo thêm những enterprise role, bạn nên kiểm tra những role được tạo trong hierarchy(hệ thống phân cấp) này.

Những cân nhắc quan trọng

Khi bạn implement những path cụ thể cho IAM roles, cân nhắc những điều dưới đây:

  • Path của một IAM role là một phần của ARN. Sau khi bạn định nghĩa ARN, bạn không thể thay đổi nó. Vì thế, giống như tên của role, cân nhắc đường dẫn nên là gì trong những cuộc thảo luận thiết kế ban đầu.
  • IAM roles không thể có cùng tên, thậm chí trên những paths khác nhau.
  • Khi bạn switch roles thông qua console, bạn cần include the path bởi vì nó là một phần của ARN role.
  • Path của một IAM role không thể vượt quá 512 characters (ký tự). Để biết thêm thông tin, xem IAM and AWS STS quotas.
  • Tên của role không thể vượt quá 64 ký tự. Nếu bạn dự định sử dụng 1 role với tính năng Switch Role trong AWS Management Console, sự kết hợp path và role name không thể vượt quá 64 ký tự.
  • Khi bạn tạo 1 role thông qua console, bạn không thể set IAM role path. Để set một path cho role, bạn cần sử dụ automation, như AWS Command Line Interface (AWS CLI) commands hoặc SDKs. Ví dụ, bạn có thể sử dụng AWS CloudFormation template hoặc một script để tương tác AWS APIs để tạo một role với path mong muốn.

Kết luận

Bằng việc áp dụng chiến lược path, bạn có thể cấu trúc các IAM role trong một hierarchical model, giúp việc implement security control trở nên dễ dàng và có thể scale. Bạn có thể làm những control trở nên hiệu quả cho IAM roles bằng việc áp dụng chúng thành một path thay vì những roles cụ thể.

Chiến lược này có thể giúp bạn nâng cao tư thế bảo mật tổng thể trong IAM, cung cấp một giải pháp hướng tới tương lai cho các doanh nghiệp. Bằng việc thiết lập một hệ thống phân cấp IAM có thể mở rộng, bạn có thể giúp tổ chức của mình điều hướng những thay đổi linh hoạt thông qua một cấu trúc quản lý identity vững chắc. Một hệ thống phân cấp được thiết kế tốt giảm bớt gánh nặng vận hành bằng cách cung cấp một khung làm việc linh hoạt mà làm cho việc thêm hoặc sửa đổi các role và policy trở nên đơn giản hơn. Tính mở rộng này có thể giúp đơn giản hóa quản lý IAM và giúp tổ chức của bạn quản lý kiểm soát truy cập trong môi trường đang phát triển.