새소식

클라우드/AWS

[AWS] MFA 인증해야 서비스 접근 가능하도록 정책 설정

  • -

AWS 계정의 보안은 매우 중요하며, 계정의 안전성을 유지하기 위해서는 적절한 보안 조치가 필요합니다. 그 중에서도 다중 요소 인증(Multi-Factor Authentication, MFA)은 중요한 보안 요소 중 하나로, 계정에 로그인할 때 추가적인 인증 단계를 거쳐 보안을 강화할 수 있습니다. 이에 따라 AWS 인증 시 MFA Mandatory 정책을 적용하여 AWS 사용자들의 MFA 인증을 강제화 하는 방법을 알아보겠습니다.


MFA(다중 요소 인증)이란?

MFA는 사용자가 계정에 로그인할 때 패스워드 입력 후 OTP와 같은 추가적인 인증 단계를 거쳐 보안을 강화하는 기술입니다. 일반적으로 두 가지 이상의 인증 요소를 통과해야만 로그인이 허용되며, 보통은 "무엇을 알고 있는가(비밀번호)", "무엇을 소유하고 있는가(보안 토큰 또는 스마트폰)", "무엇인가(지문, 홍채 등)" 등의 다양한 인증 요소가 있습니다. 이를 통해 계정에 대한 무단 접근을 방지하고 보안을 강화할 수 있습니다.

 

AWS에서의 MFA Mandatory 정책의 중요성

AWS는 고객의 데이터를 보호하기 위해 다양한 보안 기능을 제공하고 있습니다. 그 중에서도 MFA는 계정 보안 강화에 매우 중요한 역할을 수행합니다. 이를 통해 계정에 대한 무단 접근을 방지하고, 악의적인 공격자로부터 계정이 탈취될 수 있는 위험에서 크게 벗어날 수 있습니다.

 

정책 적용 방법

우선 AWS 관리자 계정으로 IAM > 정책 항목으로 이동하여 다음 [그림 1]과 같이 우측의 정책 생성 버튼을 클릭합니다.

[그림 1] 정책 생성 클릭

정책 편집을 위해 JSON을 선택하고나서 편집란에 아래의 코드를 입력합니다.

[그림 2] JSON 정책 편집 화면

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowManageOwnPasswords",
            "Effect": "Allow",
            "Action": [
                "iam:GetAccountPasswordPolicy",
                "iam:ChangePassword",
                "iam:GetUser"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
            "Sid": "ViewAndUpdateAccessKeys",
            "Effect": "Allow",
            "Action": [
                "iam:UpdateAccessKey",
                "iam:CreateAccessKey",
                "iam:ListAccessKeys"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
            "Sid": "AllowListActions",
            "Effect": "Allow",
            "Action": [
                "iam:ListUsers",
                "iam:ListVirtualMFADevices"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowIndividualUserToListOnlyTheirOwnMFA",
            "Effect": "Allow",
            "Action": [
                "iam:ListMFADevices"
            ],
            "Resource": [
                "arn:aws:iam::*:mfa/*",
                "arn:aws:iam::*:user/${aws:username}"
            ]
        },
        {
            "Sid": "AllowIndividualUserToManageTheirOwnMFA",
            "Effect": "Allow",
            "Action": [
                "iam:CreateVirtualMFADevice",
                "iam:DeleteVirtualMFADevice",
                "iam:EnableMFADevice",
                "iam:ResyncMFADevice"
            ],
            "Resource": [
                "arn:aws:iam::*:mfa/*",
                "arn:aws:iam::*:user/${aws:username}"
            ]
        },
        {
            "Sid": "AllowIndividualUserToDeactivateOnlyTheirOwnMFAOnlyWhenUsingMFA",
            "Effect": "Allow",
            "Action": [
                "iam:DeactivateMFADevice"
            ],
            "Resource": [
                "arn:aws:iam::*:mfa/*",
                "arn:aws:iam::*:user/${aws:username}"
            ],
            "Condition": {
                "Bool": {
                    "aws:MultiFactorAuthPresent": "true"
                }
            }
        },
        {
            "Sid": "BlockMostAccessUnlessSignedInWithMFA",
            "Effect": "Deny",
            "NotAction": [
                "iam:CreateVirtualMFADevice",
                "iam:DeleteVirtualMFADevice",
                "iam:EnableMFADevice",
                "iam:ListMFADevices",
                "iam:ListUsers",
                "iam:ListVirtualMFADevices",
                "iam:ResyncMFADevice",
                "iam:GetUser",
                "iam:ChangePassword",
                "iam:UpdateAccessKey",
                "iam:CreateAccessKey",
                "iam:ListAccessKeys"
            ],
            "Resource": "*",
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "false"
                }
            }
        }
    ]
}

