kakasoo

[SAA-C03] 1. IAM 사용자와 그룹 생성 본문

프로그래밍/SAA-C03

[SAA-C03] 1. IAM 사용자와 그룹 생성

카카수(kakasoo) 2024. 4. 6. 15:35
반응형

사용자, 사용자 그룹 ( Users, User Groups ) 에 대한 설명

 

Alice, Bob, Charles, David, Edward, Fred 6명의 사람들이 있다고 해보자.

Alice, Bob, Charles는 Developer이고, David, Edward는 Operation팀에 속한다.

마지막으로 Fred는 어느 팀에도 속하지 않았다고 해보자.

이 때, 이 6명의 사람들을 각각 User ( = 사용자 ) 라고 하고, 정의된 3개의 그룹을 User Group ( = 사용자 그룹 ) 라고 정의한다.

사용자들은 자신의 그룹으로부터 권한을 상속받아 사용할 수 있기 때문에 그룹을 이용해서 권한을 관리하는 편이 더욱 효율적이다.

 

 

반면, Group Aduit Team 처럼, Charles, David가 이중으로 그룹에 속한 경우도 있을 것이다.

이 경우에 Charles, David는 자신이 속한 그룹의 권한 외에, Group Aduit Team의 권한까지, 총 2개의 권한을 상속받게 된다.

권한은 교집합이 아니라 합집합의 형태로, 자신이 속한 사용자 그룹의 권한들을 모두 합하여 가지게 된다.

 

IAM ( Identity and Access Management )

IAM은 위와 같이 사용자와 사용자 그룹을 관리할 수 있는 대시보드이자 그런 기능들을 의미한다.

우리는 이미 AWS에 가입할 때 IAM을 사용한 것이나 마찬가지인데, 이는 우리의 계정 역시 IAM에 해당하기 때문이다.

이런 첫번째 계정을 Root 계정이라고 부르고, 우리는 대부분의 경우에는 IAM에서 생성한 사용자를 사용해야 한다.

아무리 작은 기능이라도 IAM으로 사용자를 생성해서, 딱 필요한 기능만 사용하게끔 할 것인데,

이는 AWS가 '최소 권한 원칙'을 적용하여, 필요한 것 외에는 접근 못하게 생성하는 것을 권장하기 때문이다.

 

 

권한 ( = Policy )은 각 사용자 별로 딱 필요한 수준만 부여해주고, 그 이상의 권한을 사용할 수 없게 막아두는 것이 좋다.

이는 비용 관리 측면과 보안 측면에서, AWS가 권장하는 방식이지만, 말 그대로 권장이기 때문에 지키지 않더라도 불이익은 없다.

여담으로, Fred와 같이 어떤 그룹에도 속하지 않은 유저에게는 그 유저만 해당하는 권한을 부여할 수 있는데 이를 인라인 정책이라고 한다.

정리하면, IAM은 루트 계정 아래에 각 권한 별로 여러 사용자와 사용자 그룹을 생성하고 딱 필요한 만큼의 권한만 부여하는 것을 의미한다.

 

Policy 작성하기

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow", // Permission에 대한 허가
      "Action": "ec2:Describe*", // EC2의 Describe에 대한 액션을 의미
      "Resource": "*" // 접근 가능한 자원은 전체
    },
    ...
  ]
}

 

정책은 위와 같이 JSON 형식으로 작성한다.

Version은 보통 "2012-10-17"으로 고정이다.

Statement는 배열의 형태로, 허용되는 권한에 대한 내용을 담아야 하는데 각 객체에는 Sid, Effact, Action, Resource가 있다.

Sid는 해당 문장에 대해 아이디를 부여할 때, string으로 원하는 아이디 값을 넣어주면 된다.

Effect는 Allow, Deny의 enum 타입으로 다음으로 서술할 정책에 대해 허용할 권한인지 제한할 권한인지를 명시하면 된다.

Action은 이제 권한을 의미하며, Resource는 그 권한이 가리키는 리소스 대상을 의미한다.

 

사용자와 사용자 그룹 생성하기 실습

AWS에 회원가입했다는 가정 하에, 우선 로그인을 한 시점으로 설명을 시작한다.

 

 

