[AWS] AWS IAM(Identity and Access Management)이란? + IAM 생성 실습

업데이트:



✅ AWS IAM

📌 IAM 이란?


AWS Identity and Access Management(IAM)는 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스입니다. IAM을 통해 AWS 리소스에 접근할 수 있는 사용자(User)를 중앙에서 관리하고, 사용자가 접근할 수 있는 리소스를 제어할 수 있습니다. 또한 IAM은 독립된 리전에서 설정할 수 없고 글로벌 서비스로 사용 가능 합니다.

AWS 계정을 처음 생성하고 로그인 화면에 접속하면 아래와 같은 화면을 볼 수 있습니다.

aws 로그인 화면

이때 루트 사용자와 IAM 사용자, 두개의 사용자 중 하나를 선택해서 로그인할 수 있습니다. 루트 사용자는 모든 권한과 역할을 지닌 일종의 관리자 계정이기 때문에 루트 사용자로 접속하여 어떤 작업을 수행하게 되면 의도치 않게 접속정보를 노출할 수 있어 보안상 취약하고, AWS 초보자일 수록 무분별한 리소스 사용으로 인해 과금이 발생할 수 있어 일반적으로 사용이 권장되지 않습니다.

**루트 사용자에 부여된 관리자 권한과 역할을 통제하여 과금을 줄이고, 보안상 안정성을 높이며 최소권한으로 AWS 서비스를 사용하기 위한 계정이 바로 IAM 입니다. IAM 계정의 사용은 권장이 아닌 필수 영역입니다. **

이러한 IAM에는 사용자(User), 그룹(Group), 역할(Role), 정책(Policy), 권한(Permission) 이 포함됩니다. 각 요소의 정의와 기능에 대해서 알아보겠습니다.



📌 IAM: Users ( 사용자 )


IAM User는 IAM에서 생성한 개별 사용자 계정을 의미합니다. 쉽게 말하면 AWS 리소스에 접근할 수 있는 권한을 가진 사람 한명 한명을 대표한다고 보면 됩니다. 각 IAM User는 계정의 루트 User와는 별도로 고유한 자격 증명( 사용자 이름, 비밀번호, 엑세스 키 등)을 갖고 있어, IAM User마다 개인 비밀번호나 엑세스 키로 AWS Console, AWS SDK 등에 접속하여 AWS 리소스를 사용할 수 있습니다.

{
    "UserName": "Alice",
    "Permissions": ["AmazonS3ReadOnlyAccess"]
}



📌 IAM: Groups ( 사용자 그룹 )


IAM Groups는 IAM Users의 집단을 의미합니다. 한마디로 여러 Users를 하나의 집단으로 묶어둔 것이 IAM Groups입니다.

{
    "GroupName": "Developers",
    "Permissions": ["AmazonEC2FullAccess"]
}



IAM User와 Group

위의 이미지를 통해 User와 Group을 쉽게 이해할 수 있습니다. 이미지에서 유저는 Alice, Bob, David 처럼 각 사용자를 의미합니다. 그리고 그룹은 Developers, Audit Team, Operations 처럼 유저의 집합을 의미합니다.

이때 Users는 하나의 그룹에만 속하지 않고 여러 그룹에 동시에 속할 수 있습니다. 그러나 하나의 그룹이 다른 그룹에 포함 될 수는 없는 특징이 있습니다.



📌 IAM: Permissions(권한)와 Policy(정책)


AWS IAM의 Permission(권한)은 사용자가 AWS 리소스에 대해 수행할 수 있는 작업을 제어하는 정책을 의미합니다.

Permission과 Policy의 개념이 조금 헷갈릴 수 있기 때문에 예시를 통해 살펴보겠습니다.

{
    "UserName": "Alice",
    "Permissions": ["AmazonS3AccountPermissions"]
}
{
	"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/*"]
		}
	]
}

위의 첫번째 JSON 문서는 AmazonS3AccountPermissions 라는 이름의 Permissions 입니다.

“Alice라는 User에게 AmazonS3AccountPermissions 라는 Permissions(권한)를 부여하겠다.” 를 의미합니다. 한마디로 AmazonS3AccountPermissions 가 Permission이 되는거죠.

그렇다면 이 Permission은 어떤 내용으로 구성된 것인지 알 필요가 있습니다. 사용자에게 권한을 부여했는데 그 권한이 어떤 권한이냐가 내용을 의미합니다.

그 내용에 해당하는 것이 바로 두번째 JSON 문서인 Policy 입니다. Policy는 IAM 유저의 권한을 설정하는 정책입니다. 해당 IAM 유저가 어떤 리소스에 대해 어떤 작업을 수행할 수 있는지 권한을 부여하는 작업을 수행할 수 있습니다.



