Journey to Security/클라우드

[AWS] IAM 사용자·그룹·MFA 설정 및 CLI 연동

Cordilog 2026. 7. 2. 18:15

AWS 계정을 처음 세팅할 때 가장 먼저 잡아야 하는 것은 접근 통제다.

루트를 봉인하고 실습에 사용할 IAM 사용자를 최소 권한으로 만들고, CLI가 그 사용자로 서명하도록 연결해보자.

  • 리전: ap-northeast-2 (서울)
  • CLI 환경: 리눅스 VM (Ubuntu 계열 기준)
  • 완료 후 상태: 루트 봉인 · IAM 사용자 콘솔·CLI 접근 · MFA 이중 등록

1. 설정 순서

CLI 설치 → 루트 MFA → IAM 사용자·그룹 생성 → 사용자 MFA → 액세스 키 발급 → CLI 연동 검증

 

2. AWS CLI 설치

리눅스 VM에서 AWS API를 호출할 수 있게 CLI v2를 설치한다.

apt로 설치되는 v1은 오래되었으므로 공식 바이너리를 사용한다.

1️⃣ 필요 패키지 설치

sudo apt update
sudo apt install -y unzip curl

2️⃣ 아키텍처 확인

uname -m

x86_64가 나오면 아래 URL을 그대로 사용하고, aarch64가 나오면 URL 끝의 x86_64aarch64로 바꾼다.

 

3️⃣ CLI 다운로드 및 설치

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

4️⃣ 설치 확인

aws --version

aws-cli/2.x.x Python/3.x.x Linux/... 형태의 출력이 나오면 정상적으로 설치된 것이다.

이 시점에는 아직 자격 증명이 없으므로 API 호출은 실패한다.

 

3. 루트 계정 MFA 활성화

루트는 IAM 정책으로도 권한을 제한할 수 없는 유일한 계정이다.

루트가 유출되면 방어 수단이 없으므로 MFA로 잠근 뒤 IAM 설정이 완료된 이후부터는 사용하지 않는다.

MFA 요약: 비밀번호(아는 것)와 인증 앱의 6자리 코드(가진 것)를 결합한 이중 인증. 인증 앱은 등록 시 QR로 받은 시드와 현재 시각을 조합해 30초마다 새 코드를 생성한다.

 

1️⃣ 콘솔 진입

  1. 루트 이메일로 AWS 콘솔 로그인
  2. 우측 상단 계정명 클릭 → Security credentials

2️⃣ MFA 디바이스 등록

  1. Multi-factor authentication 섹션 → Assign MFA device
  2. MFA device name: root-mfa
  3. Authenticator app 선택 → 다음
  4. 스마트폰 인증 앱(예: Google Authenticator, Authy)으로 QR 스캔
  5. 앱에 표시된 6자리 코드를 30초 간격으로 2회 입력

두 번 입력하는 것은 시드가 올바르게 등록되었고 시계가 동기화되었음을 두 시간창에서 검증하기 위함이다.

3️⃣ 봉인

등록이 끝나면 로그아웃한다. 이후 단계에서 액세스 키 발급 시점에만 한 번 더 사용한다.

 

4. IAM 사용자 생성

실습에서 사용할 사용자와 그룹을 만든다.

1️⃣ 사용자 정보 입력

  1. IAM 콘솔 → 사용자사용자 생성
  2. 사용자 이름: securedeploy-admin
  3. AWS Management Console에 대한 사용자 액세스 권한 제공 체크
  4. 콘솔 암호: 사용자 지정 암호로 직접 설정
  5. 사용자는 다음 로그인 시 새 암호를 생성해야 합니다 체크 해제 (불필요)
  6. 다음

2️⃣ 그룹 생성 및 정책 연결

권한 설정 화면에서 그룹에 사용자 추가 선택 → 그룹 생성 클릭.

  • 그룹 이름: LabAdmins
  • 정책 검색창에서 아래 3개를 체크:
정책 이름 용도
AmazonEC2FullAccess EC2 인스턴스 관리 (Phase 3 이후)
AmazonVPCFullAccess VPC 네트워크 구성 (Phase 2)
IAMReadOnlyAccess IAM 콘솔에서 사용자·그룹 조회

 

사용자 그룹 생성 클릭 → 생성된 LabAdmins가 체크된 상태 확인 → 다음사용자 생성.

 

🔵 IAMReadOnlyAccess를 넣는 이유
이 정책이 없으면 새 사용자로 로그인했을 때 IAM 콘솔이 열리자마자 iam:ListUsers가 거부되어 사용자 목록이 보이지 않는다. EC2·VPC 정책은 IAM 조회 액션을 포함하지 않기 때문이다.

 

3️⃣ 로그인 URL 확인

 

사용자 생성 완료 화면에 나오는 콘솔 로그인 URL을 메모하거나 csv 파일로 다운로드한다.

형식은 다음과 같다.

https://<계정ID>.signin.aws.amazon.com/console

 

로그인 URL로 접속하면 IAM 사용자 로그인 폼이 바로 뜬다.

 

5. IAM 사용자 MFA 활성화

새로 만든 securedeploy-admin에도 MFA를 붙인다.

루트와 IAM 사용자는 서로 다른 자격 증명이므로 MFA도 각각 등록해야 한다.

