[AWS] IAM (Identity and Access Management)

artp·2024년 11월 26일
0

aws

목록 보기
12/13
post-thumbnail

IAM(Identity and Access Management)이란?

IAM이란 무엇인가?

IAM(Identity and Access Management)은 AWS 리소스에 대한 ‘누가’, ‘무엇을’, ‘어떻게’ 접근할 수 있는지를 안전하게 제어하는 서비스입니다.
인증(Authentication)과 권한 부여(Authorization)를 모두 다루며, AWS에서 사용자, 그룹, 역할, 정책 등을 통해 세밀한 보안 통제를 제공합니다.

IAM의 주요 기능과 구성 요소

AWS 계정을 생성하면 기본적으로 모든 권한을 가진 루트 사용자가 생성되며, 이후 일반 사용자는 IAM 사용자로 만들어서 관리하는 것이 보안상 안전합니다.

1. IAM 사용자(User)

  • 정의: AWS 리소스에 접근하도록 설정된 개인 사용자 계정
  • 역할: 특정한 권한(예: S3 읽기/쓰기, EC2 관리 등)을 부여받아 AWS 작업을 수행
  • 사용 예시:
    • 회사에서 직원별로 IAM 사용자를 생성하여 개별 계정으로 AWS 리소스에 접근
    • IAM 사용자는 AWS Management Console에 로그인하거나 CLI, API, SDK를 통해 작업 가능

2. IAM 그룹(Group)

  • 정의: 여러 IAM 사용자를 묶어서 공통된 권한을 부여하는 단위.
  • 역할: 사용자마다 개별 권한을 부여하지 않고, 그룹에 권한을 부여해 관리 효율성 향상
  • 사용 예시:
    • "개발팀" 그룹에 S3 버킷 읽기/쓰기 권한을 부여하여 모든 개발자가 동일한 권한을 갖도록 설정

3. IAM 역할(Role)

  • 정의: IAM 역할(Role)은 특정 권한을 임시로 부여할 수 있는 자격 증명 단위로, 사람이 아닌 AWS 서비스나 외부 사용자(다른 AWS 계정 등)가 권한을 위임받아 리소스에 접근할 수 있게 합니다.
  • 역할: 액세스 키 없이도 AWS 서비스가 안전하게 리소스에 접근할 수 있도록 지원
  • 사용 예시:
    • EC2 인스턴스에서 S3 버킷 파일을 읽기 위해 IAM 역할을 사용.

