[SK shieldus Rookies 19기] 클라우드 보안 기술 5일차

기록하는짱구·2024년 4월 5일
0

SK Shieldus Rookies 19기

목록 보기
27/43
post-thumbnail

📌 디자인 도구

https://online.visual-paradigm.com/drive/#diagramlist:proj=0&dashboard

📌 RDS(Relational Database Service)

https://aws.amazon.com/ko/rds/
관계형 데이터베이스 서비스
MariaDB, MS-SQL, Oracle, MySQL, PostgreSQL 사용 가능
백업, 소프트웨어 패치, 자동 장애 감지 및 복구 관리
Magnetic(싸고 느림), SSD(중간), PIOPS(비싸고 빠름) 유형으로 제공

서브넷 그룹을 만들어야 생성이 가능
→ 서브넷 그룹은 두 개 이상의 가용 영역에 각 하나의 서브넷 이상이 필요

다중 AZ DB 인스턴스 배포

다중 AZ DB 클러스터 배포

① VPC 생성

② VPC 리소스맵 확인

③ RDS 서브넷 그룹 생성

④ RDS 데이터베이스 생성

⑤ (테스트를 위해) Private Subnet의 라우팅 테이블을 IGW로 라우팅을 포함한 라우팅 테이블로 변경

Private Subnet 모두 변경

⑥ MySQL Workbench를 이용해 RDS 인스턴스로 접속

⑦ 테스트를 위한 테이블 생성 및 데이터 추가

create table sampledb.cars (
	id	int(10) auto_increment not null,
    car_name varchar(20) not null, 
    brand_name varchar(20) not null, 
    primary key(id)
);

insert into sampledb.cars(car_name, brand_name) values ('소나타', '현대자동차');
insert into sampledb.cars(car_name, brand_name) values ('스포티지', '기아');

select * from sampledb.cars;

⑧ 퍼블릭 서브넷에 EC2 인스턴스 생성

RDS 인스턴스가 생성된 가용영역과 다른 가용영역의 퍼블릭 서브넷에 EC2 인스턴스 생성

⑨ EC2 인스턴스로 SSH 접속해서 RDS(MySQL)로 연결

ubuntu@ip-10-0-20-112:~$ sudo apt update

ubuntu@ip-10-0-20-112:~$ sudo apt install -y mysql-client

ubuntu@ip-10-0-20-112:~$ mysql -u admin -p -h rookies037-db.cr8842ik2jrv.ap-northeast-1.rds.amazonaws.com
Enter password: password                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
                                                 RDS 인스턴스 주소    
ERROR 2003 (HY000): Can't connect to MySQL server on → RDS 인스턴스로 연결 X
'rookies037-db.cr8842ik2jrv.ap-northeast-1.rds.amazonaws.com:3306' (110)

RDS에 설정된 보안그룹을 확인하면 특정 호스트(본인 PC)에서만 접속이 가능하도록 제한

EC2에서 접속 불가

ubuntu@ip-10-0-20-112:~$ mysql -u admin -p -h rookies037-db.cr8842ik2jrv.ap-northeast-1.rds.amazonaws.com
Enter password: password

# RDS 인스턴스로 접속되는 것을 확인
Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 56
Server version: 8.0.35 Source distribution

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

⑩ RDS 인스턴트를 Private으로 전환

퍼블릭 액세스 불가능으로 설정

⑪ MySQL Workbench로 접속이 되지 않는 것을 확인

VPC 외부에서는 접속 불가능

⑫ EC2 인스턴스에서 RDS로 접속되는 것을 확인

VPC 내에서는 접속이 유지

ubuntu@ip-10-0-20-112:~$ mysql -u admin -p -h rookies037-db.cr8842ik2jrv.ap-northeast-1.rds.amazonaws.com
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 66
Server version: 8.0.35 Source distribution

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

⑬ 호스트 PC에서 MySQL Workbench로 RDS에 접속할 수 있도록 설정

단어의미
Connection MethodStandard TCP/IP over SSH
SSH Hostname(퍼블릭 서브넷에 위치한) EC2 인스턴스의 퍼블릭 IP 주소
SSH UsernameEC2 인스턴스의 사용자 이름
SSH Key FileEC2 인스턴스 생성 시 내려받은 KeyPairs 파일
MySQL HostnameRDS 인스턴스의 엔드포인트
MySQL Server PortRDS 인스턴스의 서비스 포트
UsernameRDS 인스턴스의 사용자 이름
PasswordRDS 인스턴스의 사용자 패스워드
Default SchemaRDS 인스턴스에 연결 후 사용할 데이터베이스

