AWS - IAM

김재근·2025년 4월 14일

AWS

목록 보기
4/6
post-thumbnail

AWS에 서비스를 배포하고 운영하려면 여러 개발자가 클라우드에서 작업을 진행하는데,
이때 IAM을 사용하면 각자의 역할에 맞는 권한만 부여해 보안을 강화하고 효율적으로 운영할 수 있다.


IAM이란?

AWS IAM(Identity and Access Management)은 AWS 리소스에 대한 접근을 안전하게 제어할 수 있는 웹 서비스다. IAM을 사용하면 AWS 계정 내에서 사용자와 그룹을 생성하고 관리하며, 다양한 AWS 리소스에 대한 접근 권한을 세밀하게 제어할 수 있다.

IAM의 핵심 기능

  • 중앙 집중식 접근 제어: 모든 AWS 서비스에 대한 접근 권한을 한 곳에서 관리
  • 세분화된 권한(Fine-grained permissions): 특정 리소스에 대한 특정 작업만 허용 가능
  • MFA: 추가적인 보안 계층 제공
  • Identity Federation: 기존 기업 디렉토리 또는 웹 자격 증명 공급자와 통합
  • 무료 서비스: AWS 계정의 일부로 추가 비용 없이 제공

IAM의 주요 구성 요소

IAM 사용자(Users)

IAM 사용자는 AWS와 상호 작용하는 개인 또는 서비스를 의미한다. 각 사용자는 고유한 보안 자격 증명을 가지며, AWS Management Console 로그인 또는 프로그래밍 방식의 API 접근에 사용된다.
예시:

{
  "UserName": "DevOpsEngineer",
  "Path": "/",
  "CreateDate": "2023-01-15T16:27:32Z",
  "UserId": "AIDACKCEVSQ6C2EXAMPLE",
  "Arn": "arn:aws:iam::123456789012:user/DevOpsEngineer"
}

IAM 그룹(Groups)

IAM 그룹은 IAM 사용자의 집합이다. 그룹을 사용하면 여러 사용자에 대한 권한을 더 쉽게 관리할 수 있다. 예를 들어, "개발자" 그룹을 생성하고 이 그룹에 개발자들이 필요로 하는 권한을 부여할 수 있다.

{
  "Path": "/",
  "GroupName": "Developers",
  "GroupId": "AGPACZPSHVNQWE3EXAMPLE",
  "Arn": "arn:aws:iam::123456789012:group/Developers",
  "CreateDate": "2023-01-15T21:40:59Z"
}

IAM 역할(Roles)

IAM 역할은 특정 권한을 가진 자격 증명으로, 필요할 때 사용자, 어플리케이션 또는 서비스가 맡을 수 있다. 역할에는 영구적인 자격 증명이 없으며, 임시 보안 자격 증명을 제공한다.

{
  "Path": "/",
  "RoleName": "EC2ServiceRole",
  "RoleId": "AROAR6VMJWRXKEXAMPLE",
  "Arn": "arn:aws:iam::123456789012:role/EC2ServiceRole",
  "CreateDate": "2023-01-16T18:12:37Z",
  "AssumeRolePolicyDocument": {
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Principal": {
          "Service": "ec2.amazonaws.com"
        },
        "Action": "sts:AssumeRole"
      }
    ]
  }
}

IAM 정책(Policies)

IAM 정책은 하나 이상의 권한을 정의하는 JSON 문서다. 정책은 사용자, 그룹 또는 역할에 연결되어 AWS 리소스에 대한 접근을 제어한다.

정책 유형:

  • 자격 증명 기반 정책(Identity-based policies): 사용자, 그룹, 역할에 연결
  • 리소스 기반 정책(Resource-based policies): S3 버킷, SQS 대기열 등의 리소스에 직접 연결
  • 서비스 제어 정책(SCPs): AWS Organizations에서 조직 전체의 권한 관리에 사용
  • ACLs(Access Control Lists): 리소스에 액세스할 수 있는 주체를 지정
  • 세션 정책(Session policies): 역할을 수임할 때 권한 제한에 사용
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::example-bucket"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Resource": "arn:aws:s3:::example-bucket/*",
      "Condition": {
        "StringEquals": {
          "aws:username": "johndoe"
        }
      }
    }
  ]
}

IAM 사용 이유

보안 강화

