AWS - IAM

김명주·2025년 2월 10일
0

AWS IAM이란?

IAM은 Identity and Access Management의 약자로 사용자를 생성하고 그룹에 배치하는 글로벌 서비스다.
AWS Root 계정을 생성할때 기본으로 생성된다. Root 계정은 한번 만들고 난 뒤 더이상 생성되거나 공유되어선 안된다.
그 대신 사용자를 생성하는데, IAM에서 사용자를 생성할 때, 하나의 사용자는 조직 내의 한 사람에 해당된다.
필요하다면 사용자들을 그룹으로 묶을 수 있다. 그룹에는 오직 사용자만 배치할 수 있고 다른 그룹을 포함할 순 없다.
어떤 사용자는 어느 그룹에도 배치될 수 있고 다수의 그룹에도 참여가 가능하며, 또한 추천하지는 않지만 어느 그룹에도 속하지 않을 수 있다.

사용자와 그룹을 생성하는 이유?

IAM에서 사용자와 그룹을 생성하는 이유는 AWS 계정을 사용하도록 허용하기 위해서고, 허용을 위해서는 사용자들에게 권한을 부여해야 한다.
이를 위해 사용자 또는 그룹에게 정책 또는 IAM 정책이라고 불리는 JSON 문서를 지정할 수 있다. 이 문서는 특정 사용자, 특정 그룹이 어떤 작업에 권한을 가지고 있는지 설명해 놓은 것이다.
이 정책들을 사용해 사용자들의 권한을 정의할 수 있게 된다.

권한 부여 시 주의사항

AWS는 모든 사용자에게 모든 권한을 허용하지 않는데, 그 이유는 새로운 사용자가 너무 많은 서비스를 실행하여 큰 비용이 발생하거나, 보안 문제를 야기할 수 있기 때문이다.
그렇기에 AWS는 최소 권한의 원칙을 적용한다.
즉, 사용자가 꼭 필요로 하는 것 이상의 권한을 주지 않는 것을 의미한다.
예를 들어, 한 사용자가 세 개의 서비스에 접근해야 한다면 그에 대한 권한만 생성한다.

IAM 정책 상속

Developers 라는 개발자 그룹이 있다고 가정해보자. 구성원은 A,B,C 세 사람이고, 정책을 그룹 레벨에서 연결해 보자. 이렇게 하면 정책이 그룹에 속한 모든 구성원에게 적용되어 모든 구성원이 권한을 얻게 되어 정책의 상속이 가능하다.
만약 어느 그룹에도 속해 있지 않다면 사용자에게만 연결이 가능한 인라인 정책이라는 걸 생성할 수도 있다. 인라인 정책은 그룹에 속해 있든 아니든 간에 원하는 사용자에게 적용 가능하다.
만약 특정 사용자가 여러 그룹에 속해있다면 그 사용자들은 속해 있는 모든 그룹의 정책도 상속하게 된다.

IAM 정책 구조

IAM 정책 구조는 여러 요소를 포함하고 있다.
1. Version

  • 정책 언어 버전으로 보통은 2012-10-17이다.
  1. ID
  • 정책을 식별하는 ID로 선택사항이다.
  1. Statement
  • 하나일 수도 여러개일 수도 있다.
  • SID라고 하는 Statement의 식별자(Statement ID)
  • Effect는 Statement가 특정 API에 접근하는걸 허용할 지, 거부할 지에 대한 내용
  • Principal은 특정 정책이 적용될 사용자, 계정 혹은 역할로 구성됨
  • Action은 Effect에 기반해 허용 및 거부되는 API 호출 목록
  • Resource는 적용될 action의 리소스 목록
  • Condition은 Statement가 언제 적용될지를 결정

IAM Password Policy

