[AWS] IAM이란?

mDev_97·2023년 10월 12일

AWS

목록 보기
1/5
post-thumbnail

IAM이란?

AWS의 IAM이란 Identity and Access Management의 줄임말로 유저를 관리하고 접근 레벨 및 권한에 대한 관리를 가능하게 해줍니다.

  • 접근키(Access Key), 비밀키(Secret Access Key)
  • 매우 세밀한 접근 권한 부여 기능(Granular Permission)
  • 비밀번호를 수시로 변경 가능하게 해줌
  • Multi-Factor Authentication(다중 인증) 기능

접근키, 비밀키

AWS에 새로 계정을 만들면 그 계정은 root 유저가 됩니다.

그 root 유저 안에서 우리는 다른 유저를 생성할 수 있습니다.

  • 예시: user A를 만들었다고 가정

    -> IAM은 user A에 대한 접근키(access Key), 비밀키(Secret Access Key)를 생성 해줍니다.

    -> 그럼 user A는 접근키와 비밀키를 가지고 AWS의 다양한 서비스들을 사용할 수 있습니다.

    -> 터미널에서 쓰이는 즉 Command Line Interface 혹은 API를 통하여 접근키와 비밀키를 가지고 AWS 서비스를 원격에서 사용할 수 있게 해주는 것입니다.


매우 세밀한 접근 권한 부여 기능

그 다음으로 AWS IAM은 매우 세밀한 접근 권한 부여 기능이 있습니다.

  • 예시: DynamoDB 데이터베이스 서비스

    AWS에는 DynamoDB라는 데이터베이스 서비스가 있습니다.
    그럼 데이터베이스이기 때문에 테이블 생성, 삭제, 복사와 같은 기능이 존재합니다.

    우리는 user A한테 모든 기능을 사용할 수 있고 테이블 생성 기능만 사용 가능하게 해줄 수도 있습니다.


비밀번호를 수시로 변경 가능하게 해줌

IAM은 비밀번호를 수시로 변경 가능하게 해줍니다.
이것은 순전히 보안적인 이유로 일정 기간별로 한 번씩 모든 AWS 사용자들의 비밀번호 업데이트를 가용하는 것입니다.

개인적으로는 귀찮을 수도 있지만 전체적으로 본다면 상당히 중요한 방침입니다.


다중 인증 기능

마지막으로 다중 인증(Multi-Factor Authentication, MFA) 기능은 우리가 AWS에 로그인할 때
단순히 비밀번호만 입력하고 들어오는 것이 아니라 다른 계정(Google 등)을 사용하여
다양한 사용자 인증을 요구함을 통해 좀 더 두터운 보안을 형성할 수 있게 해줍니다.

아마존에서는 특히 root 유저는 MFA를 무조건 해야 한다고 적극 권장합니다.

그룹, 유저, 역할, 정책

우리는 root 유저를 통해 새로운 유저를 생성할 수 있습니다.
하지만 유저뿐만이 아니라 더 많은 것을 생성할 수 있습니다.

아래 네 가지가 주입니다.

  • 그룹 (Group)
  • 유저 (User)
  • 역할 (Role)
  • 정책 (Policy)

그룹(Group)

첫 번째로 그룹은 쉽게 말해 하나의 그룹은 하나 이상의 유저가 존재할 수 있습니다.

유저 (User)

역할은 유저와 의미는 비슷합니다.
하지만, 우리는 역할에 하나 혹은 다수의 정책을 지정할 수 있습니다.
이를 통해 유저마다 다양한 정책을 부여함으로써 다른 권한을 위임할 수 있는 것입니다.

예를 들어 모든 액세스 권한을 줄 것인지, DB 생성 및 삭제에 대한 권한을 줄 것인지와 같은 것입니다.

정책 (Policy)

정책은 주로 JSON 형태로 되어있는 Document를 가리키며
앞에서 언근했던 세밀한 접근 권한을 우리가 일일이 설정하여 하나의 정책 Document를 만들 수 있습니다.

이를 통해서 다양한 정책을 생성하여 다양한 접근 레벨 및 권한이 가능해집니다.

또한 정책은 그룹과 역할에 부여가 가능합니다.

  • 정책은 그룹, 역할을 추가시킬 수 있다.
  • 하나의 그룹 안에는 다수의 유저가 존재 가능하다.

📌 정리
즉, 그룹에 역할 또는 정책을 추가하면 그 그룹 안에 있는 모든 유저에게 적용한 정책이 영향이 갑니다.


Universal

