클라우드 보안 가이드 - 계정 관리 실습

satoshichingu·2024년 12월 19일
0

해킹 공부

목록 보기
6/12

실습 정리
클라우드 보안 가이드 항목 중 1개를 선택해서 해당 항목의 내용을 보완(설명 부분, 진단 부분, 이미지 최신화 등)하고, 진단하는 절차(관리형 콘솔을 이용하는 방법 또는 CLI를 이용하는 방법 또는 SDK를 이용하는 방법 등)를 문서 또는 블로그 등으로 정리


1.사용자 계정 관리

분류: 계정 관리
중요도 : 상
항목명: 사용자 계정 관리

항목 설명:

AWS 계정은 모든 리소스와 서비스에 대한 기본적인 권한을 설정하는 계층 구조를 가지고 있습니다.
각 AWS 계정은 기본적으로 AWS 리소스에 대한 소유권을 갖고 있으며, 해당 리소스에 접근하고 관리할 수 있는 권한은 IAM(Identity and Access Management) 시스템을 통해 설정됩니다.
IAM을 사용하여 각 사용자와 역할에 대해 세부적인 권한을 부여하거나 제한할 수 있으며, 이는 보안 정책을 준수하고 불필요한 권한을 최소화하는 데 매우 중요합니다. 중요한 보안 원칙은 "최소 권한 원칙(Principle of Least Privilege)"을 따르며, 각 사용자가 수행해야 할 작업에만 권한을 부여해야 합니다.

  • AWS 관리형 정책
    서비스 내 FULL ACCESS 등과 같이 중요도가 높은 AWS 관리형 정책은 EC2 서비스 관리/운영자 및 관련 담당자 외에 다른 IAM 계정에 아래와 같은 권한 할당이 되지 않도록 해야합니다.
    그중에서도 AWS Admin Console 관리자(AdministratorAccess) 권한은 다수의 IAM 계정에 설정되지 않도록 관리 조치가 필요합니다.

  • 계정 종류

    • 계정 구분: Console Admin
      Discription: 최고 권한을 가지고 있는 단일 계정
      확인 필요 사항: 가급적 사용을 지양해야 함

    • 계정 구분: IAM
      Discription: AWS IAM 서비스를 통해 생성된 별도 계정
      확인 필요 사항: IAM 역할 및 권한에 대한 현황을 확인해야 함

    • 계정 구분: AD(Active Directory) 연동
      Discription: 기존 내부에서 사용중인 AD 를 AWS Organizations 서비스에 연동한 계정
      확인 필요 사항: 기존 AD 서비스에서 사용중인 각 계정 중 IAM 역할 및 권한이 설정된 현황을 확인해야 함

    • 계정 구분: Access Key
      Discription: CLI 환경으로의 접속을 위한 발급일 기준 6 개월을 초과한 단일 계정 (사용 기간에 대한 Access Key 존재 유무 기준 명시가 필요함)
      확인 필요 사항: 발급일 기준 6 개월을 초과한 Access Key 존재 유무

(*) 불필요한 계정 예시
1.비 임직원 계정 (협력사 공통 계정)
2.테스트 계정 (testuser, test01, test02....)
3.미사용 계정 (퇴직 및 휴직자)

설정 방법: 가. IAM 그룹에 포함되지 않은 단일 사용자 권한 확인

1) IAM 그룹에 포함되지 않은 단일 사용자 계정 전체 권한 확인

진단 기준:

  • 양호기준: 관리자 권한을 보유한 다수 계정이 존재하지 않고 불필요한 계정이 존재하지 않을 경우
  • 취약기준: 관리자 권한을 보유한 다수 계정이 존재하거나 불필요한 계정이 존재할 경우

비고:

Flask 기반 IAM 사용자 목록 조회 웹 애플리케이션 개발
Flask와 Boto3, AWS에서 제공하는 CLI(Command Line Interface)를 활용하여 명령어로 관리할 수 있는 웹 애플리케이션 개발하는 과정을 정리하였습니다.

AWS CLI 설치
명령 프롬프트에서 아래 명령어를 실행해서 AWS CLI 설치 여부를 확인

C:\Users\r2com> aws --version
aws-cli/2.22.13 Python/3.12.6 Windows/10 exe/AMD64

만약, AWS CLI 버전이 출력되지 않으면 아래 페이지에서 CLI를 다운로드 받아 설치를 진행
https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/getting-started-install.html

