AWS를 처음 사용할때 콘솔에서 계정/비밀번호를 이용하여 로그인한다. 일반적인 서비스에서의 로그인방법과 유사하다.
하지만 AWS는 인프라를 구성할 수 있는 서비스이다. 조직에서 인프라에 접근할 수 있는 사람은 한 명이 아니다. 그렇다면 다수의 인원이 하나의 계정을 사용할까? 또는 막 합류한 개발자에게 기존 서비스를 삭제하고 생성할 수 있는 권한이 있다면 문제가 생기지 않을까? 이러한 보안문제에 대한 해답을 제시하는 서비스가 바로 AWS IAM이다.
💡 IAM이란?
Identity and Access Management의 약자.
사용자/그룹을 생성할 수 있으며 리소스에 대한 접근권한을 부여할 수 있다.
여러 사용자에게 AWS 계정에 대한 접근을 허용할 수 있으며 내/외부적인 보안문제를 처리할 수 있다.
아래의 그림은 하나의 계정에 대해 IAM을 사용하여 사용자들을 어떤식으로 구성할 수 있는지를 보여준다.
위에서 이미 얘기했지만 더 자세히 살펴보자
IAM에는 여러 기능이 존재한다.
IAM에 존재하는 기능들은 유저/그룹/리소스 에게 권한을 설정, 계정/유저 단위의 보안과 연관된 것들이다.
AWS를 운용하기 위해 필요한 기능들을 살펴보자
IAM Policy(정책)은 권한에 대한 명세
라고 볼 수 있다.
유저/그룹/리소스 들은 이 정책을 부여받아 특정 리소스에 대한 접근권한을 가질 수 있다.
정책은 JSON 문서이며 문서 내 작성된 내용에 따라 접근수준이 정해진다. 각 유저/그룹은 여러개의 정책을 가질 수 있다.
JSON 문서 구조를 살펴보자면
Key | 설명 |
---|---|
Version | 문서 버전명. 보통 '2012-10-17' |
ID | (Optional) 정책에 대한 ID |
Statement | 실제 권한에 대한 정보가 들어감 |
Statement
내에 들어가는 값들 또한 형식이 정해져 있다.
Key | 설명 |
---|---|
Sid | (Optional) 해당 문장의 ID로 문장의 식별자 |
Effect | 해당 정책을 Allow 할 것인지 Deny 할것인지를 정의 |
Principal | 정책이 적용될 사용자, 계정 혹은 역할로 구성된다 |
Action | Effect에 기반하여 허용/거부 되는 API 호출 목록 |
Resource | 적용될 Action의 리소스의 목록 |
Condition | (optional) 이 정책이 언제 적용될지를 결정함 |
{
"Version": "2012-10-17",
"Id": "S3-Permissions",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": ["arn:aws:iam::1234566789012:root"]
},
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": ["arn:aws:s3:::testbucket/*"]
}
]
}
위 코드에 대한 설명은 아래와 같다
Principal : root 사용자에게
Resource : testbucket 이름을 가진 s3 서비스의 모든경로에 대해
Action : Get과, Put을 할수 있는 권한을
Effect : 허용하겠다
위와 같은 형식을 이용하여 권한에 대한 명세. 즉, 정책을 정의할 수 있다.
IAM User(사용자)은 실제로 단 한 명의 사용자를 의미하는 것이다.
IAM Group은 다수의 IAM 사용자를 포함할 수 있다. 그룹을 이용하여 정책을 다수의 사용자에게 매핑 시킬 수 있다.
IAM Role(역할)은 특정 개체(User, AWS 서비스, 다른 계정 등)로의 접근권한을 가진다.
Role은 Policy을 가진다는 것에서 IAM User와 비슷하게 보이지만 영원히 가지고 있는 권한이 아닌 임시 보안 자격 증명
이다.
보통 Role은 모자로 비유가 된다. 언제든 썼다 벗을 수 있다는 것이다.
또한 Role은 사용자뿐만 아니라 서비스에게도 부여할 수 있다.(AWS 내 서비스에게 권한 부여한다는 뜻)
임시 자격 증명이기때문에 보다 안전하다는 장점이 있다.
사용자의 정보가 침해당하지 않도록 보호하기 위해 두가지 방어 메커니즘이 있다.
가상 MFA 장치
= Google Authenticator(phone only), Authy(multi device)Universal 2nd Factor(U2F) Security Key
= 물리적 장치임 YubiKey(하나의 키로 여러 유저의 정보를 가질 수 있음)Hardware Key Fob MFA Device
= Gemalto 회사의 제품, AWS GovCloud(미국 정부가 제공)