AWS Identity and Access Management(IAM)

bolee·2022년 12월 8일
0

AWS Academy

목록 보기
12/12
post-thumbnail

여기에서는 AWS Identity and Access Management(IAM)을 소개할 것이다.

AWS Identity and Access Management(IAM)

  • AWS 클라우드의 컴퓨팅, 스토리지, 데이터베이스, 애플리케이션 서비스에 대한 액세스를 제어 가능
  • 인증 처리, 권한 부여 정책 지정 및 적용하여 서비스에 액세스할 수 있는 사용자 지정 가능
  • AWS 계정의 리소스를 시작, 구성, 관리 및 종료하는데 필요한 액세스 권한을 중앙에서 관리하는 도구
  • 사용자를 묶어 그룹으로 관리 가능

리소스(resource)
사용자가 작업을 수행할 수 있는 AWS 계정의 엔터티

  • 각 서비스에서 사용자가 호출할 수 있는 API 호출을 정확히 지정하는 기능을 포함하여 리소스에 대한 액세스를 세부적으로 제어하는데 필요한 기능을 제공
  • 세분화된 액세스 권한 정의 가능
    • 리소스에 액세스할 수 있는 사용자
    • 액세스할 수 있는 리소스와 사용자가 리소스에 수행할 수 있는 작업
    • 리소스에 액세스하는 방법
  • AWS 무료 기능 중 하나

IAM: 필수 구성 요소

IAM을 사용해 AWS 계정을 보호하는 방법을 이해하려면 각 IAM 구성 요소의 역할과 기능을 이해하는 것이 중요하다.

IAM 사용자

  • AWS 계정에 정의되어 있고 AWS 제품에 대한 API 호출을 수행해야 하는 사람 또는 애플리케이션 즉, AWS 계정으로 인증할 수 있는 사람 또는 애플리케이션
  • 각 사용자에게는 AWS 계정 내에서 고유한 이름(공백 없어야 함)과 다른 사용자와 공유되지 않는 보안 자격 증명 세트가 있어야 한다.
  • 자격 증명은 AWS 계정 루트 사용자 보안 자격 증명과 다르며, 각 사용자는 하난의 AWS 계정에만 정의된다.

IAM 그룹

  • 동일한 권한 부여를 받은 IAM 사용자의 모음
  • 여러 사용자의 권한을 지정하고 관리하는 작업을 간소화 가능

IAM 정책

  • 사용자가 AWS 계정에서 수행할 수 있는 작업을 결정하는 권한이 정의된 문서 즉, 액세스할 수 있는 리소스와 각 리소스에 대한 액세스 수준을 정의하는 문서
  • 정책은 사용자 및 그룹과 독립적으로 생성
  • 정책은 일반적으로 특정 리소스에 대한 액세스 권한을 부여하고 사용자가 해당 리소스를 수행할 수 있는 작업을 지정한다.
  • 정책은 액세스를 명시적으로 거부할 수도 있다.

IAM 역할

  • AWS 계정의 특정 AWS 리소스에 대한 임시 액세스 권한을 부여하는 도구
  • AWS 서비스 요청을 위한 권한 세트를 부여하는 유용한 메커니즘이다.

액세스 가능한 IAM 사용자로 인증

인증(Authentication)
사용자 또는 시스템에 먼저 자격 증명을 증명할 것을 요구하는 기본적인 컴퓨터 보안 개념

IAM 사용자를 정의할 때 사용자가 AWS 리소스에 액세스할 때 사용할 수 있는 액세스 유형을 선택할 수 있다.

  • 프로그램 방식 액세스
  • AWS Management Console 액세스

프로그래밍 방식의 액세스만 할당하거나 콘솔 액세스만 할당하거나 두 유형의 액세스를 모두 할당할 수 있다.

프로그래밍 방식 액세스

  • 인증 방법
    • 액세스 키 ID
    • 보안 액세스 키
  • AWS CLI 및 AWS SDK 액세스 제공
  • AWS API 호출 가능