위의 예시를 기반으로 정책의 구성요소를 살펴보도록 하겠습니다. 각 요소별로 다양한 속성값이 있지만, 이 포스팅은 IAM을 중점적으로 다룰 것이기 때문에 여기서는 간단하게만 알아보겠습니다.

  • Version : 정책의 JSON 형식 버전을 지정합니다. “2012-10-17”로 고정됩니다.

  • Id : 정책의 식별자로서 ID를 부여할 수 있습니다. ( optional )

  • Statement : 정책의 핵심 부분으로, 하나 이상의 권한 규칙을 정의합니다.

    • Sid : Statement의 식별자 입니다. (optional )
    • Effect : 권한의 결과를 정의하고, Allow 또는 Deny 값을 가집니다. Allow는 특정 작업의 허용, Deny는 특정 작업의 거부를 의미합니다.
    • Principal : 정책이 적용되는 주체를 정의하는 요소입니다. AWS 계정, AWS 서비스 등으로 지정할 수 있습니다.
    • Action : 허용하거나 거부할 AWS 서비스 작업을 정의합니다.
    • Resource : 정책이 적용되는 AWS 리소스를 지정합니다.

이렇게 정책을 생성하고 권한을 부여할 때 반드시 지켜야할 원칙은 “필요한 최소한의 권한만을 부여해야하는 것” 입니다.



자, 그럼 우리가 IAM User와 Group을 살펴보다가 왜 갑자기 IAM Permission을 알아봤는지 생각해 볼 필요가 있습니다. 그 이유는 IAM Permission을 통해 생성한 권한을 User와 Group에 부여할 수 있기 때문입니다.

AWS Console을 통해 User와 Group을 생성할 때 우리는 권한을 부여하고 정책을 새로 만들거나, 기존의 정책을 연결해 줄 수 있습니다. 자세한 과정은 포스팅 말미에 직접 실습을 통해 살펴보겠습니다.



📌 IAM : Role ( 역할 )


자, 이제 IAM Role에 대해서 알아보겠습니다. IAM Role은 Policy를 한개 이상 포함하고 있는 정책 꾸러미라고 생각하면 쉽습니다.

사전적 정의는 특정 AWS 서비스나 사용자, 애플리케이션이 취할 수 있는 권한을 정의하는 엔티티입니다.

{
    "RoleName": "EC2Role",
    "Permissions": ["AmazonS3ReadWriteAccess"],
    "TrustPolicy": {
        "Effect": "Allow",
        "Principal": {
            "Service": "ec2.amazonaws.com"
        },
        "Action": "sts:AssumeRole"
    }
}

위의 예시를 보면 EC2Role 이라는 이름을 가진 IAM Role을 정의하는데, AmazonS3ReadWriteAccess 라는 권한이 할당되어 있는것을 볼 수 있습니다. 그리고 TrustPolicy 라는 키값이 보이는데 이는 신뢰 정책이라고도 부르는 일종의 임시 권한을 부여하는 것 입니다. EC2 서비스에 EC2Role을 임시로 부여하고 sts:AssumeRole 액션을 사용할 수 있음을 의미합니다.


말이 좀 어려우니 쉽게 예시를 들어 풀어서 설명해보도록 하겠습니다.

우리는 AWS에서 권한을 부여할 때 항상 최소권한만을 유지하는 것을 원칙으로 합니다. 만약 홍길동이라는 유저가 평소에는 필요없던 S3ReadAndWrite 라는 Policy가 갑자기 필요해졌다고 가정해봅시다. 그래서 루트 계정을 통해 홍길동이라는 유저에게 S3ReadAndWrite라는 Policy를 할당해줬습니다. 이후 홍길동이 해당 기능을 다 사용한 뒤, 우리는 최소권한을 유지하는 원칙을 지키기 위해 다시 홍길동의 S3ReadAndWrite 권한을 해제했습니다.

그런데 홍길동이 또 해당 권한이 필요하다고 요청합니다. 그래서 다시 권한을 부여하고 해제했습니다. 이런상황이 백번정도 반복된다면 어떨까요? 그리고 이런 사용자가 백명이 넘어간다면 어떨까요? 루트 계정 관리자는 하루종일 권한 부여,해제만 하고있어야 할 겁니다. 그래서 AWS에서는 IAM Role이라는 기능을 만들어 필요한 Policy를 Role에 부여하고 해당 Role을 사용자 혹은 그룹에 부여하는 기능을 구현해놨습니다.







✅ AWS IAM 실습

📌 IAM User 생성하기


AWS Console에서 User를 생성하는 방법을 함께 알아보도록 하겠습니다.


1. IAM 사용자

IAM User 대시보드