윈도우의 경우 https://awscli.amazonaws.com/AWSCLIV2.msi 를 다운로드 받아서 설치

설치가 완료되면 새로 명령 프롬프트를 실행해서 설치를 확인

aws configure 명령을 이용해서 Access Key를 등록

C:\Users\r2com\Downloads> dir *.csv
 C 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: 9027-83B9
 C:\Users\r2com\Downloads 디렉터리

2024-12-10  오전 10:32                99 Rookies013_accessKeys.csv		⇐ 발급받은 계정에 생성한 액세스키가
2024-12-09  오후 01:07               127 Rookies013_user_credentials.csv	   저장된 파일
               2개 파일                 226 바이트
               0개 디렉터리  71,346,941,952 바이트 남음
C:\Users\r2com\Downloads> type Rookie013_accessKeys.csv
癤풞ccess key ID,Secret access key
AKIA5*****ZLWUKIW4,A8J5CaYUYa**************qbp5G38ItRCFY


Downloads 폴더에 Rookies_accessKeys.csv 파일이 만들어진 것을 확인합니다.

C:\Users\r2com> aws configure
AWS Access Key ID [None]: AKIA5*****ZLWUKIW4					⇐ CSV 파일에 있는 액세스 키 아이디
AWS Secret Access Key [None]: A8J5CaYUYa**************qbp5G38ItRCFY		⇐ CSV 파일에 있는 비밀 액세스 키
Default region name [None]: ap-northeast-2					⇐ 발급 받은 계정에 할당된 리전
Default output format [None]: json

CLI를 사용하기 위한 준비가 끝났습니다.

Boto3 다운로드
python에서 AWS CLI 서비스를 사용하려면 AWS의 공식 SDK인 boto3가 필요합니다.

pip install boto3

IAM 사용자 목록 조회

aws iam list-users


데이터를 정상적으로 가져오니 웹 애플리케이션으로 만들겠습니다.

account_checker.py

get_user_list 모듈 추가
import boto3
import datetime
from prettytable import PrettyTable

client = boto3.client("iam") # IAM 서비스와 상호작용하는 클라이언트를 생성합니다.

def get_user_list():
    response = client.list_users() # AWS 계정 내의 IAM 사용자 목록을 JSON 형식 데이터로 가져옵니다.
    return response["Users"]

app.py
list 함수 추가

@app.route("/list") # /list url에 접근하면 list 함수가 실행됩니다.
def list():
    #data = get_iam_users()
    data =get_user_list() # get_user_list 함수를 호출해 가져온 데이터를 list.html 탬플릿에 전달합니다.
    return render_template("list.html", mydata=data)

list.html
app.py에서 list.html을 리턴하므로 get_user_list 함수의 데이터를 list.html에서 볼 수 있도록 list.html을 만들겠습니다.

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="/static/style.css">
</head>

<body>
    <h2 style="text-align: center">사용자 목록</h2>
    <table>
        <header>
            <tr>
                <th>ID</th>
                <th>사용자명</th>
                <th>ARN</th>
                <th>생성일시</th>
            </tr>
        </header>
        <tbody>
            {% for row in mydata %}
            <tr>
                <td>{{ row.UserId }}</td>
                <td><a href="/user/{{row.UserName}}/accesskeys">{{ row.UserName }}</a></td>
                <td>{{ row.Arn }}</td>
                <td>{{ row.CreateDate }}</td>
            </tr>
            {% endfor %}
        </tbody>
        <tfoot>
            <tr>
                <td colspan="4"><a href="/">메인으로 이동</a></td>
            </tr>
        </tfoot>
    </table>
</body>
</html>

사용자 목록 페이지 확인하기
터미널에서 ‘python app.py’ 명령어로 Flask 웹을 실행시킨 후 ‘http://loaclhost:5000/list’로 접속하면 아래와 같이 사용자 목록을 조회할 수 있습니다.


진단 절차:
1. 관리형 콘솔을 이용한 방법: AWS Management Console에서 IAM 사용자를 확인하고, 권한을 점검하는 방법:
AWS Console 로그인
IAM 서비스로 이동
Users 섹션에서 사용자 목록 조회
각 사용자의 권한 및 그룹 확인
관리자 권한이 불필요한 계정과 IAM 정책 확인
계정 삭제/수정 여부 확인

  1. CLI를 이용한 방법:
    aws iam list-users 명령을 사용하여 사용자 목록을 확인
    aws iam get-user 명령으로 각 사용자의 세부 정보를 가져옵니다.

0개의 댓글