Cloud/AWS

[AWS] IAM

dohyeon2 2023. 12. 4. 17:10

AWS Identity and Access Management, 줄여서 AWS IAM은 사용자와 그룹의 권한을 관리하는 매우 중요한 서비스입니다. 이번 글에서는 AWS IAM을 이용하여 접근 통제의 기본 개념을 정리하였습니다.


AWS IAM 서비스

: AWS에서 권한이란 사용자가 어떤 서비스에서 어떤 리소스를 상대로 어떤 작업을 수행할 수 있는지 없는지를 정의합니다. 200종류가 넘는 방대한 서비스를 제공하는 AWS에서 각 서비스의 권한을 설정하는 것은 필수입니다. 

 

사용자와 그룹

AWS는 리눅스 정책과 마찬가지로 사용자와 그룹에 기반하여 권한을 부여합니다. 예를들어 회사 내에 서비스를 관리하는 도현,필무,승빈,태중,병효,소담 여섯명이 있다고 가정하겠습니다. 이때 도현,필무,승빈은 함께 일하는 개발자들이고, 태중,병효,소담은 함께 일하는 관리자들이라면 아래 그림과 같이 사용자와 그룹을 구성할 수 있습니다. 또한 한사람은 복수개의 그룹에 속하는 것도 가능합니다.

 

사용자 및 관리자 예시

정책(Policy)

: AWS IAM에서는 정책이라는 개념을 통해 여러 개의 서비스에 걸쳐서 복수의 권한을 부여할 수 있습니다. AWS에서는 이렇게 다양한 권한을 하나의 정책이라는 JSON file 형태로 정의해 놓고 관리할 수 있게 해줍니다. 예를들어 아래 정의된 정책에 따르면 EC2사용 및 Describe, 일레스틱 로드밸런싱서비스 사용 및 Describe가 허용된 사용자라는 것을 알 수 있습니다. 

{
  "Version": "2012-10-17", # 정책언어 버전
  "Statement": [
    {
      "Effect": "Allow",    # statement가 특정 api에 접근하는 것을 허용할지 여부
      "Principal": {
      			"AWS": ["arn:aws:iam::123456789012:root"] # 특정 정책이 적용될 사용자,계정,역할
                }, 
      "Action": ["ec2:Describe"], # 서비스 및 상태
      "Resource": "*"
    },
    {
      "Effect": "Allow", # statement가 특정 api에 접근하는 것을 허용할지 여부
      "Action": ["elasticloadbalancing:Describe"], # 서비스 및 상태
      "Resource": "*"
    }
  ]
}

 

AWS 정책은 위와 같이 몇가지로 나뉘어 구성됩니다.

  • Version: 정책언어 버전
  • Statement: 한개 또는 복수개의 개별적인 문장
    이때 Statement는 아래와 같이 구성됩니다. 
    - SID: statement의 id
    - Effect: statement가 특정 api에 접근하는 것을 허용할지 여부
    - Principal: 특정 정책이 적용될 사용자, 계정, 역할
    - Action: effect에 기반하여 허용 및 거부되는 api의 호출목록
    - Resource: 적용될 action의 리소스 목록
    - Condition: statement가 언제 적용될지 결정 (선택사항)

또한 AWS에서는 위와 같이 모든 사용자에게 모든 사용권한을 부여하지 않습니다. 왜냐하면 특정 사용자가 너무 많은 서비스를 실행하면 매우 큰 비용이 발생하거나 보안상의 위험성이 있기 때문입니다. 따라서 AWS에서는 최소 권한의 원칙을 적용합니다. 자세한 사항은 아래에서 찾아보실 수 있습니다. 

(참고: https://docs.aws.amazon.com/ko_kr/wellarchitected/latest/security-pillar/sec_permissions_least_privileges.html)

보안 정책

AWS는 사용자와 그룹을 보호하기 위해 크게 2가지 매커니즘을 제공합니다.

  • 비밀번호 정책(Password Policy): aws에서는 다양한 옵션을 이용해 비밀번호 정책을 정의합니다. 예를들어 대문자,특수문자, 숫자 등 특정 유형의 비밀번호 사용을 요구하거나 일정기간마다 비밀번호를 변경하도록 요구하는 방식으로 해킹등의 위협을 예방합니다.

비밀번호 정책 예시

  • MFA(Multi Factor Authentication): MFA란 비밀번호와 함께 사용하는 보안장치를 말합니다. 예를들어 로그인할 때 비밀번호를 입력하고 추가적으로 휴대폰으로 발급받은 MFA 토큰을 입력하는 식의 2중 보안 방식을 사용한다면, 해커에게 비밀번호가 노출되어도 MFA 토큰을 발급받을 물리적 장치가 필요하므로 보안상의 위협을 예방할 수 있습니다. 메이플스토리 게임에 로그인할 때 휴대폰으로 otp 토큰 추가인증을 받던 것을 떠올리시면 이해가 쉽습니다. 그렇다면 AWS에서 사용하는 MFA 장치 옵션에는 어떤 것들이 있을까요? 
    1. 가상 MFA 장치: google Authenticator는 하나의 휴대전화에서만 연동하여 사용할 수 있으며 Authy는 다수의 장치에서 연동하여 사용할 수 있습니다.
    2. U2F: 물리적 장치로 들고다니는 보안키 입니다.

MFA 설정 예시

MFA 설정은 Root 계정에서만 가능합니다.

IAM Roles 

: AWS 서비스에 부여하는 권한을 말합니다(사용자 권한과 혼동하시면 안됩니다). 예를들어 EC2 인스턴스가 AWS에 있는 어떤 정보에 접근하려고 할 때 IAM Role이 부여되어 있어야 접근이 가능합니다. 

Summary

  • IAM 사용자는 실제 물리적 사용자와 1:1 매핑되어야 합니다.
  • 여러 사용자는 목적에 따라 그룹화 할 수 있습니다.
  • 사용자 또는 그룹에 대한 권한을 설명하는 정책을 JSON file 형식으로 정의할 수 있습니다.
  • 사용자의 계정 보호를 위해 비밀번호 정책, MFA를 설정할 수 있다.
  • AWS 서비스(EC2...etc)에 부여하는 권한을 Role 이라고 한다.