IAM의 사용자탭으로 이동하면 현재 생성된 사용자 목록을 대시보드를 통해 확인할 수 있습니다. 현재 이미지는 어떠한 사용자도 만들지 않은 기본 사용자 대시보드 화면으로 루트계정으로 접속시 모든 권한이 부여된 관리자 계정 (Administrator)만을 확인할 수 있습니다. 이제 사용자 생성 버튼을 클릭하면 사용자를 생성 할 수 있습니다.



2. 사용자 세부 정보 지정

IAM User 이름 설정

버튼을 클릭하면 생성할 사용자의 이름을 설정할 수 있습니다. 본인이 원하는 대로 설정하면 됩니다. 이후 다음 버튼을 클릭해줍니다.



3. 검토 및 생성

IAM User 검토

생성하려는 사용자의 세부 정보를 최종적으로 검토하고 생성 버튼을 통해 생성합니다.



📌 IAM User Group (사용자 그룹) 생성하기


AWS Console에서 User Group을 생성하는 실습을 진행해보겠습니다.


1. IAM 사용자 그룹

IAM User Group 대시보드

IAM > 사용자 그룹 탭으로 이동하면 현재 생성된 사용자 그룹을 대시보드를 통해 확인할 수 있습니다. 위의 이미지는 어떠한 사용자 그룹도 생성되지 않은 초기 화면이고, 모든 권한을 부여받은 관리자 사용자 그룹만 존재하는 상태입니다. 그룹 생성 버튼을 클릭해 사용자 그룹 생성을 진행합니다.



2. 사용자 그룹 생성

IAM User Group 생성

사용자 그룹 이름을 지정합니다. 실습에서는 TestUserGroup이라는 이름을 지정했습니다. 이후 사용자 그룹에 지정할 사용자를 선택할 수 있습니다. 앞서 미리 생성한 TestUser를 선택해보겠습니다.



IAM User Group 생성

이후 사용자 그룹에 정책을 연동할 수도 있습니다. IAMReadOnlyAccess 정책을 선택해 연동해보도록 하겠습니다. 이후 사용자 그룹 생성 버튼을 통해 사용자 그룹 생성을 완료합니다.



3. 사용자 그룹 생성 확인

IAM User Group 생성

TestUserGroup 사용자 그룹이 제대로 생성된 것을 최종적으로 확인할 수 있습니다.



📌 IAM Role 생성하기 - 실습


실제로 AWS Console을 통해 IAM Role을 생성하는 방법을 알아보도록 하겠습니다.



1. 역할 생성 버튼 클릭

IAM Role 생성하기 클릭

첫번째로 IAM > 역할(Role) 탭에 들어가서 역할 생성버튼을 클릭합니다. 대시보드를 통해 현재 생성되어 있는 역할을 살펴볼 수 있습니다.



2. 엔티티 유형 및 서비스 선택

엔티티 유유형 및 서비스 선택

역할 생성버튼을 통해 다음 페이지로 넘어가면 신뢰할 수 있는 엔티티 선택 영역이 보입니다. AWS서비스, AWS 계정, 웹 자격 증명 등 다양한 엔티티를 선택할 수 있지만 이번 실습에서는 AWS 서비스에 대한 Role을 생성해보도록 하겠습니다.

그중 가장 많이 쓰이는 EC2서비스를 선택하겠습니다.


권한 정책 추가

선택한 EC2 서비스에 어떤 정책(Policy)을 부여할지 선택해야 합니다. 우리는 IAMReadOnlyAccess 라는 AWS에서 만들어놓은 정책을 부여하겠습니다. IAMReadOnlyAccess를 검색한 뒤 해당 정책을 체크하고 다음버튼을 클릭합니다.



3. 역할 세부 정보

IAM Role 이름 정보 설정

역할 이름을 먼저 설정합니다. 본인이 원하는 이름대로 설정하시면 됩니다. 역할에 대한 적절한 설명역시 부여해줍니다. 신뢰 정책은 역할이 다른 AWS 서비스나 사용자에 의해 사용될 수 있도록 허용하는 정책입니다. JSON 형태로 작성가능하고, 위의 실습에서는 EC2인스턴스가 이 역할을 사용할 수 있도록 작성되었습니다.



4. 권한 및 태그 추가

IAM Role 권한 및 태그 추가

이제 선택한 권한이 잘 추가되었는지 확인 후 역할 생성 버튼을 클릭합니다.



5. 역할 생성 확인

IAM Role 생성 확인

최종적으로 처음에 봤던 대시보드에서 역할이 제대로 생성되었는지 확인할 수 있습니다. ExerciseRoleForEC2 역할이 제대로 생성된 것을 확인할 수 있습니다.




댓글남기기