AWS Identity and Access Management(IAM)는 AWS 리소스에 대한 액세스를 안전하게 제어하는 웹 서비스입니다. AWS를 이용하려면 먼저 계정 생성 과정이 필수입니다. 이렇게 생성한 계정 자체는 이용하는 조직이나 개인에 고유한 계정입니다. 계정을 사용하는 사용자에는 루트 사용자와 IAM 사용자라는 2 종류가 있습니다.
루트 사용자
매우 강력한 권한을 가진 사용자입니다. 기본적으로 계정 생성 이후에 사용을 권장하지 않습니다.
IAM 사용자
일상적인 작업은 IAM 사용자가 수행합니다. 보통 개인별, 권한별로 세분화하는 것이 좋습니다.
IAM을 사용하여 리소스를 사용하도록 인증(로그인) 및 인가(권한 있음)된 대상을 제어합니다.
하지만 모든 IAM 사용자가 모든 서비스에 권한이 있는 것은 아닙니다. IAM 역할이라는 것이 IAM 사용자가 어떤 AWS 서비스에 접근이 가능한지 권한을 부여해 줌으로써 IAM 사용자가 특정 AWS 서비스에 접근할 수 있습니다.
즉 사용자 관리를 구성하는 다양한 요소가 있는데 는 아래와 같습니다.
- IAM 사용자: 조직에서 하나의 AWS 계정을 생성한 후에는 한 사람이 하나의 IAM 사용자를 사용하고 공유하지 않습니다. IAM 사용자는 사용자 이름과 비밀번호로 로그인합니다.
- IAM 정책: AWS의 각 서비스에 대한 작업 권한을 IAM 정책으로 정의하고 IAM 그룹에 연결합니다.
- IAM 그룹: IAM 사용자 수가 늘어나면, IAM 그룹을 생성하고 그 안에 IAM 사용자를 소속시킴으로써 정책을 일률적으로 적용할 수 있습니다.
- IAM 역할: 다양한 AWS 서비스에 작업 권한을 부여합니다.
IAM 사용자 입장에서 어떻게 권한이 부여되는지 더 자세히 알아보겠습니다.
IAM 사용자 권한
기본값은 새 사용자는 권한이 없습니다. 권한을 부여하기 위해서는 여러 사용자에게 권한을 부여할 수 있고 단일 사용자에게 권한을 부여할 수도 있습니다.
여러 사용자(IAM 그룹)에게 권한 부여
IAM 그룹은 위에서도 설명했듯이 IAM 사용자의 모음입니다. 이때 IAM 사용자는 여러 그룹에 속할 수 있습니다. 각 그룹은 중첩될 수 없고 권한은 IAM 정책을 통해 부여됩니다.
이때, 최소 권한의 원칙이라는 것이 있습니다. 이는 필요한 작업만 허용하고 필요한 리소스에 대한 액세스만 허용해야 한다는 원칙입니다. 이를 통해 보안 이슈를 사전에 예방할 수 있습니다.
그럼 IAM 사용자에게 권한을 부여하기 위해 참고하는 IAM 정책에 대해 자세히 알아보겠습니다.
IAM 정책
정책 유형에는 아래가 있습니다.
자격 증명 기반 정책
IAM 사용자, 사용자 그룹, 역할과 관련된 정책입니다. 사용자가 지정된 리소스에 대해 지정된 작업을 수행할 수 있도록 인증 및 권한 부여 되어 있는지 확인합니다.
리소스 기반 정책
S3, SNS 등 AWS 리소스와 관련된 정책입니다. 특정한 리소스에 대해서 누가 접근하고 어떤 작업을 할 수 있는지에 대해 정의합니다.
AWS Organizations 서비스 제어 정책 (SCP)
대부분의 기업은 여러 AWS 계정을 생성하여 다양한 비즈니스 단위(개발, 테스트, 프로덕션 등)에 대한 개별 계정을 소유하고 있습니다. AWS Organizations는 사용자가 생성해 중앙에서 관리하는 단일 조직으로 여러 AWS 계정을 통합할 수 있는 계정 관리 서비스 입니다.
SCP는 이러한 다중 계정 환경에서 계정 수준에서의 권한을 세팅하고자 할 때 사용하는 정책입니다.
액세스 제어 목록 (ACL)
ACL이 연결된 리소스에 액세스할 수 있는 다른 계정의 보안 주체를 제어합니다. 리소스 기반 정책과 비슷하지만 리소스 기반 정책은 JSON 정책 문서 구조를 사용하는 반면 ACL은 JSON 정책 문서 구조를 사용하지 않는 유일한 정책 유형입니다.
JSON 정책 문서에는 다음 요소가 있습니다.
- Effect(필수): Allow 혹은 Deny를 사용하여 정책이 액세스를 허용하는지 아니면 거부하는지를 나타냅니다.
- Principal(특정 상황에서만 필요): 리소스 기반 정책을 생성하는 경우, 액세스를 허용하거나 거부할 계정, 사용자, 역할 등을 지정합니다.
- Action(필수): 정책이 허용하거나 거부하는 작업 목록을 포함합니다.
- Resource(특정 상황에서만 필요): IAM 권한 정책을 생성하는 경우, 작업이 적용되는 리소스 목록을 지정합니다.
- Condition(Option): 정책이 권한을 부여하는 상황(조건)을 지정합니다.
아래와 같이 정책이 생성됩니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "FirstStatement",
"Effect": "Allow",
"Action": ["iam:ChangePassword"],
"Resource": "*"
},
{
"Sid": "SecondStatement",
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*"
},
{
"Sid": "ThirdStatement",
"Effect": "Allow",
"Action": [
"s3:List*",
"s3:Get*"
],
"Resource": [
"arn:aws:s3:::confidential-data",
"arn:aws:s3:::confidential-data/*"
],
"Condition": {"Bool": {"aws:MultiFactorAuthPresent": "true"}}
}
]
}
# 출처: https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json
즉, IAM 계정에 부여되는 권한 처리 과정을 요약하면 아래 그림과 같습니다.
참고
Policy evaluation logic - AWS Identity and Access Management (amazon.com)