1️⃣ 사용자 상세 진입

  1. IAM 콘솔 → 사용자 → securedeploy-admin 클릭
  2. 보안 자격 증명

 

 

2️⃣ MFA 등록

  1. 다중 인증(MFA) 섹션 → MFA 디바이스 할당
  2. 디바이스 이름: securedeploy-admin-mfa
  3. Authenticator app 선택 → QR 스캔 → 코드 2회 입력

이렇게 IAM 계정의 MFA가 활성화되면 인증 앱(예: Google Authenticator) 안에는 root-mfa와 securedeploy-admin-mfa 두개가 뜨게 된다.

 

6. 액세스 키 발급

CLI가 IAM 사용자로 API를 호출하려면 액세스 키 ID와 시크릿 액세스 키가 필요하다.

1️⃣ iam:CreateAccessKey

securedeploy-admin은 IAM 관련 정책으로 IAMReadOnlyAccess만 가지고 있어 자기 자신의 키 생성(iam:CreateAccessKey)이 불가능하다.

따라서 키 발급도 루트에서 수행한다.

실무에서도 신규 사용자의 초기 키는 관리자가 대신 발급해 안전한 채널로 전달하는 것이 일반적이다.

2️⃣ 발급 절차

  1. 루트 계정이 아니라면 루트 계정으로 로그인
  2. IAM 콘솔 → 사용자 → securedeploy-admin → 보안 자격 증명
  3. 액세스 키 섹션 → 액세스 키 만들기
  4. 사용 사례: Command Line Interface (CLI) 선택
  5. 위의 권장 사항을 이해했으며... 체크 → 다음
  6. 설명 태그: securedeploy-cli
  7. 액세스 키 만들기.csv 파일 다운로드

🚨주의: 시크릿 액세스 키는 이 화면에서만 확인할 수 있다.

.csv를 반드시 다운로드하고, 안전한 곳에 보관한다.

분실 시에는 새로 발급받고 기존 키를 비활성화·삭제해야 한다.

3️⃣ 루트 로그아웃

키 발급이 끝나면 루트에서 로그아웃한다.

이후 모든 작업은 securedeploy-admin으로 진행한다.

 

7. CLI 연동 및 검증

발급받은 키를 리눅스 VM의 CLI에 설정하고, 실제로 IAM 사용자로 서명이 이루어지는지 확인한다.

1️⃣ CLI 설정

리눅스 터미널에서:

aws configure

프롬프트에 순서대로 입력한다.

AWS Access Key ID [None]     : (csv의 Access key ID)
AWS Secret Access Key [None] : (csv의 Secret access key)
Default region name [None]   : ap-northeast-2
Default output format [None] : json
 

입력한 값은 ~/.aws/credentials~/.aws/config에 저장된다.

이 파일들은 평문이므로 사용자 권한 관리에 유의한다.

2️⃣ 자격 증명 검증

aws sts get-caller-identity

sts:GetCallerIdentity는 별도 정책 없이도 호출 가능한 액션으로, 현재 요청을 서명한 자격 증명이 누구인지 반환한다.

자격 증명 검증의 표준 도구다.

 

정상 출력 예시:

{
    "UserId": "AIDAUEPEJ4P3VQRZQRLF7",
    "Account": "28********87",
    "Arn": "arn:aws:iam::28********87:user/securedeploy-admin"
}

Arn 필드에 user/securedeploy-admin이 나타나면 IAM 사용자 자격 증명이 정상적으로 연결된 것이다.

root로 나온다면 잘못된 키가 들어간 것이므로 aws configure를 다시 실행한다.

3️⃣ 권한 확인 (선택)

권한이 실제로 부여되었는지도 확인해 볼 수 있다.

aws ec2 describe-regions --region ap-northeast-2
aws iam list-users

두 명령 모두 정상 응답이 나오면 EC2 권한과 IAM 조회 권한이 그룹을 통해 상속되고 있음을 확인한 것이다.

8. 완료 상태 체크리스트

항목 확인 방법
루트 MFA 등록 콘솔 로그인 시 코드 입력 창이 뜨는가
루트 봉인 이후 단계에서 루트 미사용
IAM 사용자 생성 로그인 URL로 콘솔 접속 가능한가
그룹 정책 부착 EC2/VPC/IAM 조회 모두 가능한가
IAM 사용자 MFA 인증 앱에 항목 2개(root, admin) 확인
액세스 키 .csv 안전 보관
CLI 연동 sts get-caller-identity의 Arn이 IAM 사용자인가

9. 트러블슈팅

🔵 aws configure 후 명령이 Unable to locate credentials로 실패
~/.aws/credentials 파일 소유자와 권한을 확인한다. 다른 사용자로 sudo aws configure를 실행하면 root의 홈 디렉터리에 저장되어 일반 사용자에서 읽지 못한다.

🔵 IAM 콘솔에서 iam:ListUsers 거부 에러
IAMReadOnlyAccess가 그룹에 붙어 있는지, 사용자가 그 그룹에 소속되어 있는지 확인한다.

🔵 액세스 키 시크릿을 잃어버린 경우
복구 불가. 기존 키를 비활성화·삭제하고 루트로 다시 로그인해 새 키를 발급한다.