Tổng Quan
Trong bài viết này, chúng tôi sẽ hướng dẫn bạn các bước để tạo và phân quyền cho IAM User trên AWS bằng cách sử dụng CloudFormation Template. Bạn sẽ học cách thiết lập một IAM User, gán chính sách và nhóm cho người dùng này, cũng như quản lý chúng qua AWS CLI.
Hướng Dẫn Thực Hành
Bước 1: Tạo Tập Tin Template
Đầu tiên, bạn cần tạo một tập tin có tên là template.yml
với nội dung mô tả chi tiết như sau:
## =================== MÔ TẢ ===================
Description: >-
Mẫu template CloudFormation của AWS
Tạo một IAM User và tùy chọn gán người dùng vào nhóm IAM
Tùy chọn nhúng các chính sách quản lý AWS, chính sách quản lý tự tạo và các chính sách nội tuyến trong người dùng
Tài liệu AWS: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user.html
Tiếp theo, bạn cần bổ sung các tham số cấu hình cho người dùng trong template:
Parameters:
paramUserName:
Description: Tên duy nhất cho người dùng mới
Type: String
AllowedPattern: "^[a-zA-Z][a-zA-Z0-9]{1,64}$"
ConstraintDescription: Tên người dùng phải từ 1 đến 64 ký tự chữ và số, bắt đầu bằng một ký tự chữ cái.
paramUserPassword:
Description: Mật khẩu cho tài khoản người dùng mới
Type: String
NoEcho: 'true' # Ẩn giá trị tham số để không hiển thị trên giao diện
AllowedPattern: ^[a-zA-Z][a-zA-Z0-9!@#$%&]{8,32}$
ConstraintDescription: Mật khẩu phải từ 8 đến 32 ký tự, bắt đầu bằng một chữ cái và có thể chứa ký tự đặc biệt !@#$%&.
paramGroups:
Description: 'Danh sách tên nhóm để thêm người dùng (tuỳ chọn)'
Type: CommaDelimitedList
Default: ''
paramManagedPolicy:
Type: String
Description: Chọn Chính sách Quản lý đã định nghĩa để gán cho người dùng
AllowedValues:
- DatabaseAdministrator
- SystemAdministrator
- DeveloperPowerUser
- View-Only
- None
Default: None
paramTagValue:
Description: Giá trị nhãn để xác định tài nguyên cho việc triển khai
Type: String
Default: CloudFormation IAM
Tham Số Trong Template
Ở đây, ta định nghĩa các tham số để cấu hình cho người dùng, bao gồm:
- paramUserName: Tên người dùng (username)
- paramUserPassword: Mật khẩu (password)
- paramGroups: Danh sách nhóm cho người dùng
- paramManagedPolicy: Chính sách cần gán cho người dùng
- paramTagValue: Thẻ gán cho người dùng
Tiếp theo, chúng ta sẽ tạo một cấu trúc mapping để lưu trữ ARN (Tên tài nguyên AWS) cho các chính sách trong các giá trị của paramManagedPolicy:
Mappings:
mapManagedPolicies:
DatabaseAdministrator:
ARN: arn:aws:iam::aws:policy/job-function/DatabaseAdministrator
SystemAdministrator:
ARN: arn:aws:iam::aws:policy/job-function/SystemAdministrator
DeveloperPowerUser:
ARN: arn:aws:iam::aws:policy/PowerUserAccess
View-Only:
ARN: arn:aws:iam::aws:policy/job-function/ViewOnlyAccess
None:
ARN: arn:aws:iam::aws:policy/NoAccess
Tiếp theo, tạo hai điều kiện để xác định xem có nhóm hay chính sách nào được chỉ định không:
Conditions:
hasGroups:
!Not [!Equals [ !Join ['', !Ref paramGroups], '' ] ]
hasManagedPolicy:
!Not [!Equals [ !Ref paramManagedPolicy, 'None'] ]
Tạo Resources
Cuối cùng, tạo một đối tượng Resources như sau:
Resources:
myUser:
Type: 'AWS::IAM::User'
Properties:
UserName: !Ref paramUserName
LoginProfile:
Password: !Ref paramUserPassword
PasswordResetRequired: true
Groups: !If [ hasGroups, !Ref paramGroups, !Ref "AWS::NoValue"]
ManagedPolicyArns:
- !If [ hasManagedPolicy, !FindInMap [ mapManagedPolicies, !Ref paramManagedPolicy, ARN], !Ref "AWS::NoValue" ]
- arn:aws:iam::aws:policy/AWSCloud9Administrator
Policies:
- PolicyName: inlineS3ReadOnlyPolicy
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- 's3:Get*'
- 's3:List*'
Resource: '*'
- PolicyName: inlineS3CreateBucketOnlyPolicy
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- 's3:CreateBucket*'
Resource: '*'
Tags:
- Key: Name
Value: !Ref paramTagValue
Trong phần này, chúng ta đã gán cho người dùng hai loại chính sách:
- ManagedPolicyArns: Chính sách được định nghĩa sẵn bởi AWS.
- Policies: Chính sách nội tuyến được người dùng định nghĩa.
Bạn có thể tham khảo file template hoàn chỉnh ngay tại đây.
Bước 2: Khởi Tạo Stack
Sau khi hoàn tất việc tạo template, bạn có thể thực hiện lệnh sau để khởi tạo stack trên AWS:
aws cloudformation create-stack
--capabilities CAPABILITY_NAMED_IAM
--stack-name iam-stack
--template-body file://template.yml
--parameters ParameterKey=paramUserName,ParameterValue=johndev ParameterKey=paramUserPassword,ParameterValue=johnPass@123 ParameterKey=paramManagedPolicy,ParameterValue=DeveloperPowerUser
Lưu ý: Bạn có thể thay đổi giá trị của các tham số theo ý muốn.
Truy cập giao diện web của CloudFormation để kiểm tra trạng thái của stack vừa tạo. Trong tab Resources, hãy click vào người dùng để kiểm tra các chính sách đã được gán trong tab Permissions.
Bước 3: Cập Nhật Stack
Trong bước này, bạn có thể cập nhật quyền cho người dùng bằng cách thay đổi tham số paramManagedPolicy và tạo change-set:
aws cloudformation create-change-set --change-set-name update-managed-policy\
--capabilities CAPABILITY_NAMED_IAM \
--stack-name iam-stack \
--use-previous-template \
--parameters ParameterKey=paramUserName,ParameterValue=johndev ParameterKey=paramUserPassword,ParameterValue=johnPass@123 ParameterKey=paramManagedPolicy,ParameterValue=View-Only
Sau khi tạo change-set, áp dụng nó bằng cách sử dụng lệnh sau:
aws cloudformation execute-change-set \
--change-set-name update-managed-policy \
--stack-name iam-stack
Khi việc cập nhật hoàn tất, kiểm tra quyền của người dùng; bạn sẽ thấy chính sách trước đó đã được thay đổi thành chính sách ViewOnlyAccess.
Bước 4: Xóa Stack
Để xóa các tài nguyên vừa khởi tạo trong stack, hãy chạy lệnh sau:
aws cloudformation delete-stack --stack-name iam-stack
Kết Luận
Trong bài viết này, chúng tôi đã hướng dẫn chi tiết cách tạo và phân quyền cho User sử dụng CloudFormation template. Hy vọng rằng bài viết sẽ hữu ích và giúp bạn có được sự hiểu biết sâu sắc hơn về việc quản lý IAM User trên AWS. Xin chân thành cảm ơn bạn đã đọc bài viết!
source: viblo