Giuthub Action과 AWS CodeDeploy를 사용하여 CI/CD를 진행해 본 적이 있습니다.
그때 AWS 설정을 하며 IAM User와 Role을 만들어서 EC2와 S3, CodeDeploy에 적용하여 사용했었습니다.
당시에는 뭔지도 모르고 그냥 따라하기 급급했었는데
이번 기회에 IAM이 무엇인지, 어디에 사용되는지 알아보도록 하겠습니다.
IAM
IAM이란 Identity and Access Management의 약자로 AWS에서 제공하는 중요한 기반 서비스 중 하나입니다.
말 그대로 Identity와 Access 권한을 관리하고, 부여합니다.
AWS콘솔에 로그인 할 때 나타나는 것처럼, 사용자는 루트 사용자와 IAM 사용자로 나뉩니다.
루트 사용자는 기본적으로 만들어지는 아이디이고 모든 권한을 가지며 모든 것을 관리합니다.
IAM 사용자는 어떤 루트 계정에 소속되어 있는 사람을 말합니다. 루트 사용자가 허용한 기능만 가능합니다.
IAM 사용자는 User와도 같은 말이며 소속되어 있는 루트 조직에서 관리당합니다.
예를 들면
저는 루트 계정을 사용하고 다른 개발자가 사용할 User를 만들어 적절한 권한을 부여하여 제공하면 같이 개발할 수 있습니다.
이렇게 되면 루트 계정의 아이디와 비밀번호를 공유해 같이 사용할 필요가 없습니다.
(마지막에 적겠지만 일반적으로 루트 계정은 IAM또는 계정 설정을 할 때를 제외하면 사용하지 않는 것이 좋다고 합니다)
User
IAM 사용자를 나타냅니다.
만들어진 User는 루트 계정의 아이디 혹은 Alias를 통하여 콘솔에 접근 가능합니다.
User를 만들 때 비밀번호도 함께 생성할 수도 있고
일회용 비밀번호를 만들어줘서 첫 로그인 후 비밀번호를 변경할 수 있게 설정할 수도 있습니다.
User들은 각각 자신의 Permission을 가집니다.
예를 들면 콘솔을 통하여 IAM의 목록을 확인할 수 있는 IAMReadOnlyAccess 등 여러 서비스의 권한을 설정할 수 있습니다.
Permission Policy는 종류가 다양하고 Visual 방식과 JSON을 이용하여 수정할 수 있습니다.
Group
그룹에도 권한을 설정할 수 있고 그룹에 소속된 유저들은 그룹에 지정된 권한을 상속받습니다.
한 유저가 여러 그룹에 들어갈 수 있지만 그룹 안에 그룹은 들어가지 못합니다.
다음과 같은 모습으로 그룹을 적용할 수 있습니다.
물론 그룹이 없어도 괜찮습니다.
아래 그림과 같이 특정 팀에 소속된 유저들의 권한을 부여할 때 그룹을 이용하여 정해주면 관리하기 용이합니다.
Role
Role은 서비스에게 권한을 부여할 때 사용합니다.
EC2와 Lambda가 대표적입니다.
예를 들면
CodeDeploy 서비스에서 EC2로 파일을 전송하고 실행하는 권한을 부여할 수 있습니다.
IAM Guidelines & Best Practices
- Don’t use the root account except for AWS account setup
- One physical user = One AWS user
- Assign users to groups and assign permissions to groups
- Create a strong password policy
- Use and enforce the use of Multi Factor Authentication (MFA)
- Create and use Roles for giving permissions to AWS services
- Use Access Keys for Programmatic Access (CLI / SDK)
- Audit permissions of your account using IAM Credentials Report & IAM Access Advisor
- Never share IAM users & Access Keys
Alias 수정법이나 Access Key, MFA, Service에 Role을 사용하는 부분은 생략했습니다. 개념만 정리하기 위함입니다.
적어둔 것들 외에도 보안 지원 기능과 Access Analyzer등 여러 도구들이 많이 있습니다
https://docs.aws.amazon.com/iam/
docs.aws.amazon.com
참고
https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html
https://docs.aws.amazon.com/IAM/latest/UserGuide/root-user-best-practices.html
https://docs.aws.amazon.com/IAM/latest/UserGuide/when-to-use-iam.html
https://www.udemy.com/course/best-aws-certified-solutions-architect-associate/