IAM의 가장 중요한 이유는 AWS 환경에 대한 보안을 강화하는 것이다.

  • 최소 권한 원칙: 작업 수행에 필요한 최소한의 권한만 부여
  • 임시 자격 증명: 영구 자격 증명의 위험 감소
  • MFA: 추가적인 인증 요소로 무단 접근 방지
  • 권한 경계: 사용자가 가질 수 있는 최대 권한 제한

비용 절감 및 운영 효율성

  • 리소스 사용 제한: 비용이 많이 드는 서비스에 대한 접근 제한으로 비용 통제
  • 자동화 지원: 인프라 자동화를 위한 프로그래밍 방식의 접근
  • 감사 및 규정 준수: CloudTrail과 연동하여 접근 및 사용 패턴 모니터링

협업 및 팀 운영 개선

  • 책임 분리: 팀의 책임에 따라 권한 할당
  • 크로스 계정 접근: 여러 AWS 계정 간의 안전한 접근 관리
  • 사용자 수명 주기 관리: 입사, 역할 변경, 퇴사 시 효율적인 접근 관리

IAM 실제 활용 사례

  • 개발팀을 위한 IAM 설정
    개발 환경에서는 개발자에게 필요한 리소스에 접근할 수 있는 권한을 제공하면서도, 프로덕션 환경은 보호해야 한다.
  • 개발자를 위한 IAM 그룹 생성
    개발 환경에 필요한 서비스에 대한 권한이 있는 정책 연결
    프로덕션 환경에 대한 접근 제한

예시 정책:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:Describe*",
        "ec2:RunInstances",
        "ec2:StopInstances",
        "ec2:StartInstances"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:RequestedRegion": "ap-northeast-2",
          "ec2:ResourceTag/Environment": "Development"
        }
      }
    }
  ]
}

서버리스 애플리케이션의 IAM 역할

서버리스 애플리케이션(예: Lambda 함수)이 다른 AWS 서비스와 상호 작용할 때, IAM 역할을 사용하여 필요한 권한을 제공한다.
구현 방법:

  • Lambda 함수를 위한 IAM 역할 생성
  • 최소 권한 원칙에 따라 필요한 서비스에만 접근 권한 부여
  • 환경 변수 대신 IAM 역할을 통한 보안 자격 증명 관리

DynamoDB에 접근하는 Lambda 함수용 역할 정책

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "dynamodb:GetItem",
        "dynamodb:PutItem",
        "dynamodb:UpdateItem",
        "dynamodb:DeleteItem",
        "dynamodb:Query"
      ],
      "Resource": "arn:aws:dynamodb:ap-northeast-2:123456789012:table/UserData"
    }
  ]
}

멀티 계정 환경의 IAM 관리

대규모 조직에서는 여러 AWS 계정을 사용하는 것이 일반적입니다. IAM을 사용하여 이러한 계정 간의 접근을 관리할 수 있다.
구현 방법:

AWS Organizations를 사용하여 계정 구조화
중앙 관리 계정(Master Account)에서 IAM 사용자 관리
역할 수임(AssumeRole)을 통한 다른 계정 접근

예시: 크로스 계정 역할 수임 정책

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "arn:aws:iam::987654321098:role/CrossAccountAccess"
    }
  ]
}

임시 자격 증명을 통한 안전한 접근

외부 개발자나 컨설턴트에게 일시적으로 AWS 리소스에 접근할 수 있는 권한을 제공해야 할 경우, IAM 역할과 임시 자격 증명을 활용할 수 있다.
구현 방법:

  • 외부 접근을 위한 IAM 역할 생성
  • 적절한 권한 정책 연결
  • AWS Security Token Service(STS)를 통한 임시 자격 증명 발급
  • 만료 시간 설정으로 접근 기간 제한

예시 코드 (AWS CLI):

# 역할 수임하여 임시 자격 증명 발급
aws sts assume-role \
  --role-arn arn:aws:iam::123456789012:role/ExternalConsultant \
  --role-session-name "JohnDoeSession" \
  --duration-seconds 3600

AWS IAM은 클라우드 환경에서 안전하고 효율적인 접근 관리를 위해 필수적이다. 사용자, 그룹, 역할, 정책을 통해 세분화된 권한 제어가 가능하며, 이를 통해 보안 위험을 최소화하고 운영 효율성을 높일 수 있다.

profile
FullStack + DevOps 개발자입니다.

0개의 댓글