시리즈의 첫번째는 AWS IAM 서비스이다. 아마 AWS에 처음 가입 후 가장 먼저 만져야할 서비스가 아닐까싶다. AWS에서도 권장하는 기본 원칙은, root 계정 사용을 자제하고 IAM user를 생성하여 최소한의 권한으로 접속하는 것이다. 심지어는 root로 접속하자마자 관리자 IAM user부터 생성하고, 또다른 최소 권한 사용자를 생성하여 필요한 권한이 있을때마다 root가 아닌 관리자 IAM user로 권한을 부여하기를 권장한다.
나는 이를 지키지 않아 한번 해킹을 당한 적이 있다(대략 4천만원 상당의 요금이 나왔던 것으로 기억한다). 경험 상 IAM 서비스와 root 계정 보호는 모든 서비스 중에서도 가장 중요한 서비스라고 강조해도 모자르지 않다고 생각한다. 여러분은 계정 보안을 철저히 하여 나와 같은 일을 겪지 않기를 바란다.
AWS IAM은 AWS 서비스의 접근과 자격증명을 관리하는 서비스이다. 처음엔 IAM user가 없으므로 root 계정이 가장 처음 접하는 서비스일 것이다.
IAM을 통해, user를 생성하여 팀원에게 전달하고, 필요한 권한을 부여하며, 접근 기록을 모니터링한다. 어떻게 이것들을 조절하느냐에 따라 보안이 상승하고, 권한 관리가 간편해지기도한다. 그럼 각 개념들이 어떤 상황에서, 어떻게 쓰이는지 알아보자.
IAM user를 생성한다는 것은 이것을 생성한다는 의미와 같다. 실제 유저가 사용하는 것으로, 콘솔 접속을 하고, 이를 위해 패스워드를 소유한다.
Policy를 통해 권한을 부여할 수 있어, 필요한 서비스에 접근하도록 허가할 수 있다.
AWS에서는 root 계정을 사용하는 대신 이것, IAM user를 생성하여 사용하는 것을 권장한다. root 계정은 기본적으로 모든 권한이 오픈되어있기 때문에, 매우 "편리"한 계정이다. 그렇다. 해커에게도 매우 편리하므로, 본인만 알고있는 비밀번호로 설정한 뒤 계정을 마음속에 봉인하자.
대신 IAM user로 관리자 user를 생성하여 사용하면 된다.
root 계정과 마찬가지로, MFA를 반드시 사용한다. 비밀번호만으로는 계정 보안이 매우 취약하다. Google Authentication과 같은 앱이나 크롬 확장프로그램을 이용하면 된다.
{
"Version": "2012-10-17",
"Id": "S3-Account-Permissions",
"Statement": [
{
"Sid": "1",
"Principal": {
"AWS": ["arn:aws:iam::121431:root"]
},
"Effect": "Allow",
"Action": [
"s3:Get*",
"s3:List*",
"s3:Describe*",
"s3-object-lambda:Get*",
"s3-object-lambda:List*"
],
"Resource": "*"
}
]
}
IAM의 개념들이 어떤 상황에서 어떻게 사용되는지 알아보았다. 개념은 많지 않지만, 하나하나의 개념이 매우 중요한 파트이다. 이 파트는 그저 알아두는 것뿐만 아니라 꼭 가슴 깊이 새기도록 한다.