📌 리소스 정리

EC2 종료

RDS 삭제

서브넷 그룹 삭제

VPC 삭제

RDS 대시보드 확인

EC2 대시보드 확인

키 페어는 이후에 사용하기 위해 유지하고, 인스턴스는 종료된 것을 확인

VPC 대시보드 확인

📌 S3(Simple Storage Service)

Amazon S3는 업계 최고의 확장성, 데이터 가용성 및 보안과 성능을 제공하는 객체 스토리지 서비스

데이터 레이크, 웹사이트, 클라우드 네이티브 애플리케이션, 백업, 아카이브, 기계 학습 및 분석과 같은 다양한 사용 사례에 대해 원하는 양의 데이터를 저장하고 보호

Amazon S3는 99.999999999%(9가 11개)의 내구성을 제공하도록 설계되었으며 전 세계 수백만 고객을 위해 데이터 저장

다양한 스토리지 클래스 제공

  • S3 스토리지 클래스에는 알 수 없거나 액세스 패턴이 변경되는 데이터에 대한 자동 비용 절감을 위한 S3 Intelligent-Tiering

  • 가장 자주 액세스하는 데이터를 위한 S3 Express One Zone

  • 자주 액세스하는 데이터를 위한 S3 Standard

  • 자주 액세스하지 않는 데이터를 위한 S3 Standard-Infrequent Access(S3 Standard-IA)S3 One Zone-Infrequent Access(S3 One Zone-IA)

  • 즉각적인 액세스가 필요한 아카이브 데이터를 위한 S3 Glacier Instant Retrieval

  • 즉각적인 액세스가 필요하지 않고 거의 액세스하지 않는 장기 데이터를 위한 S3 Glacier Flexible Retrieval(이전 S3 Glacier)

  • 클라우드에서 가장 저렴한 스토리지로 몇 시간 만에 검색 가능한 장기간 아카이브 및 디지털 보존을 위한 Amazon S3 Glacier Deep Archive(S3 Glacier Deep Archive)

수명 주기를 설정해서 수명이 다한 객체를 만료하거나, 다른 S3 스토리지 클래스로 전환하는 것이 가능

객체 잠금을 사용하여 객체 변경 및 삭제에 대해 보호하는 것도 가능

스토리지 클래스

S3 Standard

자주 접속하는 데이터를 위해 높은 내구성, 가용성 및 성능을 갖춘 객체 스토리지 제공

S3 Standard-IA

자주 접근하지는 않지만 필요할 때 빠르게 접근해야 하는 데이터에 적합
S3 Standard의 우수한 내구성, 높은 처리량 및 짧은 지연시간을 저렴한 GB당 스토리지 요금과 GB당 검색 요금으로 제공

S3 One Zone-IA

자주 접근하지는 않지만 필요할 때 빠르게 접근해야 하는 데이터에 적합
최소 3개의 가용 영역(AZ)에 데이터를 저장하는 다른 S3 스토리지 클래스와 달리, 단일 AZ에 데이터를 저장해 비용이 S3 Standard-IA보다 20% 저렴

S3 Glacier Instant Retrieval

자주 접속하지 않고 밀리초 단위의 검색이 필요한 장기 데이터에 대해 가장 저렴한 비용의 스토리지를 제공하는 아카이브 스토리지 클래스
S3 Standard 및 S3 Standard-IA 스토리지 클래스와 동일한 처리량과 밀리초 단위의 액세스를 지원하여 아카이브 스토리지에 대한 가장 빠른 액세스 제공

S3 Glacier Flexible Retrieval

최소 저장 90일 → 90일간 삭제 불가
데이터 보관을 위한 안전하고 내구성이 좋은 저렴한 스토리지 클래스
저렴한 비용으로 원하는 양의 데이터를 안정적으로 저장

S3 Glacier Deep Archive

최소 저장 180일 → 180일간 삭제 불가
Amazon S3 에서 가장 저렴한 스토리지 클래스로 1년에 한두 번 정도 접근할 수 있는 데이터 장기 보관 및 디지털 저장 지원
기본 검색 시간이 12시간

