Hướng dẫn cài đặt AWS Temporary Credential với AssumeRole(Switch Role)

Lời nói đầu:

Thông qua bài Hướng dẫn cài đặt AWS Temporary Credential với MFA, bạn đã biết cách tạo Credentials tạm thời để chia sẻ với thành viên trong team mà vẫn bảo mật được thông tin tài khoản chính. Bạn sớm nhận ra rằng, quyền truy cập vào AWS Resources chỉ dựa trên quyền của tài khoản gốc. Trong trường hợp tài khoản gốc của bạn lại là tài khoản có quyền truy cập toàn bộ AWS Resources. Theo Security Best Practice của AWS, quyền truy cập phải được cài đặt theo quy tắc "chỉ cấp quyền cần thiết" hay least privilege, có nghĩa là bạn đang phạm phải một lỗi Security rất nghiêm trọng.

Để khắc phục vấn đề này, AWS cung cấp cho người dùng giải pháp để khắc phục đó là AssumeRole thông qua dịch vụ AWS STS. Assume Role có thể hiểu nôm na là "Ủy thác Vai trò". Một người có thể nhận nhiều "Vai trò" - Role khác nhau.

Trong bài bao gồm nội dung như sau:

  • Cấp quyền sử dụng tính năng Assume Role cho tài khoản
  • Tạo "Vai trò" - Role để "Ủy thác" - Assume giành riêng cho tài khoản
  • Tạo Aws Temporary Credential với "Ủy thác Vai trò" - Assume Role đã tạo thông qua AWS STS
  • Thực hiện kiểm tra cài đặt

Cấp quyền sử dụng tính năng Assume Role cho tài khoản

Để cấp quyền sử dụng tính năng cho tài khoản, người dùng có thể cấp trực tiếp quyền sử dụng thông qua việc chỉnh sửa Policy của tài khoản, hoặc tạo Role và đính vào tài khoản.

Với mục đích quản lý, người dùng nên tạo thành Policy riêng biệt. Tạo Policy thông qua AWS IAM Polices như sau:

Step 1: Chọn Create Policy

Step 2: Copy và paste nội dung Policy phía dưới vào màn hình định nghĩa Policy bằng JSON

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

Step 3: đặt tên cho Policy ví dụ : AWSAssumeRolePolicy và chọn tạo policy

Step 4: đính Policy vừa tạo vào Tài khoản cần nhận "vai trò ủy thác" - Assume Role

Tạo "Vai trò" - Role để "Ủy thác" - Assume giành riêng cho tài khoản (Trust Relationships)

Step 1: Thông qua AWS IAM Roles, hãy tạo một Custom trust policy với Principal là thông tin tài khoản cần được ủy thác trách nhiệm.

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Effect": "Allow",
			"Principal": {"AWS": "arn:aws:iam::<aws_id>:user/<tên_tài_khoản_nhận_ủy_thác"},
			"Action": "sts:AssumeRole"
		}
	]
}

Role được tạo sẽ giống với nội dung bên dưới:

Khi cần thêm quyền sử dụng những Services khác nhau của AWS, người dùng có thể dễ dàng thêm vào Role, cũng như chỉnh sửa Policy của Role, thông qua việc Add Permissions vào Role.

Trong bài, sẽ lấy ví dụ việc truy cập đọc S3 để thực hiện kiểm tra Assume Role có hoạt động hay không nên sẽ thực hiện thêm quyền AmazonS3ReadOnlyAccess cho Role

Thực hiện Attach thành công Policies vào Role giành riêng cho việc ủy thác.

Tạo Aws Temporary Credential với "Vai trò Ủy thác" - Assume Role đã tạo thông qua AWS STS

Cài đặt môi trường thực hiện CLI với tài khoản cần nhận Assume Role vừa tạo ra. Để cài đặt môi trường để thực thi AWS CLI xin tham khảo tại đây.

Thực hiện câu lệnh dưới đây để thực hiện tạo AWS Temporary Credentials với "Vai trò Ủy thác" - Assume Role

aws sts assume-role --role-arn "arn:aws:iam::<aws_acc_id>:role/<assume-role-name>" --role-session-name <session-name>

<assume-role-name> : Tên của Assume Role đã tạo. Theo ví dụ là : RoleForAssumeByDeveloper

<session-name> : Tên của session sẽ được tạo ra khi sử dụng Assume Role. Ví dụ: Credential tạm thời dùng để truy cập vào S3 nên đặt tên là CertTempS3Access

AWS Temporary Credentials được tạo ra bởi Assume Role có thời hạn hiệu lực trong vòng 3600s (1 tiếng) để kéo dài thời gian này cần dùng thêm options --duration-seconds với giá trị từ 900s (15 phút ) tới 43200s (12 giờ).


aws sts assume-role --role-arn "arn:aws:iam::<aws_acc_id>:role/RoleForAssumeByDeveloper" --role-session-name CertTempS3Access

Sau khi thực hiện câu lệnh Aws Temporary Credentail sẽ được AWS STS trả về với kết quả như sau:

{
    "Credentials": {
        "AccessKeyId": "<access_key_id>",
        "SecretAccessKey": "<secret_access_key",
        "SessionToken": "<session_token>",
        "Expiration": "<expiration>"
    },
    "AssumedRoleUser": {
        "AssumedRoleId": "<session_role_id>",
        "Arn": "arn:aws:sts::<aws_acc_id>:assumed-role/<assume-role-name>/<session-name>"
    }
}

Thực hiện cài đặt lại biến môi trường AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN với thông tin vừa trả về.

Nếu thực hiện cài đặt bằng aws configure cần phải mở file credentials thêm thông tin biến môi trường AWS_SESSION_TOKEN.

File credentials sẽ có thông tin như sau:

[default]
aws_access_key_id = <access_key_id>
aws_secret_access_key = <secret_access_key>
aws_session_token = <sesion_token>

Thực hiện kiểm tra cài đặt

Theo ví dụ trong bài, Developer không có quyền gì khi mới được tạo. Tuy nhiên, sau khi thực hiện cấp Assume Role tài khoản Developer có thêm quyền chỉ đọc dịch vụ S3. Do đó, để thực hiện kiểm tra cài đặt đã đúng, hãy thực hiện câu lệnh dưới đây

aws s3 ls

Nếu cài đặt đúng, thông tin bucket có trong hiện có trong tài khoản AWS sẽ hiển thị.

Tham khảo khác

Để tìm hiểu sâu hơn về câu lệnh - command của Assume Role tại đây và Assume Role tại đây.

Leave a Reply

Your email address will not be published. Required fields are marked *