카테고리 없음

새싹 성동 2기 9일차 정리

news6001 2024. 11. 1. 19:53

 생성형 AI 활용한 클라우드&보안 전문가 양성 캠프

 오늘은 조금 특별하게 중간에 SK쉴더스 팀장님께서 오셔서 피자를 사주셨다

 감사합니다 팀장님~ 너무 잘먹었습니다.

 

  오늘의 정리 핵심 내용 

  ※ S3 에 모든것 

 

S3(Simple Stroage Service)

어렵게 설명말고 간단하게 설명하자면 S3는 슈퍼 큰 USB 같은 저장소라고 생각하면 된다.

정리를 하자면

------------------------------------------------------------------------------------------------------------------------------------

무제한 저장 용량을 제공하는 스토리지 서비스

최소 3개의 가용영역(AZ)에 데이터를 자동 분산 저장하기 때문에 성능, 확장성, 가용성, 내구성이 높음

대표적인 사용사례 

  • 백업 및 복원 
  • 재해 복구(DR)
  • 아카이브 
  • 클라우드 스토리지
  • 정적 웹 사이트 호스팅 

버킷(bucket)

  • 객체 저장 공간
  • 버킷은 리전 단위로 생성 
  • 버킷 이름은 유니크 해야 함 (다른 AWS 사용자와도 중복되지 않아야 함)

객체(object)

  • 파일
  • 개별 파일 업로드 사이즈는 최대 5TB 허용

이렇게 정리 할 수 있고,

세부적으로 얘기하자면

 

 

S3 버전 관리 

  • 객체(파일)이 여러 버전을 가질 수 있음

버전이 여러개로 생성되게 할 수 있기 때문에 이미지가 바뀐 경우 전에 이미지도 볼 수 있다.

  • 동일한 파일 이름을 업로드하면 여러 버전으로 저장

오늘의 수업에서는 강아지라는 이름의 객체를 여러가지로 이름을 동일시하여 저장해보는 테스트를 하였다.

  • 실수로 객체를 덮어쓰거나 삭제한 경우, 이전 버전으로 복구가 가능
  • 실수로 객체를 삭제하는 것을 방지하기 위해 MFA Delete 옵션을 추가할 수 있음

                                          ~~~ 

                                          Multi-Factor Authentication (다중인증)

  • 객체를 하나의 파일이 아닌 여러 버전으로 보존할 수 있음
  • 버전 관리 기능을 사용하려면 해당 기능을 활성화해야 함 ⇒ 기본적으로 버전 관리 기능은 비활성화되어 있음

S3 객체 암호화

  • 데이터를 전송 중에 그리고 스토리지에 저장된 동안 보호하기 위해 암호화를 사용한다.
  • S3 객체의 암호화 유형 (SSE = Server Side Encryption)
    • SSE-S3       S3에서 관리하는 암호화
    • SSE-KMS    KMS(키 관리 서버)에서 관리하는 암호화
    • SSE-C  고객(사용자)가 관리하는 암호화
    • 클라이언트측 암호화

S3 정적 웹 사이트 호스팅 

  • 정적 웹 사이트 => 내용을 변경하지 않는 이상 항상 같은 내용이 제공되는 사이트 (예시 HTML 구성된 회사소개 페이지)
  • 동적 웹 사이트 => 사용자 또는 환경에 따라서 다른 내용이 만들어져서 제공되는 사이트 (예시: 게시판 조회 페이지)
  • S3에서 웹 사이트 호스팅을 하면 EC2 등의 별도의 웹 서버를 운영하지 않고 정적 웹 서비스를 제공할 수 있음
  • 웹 사이트 주소는 버킷이름.S3-website-리전.amazonaws.com 형식으로 생성
  • 정적 웹 호스팅을 이용해서 웹 서비스를 제공하면 해당 버킷의 퍼블릭 액세스를 허용해야 함( 퍼블릿 액세스를 허용하지 않는 경우 403 Forbidden 오류를 반환)

S3 스토리지 클래스

https://aws.amazon.com/ko/s3/storage-classes/?nc=sn&loc=3

 

객체 수명주기 관리(Lifecycle Policy)

객체가 저장되고 삭제될 때까지의 수명주기를 비용효율적으로 관리하는 기능

예시)

 

                    30일 경과                          60일 경과                       365일 경과

S3 Standard --------> S3 Standard-IA  --------------------> Glacier -----------------> 삭제

 

이벤트 알림 

S3에 이벤트가 발생할 때 마다 알리는 기능

이벤트는 객체를 생성, 복제 복원 등이 있음

생성된 이벤트 알림을 SNS, SQS, Lambda 등으로 보낼 수 있음

예) 객체(파일)가 삭제될 때 마다 S3에서 SNS로 이벤트 알림을 보내 사용자에게 이메일을 발송

------------------------------------------------------------------------------------------------------------------------------

RDS(Relational Database Service)

 

VPC를 생성 후  Public 서브넷 2개 private  subnet 2개를 생성 하겠습니다.

 

sesac2_inst_vpc 10.0.0.0/16

sesac2_inst_public_subnet_a 10.0.10.0/24 첫번째 가용영역 ⇐ t2.micro 인스턴스 유형을 제공하는 가용영역을 선택

sesac2_inst_public_subnet_c 10.0.30.0/24 세번째 가용영역

sesac2_inst_private_subnet_a 10.0.20.0/24 첫번째 가용영역

sesac2_inst_private_subnet_c 10.0.40.0/24 세번째 가용영역

 