마지막으로 IAM은 Universal 하다는 특징을 가지고 있습니다.

AWS의 대부분의 특징은 regional 합니다.
즉, 지역마다 제공하는 리소스와 기능들이 다를 수 있다는 것입니다.

예를 들어, 지역 A에서 특정 기능을 만들고 프로그램을 구현하여도, 지역 B에서는 열람할 수 없습니다.
존재하지 않는다고 볼 수 있습니다.

그러나 IAM은 Universal 하기 때문에 지역 변경이 필요 없습니다.


IAM 정책 시뮬레이터

  1. 개발환경에서 실제환경으로 빌드하기 전에 IAM 정책이 잘 작동되는지 테스트하기 위함입니다.
  2. IAM과 관련된 문제들을 디버깅하기에 최적화된 툴입니다. (실제로 유저에 부여된 다양한 정책들도 테스트 가능)

📌 개발환경에서 프로덕션으로 넘어가기 전 테스트 환경에서
우리가 정의를 내린 정책 혹은 룰들이 정상적으로 작동되는지 확인하는 툴


실습

사용자 만들기

우선 IAM의 메인 화면으로 들어오고 우측 상단의 사용자 생성 버튼을 클릭합니다.

그리고 사용자 이름에 원하는 이름을 아무거나 입력하면 됩니다.

저는 aws_moon라고 입력하겠습니다.

다음을 클릭하면 아래와 같은 화면이 나옵니다.
지금 우리는 사용자 생성에만 관심이 있기 때문에 바로 다음을 눌러줍니다.

이후 다음에는 검토 및 생성 단계에서 태그를 설정할 수 있습니다.
태그는 생성한 사용자를 추후에 더 쉽게 검색하기 위해서 사용됩니다.

그룹 만들기

이제 좌측에 있는 사용자 그룹을 통해서 하나의 그룹을 만들어 봅니다.
아직 저는 아무런 그룹이 생성되어 있지 않습니다.

우측 상단에 그룹 생성 버튼을 클릭합니다.

저는 aws_moon_group이라는 이름을 주고
아래에는 그룹에 어떤 사용자를 추가할 것인지에 물어보고 있습니다.

또한 아래에서는 우리가 만들 그룹에 정책을 추가할 수 있습니다.
여기서 권한 정책을 추가하게 되면 그룹에 있는 모든 사용자들에게 영향을 주기 때문에 심사숙고해서 선택하셔야 합니다.

이번 실습에서는 아무런 정책을 추가하지 않고 넘어가겠습니다.

이렇게 aws_moon_group 이라는 이름의 그룹이 생성되었습니다.

이제 우리가 생성한 유저를 방금 생성한 그룹에 추가해보도록 하겠습니다.

사용자 탭에서 생성한 유저를 클릭하여 들어가줍니다.

그럼 아래와 같이 아직 그룹이 없다라고 나오는데요.
우측 하단에 그룹에 사용자 버튼을 눌러주겠습니다.

그럼 우리가 생성했던 그룹이 나옵니다.
생성한 그룹을 클릭하여 그룹에 사용자를 추가해주겠습니다.

그럼 이제 aws_moon 이라는 사용자는 aws_moon_group이라는 그룹에 속해 있는 것을 확인할 수 있습니다.
또한, 그룹 버튼을 눌러보시면 0명 이었던 사용자가 1명으로 변경된 것을 확인하실 수 있습니다.

역할 만들기

역할에서는 사용자에게 정책을 부여할 수 있습니다.
그럼 새로운 역할을 한 번 만들어 보겠습니다.

[신뢰할 수 있는 엔터티 선택] 에서 사용 사례에서는 선택 드롭다운 버튼을 클릭하시면 다양한 AWS 서비스를 찾을 수 있습니다.

저는 AWS 서비스를 선택하고 사용 사례로는 EC2를 선택하여 다음으로 넘어가겠습니다.

그러면 생성하는 역할에 추가하고 싶은 정책을 만들 수도 있고 기존에 존재하는 권한을 추가할 수 있습니다.

검색 창에 EC2라고 입력하면 다양한 정책을 확인할 수 있습니다.

정책 만들기

이제 새로운 정책을 만들어 보겠습니다.
메뉴에서 정책을 클릭하고 정책 생성으로 들어갑니다.

정책 생성에는 크게 두 가지 방법이 있습니다.

우리가 원하는 서비스를 직접 선택해서 드래그 앤 클릭 방식으로 정책을 만드는 방법과
JSON을 사용해서 정책을 만드는 방법입니다.