4. IAM 정책(Policy)

  • 정의: IAM 사용자, 그룹, 역할에 부여할 권한을 정의하는 JSON 형식의 문서
  • 역할: 어떤 리소스에 어떤 작업을 허용할지 명시
  • 사용 예시:
    • 특정 S3 버킷에 "읽기" 권한만 부여하는 정책 작성.
    • JSON 문서 예:
      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::example-bucket/*"
          }
        ]
      }
      • 위 예시는 example-bucket 버킷 내의 모든 객체에 대해 읽기(GET) 작업을 허용합니다. 즉, 해당 버킷에 저장된 파일을 다운로드할 수 있는 권한입니다.

5. 액세스 키(Access Key)

  • 정의: IAM 사용자의 AWS 리소스 접근을 인증하기 위한 인증 정보
  • 구성: 두 가지로 구성됨
    • 액세스 키 ID: 사용자를 식별하는 키
    • 비밀 액세스 키: 요청을 인증하기 위해 사용하는 비밀 키
  • 용도:
    • AWS CLI, SDK, 또는 API를 통해 AWS 리소스에 접근
    • 콘솔 로그인이 아닌 프로그래밍적으로 AWS를 사용할 때 필요
  • 보안 주의사항:
    • 비밀 액세스 키는 절대 노출되지 않아야 함
    • 사용하지 않는 액세스 키는 비활성화 또는 삭제

IAM과 액세스 키의 관계

  1. IAM 사용자: 권한의 소유자

    • IAM 사용자는 AWS 리소스에 접근할 수 있는 권한을 부여받습니다.
    • 예: S3 버킷의 읽기/쓰기 권한
  2. 액세스 키: 권한에 접근하기 위한 인증 수단

    • IAM 사용자가 AWS CLI, SDK, 또는 API를 통해 AWS 리소스에 접근할 때 필요한 인증 정보입니다.
    • 예: aws s3 ls 명령어로 S3 버킷 목록 조회 시, 액세스 키를 사용해 IAM 사용자의 권한을 인증

IAM 정책(JSON) 예제 모음

IAM 정책은 다음과 같은 JSON 구조로 작성됩니다.

{
  "Version": "2012-10-17",
  "Statement": [ ... ]
}

Allow 예제 - S3 객체 읽기

{
  "Effect": "Allow",
  "Action": "s3:GetObject",
  "Resource": "arn:aws:s3:::example-bucket/*"
}
  • example-bucket 내 모든 객체에 대해 읽기(GET) 작업 허용

Deny 예제 - S3 객체 삭제 금지

{
  "Effect": "Deny",
  "Action": "s3:DeleteObject",
  "Resource": "arn:aws:s3:::example-bucket/*"
}
  • 객체 삭제를 무조건 금지
  • Deny는 Allow보다 항상 우선 적용됨

Condition 예제 - 특정 IP만 허용

{
  "Effect": "Allow",
  "Action": "s3:*",
  "Resource": "arn:aws:s3:::example-bucket/*",
  "Condition": {
    "IpAddress": {
      "aws:SourceIp": "203.0.113.0/24"
    }
  }
}
  • 특정 IP 대역에서만 S3 작업 허용

Condition + MFA - 다단계 인증 필수

{
  "Sid": "RequireMFAForS3Access",
  "Effect": "Allow",
  "Action": "s3:*",
  "Resource": "*",
  "Condition": {
    "Bool": {
      "aws:MultiFactorAuthPresent": "true"
    }
  }
}
  • MFA가 활성화된 사용자만 모든 S3 작업 가능

복합 예제 - 날짜 조건 + 여러 작업 허용

{
  "Effect": "Allow",
  "Action": [
    "ec2:StartInstances",
    "ec2:StopInstances"
  ],
  "Resource": "*",
  "Condition": {
    "DateGreaterThan": {
      "aws:CurrentTime": "2025-06-01T00:00:00Z"
    },
    "DateLessThan": {
      "aws:CurrentTime": "2025-06-30T23:59:59Z"
    }
  }
}
  • 2025년 6월 한 달 동안만 EC2 인스턴스 시작/중지 허용

IAM의 주요 사용 사례

  1. 개별 사용자 관리

    • 조직에서 각 직원에게 IAM 사용자를 생성하고, 필요에 따라 개별 권한을 부여
    • 예: 개발자는 S3 버킷 읽기/쓰기 권한, 관리자는 모든 리소스 관리 권한
  2. AWS 리소스 간 권한 관리

    • EC2 인스턴스가 S3 버킷에 접근해야 할 경우, 액세스 키 대신 IAM 역할을 사용하여 안전하게 권한 부여
  3. 최소 권한 원칙 적용

    • IAM 정책을 활용하여 사용자/서비스에 필요한 최소한의 권한만 부여
    • 예: 특정 사용자는 S3 버킷의 일부 폴더에만 접근 가능하도록 설정
  4. 프로그래밍적 접근

    • 액세스 키를 통해 AWS CLI 또는 SDK로 프로그래밍 작업 자동화
    • 예: Python의 boto3를 사용해 S3 파일 업로드 스크립트 작성

IAM 보안 설정

  1. 최소 권한 원칙 적용

    • IAM 사용자와 역할에 필요한 최소한의 권한만 부여
  2. 액세스 키 관리

    • 비밀 액세스 키는 안전한 장소에 저장하고, 주기적으로 교체
    • 불필요한 액세스 키는 비활성화하거나 삭제
  3. IAM 역할 선호

    • 액세스 키 대신 IAM 역할을 사용하여 서비스 간 접근을 안전하게 관리
  4. MFA(다단계 인증) 활성화

    • AWS Management Console에 로그인할 때 MFA를 활성화하여 보안 강화
  5. CloudTrail 사용

    • AWS CloudTrail은 IAM 사용자 또는 AWS 서비스가 수행한 API 호출을 기록하여 보안 감시, 감사, 이상 행동 탐지에 활용됨

IAM 사용자 생성 실습

AWS에서 관리자 권한을 가진 IAM 사용자를 생성하고, 해당 계정을 통해 콘솔에 로그인하는 과정입니다.

IAM - 사용자 - 사용자 생성 선택

다음과 같이 설정합니다.

AdministratorAccess 정책을 설정합니다.

  • 참고: 실무에서는 모든 IAM 사용자에게 AdministratorAccess를 부여하는 것은 보안상 권장되지 않습니다.
  • 역할(Role)과 최소 권한 원칙(Least Privilege Principle)을 따르는 것이 안전합니다.

사용자 생성을 완료합니다.

사용자 생성 완료 후, 표시되는 계정 ID(Account ID) 를 복사해 둡니다.
이후 아래 로그인 화면에서 계정 ID, IAM 사용자 이름, 비밀번호를 입력해 로그인합니다.

Sign in을 선택하면 IAM 로그인을 성공하게 됩니다.

FAQ

  1. Q: IAM 정책과 액세스 키는 같은 건가요?
    A: 아니요. IAM 정책은 권한(무엇을 할 수 있는지)을 정의하고, 액세스 키는 사용자가 그 권한에 접근할 수 있도록 인증합니다.

  2. Q: IAM 역할을 사용하는 것이 액세스 키보다 안전한 이유는?
    A: IAM 역할은 액세스 키 없이 AWS 리소스 간 임시 자격 증명을 사용하므로, 키가 유출될 위험이 없습니다.

  3. Q: 액세스 키는 어디에서 사용되나요?
    A: 주로 AWS CLI, SDK, 또는 API를 통해 프로그래밍적 접근 시 사용됩니다.

결론

IAM은 AWS 리소스 접근을 안전하게 관리하는 핵심 서비스로, IAM 사용자, 정책, 역할, 액세스 키 등을 통해 누가 무엇을 할 수 있는지 명확히 제어할 수 있습니다. 이를 올바르게 설정하고 관리하면 AWS 리소스의 보안을 강화하고 효율적으로 운영할 수 있습니다.

profile
donggyun_ee

0개의 댓글