안녕하세요. CTS 팀 이주원 입니다.


최근 기술지원 중인 한 고객사에서 IAM 관련한 보안사고가 발생하였습니다.

IAM 에서 사용자를 생성한 후 AWS Console 또는 CLI에서 사용 시 비밀번호 또는 Access Key 에 대한 관리 부분에서 이슈가 발생하였습니다.



이를 대비하기 위해 무분별한 User 생성 또는 Access Key 생성을 지양하고 필요한 정책만 부여해 관리 해야합니다.

또한, MFA를 활성화 하는 방법으로 본인 외 다른 사용자가 해당 IAM User를 사용에 대해 보호해야 합니다.



오늘은 IAM User에 대해 MFA 활성화 이후에도 Access Key를 사용한 CLI 환경에서 MFA 설정을 적용하기 위한 방법을 소개하고자 합니다.

(해당 절차를 누락할 경우 MFA 활성화 에도 CLI 환경에서 지속적으로 작업을 수행하게 되므로 MFA를 통한 보안 관련하여 중요하게 작용할 수 있습니다.)





문제 확인)


테스트를 위해 IAM User를 새로 생성한 후 s3 정책을 부여하여 CLI 환경에서 작업을 테스트해봅니다.

(테스트 IAM User에 대해 솔루션 작성 이 후 모두 삭제를 진행하여 해당 정보는 유효하지 않습니다.)




test-cli-user 사용자 생성


s3 정책 할당


엑세스 키 ID/PW 확인 후 CLI 환경에서 Configure 진행

> 액세스키 ID / 비밀 엑세스 키 복사

> CLI 환경 : aws configure 명령어 실행 - 키 ID, 엑세스 키 입력

> CLI 환경 : aws configure list 명령어 실행하여 적용 확인







현재는 MFA 활성화 하지 않았으며, CLI 환경에서 aws s3 ls 명령어를 통해 s3 리스트를 출력하는 명령어가 잘 수행됨.







이 후 콘솔에서 해당 IAM User에 MFA 활성화 진행 (MFA 활성화 방법은 "MFA 활성화" 솔루션 참고)





MFA 활성화 이후에도 해당 User에 대해 aws s3 ls 명령어가 그대로 수행됨.




확인결과 : 테스트를 통해 확인한 결과 해당 IAM User에 대해 콘솔에서 MFA 활성화를 진행함에도 불구하고 CLI 환경에서는 명령어가 그대로 수행됩니다.







적용방법)


이와 같이 MFA 활성화 이후에 해당 User에 대해서 CLI 환경에서도 MFA 설정 적용을 하기 위해서는

해당 User 에 아래와 같은 정책을 부여해야 합니다.


해당 정책은 MFA 설정 여부를 확인하여 서비스들에 대한 Access Denied 를 실행시킴.

참고 URL : https://aws.amazon.com/ko/premiumsupport/knowledge-center/mfa-iam-user-aws-cli/


{


            "Sid": "BlockMostAccessUnlessSignedInWithMFA",

            "Effect": "Deny",

            "NotAction": [

                "iam:CreateVirtualMFADevice",

                "iam:DeleteVirtualMFADevice",

                "iam:ListVirtualMFADevices",

                "iam:EnableMFADevice",

                "iam:ResyncMFADevice",

                "iam:ListAccountAliases",

                "iam:ListUsers",

                "iam:ListSSHPublicKeys",

                "iam:ListAccessKeys",

                "iam:ListServiceSpecificCredentials",

                "iam:ListMFADevices",

                "iam:GetAccountSummary",

                "sts:GetSessionToken"

            ],

            "Resource": "*",

            "Condition": {

                "Bool": {

                    "aws:MultiFactorAuthPresent": "false"

                }

            }

}







정책 부여 이 후 동일하게 CLI 환경에서 aws s3 ls 명령어 실행한 결과 Access Denied 가 발생함





이 와 같이 정책을 부여해야 해당 User에 대해 CLI 환경에서도 MFA 설정 여부를 판단하여 AWS 리소스에 대한 작업 권한을 관리할 수 있습니다.








+ 추가)


MFA 활성화와 정책을 부여하여 CLI 환경에 적용한 이후에 해당 User를 MFA 인증 후 CLI 에서 사용하는 방법

참고 URL : https://aws.amazon.com/ko/premiumsupport/knowledge-center/authenticate-mfa-cli/



우선, 콘솔에서 MFA 활성화 이 후 부여된 arn 을 확인합니다.




CLI 환경에서 아래와 같은 명령어를 수행하여 MFA 인증된 세션 토큰을 발행합니다. (ARN 과 토큰번호는 알맞게 수정)

해당 토큰은 일시적으로 유효하며 Expiration 에 만료시간이 표시됩니다.



aws sts get-session-token --serial-number ARN --token-code 토큰번호






생성된 토큰에서 엑세스키 ID, 비밀엑세스키, 세션토큰 을 확인 후 환경변수를 설정하는 방법으로 CLI 환경 Configure를 변경


export AWS_ACCESS_KEY_ID=엑세스키ID

export AWS_SECRET_ACCESS_KEY=비밀엑세스키

export AWS_SESSION_TOKEN=세션토큰




이 후 aws s3 ls 명령어 실행하여 정상적으로 수행하는 것을 확인





*위 Configure 방법은 환경변수를 설정하는 방법으로, 이후에 Cofigure를 변경하기 위해서는 아래와 같이 unset 명령어를 통해 리셋해줘야합니다.


unset AWS_ACCESS_KEY_ID

unset AWS_SECRET_ACCESS_KEY

unset AWS_SESSION_TOKEN






이번 솔루션은 IAM User에 대해 MFA 활성화 이 후 CLI 환경에서도 MFA 활성화 적용 및 MFA 인증을 통한 사용방법에 대해 다루어보았습니다.

글에 맨 처음에 언급했듯이 IAM User는 AWS 서비스의 계정과도 같은 역할이므로 특히 정책권한을 가지고 있을때에는 해당 사용자에 대해 보안을 강화해야 합니다.


무분별한 User 사용을 줄이고 정책 또는 역할을 통해 관리하며, 필요시 MFA 활성화 등으로 보안을 강화하여 사용하시는 것을 추천드립니다! ?













테스트 환경 :

 - AWS Console

 - MFA 활성화 : 가상 디바이스 / Twilio Authy

 - AWS CLI v2

 - Ubuntu Linux (CLI 환경)






감사합니다.


CTS팀

이주원