정적 웹 호스팅

Amazon S3을 사용하여 정적 웹 사이트의 호스팅 가능
정적 웹 사이트에서 개별 웹 페이지는 정적 콘텐츠를 포함
클라이언트 측 스크립트를 포함할 수도 있음

① Public 버킷 생성

나머지 설정을 그대로 유지한 상태에서 [버킷 만들기] 버튼 클릭

② Private 버킷 생성

나머지 설정을 그대로 유지한 상태에서 [버킷 만들기] 버튼 클릭

③ 버킷에 등록할 파일 준비

D:\aws> notepad index.html

<h1> Hello, S3!!! </h1>
<h2> S3 Test Page </h2>

④ Public 버킷에 index.html 파일 업로드

⑤ 웹 브라우저를 이용해서 업로드한 파일의 객체 URL로 액세스

⑥ 객체의 권한을 퍼블릭 액세스가 가능하도록 수정

⑦ 객체 URL로 다시 액세스

⑧ Public 버킷에 정적 웹 사이트 호스팅 기능 활성화

⑨ 브라우저를 이용해 버킷 주소로 액세스

S2 버킷 웹 사이트 엔드포인트로 버킷에 있는 자원을 요청해서 가져갈 수 있음 → 버킷이 웹 서버의 웹 루트 디렉터리가 됨

⑩ Private 버킷에 AWS CLI를 이용해서 연동

크리덴셜 등록 여부 확인

D:\aws> aws configure

# CLI로 AWS 서비스를 사용할 사용자의 액세스 키
AWS Access Key ID [****************ZRMQ]:

AWS Secret Access Key [****************uQdb]:
Default region name [ap-northeast-1]:
Default output format [json]:

S3 버킷 목록 조회

D:\aws> aws s3 ls
2024-04-05 19:30:49 rookies037-bucket-private
2024-04-05 19:24:28 rookies037-bucket-public

hello.html 파일 생성

D:\aws> echo "<h1>Hello, AWS S3</h1>" > hello.html

D:\aws> type hello.html
"<h1>Hello, AWS S3</h1>"

생성한 파일을 s3 버킷에 업로드

D:\aws> aws s3 cp hello.html s3://rookies037-bucket-public
upload: .\hello.html to s3://rookies037-bucket-public/hello.html


D:\aws> aws s3api list-objects --bucket rookies037-bucket-public
{
    "Contents": [
        {
            "Key": "hello.html", 	→ CLI을 통해서 업로드
            "LastModified": "2024-04-05T16:48:25+00:00",
            "ETag": "\"4dc599225324877db3689e53a283959b\"",
            "Size": 27,
            "StorageClass": "STANDARD",
            "Owner": {
                "DisplayName": "aws29",
                "ID": "6cd308e9e7b9df3954da56e915d2cfe9c6ce626ba00a538a8b3eafd5b7137d4c"
            }
        },
        {
            "Key": "index.html", 	 → Management Console을 통해 업로드
            "LastModified": "2024-04-05T10:42:32+00:00",
            "ETag": "\"e00be700855d22a6dd9ae5896b92751a\"",
            "Size": 48,
            "StorageClass": "STANDARD",
            "Owner": {
                "DisplayName": "aws29",
                "ID": "6cd308e9e7b9df3954da56e915d2cfe9c6ce626ba00a538a8b3eafd5b7137d4c"
            }
        }
    ],
    "RequestCharged": null
}

public s3 버킷의 모든 내용을 로컬로 이동

D:\aws> mkdir bucket

D:\aws> aws s3 sync s3://rookies037-bucket-public d:\aws\bucket
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~
                    source                         target


download: s3://rookies037-bucket-public/index.html to bucket\index.html
download: s3://rookies037-bucket-public/hello.html to bucket\hello.html

D:\aws>dir d:\aws\bucket
 D 드라이브의 볼륨: 새 볼륨
 볼륨 일련 번호: AE30-D2D6

 d:\aws\bucket 디렉터리

2024-04-06  오전 01:51    <DIR>          .
2024-04-06  오전 01:51    <DIR>          ..
2024-04-06  오전 01:48                27 hello.html
2024-04-05  오후 07:42                48 index.html
               2개 파일                  75 바이트
               2개 디렉터리  83,785,220,096 바이트 남음