최초 로그인을 한 후 IAM 대시보드로 이동한다.

대시보드에 이동하면 우측 상단에 리전 ( Region )이 글로벌로 설정된 것을 확인할 수 있는데, 이는 IAM이 글로벌 서비스란 의미다.

글로벌 서비스란 어떤 리전, 즉 어떤 지역에서나 사용할 수 있는 서비스라는 의미로, 계정임을 생각해보면 너무 당연한 일이다.

[사용자 생성] 버튼을 눌러서 이동하면,

 

 

위와 같이 사용자 생성 칸이 나온다.

나의 경우에는 'IAM-001' 이라고 입력했는데, 이는 이 사용자의 이름이 될 것이다. ( 추후 로그인할 때 사용자의 이름을 사용한다. )

선택한 것으로는 AWS Management Console에 대한 사용자 액세스 권한을 허용했는데, 이는 이 대시보드에 접근하는 걸 말한다.

API나 cli 환경에서만 사용할 게 아니라면 당연히 이 권한을 부여할 것이고, 권장사항은 identity center에서 지정하라고 나온다.

하지만 우리는 IAM 사용자를 생성할 것이라고 체크를 할 것이고, 일반적으로 콘솔 암호는 자동 생성된 암호를 선택해주면 된다.

자동 생성된 암호를 선택한 경우에는, 로그인 시 비밀번호 변경을 강제하는 옵션이 있는데 그것도 선택해주면 된다.

생성 후 본인이 바로 사용할 사용자라면, 수동으로 비밀번호를 설정하는 것을 추천한다.

다음 버튼을 누른다.

 

 

다음 버튼을 누르면, 이번에는 이 사용자에 대한 권한 설정을 하는 창이 나온다.

권한 설정은 이전에 만든 그룹에 사용자를 추가하는 것이 있고, 권한을 복사하여 새 권한을 만드는 것도 있다.

직접 정책 연결은 앞서 설명한 인라인 정책 ( Inline Policy ) 으로, 해당 사용자에게 그룹 없이 권한을 부여하는 방식이다.

 

 

여기서는 admin으로 이름을 설정하고 모든 권한을 주기 위해 'AdministratorAccess'를 선택한다.

미리 말한 것처럼, 권한은 최소 권한으로 주는 것이 좋지만, 여기서는 학습을 위해 전체 권한을 부여하는 것으로 했다.

권한을 부여한 다음에는 사용자 그룹이 생성되었을 것인데, 바로 선택하여 유저에게 권한을 준다.

 

 

마지막으로 최종 검토 페이지가 나오면 선택사항인 태그를 넣어줄 수 있다.

여기서는 임시로 Department라는 키에 Engineering 이라는 값을 넣었는데 아무런 의미도 없지만 추후 식별하기 편해서 넣는다.

마지막으로 사용자 생성 버튼을 누르면 생성이 완료된다.

 

 

사용자 탭으로 가서 방금 만든 IAM-001을 누르면 위와 같이 방금 만든 사용자의 상세를 볼 수 있다.

권한 정책에 AdministratorAccess가 있고, 연결 방식 ( Attached via ) 으로는 admin user group이 선택되어 있다.

이 권한이 어디서부터 왔는가를 의미하는 값으로, 추후 사용자의 권한을 관리할 때 참고할 수 있다.

 

AWS 사용자로 로그인하기

 

Root 계정의 프로필 탭을 누르거나 IAM 대시보드에 가면 AWS 계정에서 계정의 아이디를 확인할 수 있다.

이 계정의 ID를 입력한 다음, 아래 탭에서는 유저의 이름 ( ex. IAM-001 ) 을 입력, 설정한 비밀번호를 입력하면 로그인이 가능하다.

하지만 계정의 ID는 기억하기 어렵기 때문에 계정 ID에 대한 별칭을 설정할 수 있다.

 

 

별칭을 'kakasoo' 라고 설정한 경우 ID 12자리 대신 'kakasoo' 라는 별칭을 사용하고, 사용자 이름으로 계정 사용자로 로그인이 가능하다.

 

 

각각 로그인 후 상단의 프로필 탭을 누르면 루트 계정과 IAM 사용자가 나뉘는 것을 볼 수 있다.

반응형