AWS Management Console 액세스

  • 인증 방법
    • 12자리 계정 ID 또는 해당 계정 별칭
    • IAM 사용자 이름
    • IAM 암호
  • 사용자에 대해 MFA(Multi-Factor Authentication)가 활성화된 경우 그에 대한 인증 코드도 입력해야 한다.

IAM MFA

AWS 서비스 보안 강화를 위해 MFA(Multi-Factor Authentication)을 사용하는 것이 좋다.
MFA를 사용하는 경우 사용자 이름과 암호에 추가로 고유한 인증 코드를 제공해야 AWS 서비스에 액세스할 수 있다.

MFA 인증 토큰 생성에 사용할 수 있는 옵션

  • 가상 MFA 호환 애플리케이션
  • 하드웨어 MFA 디바이스

IAM 권한 부여

IAM에서 권한 부여는 사용자 서비스 또는 애플리케이션에 부여해야 하는 권한을 결정하는 프로세스이다.

기본적으로 IAM 사용자에게 AWS 계정의 리소스나 데이터에 액세스할 수 있는 권한이 없다. 따라서 IAM 사용자는 인증 후 AWS 서비스에 액세스 할 수 있는 권한을 부여받아야 한다.

이러한 권한은 JSON(Javascript Object Notation) 형식의 문서인 정책을 통해 사용자, 그룹 또는 역할에 명시적으로 부여받는다.
정책은 AWS 계정의 리소스에 대한 액세스를 허용하거나 거부하는 권한들을 나열한다.

따라서 IAM 정책을 생성하여 권한을 할당해야 하며, 권한은 허용되는 리소스와 작업을 결정한다.
기본적으로 모든 권한은 암시적으로 거부되며, 명시적으로 거부된 항목은 절대 허용되지 않는다.

권한을 설정할 때 사용자에게 너무 많은 권한들이 부여되지 않도록 주의해야 한다.
또한 IAM 서비스 구성의 범위는 글로벌이기 때문에 특정 AWS 리전에 종속되지 않고, 모든 AWS 리전에 적용된다.


IAM 정책

  • IAM 정책은 엔터티에 부여할 권한을 정의하는 문서
    • 엔터티: IAM 사용자, 그룹, 역할
    • 세분화된 액세스 제어 가능
    • JSON(Javascript Object Notation) 형식의 문서
  • 2가지 유형의 정책이 존재 - 자격 증명 기반 정책, 리소스 기반 정책
  • 자격 증명 기반 정책
    • 정책을 모든 IAM 엔터티에 연결할 수 있는 권한 정책
    • 엔터티가 수행할 수 있는 작업과 없는 작업을 지정
    • 단일 정책을 여러 엔터티에 연결 가능
    • 단일 엔터티에 여러 정책 연결 가능
    • 2가지 분류 존재
      • 관리형 정책: AWS 계정의 여러 사용자, 그룹 및 역할에 연결할 수 있는 독립 실행형 자격 증명 기반 정책
      • 인라인 정책: 사용자가 생성하고 관리하며, 단일 사용자 그룹 또는 역할에 직접 포함되는 정책
  • 리소스 기반 정책
    • S3 버킷과 같은 리소스에 연결하는 JSON 정책 문서
    • 지정된 보안 주체가 해당 리소스에 대해 수행할 수 있는 작업 및 관련 조건 제어

IAM 정책 예제

  • IAM 정책은 명시적 허용("Effect": "Allow") 뿐만 아니라 명시적 거부("Effect": "Deny") 또한 포함된다.
  • 명시적 거부는 명시적 허용보다 우선 적용된다.
  • 명시적으로 허용되지 않은 권한들은 암시적으로 거부된다.

IAM 정책 테스트

리소스 기반 정책

  • S3와 같은 리소스에 연결되는 정책
  • 리소스 기반 정책은 인라인으로만 정의된다. 즉, 개별 IAM 정책 문서를 생성하여 연결하는 것이 아닌 리소스 자체 내부에서 정책을 정의한다.
  • 리소스 기반 정책은 일부 AWS 서비스에서만 지원된다.