저와 같은 입문자분들은 시각적 편집기 방법을 추천드립니다.

정책 생성 실습 서비스로는 DynamoDB를 가지고 진행해보겠습니다.

서비스 선택 입력 칸에 검색 dynamodb 를 검색하여 클릭해줍니다.

그러면 DynamoDB에서 허용되는 작업을 지정해주어야 하며
어떤 액세스 레벨 권한을 허용할지 아닐지를 여기서 관리할 수 있습니다.

우리는 읽기와 쓰기만을 선택하도록 하겠습니다.

그럼 이제 리소스를 열어보겠습니다.

이는 DynamoDB에서만 제공하는 고유한 기능들이며
특정 리소스에만 정책을 부여할지 아닌지를 관리할 수 있습니다.
지금은 편의상 모든 모든 리소스를 선택하겠습니다.

다음으로는 정책의 이름을 지정해주어야 합니다.
저는 aws_moon_dynomodb_policy 라고 입력해줍니다.

태그는 우리가 만든 정책에 식별자를 부여하는 것으로 건너뛰도록 하겠습니다.

그럼 이제 우리가 만든 정책을 목록에서 확인할 수 있습니다.

클릭을 해보시면 이렇게 JSON 형태의 Document도 확인할 수 있습니다.

시뮬레이터 실습

이제 메뉴의 대시보드로 돌아가서 시뮬레이터 실습을 간단하게 진행해보겠습니다.

그럼 우측 하단의 정책 시뮬레이터를 클릭하여 들어가보겠습니다.

그럼 다음과 같이 새탭이 생깁니다.

좌측의 드롭다운을 누르시면 사용자, 그룹, 역할을 선택할 수 있습니다.
이전에 만들었던 aws_moon 사용자를 사용하여 테스트를 해보겠습니다.

현재는 이 유저에게 아무런 정책을 추가해주지 않았기 때문에 [There are no policies to display!] 메시지가 뜨게 됩니다.
이 유저는 아무런 권한도 가지고 있지 않다는 뜻입니다.

그러면 이 정책 시뮬레이터를 동작하여 aws_moon 유저는 아무것도 할 수 없는지 한 번 테스트 해보겠습니다.

Pollicy Simulator 아래에 Select Service 에서 시뮬레이션을 돌려볼 서비스인 DynamoDB를 선택해 줍니다.

다양한 기능들이 중에 저는 Select All 버튼을 누르겠습니다.

아직 시뮬레이션을 돌리지 않았기 때문에 각 섹션마다 Not Simulated 라고 뜹니다.

그럼 이제 [Run Simultaion] 버튼을 눌러보겠습니다.

그럼 이렇게 빨간색 글씨로 denied 라고 뜹니다.
이 유저는 현재 DynamoDB에 아무런 권한도 없다는 뜻입니다.

그러면 이제 이 유저에게 새로운 정책을 추가해보겠습니다.

IAM 콘솔로 돌아가서 다시 정책을 찾아서 들어가줍니다.

방금 테스트했던 사용자에게 DynamoDB의 읽기 권한만 가능한 정책을 추가해주겠습니다.
그렇게 때문에 DynamoDB Read-Only Access를 찾아주어야 합니다.

AmazonDynamoDBReadOnlyAccess 를 찾아서 들어가 줍니다.
그리고 연결된 개체로 들어가 [권한 정책으로 연결됨 아래]의 연결을 눌러줍니다.

그런 다음 우리가 이전에 만들었던 aws_moon을 선택하여 정책을 연결 해줍니다.
그러면 이제 aws_moon은 DynamoDB 읽기 권한만 생긴 것입니다.

다시 정책 시뮬레이터로 돌아오면 aws_moon 유저 정책 아래에
AmazonDynamoDBReadOnlyAccess 가 추가된 것을 보실 수 있습니다.

이제 다시 DynamoDB 서비스를 찾아서 Select All 을 클릭하고 시뮬레이터를 실행해보겠습니다.

그러면 이전과는 다르게 부분적으로 allow가 뜨는 것을 볼 수 있습니다.
allow가 뜨는 것은 바로 read-only access에서 허용 가능한 정책들을 포함하고 있는 기능들입니다.

이로써 aws_moon 유저는 방금 우리가 추가한 정책으로 인해서
부분적으로 DynamoDB 액세스를 가지게 되는 것입니다.

참고: 인프런 - AWS 입문자를 위한 강의

profile
안녕하세요. 백엔드, 클라우드, 인프라에 관심과 열정이 있는 김문성입니다. 😊

0개의 댓글