해당 코드를 요약해서 설명하자면, MFA 인증을 받지 않는 유저는 패스워드 변경과 MFA 등록에 필요한 권한 이외의 서비스는 이용할 수 없도록 하는 것입니다.

 

코드를 입력하고 다음으로 넘어가면 태그가 나오는데, 그냥 넘어가도 무방합니다.

그리고 적당한 이름과 설명을 입력하고 정책 생성을 클릭합니다. 여기서는 이름에 mfa_mandatory라고 입력했습니다.

[그림 3] 정책 생성 화면

정책이 정상적으로 생성되었다면 해당 정책을 사용자 혹은 사용자 그룹에 연결시킬 수 있습니다.

IAM > 사용자 그룹 항목에서 [그림 4]와 같이 권한에서 정책 연결을 클릭합니다.

[그림 4] 사용자 그룹에 정책 연결

 

위에서 생성한 mfa_mandatory 정책을 선택하고 권한 추가를 클릭합니다.

[그림 5] 연결한 정책 선택

 

정상적으로 권한 추가가 완료되면 해당 사용자 그룹에 속해있는 사용자들은 자동으로 mfa_mandatory 정책이 적용되게 됩니다.

 

정책 검증 및 MFA 인증 과정

정책이 적용되어 있는 그룹에 속해있는 계정으로 로그인하여 IAM 화면으로 접근해보겠습니다.

[그림 6] MFA 정책 적용 후 1차 인증한 유저의 IAM 화면

[그림 6]에서 보이는 IAM 화면을 포함한 다른 서비스에 접근해보아도 엑세스가 거부되었다는 권한 문제가 발생하는 것을 확인할 수 있습니다. 이는 앞서 설명하였듯, 정책이 설정된 유저가 MFA 인증을 받지 않고 로그인하였기 때문입니다.

 

해당 문제를 해결하기 위해서는 MFA를 등록하여 다시 로그인하는 과정에서 MFA 인증을 받아야 합니다.

 

위의 [그림 6]에서 보이는 MFA 추가 버튼을 클릭하여 MFA 디바이스 할당을 진행해봅시다.

[그림 7] MFA 디바이스 할당 클릭 화면

MFA 인증 방식을 선택해야 합니다. 여기서는 인증 관리자 앱을 선택하겠습니다. 참고로 MFA 인증을 위한 앱은 Google OTP, Authy 등이 있습니다.

[그림 8] MFA 디바이스 선택 화면

다음으로 넘어가면 MFA 코드를 입력하는 화면이 나옵니다.

[그림 9] MFA 디바이스의 MFA 코드 입력

[그림 9]의 2번에서 QR 코드 표시 버튼을 누르면 QR 코드가 보이게 됩니다. Google OTP와 같은 인증 앱에서 해당 QR 코드를 캡처하여 생겨난 MFA 코드를 2번 입력해야 합니다. 약 30초 마다 MFA 코드가 갱신될텐데, MFA 코드 1에 입력하고 갱신된 코드를 아래 MFA 코드 2에 입력하면 되겠습니다.

 

정상적으로 MFA가 등록되었더라도 아직 MFA 인증을 통한 로그인이 이루어지지 않은 상태이기 때문에 여전히 권한이 없다는 문구가 여기저기 보일 겁니다. 로그아웃 후에 다시 패스워드를 입력하여 1차 인증을 받으면 다음 [그림 10]과 같이 MFA 코드를 입력하는 화면이 나옵니다.

[그림 10] MFA 2차 인증 화면

앞서 생성한 인증 앱에서 표시되는 MFA 코드를 입력하여 정상적으로 로그인하면 해당 계정에 주어진 권한 내에서 서비스에 접근할 수 있는 것을 확인할 수 있습니다.

 

⚠️해당 정책이 적용된 계정으로는 AWS CLI도 MFA 인증을 받아야 aws 명령을 수행할 수 있다는 점 참고해주세요!!⚠️

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.