AWS DVA 항해기 - IAM 개요 & IAM 정책 & MFA

에옹이다아옹·2025년 2월 27일
0

AWS-DVA

목록 보기
1/8

AWS Developer Associate 시험을 준비하게 되었는데 복습용으로 차근차근 공부한 내용을 정리해보고자 한다.

IAM이란?

Identity and Access Management 의 약어로 AWS 리소스(자원)에 대한 액세스(접근)를 안전하게 제어할 수 있는 웹 서비스이다. IAM을 통해 어떤 대상에게 권한을 부여하거나 제어할 수 있다.

처음 AWS 계정을 생성하게 된다면 루트 계정을 생성하게 될텐데 루트 계정은 최대한 사용을 지양하고 루트 계정을 소유한 소유주도 IAM으로 사용자를 생성하는 것을 추천한다고 한다.

IAM 사용자(유저)는 그룹화할 수 있고 그룹은 사용자만 포함할 수 있으며 그룹 안에 그룹은 포함할 수 없다.

사용자는 반드시 그룹에 속할 필요는 없고 또한 사용자는 여러 그룹에 속할 수 있다.

IAM은 AWS가 제공하는 서비스에서 리전(Region)에 제약을 받지 않는 서비스라고 한다.

  • IAM 사용자 생성

    IAM 사용자 생성하기

    루트 계정으로 IAM 서비스에 접근 후 사용자 탭에서 사용자 생성을 클릭해준다.

사용할 사용자 이름을 입력하고 콘솔로 접근하도록 하고 싶다면
AWS Management Console에 대한 사용자 엑세스 권한 제공에 체크 후
액세스 권한 유형 및 콘솔 암호를 선택 후 입력하면 된다. 만약 임의로 타인의 IAM을 생성하게 되었다면 다음 로그인 시 새 암호를 설정하게 체크하는 것도 좋을 듯 하다.

권한 설정 화면이 나온다. 3가지 옵션이 있는데 기존에 존재하는 그룹이나 새로 생성할 그룹에 묶어 사용자를 추가할수도 있고 그룹에 추가하지 않고 개개인의 권한만 연결할수도 있다.

새로 생성한 계정이 그룹에 잘 들어가있음을 확인할 수 있다.

IAM 정책

IAM에서는 사용자(User) 에게 직접 권한을 붙일 수도 있고, 그룹(Group) 에 권한을 붙인 뒤 사용자를 해당 그룹에 넣어 자동으로 권한을 상속받게 할 수도 있음.
실제로 적용되는 권한(Effective permissions)은

  1. 사용자에 직접 붙인 정책

  2. 사용자가 속한 그룹에 붙은 정책

  • IAM 정책의 구조

{
    "Version": "2012-10-17",
    "Id": "S3-Account-Permissions",
    "Statement": [
        {
            "Sid" "1",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam:123456789012:root"
                ]
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::mybucket/*"
            ]
        }
    ]
}
Version: 정책 문법 버전 => YYYY-MM-DD 날짜 형식 사용

Id: 정책(Policy) 전체의 식별자(선택)

Statement: 하나 이상 배열(필수)

Sid: 각 Statement의 식별자(선택)

Effect: 특정 API에 접근하는 것을 허용/거부할지에 대한 내용

Principal: 리소스 기반 정책(S3 버킷 정책 등)이나 신뢰 정책(trust policy)에서만 사용
ID 기반 정책(사용자/그룹/역할에 붙이는 정책)에는 Principal을 쓰지 않음

Action / NotAction: 허용/거부할 API. 서비스 접두사(s3:GetObject)와 와일드카드(s3:*) 가능

Resource / NotResource: 적용 대상 리소스(ARN) / 여러 개면 배열 "*"도 가능

Condition: (선택) 시간/IP/태그 등 조건으로 더 정밀 제어

MFA

❓MFA란
=> 다중 인증(MFA)은 사용자에게 암호 이외의 추가 정보를 입력하도록 요구하는 다중 단계 계정 로그인 과정

비밀번호(1단계) + 추가 인증(2단계) 를 함께 요구해 계정을 더 안전하게 지키는 방식

=> 사용자가 비밀번호를 잃어버리거나 해킹당했더라도 사용자의 물리적 장치(디바이스)를 확보해야 하므로 계정 보호에 유리

  • MFA 디바이스 옵션

  1. Virtual MFA device(ex. Google Authenticator / Authy)
  2. Universal 2nd Factor Security Key
  3. Hardware Key Fob MFA Device

  • MFA 생성 방법

    MFA를 설정할 IAM 계정에 Security credentials 탭에 진입한 후

    우측 상단의 Assign MFA를 클릭한다.

    난 별도의 OTP나 실물 passkey가 없으므로 Authenticator app으로 인증하려고 한다

    QR 코드를 Authenticator 앱에서 스캔하면 6자리가 뜨는데 그걸 3번 항목의 첫번째 인풋 박스에 넣어주고 30초가 지나면 두번째 새로운 6자리가 뜬다 그때 2번째 인풋을 채워준다! 그리고 Add MFA! 클릭!!

    MFA가 잘 생성된 것 같다..!


  • MFA가 쓰이는 곳?

    콘솔 로그인: 사람(직원) 계정이 콘솔 들어갈 때 6자리 코드 또는 보안키 터치 요구

    API/CLI 호출 강화
    - sts:GetSessionToken(사용자) 또는 sts:AssumeRole(역할 가정) 시 MFA 코드를 제출해서 단기 세션 자격증명을 발급
    - 정책 Condition 으로 “MFA 했을 때만” 민감 API 허용 가능

    "Condition": {
            "Bool": { "aws:MultiFactorAuthPresent": "true" }
          }

    특수보호: S3 MFA Delete(버전 관리 켠 버킷에서 삭제/영구삭제에 MFA 요구)

profile
숲(구조)을 보는 개발자

0개의 댓글