- AWS IAM이란?
- Root 계정과 모범사례
- AWS IAM 관련 용어
AWS IAM이란?
AWS Identity and Access Management(IAM)은 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스입니다.
IAM을 사용하여 리소스를 사용하도록 인증(로그인) 및 권한 부여(권한 있음)된 대상을 제어합니다.
AWS IAM은 Authentication과 Authorization에 관련된 서비스에요. IAM에서는 여러 가지 개념들을 사용해서 이 인증과 권한을 적절하게 안전하게 그리고 편리하게 사용할 수 있도록 도와줘요. IAM에서 사용하는 개념들을 알아보기 전에 중요해 보이는 설정을 먼저 하도록 할게요.
흔히 AWS 계정이라고 하는 계정은 대부분의 경우 Root 계정을 의미하는데 AWS Management Console에 로그인할 때 AWS에 가입할 때 사용한 e-mail 주소와 패스워드를 사용해서 로그인 한 그 계정을 의미해요. 이 Root 계정(혹은 Root 사용자)은 해당 계정의 모든 AWS 서비스 및 리소스에 대한 완전한 액세스 권한이 있는 사용자로 AWS에서는 일상적인 작업은 물론 관리 작업에서 조차 Root 사용자를 사용하지 않을 것을 '강력하게' 권장하고 있어요. 대신 관리자 권한을 가진 IAM User를 생성해서 사용할 것을 권장하고 있어요.
Root 계정과 모범사례
이 정도로 강력하게 권장하는 거 보면 뭔가 대단히 중요한 거 같은데 그럼 일단 관리자 IAM User를 만들고 시작해볼게요.
https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/getting-started_create-admin-group.html
Creating your first IAM admin user and user group - AWS Identity and Access Management
Creating your first IAM admin user and user group As a best practice, do not use the AWS account root user for any task where it's not required. Instead, create a new IAM user for each person that requires administrator access. Then make those users admini
docs.aws.amazon.com
먼저 IAM 대시보드에 가면 보안 권장사항이라던가 IAM 리소스에 관한 개괄적인 현황 등을 볼 수 있어요.
저는 미리 가이드대로 Administrator라는 IAM User를 만들었는데 너무 가이드를 따라서 만들다 보니 '아이디는 거의 일반에 공개되어 있는 거나 마찬가지 아닌가? 이 건 이 것대로 보안에 위협이 될 수 있는 요소인 것 같다.'라는 생각에 또 다른 IAM 유저를 하나 더 생성할 거에요.
IAM user name을 정하고 AWS credential type을 정해주세요. Access key 타입은 다음에 만들어볼 거에요. 지금은 console에만 접근할 수 있는 Password 타입으로 만들어 줄게요. 다음으로 패스워드는 자동 생성된 패스워드로 세팅하는 방법이 있고 지금 이 화면에서 설정하는 방법이 있어요. 지금 이 IAM user를 내가 사용할 게 아니라 다른 누군가에게 줄 거라면 자동 생성된 임시 비밀번호를 적용해서 계정을 생성하고 그 계정 이름과 패스워드를 누군가에게 전달하고 패스워드는 바꿔서 써.라고 하면 좋겠지요?
관리자 그룹을 만들고 이 관리자 그룹에는 AWS 모든 서비스에 접근할 수 있는 권한을 주려고 해요. 그룹 이름은 Administrators으로 그룹을 만들고 이 그룹에는 AdministratorAccess라는 Policy를 붙여줄 거에요. 참고로 이 AdministratorAccess라는 정책은 아래 그림과 같이 계정이 소유한 모든 AWS 서비스들의 리소스에 대해서 Full access를 허용하는 정책이에요.
IAM user에게 권한을 부여하는 방법은 크게 3가지가 있나 봐요.
- 사용자를 그룹에 포함시키는 방법
- 기존 사용자의 권한을 복사하는 방법
- 만들어진 정책들을 사용자에게 바로 붙이는 방법
여기에서는 첫 번째 사용자를 그룹에 소속시키면서 그 그룹의 권한을 가질 수 있게 하는 방법이에요.
그림 아래에 permissions boundary라는 건 다음에 볼게요. 그리고 태그도 다음에 보도록 할게요.
마지막으로 지금 생성하는 IAM user의 설정들을 확인하고 유저 생성 버튼을 눌러주세요.
마지막 화면에서는 IAM user가 생성된 결과 화면을 볼 수 있어요. 저 패스워드에서 Show 버튼을 누르면 xodwkAdmin의 패스워드를 볼 수 있고 send email 기능을 통해 이 사용자 이름과 접속방법 등을 보내줄 수 있어요. 패스워드는 따로 저장해놓으세요.
그리고 방금 계정 생성 결과 화면에서 나온 주소로 들어가서 로그인을 하면 아래와 같이 나오는 것을 볼 수 있어요.
아까 언급하지는 않았지만 비밀번호를 자동으로 생성하고 다른 사람에게 건네주는 상황에서 이렇게 처음 로그인 시 비밀번호를 변경해야만 사용할 수 있도록 강제하는 옵션이 있었어요.
AWS IAM 용어
IAM 용어들이 감이 안 잡히고 헷갈리는 부분이 많은데 위에서 관리자 IAM user를 만들면서 봤던 걸 기초로 각각 용어들이 어떤 걸 의미하는지 보고 아직 확인하지 못한 부분들은 과감히 다음으로 넘겨서 만들고 써보면서 확인해보도록 할게요.
- IAM Resources
IAM에 저장된 사용자user, 그룹group, 역할role, 정책policy, Identity provider objects를 IAM resources라고 해요.
위에서 만든 xodwkAdmin은 IAM user, 사용자에요. 그리고 Administrators라는 IAM group도 만들었구요. 정책은 앞서 xodwkAdmin이 속한 Administrators 그룹에 AdministratorAccess라는 정책이 연결되어 있었어요. 역할과 identity provider는 차후에 더 알아보도록 할게요.
- IAM Identities
IAM 자격 증명에는 user, group, role이 포함돼요. root 계정은 하나지만 그 안에 여러 user들이 존재할 수 있어요. 그리고 그 user들은 각자 자기 자신을 증명할 수 있는 수단을 가지고 있어요. user name과 패스워드가 그 수단일 수 있고 또 access key를 통해 자신을 증명할 수도 있어요. 역할은 특별한 credential을 필요로 하지는 않지만 어떤 역할이 나에게 주어져 있다면 그 역할을 하는 자격이 있다고 할 수 있겠지요?
- IAM Entities
IAM Entities는 user, role이 해당돼요. - FAQs에서는 IAM Entities에 user, group or role이라고 쓰여있어요😇 -
이 것은 인증Authentication에 사용되는데 AWS service에 어떤 요청을 보낼 때 그 요청을 보내는 보안 주체의 인증을 의미해요.
- IAM Principals
IAM 보안 주체는 AWS service에 요청을 보내는 주체에요. 우리는 Root 계정 사용자는 쓰지 않기로 했으니까 빼고 IAM user와 role로 예를 들어보면 S3에 버킷을 생성하는 권한이 있는 사용자가 버킷을 생성하면 버킷 생성의 주체는 그 사용자가 되는 거고 버킷 생성 권한이 있는 역학을 EC2에 부여해서 버킷을 생성한다면 이 버킷 생성의 주체는 그 EC2 애플리케이션이 되는 거에요.
정리하면서 느낀 건데 IAM 용어들이 난해한 이유는 각 term마다 이름은 다 다른데 하는 일은 비슷하고 경계가 모호하다고 해야 하나? 구분이 잘 안 되는 - 아마 공부가 부족해서 - 경향이 있어서 그런 것 같은데 혹시라도 틀린 부분이 있다면 꼭 수정하도록 할게요.
틀린 부분 있으면 알려주세요.