IAM 그룹

  • IAM 사용자의 모음
  • 여러 사용자에게 동일한 권한을 부여하는 데 사용된다.
    • IAM 정책을 그룹에 연결하여 권한을 부여
  • 한 사용자가 여러 그룹에 속할 수 있다.
  • AWS 계정의 모든 사용자를 자동으로 포함하는 기본 그룹은 없다.
  • 그룹은 중첩할 수 없다. 즉, 그룹은 사용자만 포함할 수 있고 다른 그룹을 포함할 수 없다.

IAM 역할

  • 특정 권한이 있는 계정에 생성할 수 있는 IAM 자격 증명
  • 권한 정책을 IAM 역할에 연결한다는 점에서 IAM 사용자와 유사하다.
  • 한 사람에게 고유하게 연결되는 IAM 사용자와는 달리 IAM 역할은 한 사람에게 고유하게 연결되지 않고 모든 사람이 수임할 수 있도록 한다.
  • 개인 뿐만아니라 애필리케이션 또는 서비스가 역할을 수임할 수 있다.
  • IAM 역할은 암호 또는 액세스 키와 같은 표준 장기 자격 증명이 연결되지 않는다. 대신 역할을 수임한 사람에게 역할 세션에 대한 임시 보안 자격 증명이 제공된다.
  • AWS 리소스에 대한 액세스 권한이 없는 사용자, 애플리케이션 또는 서비스에 역할을 사용해 액세스 권한을 위임할 수 있다.

액세스 권한 위임 방법의 예

  • 역할과 동일한 AWS 계정의 IAM 사용자가 사용
  • 역할과 동일한 계정의 AWS 서비스(ex: Amazon EC2)에서 사용
  • 역할과 다른 AWS 계정의 IAM 사용자가 사용

IAM 역할 사용 사례

  • AWS 계정 사용자에게 권한이 없는 리소스에 대한 액세스 권한 부여
  • 임의의 AWS 계정 사용자에게 다른 계정 리소스에 대한 액세스 권한 부여
  • 모바일 앱에서 AWS 리소스를 사용하면서 AWS 키는 내장하지 않고자 하는 경우(키를 교체하기 어렵고 사용자가 추출하여 남용할 가능성이 있음)
  • 간혹 기업 디렉터리처럼 AWS 외부에서 자격 증명을 이미 정의한 사용자에게 AWS 액세스 권한을 부여할 때
  • 제 3자에게 계정에 대한 액세스 권한을 부여하여 리소스 감사를 실시할 때

IAM 역할 사용 예

위 그림에서와 같이 개발자가 EC2 인스턴스에서 실행되는 애플리케이션에 photos라는 S3 버킷에 대한 액세스 권한이 필요할 때 IAM 역할을 사용할 수 있다.

관리자는 지정된 S3 버킷에 대한 읽기 전용 액세스 권한을 부여하는 권한 정책과 EC2 인스턴스가 해당 역할을 수임하고 임시 자격 증명을 가져오도록 허용하는 신뢰 정책이 포함된 IAM 역할을 생성하고 EC2 인스턴스에 연결한다.

이 후 애플리케이션이 인스턴스에서 실행되면 역할의 임시 자격 증명을 사용해 photos 버킷에 액세스할 수 있다.
즉, 관리자는 애플리케이션 개발자에게 권한을 부여하지 않아도 photos 버킷에 액세스할 수 있으며 개발자는 자격 증명을 공유하거나 관리할 필요도 없다.

자세한 내용 참조
IAM 역할을 사용하여 Amazon EC2 인스턴스에서 실행되는 애플리케이션에 권한 부여하기


정리

  • IAM 정책은 JSON(JavaScript Object Notation)으로 작성되며 권한을 정의
    • IAM 정책은 모든 IAM 엔터티에 연결 가능
    • 엔터티: IAM 사용자, IAM 그룹 및 IAM 역할
  • IAM 사용자는 사람, 애플리케이션 또는 서비스에서 AWS에 인증할 수 있는 방법 제공
  • IAM 그룹동일한 정책을 여러 사용자에게 연결하는 간단한 방법
  • IAM 역할에는 권한 정책이 연결될 수 있으며 사용자 또는 애플리케이션에 임시 액세스 권한을 위임하는데 사용될 수 있다.

0개의 댓글