sol 개발 블로그 로고
Published on

AWS IAM 및 CLI

Authors
  • avatar
    Name
    Chan Sol OH
    Twitter

목차

개요

root 계정의 역할

  • 보통 공유나 사용해서는 안되는 계정
  • 대신 유저를 생성하는데 사용할 수 있다.
  • 한 유저는 조직에서 한 사람을 의미, 그리고 조직에 따라 그룹을 지어서 유저들을 모아 관리할 수 있다.

그룹

  • 그룹에 다른 그룹이 들어갈 수 없다.
  • 한 유저가 여러 그룹에 포함될 수 있다.
  • 그룹 단위로 정책을 설정하면 하위 유저는 그룹 정책을 따른다.

IAM 정책

유저나 그룹에 권한을 JSON 문서 형태로 부여할 수 있는 방법

IAM 유저를 생성하고 로그인 페이지에서 IAM 유저 로그인을 선택해서 로그인할 수 있다.

정책 구조

  1. Verion : 정책 언어의 버전
  2. ID : 정책의 식별자 (optional)
  3. Statement
    • 문장은 sid로 시작
    • Effect : 허용, 거부 설정
    • Principal : 정책을 적용할 유저나 그룹
    • Action : effect에 기반해 허용되거나 거부되는 API 호출 목록
    • Resource : 적용될 Action의 리소스 목록

예를 들어 rootsol의 기존 admin 권한을 제거하고 IAMReadOnlyAccess 권한만 부여했다면, sol은 유저 그룹을 추가하는 작업을 더 이상 못하고 유저 리스트만 볼 수 있는 권한을 가진다.

그리고 각 정책은 json 형태로 작성될 수 있는데 다음과 같이 작성할 수 있다. AdministratorAccess는 모든 리소스에 모든 작업을 할 수 있는 권한을 의미한다. 물론 json을 작성해서 커스텀한 정책을 생성할 수 있다.

AdministratorAccess
{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Effect":"allow",
      "Action":"*",
      "Resource":"*"
    }
  ]
}

IAM password policy

패스워드 정책은 일정 기간 이후에 패스워드를 다시 재발급 받도록 하거나 한번 사용했던 것을 다시 못쓰게 하는 것이다. 또한, Multi Factor Authentication (MFA)을 필수적으로 사용하도록 권장한다.

MFA는 비밀번호와 보안장치를 함께 사용하여 비밀번호가 유출되어도 핸드폰이 내게 있다면 계정이 해킹당하지 않을 수 있다.

만약 MFA 장치를 계속 들고 있는게 부담스럽다면 가상 MFA 장치를 사용할 수 있다.

  1. Google Authenticator : 핸드폰에서만 사용가능
  2. Authy : 멀티 디바이스, 멀티 토큰 지원. 멀티 토큰은 한 장치에서 여러 계정의 인증을 수행할 수 있음을 의미한다.
  3. Universal 2nd Factor (U2F) Security Key : 물리적 usb. 하나의 보안키로 여러 계정 인증 가능
  4. Hardware Key Fob MFA Device
  5. Hardware Key Fob MFA Device for AWS GovCloud

AWS CLI

다양한 aws에 접속하는 방법

  1. AWS Management Console : 이름 및 비밀번호 (+ MFA)로 인증
  2. AWS Command Lin Interface(CLI) : protected by access keys -> 터미널에서 aws 리소스에 접속할 때 사용
  3. AWS Software Developer Kit (SDK) : protected by access keys -> 애플리케이션에서 AWS의 API를 호출할 때 사용
  4. AWS Cloud Shell : 아직 제한된 regions만 이용 가능! 서울 region은 사용못한다. -> 클라우드로 동작하는 터미널 서비스, 그리고 파일 업로드 다운로드가 가능!

access key는 비밀번호와 마찬가지 역할을 하기 때문에 공유하거나 잊어버리면 안된다.

CLI를 사용하는 경우

  1. 직접 aws 서비스에 명령줄로 접속
  2. 개발 스크립트로 aws 리소스 관리
  3. AWS 관리 콘솔 대신 사용 가능!

SDK는?

  1. 프로그래밍 언어에 따라 다른 SDK가 존재
  2. 애플리케이션이 aws 서비스에 접속할 수 있게한다.
  3. 코딩을 통해 애플리케이션 내에서 사용

CLI를 통해 aws 서비스를 사용하는 방법은 아래와 같다. aws로 시작하는 명령어를 작성하면된다.

aws iam list-users

{
    "Users": [
        {
            "Path": "/",
            "UserName": "admin",
            "UserId": "AIDAXYMB4PYS4NGCLVEOP",
            "Arn": "arn:aws:iam::533385215525:user/admin",
            "CreateDate": "2023-10-17T14:53:11+00:00"
        }
    ]
}

