[AWS] SSM을 이용한 EC2 접근 - 보안강화 버전(aws-valut, MFA 사용)
IT/AWS

[AWS] SSM을 이용한 EC2 접근 - 보안강화 버전(aws-valut, MFA 사용)

반응형

Intro

오늘은 AWS SSM(System manager)을 이용하여 EC2접근할때 보안을 강화시킬 수 있는 방법에 대해 알려드리도록 하겠습니다.
앞전에 보안은 고려하지 않고 SSM을 사용해서 ec2를 접근하는 방법을 블로그 했었습니다. [https://kim-dragon.tistory.com/110] 오늘은 여기에 보안을 강화시킨 버전입니다.

우선 SSM을 사용하여 EC2 서버에 접근하는 것 자체가 기존 ssh pem key를 사용하는 방식보다 더 보안이 좋다고 할 수 있습니다. 그 이유는 pem key는 파일 형태로 존재하며 해당 pem파일이 유실될 가능성이 있기 때문입니다. 물론 ssh를 접근 방식을 key방식이 아닌 패스워드 방식으로 변경하여 설정할 수도 있지만 이 경우 유저관리와 패스워드 변경주기 등 여러가지 관리 포인트가 늘어나게 됩니다.

SSM을 사용하여 EC2로 접근할때 보안의 가장 큰 이슈 두가지와 해결책

1. 서버 접근 대상에 대한 제어를 어떻게 할것인지?

AWS SSM을 사용하여 EC2에 접근하는 방식은 AWS IAM User를 사용하며 이에 할당되는 credentials key를 통해 aws cli로 ssm리소스를 사용하는 방식입니다. 따라서 IAM User에게 특정 EC2에만 접근할 수 있도록 Policy를 설정할 수 있습니다.

여기에서 credential key가 노출될 가능성이 있기 때문에 key관리에 대한 이슈가 발생합니다. 이를 해결할 수 있는 방법은 aws-vault 입니다. aws-vault를 이용하면 (mac OS기준으로) keychain에 안전하게 credentials key를 관리할 수 있습니다.

2. 서버 접근시 MFA(Multi factor authentication)인증 과정이 있는지?

SSM을 사용하여 서버접근을 할때 IAM User를 사용하게 된다고 했었죠. 그 이유가 aws cli를 사용하여 ssm리소스에 접근해야 하기 때문인데요. 이 IAM User에게 MFA 설정을 하여 보안을 강화 할 수 있습니다. 저는 google authentifacation을 사용하여 MFA설정을 하였습니다. MFA설정을 할 경우 한번 더 인증 과정을 거치기 때문에 credentials key가 외부에 노출이되어도 타인이 해당 키를 사용할 수 없게 됩니다.

SSM을 사용한 EC2 접근 구조도 (보안강화 버전)

  1. aws-valut를 이용하면 keychain에 Credentials key를 저장할 수 있습니다. 저장된 key를 가져옵니다.
  2. credentials key를 사용하기 위해 MFA인증을 합니다.
  3. aws-vault를 사용하였기 때문에 sts에서 임시 세션키를 가져오게 됩니다. (aws-vault의 세션 타임아웃은 기본 1시간)
  4. 해당 임시 세션키로 aws cli 명령어를 사용이 가능하며 ssm 리소스를 호출하여 EC2에 접근합니다. EC2에 접근은 IAM User에 policy로 관리 합니다.

aws-vault 설치 및 설정

aws-vault 설치

brew install aws-vault

AWS credential key 정보 등록

만약 기존에 aws cli 를 사용한 이력이 있으면 ~/.aws/credentials 에 텍스트로 credential key가 그대로 들어있는것을 확인할 수 있습니다. 이 경우 키가 별다른 인증 절차 없이 노출이되어있기 때문에 해당 파일은 더이상 사용하지 않도록 삭제하는 것이 좋습니다. aws-vault는 mac os의 경우 keychain에 credential key를 저장합니다.

aws-vault add <PROFILE_NAME>
Enter Access Key ID: .....
Enter Secret Access Key: .....
Added credentials to profile "<PROFILE_NAME>" in vault

<PROFILE_NAME> 은 사용자가 기억하기 쉬운 이름으로 지정하고 AWS credentials 정보(Accesskey, Secretkey) 를 입력합니다.

인증정보를 keychain에 등록하기위해 OS사용자 패스워드를 입력하면 완료가 됩니다.

MFA 설정

Google Authenticator 다운로드

앱스토어를 통해서 Google Authenticator 를 다운로드 합니다.

IAM User MFA기능 활성화

AWS콘솔 - IAM - User - 해당유저 - Security Credentials 탭 - Assigned MFA device Manage - Virtual MFA device - Show QR code

다운받은 Google Authenticator 에서 QR code 스캔하여 등록하면 6자리 숫자가 나오며 2번에 걸쳐서 숫자를 입력함

~/.aws/profile 에 MFA 사용 설정

<PROFILE_NAME>을 test라고 설정하였을 경우 아래와 같이 mfa_serial을 추가 합니다.

[profile test]
region=ap-northeast-2
output=json
cli_pager=
mfa_serial=arn:aws:iam::123456789012:mfa/kimdragon50

IAM User에 EC2 접근 제한 Policy 설정하기

credential key를 생성한 IAM User가 특정 EC2 Instance에 만 접속이 가능하도록 권한을 주기 위해 아래와 같이 policy를 설정 합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:StartSession"
            ],
            "Resource": [
                "arn:aws:ec2:us-east-2:123456789012:instance/i-1234567890EXAMPLE",
                "arn:aws:ec2:us-east-2:123456789012:instance/i-abcdefghijEXAMPLE",
                "arn:aws:ec2:us-east-2:123456789012:instance/i-0e9d8c7b6aEXAMPLE"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:TerminateSession",
                "ssm:ResumeSession"
            ],
            "Resource": [
                "arn:aws:ssm:*:*:session/${aws:username}-*"
            ]
        }
    ]
}

SSM을 통해 EC2 접속하기 (aws-vault 사용)

aws-vault exec 명령어를 통해 사용자가 추가한 Profile으로 -- 뒤에 aws cli 명령어를 입력할 수 있습니다. 아래와 같이 ssm으로 ec2에 접근하는 명령어 aws ssm start-session --target <EC2_INSTANCE_ID> 를 입력합니다.

aws-vault exec <PROFILE_NAME> -- aws ssm start-session --target <EC2_INSTANCE_ID>
Enter token for arn:aws:iam::123456789012:mfa/kimdragon50: 517992
Starting session with SessionId: kimdragon50-00144d451e4945b5d
sh-4.2$

그러면 MFA 번호 입력을 하고 keychain 비밀번호를 입력하면 EC2에 접근이 가능하게 됩니다.

반응형