로컬 디렉터리의 모든 내용을 private 버킷에 업로드

D:\aws> aws s3 sync d:\aws\bucket s3://rookies037-bucket-private
upload: bucket\hello.html to s3://rookies037-bucket-private/hello.html
upload: bucket\index.html to s3://rookies037-bucket-private/index.html

D:\aws> aws s3api list-objects --bucket rookies037-bucket-private
{
    "Contents": [
        {
            "Key": "hello.html",
            "LastModified": "2024-04-05T16:53:08+00:00",
            "ETag": "\"4dc599225324877db3689e53a283959b\"",
            "Size": 27,
            "StorageClass": "STANDARD",
            "Owner": {
                "DisplayName": "aws29",
                "ID": "6cd308e9e7b9df3954da56e915d2cfe9c6ce626ba00a538a8b3eafd5b7137d4c"
            }
        },
        {
            "Key": "index.html",
            "LastModified": "2024-04-05T16:53:08+00:00",
            "ETag": "\"e00be700855d22a6dd9ae5896b92751a\"",
            "Size": 48,
            "StorageClass": "STANDARD",
            "Owner": {
                "DisplayName": "aws29",
                "ID": "6cd308e9e7b9df3954da56e915d2cfe9c6ce626ba00a538a8b3eafd5b7137d4c"
            }
        }
    ],
    "RequestCharged": null
}

⑪ 파일 내용을 변경해서 업로드

index.html 파일의 객체 URL로 액세스

index.html 파일의 내용을 수정해서 업로드 후 확인

D:\aws> notepad index.html

<h1> Hello, S3!!! </h1>
<h2> New S3 Test Page </h2>

D:\aws> aws s3 cp index.html s3://rookies037-bucket-public
upload: .\index.html to s3://rookies037-bucket-public/index.html

권한을 확인하고 퍼블릭 접근이 가능하도록 수정

⑫ 버킷에 버전 관리를 활성화하고 동일한 이름의 파일 업로드

버킷 버전 관리가 활성화된 것을 확인

index.html 내용을 다시 수정 후 업로드

D:\aws> notepad index.html

<h1> Hello, S3!!! </h1>
<h2> New New S3 Test Page </h2>


D:\aws> aws s3 cp index.html s3://rookies037-bucket-public
upload: .\index.html to s3://rookies037-bucket-public/index.html

버전이 생성된 것을 확인

versionid를 이용해서 객체의 특정 버전으로 접근 가능

📌 리소스 정리

S3 비우고 삭제

📌 CNCF의 Cloud Native 정의

https://github.com/cncf/toc/blob/main/DEFINITION.md#%ED%95%9C%EA%B5%AD%EC%96%B4

클라우드 네이티브 기술은 조직이 퍼블릭, 프라이빗, 그리고 하이브리드 클라우드와 같은 현대적이고 동적인 환경에서 확장 가능한 애플리케이션을 개발하고 실행할 수 있게 해줌
컨테이너, 서비스 메쉬, 마이크로서비스, 불변(Immutable) 인프라, 그리고 선언형(Declarative) API가 이러한 접근 방식의 예시들

이 기술은 회복성, 관리 편의성, 가시성을 갖춘 느슨하게 결합된 시스템을 가능하게 함
견고한 자동화 기능을 함께 사용하면 엔지니어는 영향이 큰 변경을 최소한의 노력으로 자주, 예측 가능하게 수행 가능

Cloud Native Computing Foundation은 벤더 중립적인 오픈 소스 프로젝트 생태계를 육성하고 유지함으로써 해당 패러다임 채택을 촉진
재단은 최신 기술 수준의 패턴을 대중화하여 이런 혁신을 누구나 접근 가능하도록 하게 함

📌 자본 지출 vs 운영 지출

iptables -A INPUT -p 프로토콜 --tcp-flags SYN SYN
-sport 출발지포트 -dport 목적지포트 -j DROP/ALLOW

https://www.ncsc.go.kr:4018/PageLink.do?link=forward:/cop/bbs/selectBoardList.do?bbsId=CyberCrisis_main&tempParam1=&menuNo=020000&subMenuNo=020100&thirdMenuNo=#cnt1

📌 /etc/passwd 파일 및 /etc/shadow 파일의 내용

0개의 댓글