AWS/실전압축지식

[실.압.지][IAM 기본]AWS IAM Role, IAM User, IAM Policy란 무엇인가

faru 2024. 8. 27. 16:45

[1.짧게 말해서]

AWS를 사용하기 위해서는 필연적으로 IAM에 대해 알고 있어야 한다. IAM은 'AWS Identity and Access Management' 줄임말이다.

공식 AWS 문서에서는 IAM을 다음과 같이 설명하고 있다.

IAM

AWS Identity and Access Management(IAM)은 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스입니다. IAM을 사용하면 사용자가 액세스할 수 있는 AWS 리소스를 제어하는 권한을 관리할 수 있습니다. IAM을 사용하여 리소스를 사용하도록 인증(로그인) 및 권한 부여(권한 있음)된 대상을 제어합니다. IAM은 AWS 계정에 대한 인증 및 권한 부여를 제어하는 데 필요한 인프라를 제공합니다.

 

쉽게 말해서 IAM은 AWS의 리소스에 대한 제어 권한을 관리하는 도구라는 의미이다.

 

즉, AWS의 다양한 리소스에 접근하고 작업하기 위해서는 해당 리소스에 대한 접근 및 작업권한을 가진 IAM이 필요하다는 것이다. 접근을 하는 것이 사람이라면 IAM User가 되는것이고, 역할이라면 IAM Role이 되는 것이다. 그리고 해당 접근 및 작업에 대한 권한을 묶어 놓은 것이 IAM Policy(정책)이다.

 

 

[2. 조금 더 자세하게]

IAM User

우리 회사에서 AWS 인프라를 운영중이며, 회사에 신입 개발자가 들어온 상황이라고 가정해보자.해당 개발자는 AWS 리소스에 직접 작업하거나 접근해서는 안되며, 오직 개발에 참고할 수 있도록 특정자원에 대해 확인만 할 수 있어야 한다.(ec2, s3, rds등). 즉 보기만 할 수 있어야 한다. 그럴 경우, IAM User를 생성하고 다음과 같이 그에 맞는 정책(Policy)를 User에 매핑하면 된다.

 

 

IAM Role

AWS 리소스에서 다른 리소스에 접근하고, 또 무언가 작업을 하기 위해서는 IAM Role이 필요하다. IAM Role은 AWS 리소스에 매핑되며, 각 IAM Role을 통해 해당 리소스가 어떤 리소스에서 어떤 작업을 할 수 있는지 정의된다. 정확히는 IAM Role에 매핑 된 정책에 의해서 정의된다.

 

예를 들어 람다를 통해 주기적으로 A라는 이름을 가진 S3의 데이터를 긁어와서 분석하는 시스템을 개발한다고 하면, 람다에는 S3에 접근 가능하도록 IAM Role이 설정되어야 한다. 그리고, 해당 s3에서 어떤 작업을 할 수 있을지에 대해서도 정책을 통해서 설정할 수 있다.

 

예시를 보면 훨씬 이해가 빠를 것이다.아래는 "test lambda" 함수가 "a bucket"에 접근할 수 있도록 IAM 정책을 작성하는 예시이다.


1.IAM 콘솔에 로그인 한다.

2.왼쪽 탐색 창에서 '정책'을 선택한다.

3.'정책 생성'을 클릭한다.

4. 'JSON' 탭을 선택하고, 아래와 같은 정책 문서를 입력한다:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
            #####아래 부분을 통해서 어떤 작업을 할 수 있을 지 정의한다.####
                "s3:GetObject",
                "s3:PutObject"
            ],
            ####어떤 리소스에 접근하는지 정의한다.####
            "Resource": "arn:aws:s3:::a bucket/*"
        }
    ]
}

이 정책을 통해서 "lambda" 함수가 "a bucket"에서 객체를 가져오고 객체를 추가하는 권한을 부여받는다.


5. '검토 정책'을 클릭합니다.


6. '이름' 필드에 정책 이름을 입력합니다. 예를 들어, "LambdaS3BucketAccessPolicy".


7.'정책 생성'을 클릭합니다.

 

이제, 정책을 생성했으니 해당 정책을 연결할 IAM Role을 만들어야 한다.

 


1. IAM 콘솔의 왼쪽 탐색 창에서 '역할'을 선택한다.

2. "test lambda" 함수의 IAM 역할을 찾아 클릭합니다.

3. '정책 연결'을 클릭합니다.

4. 검색 창에 방금 생성한 정책의 이름을 입력하고 검색한다.

5. 검색 결과에서 해당 정책을 선택하고 '정책 연결'을 클릭한다.

이제 "test lambda" 함수는 "a bucket"에 접근할 수 있게 된다.

 

IAM Policy

정책은 위에서 보았듯이, IAM User와 IAM Role에 매핑되는 '권한들의 집합' 이다.

정책은 위의 예시에서 보았듯이 직접 생성하는 방법도 있지만, AWS에서 관리하고 제공하는 정책도 존재한다.

크게 관리형 정책과 인라인 정책으로 나누어지고, 관리형 정책은 AWS 관리형 정책과 고객 관리형 정책으로 나누어진다.

위의 람다 예시에서 생성한 정책이 고객 관리형 정책이고, IAM User 예시에 사용 된 정책이 AWS 관리형 정책이다.

  • AWS 관리형 정책 - AWS에서 생성 및 관리하는 관리형 정책입니다.
  • 고객 관리형 정책 - 사용자가 자신의 AWS 계정에서 생성 및 관리하는 관리형 정책입니다. 고객 관리형 정책은 AWS 관리형 정책보다 정책에 대해 더욱 정밀하게 제어할 수 있습니다.

인라인 정책은 특정 IAM User, IAM Role, IAM Group(User의 집합)에 직접 매핑 되는 정책이다. 거창한 의미는 아니고 정책 재사용이 불가능하며 해당 엔티티에만 사용하는 정책이라는 의미이다.

예를들어 IAM Role 생성 시, 정책을 붙이는 게 아니라 '인라인 정책 추가' 버튼을 눌러 직접 IAM Role을 생성하며 만들게 된다.