연재 시리즈

게임으로 배우는 AWS IAM(부제목: bigiamchallenge)

악분 2023. 9. 3. 11:07
반응형

이 글은 AWS IAM을 게임을 통해 재미있게 학습할 수 있는 IAM Challenge를 소개합니다.

 

→ 스터디 소개 글

더보기

이 글은 가시다님이 운영하는 AWS 보안스터디(ahss)를 정리한 글입니다. 이 글 이외에 다른 스터디 정리 글을 보고 싶으신 분은 아래 목차를 참조해주세요!

 

IAM Challenge란?

IAM Challenge는 문제마다 설정된 IAM Policy를 가지고 정답을 찾는 문제입니다. IAM Policy를 이해해야 정답을 찾을 수 있습니다. 정답을 맞추면 다음 문제로 넘어갑니다. 총 6문제로 구성되어 있습니다.

 

문제 푸는방법

문제마다 IAM Policy가 다르게 적용됩니다. 현재 문제에 적용된 View IAM Policy를 보려면 View IAM Policy를 클릭하면 됩니다. IAM Policy를 확인하고 클라우드 쉘에서 정답을 찾으면 됩니다. 찾은 정답을 Insert flag here에 입력합니다. 정답이면 다음 문제로 넘어갑니다.

 

1번 문제

1번 문제는 S3에 관련된 policy를 보고 정답을 찾아야 합니다.

 

정답을 확인하려면 아래 더보기 버튼을 클릭해주세요

더보기

문제 답

 

1번 문제에서 주어진 IAM policy는 S3에 관련되어 있습니다. 그러므로 정답도 bucket에 있다는 것을 유추할 수 있습니다.

 

aws s3명령어로 bucket policy에 있는 bucket을 조회합니다. 정답 파일인 flag1.txt가 있습니다.

aws s3 ls s3://thebigiamchallenge-storage-9979f4b/files/

 

flag1.txt파일 내용을 보려면 파일을 다운로드 해야합니다. 저는 aws cp명령어로 /tmp경로에 파일을 다운로드 받았습니다. 그리고 다운로드 받자마자 파일내용을 확인했습니다.

aws s3 cp s3://thebigiamchallenge-storage-9979f4b/files/flag1.txt /tmp/flag1.txt && cat /tmp/flag1.txt

 

파일 내용을 Insert flag here에 입력하면 다음 문제로 넘어갑니다.

 

 

2번 문제

2번 문제는 sqs에 관련된 policy를 보고 정답을 찾아야 합니다.

 

정답을 확인하려면 아래 더보기 버튼을 클릭해주세요

더보기

문제 답

 

2번 문제에서 주어진 IAM policy는 sqs에 관련되어 있습니다. 그러므로 정답도 sqs에 있다는 것을 유추할 수 있습니다.

 

저는 aws CLI 명령어에서 sqs관련된 명령어를 찾았습니다. sqs 큐에 정답이 있을거라고 생각했기 때문입니다. 찾아보니 sqs 큐에 메세지를 가져오는 receive-message 명령어가 있더라구요.

 

sqs 큐에 있는 메세지를 가져오니 https로 시작하는 링크가 보였습니다.

aws sqs receive-message --queue-url https://sqs.us-east-1.amazonaws.com/092297851374/wiz-tbic-analytics-sqs-queue-ca7a1b2  --attribute-names All --message-attribute-names Al
l --max-number-of-messages 10

 

웹 브라우저로 페이지를 열어보니 정답이 있었습니다.

 

 

3번 문제

3번 문제는 SNS에 관련된 policy를 보고 정답을 찾아야 합니다. 3번 문제를 풀기 위해 가짜 이메일 서버가 필요합니다.

 

정답을 확인하려면 아래 더보기 버튼을 클릭해주세요

 

더보기

문제 답

 

3번 문제는 SNS 메세지를 받는 문제입니다. IAM policy를 확인하면 SNS 구독권한만 설정되어 있기 때문입니다.

 

IAM Policy Condition을 확인하면 tbic.wiz.io를 포함하는지 조건을 검사합니다. 조건문을 참조하여 aws CLI로 SNS구독을 하면 확인하라는 응답이 옵니다.

 aws sns subscribe \
   --topic-arn arn:aws:sns:us-east-1:092297851374:TBICWizPushNotifications \
   --protocol email \
   --notification-endpoint helloworld@tbic.wiz.io

 

SNS구독 확인을 위해 가짜 이메일 서버를 만들어야 합니다. 저는 가짜 이메일 서버를 파이썬 웹 애플리케이션으로 구현했습니다. 그리고 가짜 이메일 서버까지 트래픽이 갈 수 있도록 공유기 포트포워딩을 설정했습니다.

 

가짜 이메일 서버는 파이썬 SimpleHttpServer모듈을 사용했습니다. 구글링 해서 코드를 찾았습니다!.

from http.server import BaseHTTPRequestHandler, HTTPServer

class S(BaseHTTPRequestHandler):
    def _set_headers(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()

    def do_GET(self):
        self._set_headers()

    def do_HEAD(self):
        self._set_headers()

    def do_POST(self):
        content_length = int(self.headers['Content-Length'])
        post_data = self.rfile.read(content_length)
        self._set_headers()
        print(post_data)

def run(server_class=HTTPServer, handler_class=S, port=80):
    server_address = ('', port)
    httpd = server_class(server_address, handler_class)
    print('Starting httpd...')
    httpd.serve_forever()

if __name__ == "__main__":
    from sys import argv

    if len(argv) == 2:
        run(port=int(argv[1]))
    else:
        run()

 

가짜 이메일 서버 실행방법은 python {파이썬 파일 경로} {포트} 입니다. 저는 9090포트를 사용했습니다.

python {파이썬 파일 경로} {포트}
ex) python tmp.py 9090

 

가짜 이메일 서버를 실행한 후, aws CLI로 구독알림을 다시 보냅니다. 구독 프로토콜은 http를 사용합니다.

aws sns subscribe \
  --topic-arn arn:aws:sns:us-east-1:092297851374:TBICWizPushNotifications \
  --protocol http \
  --notification-endpoint  "http://{가짜 이메일 서버 주소}:{포트}/helloworld@tbi
c.wiz.io"

 

가짜 이메일 서버에 구독확인 주소가 날아옵니다. 구독 주소를 웹 브라우저로 방문하면 몇 초 뒤 3번문제 정답을 받습니다.

반응형

'연재 시리즈' 카테고리의 다른 글

Ansible 사용방법  (0) 2024.01.12
Ansible 소개  (1) 2024.01.09
S3 공개(public) 설정 - 버킷 policy 설정편  (1) 2023.09.02
S3 공개(public) 설정 - ACL 설정편  (0) 2023.09.02
테라폼 t102 스터디 - state  (0) 2023.07.29