sesac2_inst_public_subnet_* ⇐ sesac2_inst_publict_rt와 연결 ⇐ IGW으로 라우팅을 포함한 라우팅 테이블

sesac2_inst_private_subnet_* ⇐ sesac2_inst_private_rt와 연결

 

생성 이유: 

 

이 구성을 만드는 이유는 보안과 효율성을 동시에 높이기 위해서인데 이 구조를 통해서, 외부 접근이 필요한 리소스와 내부에서만 사용하는 리소스를 분리 할 수 있습니다.

 

상세 설명:

 

VPC 

우리만의 네트워크 환경을 만들기 위해 생성하는데 외부에서 접근할 수 있는지 여부를 우리가 제어 할 수 있다

Public과 Private subnet의 분리 

Public Subnet: 이 서브넷에는 외부 인터넷과 연결되는 리소스를 넣는다 웹 서버 같은, 외부에서 접근해야 하는 서버를 배치할 수 있다.

Private Subnet: 이 서부넷에서는 외부 인터넷과 직접 접근할 수 없는 구역이다 보안이 중요한 데이터베이스 서버 같은 것을 보관하면 된다. 

 

라우팅 테이블 설정

 

  • Public Subnet은 sesac2_inst_public_rt와 연결되어 있으며, 여기에는 IGW로의 라우팅이 포함돼 있어요. 그래서 Public Subnet 안의 리소스는 인터넷과 통신할 수 있어요.
  • Private Subnet은 sesac2_inst_private_rt와 연결되어 있고, 여기에는 IGW가 없기 때문에 외부 접근이 차단돼요. 필요하다면 NAT Gateway 등을 추가하여 내부 리소스에서만 인터넷에 접근하게 설정할 수 있어요.

-------------------------------------------------------------------------------------------------------------------------------------------

RDS 사용법

mysql workbench 설치

https://dev.mysql.com/downloads/workbench/

 

RDS 인스턴스의 연결 정보를 확인한다.

베스천 호스트 생성

베스천 호스트는 외부 네트워크와 내부 네트워크를 안전하게 연결해 주는 중간 서버이다

쉽게 설명하면 보안 게이트웨이라고 생각하면 될거 같다.

 

-----------------------------------------------------------------------------------------------------------------------------------------------

람다 함수 작성

우선 vs code를 설치한다.

https://code.visualstudio.com/

 

람다 함수 작성

 

import sys

import pymysql

 

config = {

    "host": "sesac2-inst-rds.c3ueygoy6ya8.ap-northeast-2.rds.amazonaws.com",

    "port": 3306,

    "database": "sampledb",

    "user": "admin",

    "password": "password"

}

 

try:

    conn = pymysql.connect(**config)

except Exception as e:

    print("Error connecting to MariaDB Platform: ", e)

    sys.exit()

   

print("Connected to MariaDB Platform")

 

 

# event = { "title": "제목", "contents": "내용", "user": "사용자 이름" }

def lambda_handler(event, context):

    print(event)

 

    with conn.cursor() as cur:

        query = "INSERT INTO t_board (title, contents, created_id, created_dt) VALUES (%s, %s, %s, CURRENT_TIMESTAMP)"

        cur.execute(query, (event["title"], event["contents"], event["user"]))

        conn.commit()

 

    return {

        "statusCode": 200,

        "body": "Success"

    }

 

람다 함수 실행에 필요한 패키지를 설치

 

c:\aws> pip install pymysql --target .

Collecting pymysql

  Downloading PyMySQL-1.1.1-py3-none-any.whl.metadata (4.4 kB)

Downloading PyMySQL-1.1.1-py3-none-any.whl (44 kB)

Installing collected packages: pymysql

Successfully installed pymysql-1.1.1

 

[notice] A new release of pip is available: 24.2 -> 24.3.1

[notice] To update, run: python.exe -m pip install --upgrade pip

 

c:\aws> dir

 C 드라이브의 볼륨에는 이름이 없습니다.

 볼륨 일련 번호: 9027-83B9

 

 c:\aws 디렉터리

 

2024-11-01  오후 04:19    <DIR>          .

2024-11-01  오후 04:19    <DIR>          ..

2024-11-01  오후 04:15               891 lambda_function.py

2024-11-01  오후 04:19    <DIR>          pymysql

2024-11-01  오후 04:19    <DIR>          PyMySQL-1.1.1.dist-info

               1개 파일                 891 바이트

               4개 디렉터리  160,357,494,784 바이트 남음



배포를 위해서 zip 파일로 압축

c:\aws> tar -acf lambda_function.zip . ⇐ 현재 디렉터리(.)의 모든 파일과 하위 디렉터리를

   lambda_function.zip 파일로 압축

 

c:\aws> dir

 C 드라이브의 볼륨에는 이름이 없습니다.

 볼륨 일련 번호: 9027-83B9

 

 c:\aws 디렉터리

 

2024-11-01  오후 04:21    <DIR>          .

2024-11-01  오후 04:21    <DIR>          ..

2024-11-01  오후 04:15               891 lambda_function.py

2024-11-01  오후 04:21           131,978 lambda_function.zip

2024-11-01  오후 04:19    <DIR>          pymysql

2024-11-01  오후 04:19    <DIR>          PyMySQL-1.1.1.dist-info

               2개 파일             132,869 바이트

               4개 디렉터리  160,361,058,304 바이트 남음

 

람다 함수를 생성 후 코드를 추가하여 테스트 

------------------------------------------------------------------------------------------------------------------------------

테스트와 실제로의 람다 함수 작업은 내일 진행하기로 해서 

결과는 내일 올리겠습니다.

오늘의 수업 끝