IAM을 통해 사용자와 그룹을 만들었다면, 이러한 사용자와 그룹이 손상되지 않도록 보호해야 한다. 이를 위해 두가지 방어 메커니즘이 있다.

  • 비밀번호 정책 정의

    • 사용하는 비밀번호가 강력할수록 계정 보안이 강화된다.
    • 따라서 AWS에서는 다양한 옵션으로 비밀번호 정책을 설정할 수 있다.
      1. 최소 비밀번호 길이 설정 및 특정 문자 유형 요구
      2. IAM 사용자들이 자신의 비밀번호를 변경하도록 허용 또는 허용하지 않을 수 있으며 또는 일정 시간 후에 비밀번호를 변경하도록 요구할 수 있다.
      3. 사용자가 비밀번호를 변경할 때 이미 가지고 있거나 이전에 사용했던 비밀번호로 변경하지 않도록 비밀번호 재사용 방지
    • 이러한 비밀번호 정책은 계정에 대한 무차별적인 공격에 도움이 된다.
  • 다중 인증 또는 MFA(Multi Factor Authentication)

    • AWS에서는 필수이며 사용하는 것이 매우 권장된다.
    • 사용자는 자신의 계정에 접근할 수 있으며 특히 관리자인 경우 많은 작업을 수행할 수 있다. ex)설정 변경, 리소스 및 기타 사항 삭제 등등...
    • MFA란 사용자들이 알고 있는 비밀번호와 소유한 보안 장치의 조합을 사용한다.
  • AWS에서의 MFA 장치 옵션

    1. 가상 MFA 장치
    • 한 번에 하나의 전화에서만 작동하거나 인증을 사용하는 구글 인증기를 사용할 수 있다.
    • 인증의 경우 단일 장치에서 여러 토큰을 지원한다.
    • 즉, 가상 MFA 장치를 사용하면 Root 계정, IAM 사용자, 다른 계정, 다른 IAM 사용자를 가질 수 있다.
    1. UTF 보안 키 - Universal 2nd Factor (U2F) Security key
    • 이는 물리적인 장치로써 예를들어 유비코의 유비키가 있는데 이는 AWS의 타사 제품.
    • 이러한 장치는 단일 보안 키를 사용하여 여러 루트 및 IAM 사용자를 지원한다.
    • 따라서 사용자 수 만큼 많은 키가 필요하지 않다.
    1. 하드웨어 보안 토큰 MFA 장치
    • AWS 와는 다른 회사인 젬알토에서 제공하는 장치
    1. SurePassId에서 제공하는 보안 토큰
    • 미국 정부 클라우드인 AWS GovCloud를 사용하고 있다면 사용 가능

AWS에 액세스 하기

AWS에 액세스 하는 방법은 세 가지가 있다.
1. AWS 콘솔

  • 사용자 이름 및 비밀번호, MFA 인증오로 보호된다.
  1. CLI (Command Line Interface)
  • 명령줄 인터페이스
  • 컴퓨터에서 설정할 수 있으며 액세스 키로 보호된다.
  1. SDK
  • AWS 소프트웨어 개발자 키트
  • AWS로부터 애플리케이션 코드 내에서 API를 호출하고자 할 때 사용되는 방식
  • 이 방법도 액세스 키로 보호됨.

액세스 키 생성하기

액세스 키는 AWS 관리 콘솔을 사용해서 생성할 수 있다. 그리고 사용자들이 자신들의 액세스 키를 직접 관리한다.
사용자 측면에서, 액세스 키는 비밀번호와 마찬가지로 암호와 같으므로 절대로 다른 사람과 공유해선 안된다.
Access Key ID는 사용자 이름, Secret Access Key ID는 비밀번호와 마찬가지라고 생각하면 된다.

AWS CLI?

CLI란 명령줄 인터페이스다. AWS CLI는 명령줄 셸에서 명령어를 사용하여 AWS 서비스들과 상호작용할 수 있도록 해주는 도구다.
이를 사용하는 이유는 모든 명령어가 aws로 시작하기 때문이다.
CLI를 사용하면 AWS 서비스의 공용 API로 직접 액세스가 가능하다. 그리고 CLI를 통해 리소스를 관리하는 스크립트를 개발해 일부 작업을 자동화할 수 있다.
CLI는 오픈 소스로, 깃허브에서 모든 소스코드를 찾을 수 있고 AWS 관리 콘솔 대신 사용되기도 한다.

AWS SDK?

SDK는 소프트웨어 개발 키트다.(Software Development Kit)
이는 특정 언어로 된 라이브러리의 집합인데, 따라서 프로그래밍 언어에 따라 개별 SDK가 존재한다.
SDK를 사용해서도 역시 AWS 서비스나 API에 프로그래밍을 위한 접근이 가능하다. 하지만 SDK는 터미널 내에서 사용하는 것이 아닌 코딩을 통해 애플리케이션 내에 심어두어야 한다.
즉 애플리케이션 내에 자체적으로 AWS SDK가 있는 것이다.
다양한 프로그래밍 언어를 지원하고 모바일과 IoT 또한 지원한다.
AWS SDK로 구축할 수 있는 것의 예로, AWS CLI는 Boto라는 파이썬용 AWS SDK에 구축되어 있다.

profile
개발자를 향해 달리는 사람

0개의 댓글