IAM : IAM은 AWS의 다양한 리소스로의 접근을 안전하게 관리하도록 해준다.
AWS 환경 내에서 무엇을 할 수 있는지에 관한 권한을 컨트롤 할 수 있게 한다.
Root account 은 백업 또는 financial 목적 외에는 사용하지 않는다.
Users: IAM은 개개인의 "User"를 생성하고 관리하도록 해준다.
해당 "User"의 Credential과 access key또한 마찬가지다.
이는 User에게 특정 권한을 부여하여 User가 AWS 리소스에 접근하는 것을 제어할 수 있다는 말이다.
Groups: Users를 Group에 포함시킬 수 있다.
User가 아닌 Group에 권한을 부여할 수 있다.
이는 권한의 부여와 회수를 한 번에 심플하게 처리할 수 있도록 한다.
유저는 A라는 그룹에 속하면서 B라는 그룹에도 중복으로 속할 수 있다.
Roles : IAM에서 Roles은 AWS 리소스에게 권한을 위임하는 방법이다.
보통, 서비스나 AWS 인스턴스에 사용되며 위에 나온 User나 Group에는 사용하지 않는다.
Role은 Policy와 연관되어 있는데 Policy는 어떤 액션이 어떤 리소스에서 동작하는지 정의한 것이라 볼 수 있다.
만약 S3에 Full Access 하는 Policy를 가진 Role을 EC2에 부여하면, EC2에서는 별 다른 Credential 없이 S3로의 접근이 가능하다. 이는 Node.js와 같은 개발환경에서도 마찬가지이다.
쉬운 비밀번호를 설정했을 때 다음의 취약성들이 발생한다.
MFA는 Multi-Factor Authentication 이라고 부른다.
Multi-Factor Authentication은 User가 계정에 접속하거나 리소스에 접근할 때 두 개 이상의 인증을 해야만 하는 안전한 메커니즘이다.
기존의 아이디, 패스워드로 인증하는 것 외에도 하나의 안전장치가 주가되는 셈이다.
2개의 인증만 필요한 매커니즘은 2FA라고도 부른다.
데스크탑으로 하려면 Authy를 이용한다.
차키(?)라고 직역했는데 "form of key fobs" 라고 영어로 표현되니까 대충 전자 리모트 키를 위한 물리적 장치 정도로 알고있자.
IAM을 통해 Users의 Access key와 Secret Key를 생성할 수 있다.
AWS CLI를 이용하기 위해서는 설치가 필요하다.
설치방법은 공식문서를 참조하자.
aws configure
하면 초기 환경을 설정할 수 있다.
액세스 키와 시크릿 키, 리전, 출력 포맷을 안내에 따라 작성하면 된다.
다 작성하면 홈 디렉토리에 .aws
라는 숨김 폴더가 생성된다.
그 안에는 config
라는 파일과 credentials
라는 파일이 존재한다.
각각 region, output과 access key, secret key가 삽입되어 있다.
해당 key를 가진 User는 자신에게 부여된 policy 에 따라 권한이 설정된다.
Trust Relationship : Roles는 trust relationship을 갖는다. trust relationship은 해당 role을 할당받은 사람 또는 특정 엔티티를 말한다.
이 관계는 trust policy라는 JSON 문서에 기술되어 있다.
Trust policy는 role을 할당할 수 있는 trusted principals(주체)가 나열되어 있다.
예를 들어, AWS 서비스나 특정 IAM User가 해당 role을 할당받도록 지정할 수 있다.
Permissions Policies : trust policy 뿐만 아니라, role는 permissions policies를 자신에게 땠다 붙였다 할 수 있다.
Permissions policies는 trust relationship이 수행하는 특정한 액션(API operations)이 승인되거나 거부되는 것을 정의한다.
이러한 policies은 JSON 포맷으로 쓰여졌고 세분화된 제어를 정의하기 위해 사용된다.
AWS 서비스나 IAM User와 같은 trusted entity가 role을 이용해 AWS 리소스로 접근하기를 원할 때 trusted entity는 해당 role에 대한 임시 security credentials을 요청한다.
이 credentials는 문제 없을 시 AWS Security Token Service(STS)를 통해 제공된다.
그 후 해당 entity는 이 임시 credentials를 이용해 AWS 리소스에 접근한다.
S3에 모든 접근을 할 수 있는 policy를 role에 attach하고 role의 trust policy에 EC2를 설정해놓았다고 가정해보자.
EC2 콘솔에 접근해서aws s3 ls
를 치면 credentials가 없다고 나온다.
해당 EC2에 위의 role을 적용한 후 다시aws s3 ls
를 치면 정상적인 결과가 출력된다.
credential reports는 Users의 생성날짜, 언제 패스워드를 바꿨는지, MFA 설정이 되어있는지 등을 볼 수 있다.
access advisor는 User가 associated 되어있는 모든 permission에 대한 활동을 볼 수 있다.