[AWS] IAM - 리소스를 제어할 수 있는 권한 관리

샤이니·2021년 5월 19일
0

AWS

목록 보기
3/4

IAM

  • AWS 계정과 관련된 권한을 제어하고, 사용자를 관리하는 기능 제공

AWS API와 IAM

AWS는 클라우드 공급자 업체로써, 사용자가 필요한 만큼의 IT 인프라를 제공하고 그 만큼의 비용을 부과하는 클라우드 컴퓨팅 서비스.

  1. 사용자가 가상서버(EC2) 생성을 AWS에서 제공하는 API 문법에 맞추어서 요청한다.
    • 이 요청은 인터넷망을 통해 전달되며, 해당 요청은 Region과 서비스 단위로 존재하는 AWS Endpoint에서 수신한다.
  2. AWS의 IAM은 다음을 검증함
    - 인증된 사용자의 요청이 맞는가?(Authentication 인증 단계)
    - 사용자가 해당 권한을 가지고 있는가? (Authorization 권한부여 단계)
    3.둘다 만족하면 AWS에서는 요청 내역을 수행하여 사용자에게 결과값을 전달.

AWS API 사용

API Call ("EC2 하나 만들어 달라")

  1. AWS Console
  2. AWS CLI
  3. AWS SDK

위로 갈수록 접근편의성이 쉽고, 제어범위가 좁고, 자동화 구성이 어렵다.
밑으로 갈수록 접근 편의성이 어렵고, 제어범위가 넓고, 자동화 구성이 쉽다.
-> 결국 이 세가지 모두 원시 API 형태로 변환되어 전달됨

IAM을 사용하는 객체들

1. 사용자를 정의하는 IAM User, IAM Group, IAM Role 영역
2. 각 사용자의 권한을 정의하는 IAM Policy(s) 영역

사용자 권한은 1:N 매핑. 각 단위 객체에 권한을 붙여 사용하게 됨.

루트 계정과 IAM 객체

  • IAM User : 하나의 AWS 계정 내에서 분리된 하나의 사용자 단위
  • IAM Policy : 제한된 권한을 부여하기 위한 단위 권한 객체

즉 하나의 AWS 계정 내에는 모든 권한을 가진 하나의 루트계정과 다수의 IAM User, 다수의 IAM Policy가 존재.

IAM User, Group, Role

IAM User의 인증 방식

  1. AWS Management Console 로그인용으로 사용하는 username/password 방식
  2. AWS CLI나 AWS SDK에서 필요한 인증키쌍(Accesskey/Secretkey) 방식
    각 IAM User에는 하나 또는 그 이상의 IAM Policy 객체 매핑하여 권한 정의함

IAM Group은 IAM User를 집합 단위로 묶어 권한 통합 관리하기 위한 것.

IAM Role

  1. 믿을 수 있는 객체가 API Call이 필요할 때마다 일정 주기로 STS 서비스에 임시키 요청(AssumeRole)함.
  2. STS 서비스는 요청한 객체가 믿을 수 있는 객체인지 확인하고 임시 키를 발급. 여기서 발급된 임시 키는 지정된 유효시간을 가지며 시간이 경과된 후에는 무효화(Expire)되므로 IAM User에서 사용하는 영구 인증키 쌍에 비해 보안성이 높음.
  3. 마지막으로 임시 인증 키쌍을 사용하여 API Call을 수행함.

IAM Policy

IAM User. Group, Role의 권한을 정의하는 객체

  • JSON 포맷을 사용하며 하나의 IAM Policy에는 다음과 같은 항목을 포함한다.
{
  "Version": "2012-10-17", //Policy의 문법 버전
  "ID" : "S3PolicyID1" // Policy ID(임의 작성 가능)
  "Statement": [
    {
      "Sid" : "IPAllow", // 정책 설명(임의 작성 가능)
      "Effect": "Allow", // Allow/Deny 설정으로API 허용/거부 정의
      "Principal": "*", // API Access가 가능한 계정 또는 Amazon Resource Name
      "Action": "s3:*", // 사용가능한 API(ex. s3:ListBucket, s3:GetBucket 등)
      "Resource": "arn:aws:s3:::examplebucket/*" //타겟이 될 리소스로 ARN 형식 사용
      "Condition":[  //세부 설정 조건으로 필수항목 X
           "IpAddress": {"aws:SourceIP": "54.240.143.0/24"}
           "NotIpAddress": {"aws:SourceIP": "54.240.143.188/32"}
         }
       }
     ]
  • 다음 예시는 1. 모든 사용자(Principal)가 2. examplebucket(Resource)에 3. 리스팅, 업로드, 다운로드 작업(Action)을 4. 허용하거나 거부(Effect : Allow)하는 정책 예시이다.
  • 또한 5. Condition이라는 항목을 통해 "54.240.143.0/24"의 IP 대역에서 Bucket 접근을 허가하고, "54.240.143.188/32"의 IP에서는 접근을 거부하도록 정책을 구성하였음

0개의 댓글