Hướng dẫn cài đặt AWS Temporary Credential với Assume Role(Switch Role) kết hợp MFA

Lời nói đầu:

Thông qua bài hướng dẫn cài đặt AWS Temporary Credential với Assume Role, bạn đã biết được cách tạo Credential tạm thời với chức năng Assume Role. Bạn dễ dàng chia sẻ với nhiều Team mà không lo lắng việc nhầm lẫn quyền sử dụng AWS Services.

Tuy nhiên, vì tài khoản được cấp AssumeRole vẫn chưa có MFA và Role dùng để cấp vẫn chưa có cách nào bảo vệ chống việc xuất Credential, trong trường hợp bị lộ lệnh xuất Credential giành cho tài khoản sẽ rất nguy hiểm.

Theo AWS Security Best Practice, bạn nhận ra rằng cần phải cài đặt MFA cho tài khoản cũng như phải liên kết với MFA để cường hóa bảo mật, ngăn chặn việc tạo Credential bất chính.

Nội dung bài:

  • Cài đặt sử dụng MFA cho tài khoản
  • Thêm điều kiện sử dụng MFA với Role dùng để Assume Role
  • Kiểm tra cài đặt nội dung MFA để xuất Credential Tạm thời
  • Tạo Credential tạm thời với tài khoản có sử dụng MFA

Kích hoạt sử dụng MFA với tài khoản

Xin tham khảo bài Hướng dẫn cài đặt AWS Temporary Credential với MFA để biết cách cài đặt MFA cho tài khoản cần được bảo vệ.

Thêm điều kiện sử dụng MFA với Role dùng để Assume Role

Để thực hiện cài đặt sử dụng Assume Role cho tài khoản, hãy tham khảo bài hướng dẫn cài đặt AWS Temporary Credential với Assume Role .

Sau khi tạo xong User và cấp Policy cho phép truy cập và sử dụng dịch vụ AWS STS, sẽ thực hiện tạo Role(Vai trò) giành riêng để Assume (Ủy Thác). Thông qua màn hình AWS IAM Console, Role với nội dung Policy như sau sẽ được tạo.

{
	"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"
		}
	]
}
AssumeRole-Policy

Hãy thêm điều kiện sử dụng MFA vào trong Policy này như sau:

{
	"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",
			"Condition": {
                          "Bool": {
                            "aws:MultiFactorAuthPresent": "true"
                           }
                        }
		}
	]
}

Kiểm tra cài đặt nội dung MFA để xuất Credential Tạm thời

Để kiểm tra thực hiện cài đặt MFA thành công hay chưa, hãy thực hiện lại câu lệnh xuất Credential tạm thời với Assume Role dưới đây.



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

Với Credential đã được cài sẵn là của tài khoản "developer" (tài khoản dùng để AssumeRole) và Role dùng để AssumeRole là "RoleForAssumeByDeveloper", câu lệnh đầy đủ sẽ có dạng như sau:



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

Khi cài đặt thành công, một thông báo liên quan tới Security sẽ được hiển thị:

An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::123456789012:user/developer is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::123456789012:role/RoleForAssumeByDeveloper

Dịch nôm na là không có quyền truy cập vào tài khoản "developer" (tài khoản dùng để AssumeRole) để thực hiện ủy thác vai trò (Role) - "RoleForAssumeByDeveloper"

Tạo Credential tạm thời với tài khoản có sử dụng MFA

Thực hiện câu lệnh dưới đây tạo credential tạm thời với tài khoản có sử dụng MFA:

aws sts assume-role --role-arn "arn:aws:iam::<aws_acc_id>:role/<assume_role_name>" --role-session-name <session_name> --serial-number "<mfa_arn>" --token-code <mfa_token_code>

<mfa_arn> được lấy từ trang thông tin của tài khoản sau khi cài đặt MFA. <mfa_token_code> là 6 kí tự được sinh ra bởi MFA.

Với Credential đã được cài sẵn là của tài khoản "developer" (tài khoản dùng để AssumeRole) và Role dùng để AssumeRole là "RoleForAssumeByDeveloper", câu lệnh đầy đủ sẽ có dạng như sau:

aws sts assume-role --role-arn "arn:aws:iam::123456789012:role/RoleForAssumeByDeveloper" --role-session-name AWSCLI-Session --serial-number "arn:aws:iam::123456789012:mfa/developer" --token-code 123456

Sau khi thực hiện câu lệnh Credential tạm thời sẽ được sinh ra với dạng 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 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.



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

Tham khảo khác

Để biết rõ thêm về dịch vụ AWS STS xin tham khảo thêm tại đây.

Trong trường hợp có sử dụng SDK để phát triển phần mềm xin tham khảo bài dưới đây.

Leave a Reply