만약 admin이라는 유저가 사용자 그룹에서 퇴출되는 등 권한을 잃는다면, CLI로 aws에 요청해도 아무런 응답이 오지 않을 것이다.

IAM Roles for Services

AWS 서비스는 사용자를 대신해 작업을 수행할 수 있다. 이때, AWS 서비스는 그에 맞는 권한을 가지고 있어야한다. 마치 사용자처럼!! AWS 서비스에 권한을 IAM Role로 부여할 수 있다.

예를 들어 EC2 인스턴스와 그에 부여된 IAM Role은 하나의 엔티티로 구성된다. 만약, EC2가 AWS에 정보를 요청하면 AWS는 EC2의 IAM Role을 확인하고 적절한 IAM Role이 있다면, 요청에 응답한다.

EC2에만 Role이 있지 않고, Lambda나 CloudFormation에도 IAM Role이 있다.

IAM Role 만들기

  1. IAM > 역할 페이지 접속
  2. 역할 만들기 버튼 클릭
  3. 신뢰할 수 있는 엔티티 타입 지정
    • 다른 유형은 시험 범위가 아니고 AWS 서비스만 만들면 된다.
    • 모든 AWS 서비스에대해 Role을 부여할 수 있다.
    • 보통 EC2나 Lambda를 많이 사용한다.
  4. 사용자처럼 Role에 정책과 권한을 할당한다.
    • 실습에서는 IAMReadOnlyAccess를 사용한다.
    • 아래 코드는 Role의 정책인데 사용자의 것과 매우 유사하다.
    신뢰정책.json
    {
     "Version": "2012-10-17",
     "Statement": [
         {
             "Effect": "Allow",
             "Action": [
                 "sts:AssumeRole"
             ],
             "Principal": {
                 "Service": [
                     "ec2.amazonaws.com"
                 ]
             }
         }
     ]
    }
    

IAM Security Tools

  • IAM Credentials Report (계정 수준)
    • 계정에 있는 다양한 사용자들의 다양한 자격 증명의 상태를 보여줌
    • 계정 사용자들의 비밀번호 사용이나 MFA 사용 또는 access key 사용 같은 상태를 볼 수 있다.
    • 보안적으로 어떤 유저를 주목해야하는지 알 수 있음
  • IAM Access Advisor (사용자 수준)
    • 사용자에게 부여된 서비스 권한 확인
    • 4시간 이내에 해당 서비스에 마지막으로 접속한 시간 확인 가능
    • 최소 권한 원칙을 적용할 때 도움되는 것이 어떤 권한이 사용되지 않는지 볼 수 있어 권한을 축소시킬 수 있다.
aws-iam-access-advisor

위 그림을 보면 최근 접속 시간이 오늘인 서비스가 있는 반면, 추적 기간에 액세스되지 않음인 서비스들이 있다. 이렇게 사용하지 않는 서비스들의 권한은 제거하는 것이 좋다!

IAM 가이드라인 & Best Practices

  1. 루트 계정은 AWS 계정을 설정할 때를 제외하고 사용하지 않는다.
  2. One physical user = One AWS user
  3. 사용자를 그룹에 넣고, 그룹 수준으로 보안을 관리하자
  4. 비밀번호 정책을 강화하고, MFA를 꼭 사용하자
  5. AWS 서비스에도 사용자처럼 제한된 IAM Role을 부여하자
  6. CLI나 SDK를 사용해서 AWS 서비스를 호출하는 프로그래밍을 할 때 꼭 Access Key를 사용하자
  7. 계정 권한을 감사할 때는 IAM Credentials Report와 IAM Access Advisor를 사용하자
  8. 절대로 IAM 유저와 access key를 공유하면 안된다.

IAM 정리

  1. User는 회사 내 실 사용자이며, aws console의 비밀번호를 가진다.
  2. Groups는 사용자들의 모임이며, 다른 그룹을 포함하면 안된다.
  3. IAM Policies는 User나 Groups의 IAM 정책을 설정하느 Json형식의 문서
    • version과 statement로 구성
    • statement는 다시 Sid, Effect, Action, Principal, Resource, 그리고 Condition으로 구성된다.
  4. Security를 위해서 MFA나 강력한 비밀번호 정책을 사용하자
  5. Access Key는 CLI나 SDK로 AWS 서비스에 접속할 때 사용한다.
  6. Audit(감사)할 때 IAM Credentials Report를 보거나 IAM Access Advisor를 참고할 수 있다.
  7. IAM 권한 원칙은 최소 권한 부여가 원칙이다.
  8. AWS Shared Responsibility Model
    • AWS의 책임은 클라우드의 보안. 즉 인프라의 보안이다.
    • 유저의 책임은 클라우드 안에서 보안. 즉 정책 설정과 비밀번호, access key 관리다.