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

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

SK Shieldus Rookies 19기

목록 보기
24/43
post-thumbnail

⑦ S3 버킷 생성

할당 받은 리전을 선택하고 버킷 이름을 입력한 후 나머지 설정을 그대로 둔 상태에서 [버킷 만들기] 버튼 클릭

버킷의 이름은 글로벌하게 유일해야 함

rookies037-mybucket
~~~~~~~~~~
할당 받은 AWS 계정을 사용 

생성한 버킷에 (크기가 작은) 파일(=객체) 하나를 등록(업로드)

⑧ (다른 브라우저 이용) user1 사용자로 로그인해서 S3와 EC2 서비스로 접근

S3 버킷 목록이 조회되는 것을 확인할 수 있음

버킷 상세 화면에서 파일(객체)가 조회되는 것을 확인

버킷 내의 파일(객체)가 다운로드 가능한지 확인

객체 상세 정보 조회도 가능

🔎 AmazonS3ReadOnlyAccess

https://docs.aws.amazon.com/ko_kr/aws-managed-policy/latest/reference/AmazonS3ReadOnlyAccess.html

user1 사용자 해당 버킷에 파일을 업로드

권한이 없으므로 파일 업로드에 실패

EC2 서비스로 이동

EC2 서비스에 대한 권한이 없으므로 대시보드에 정보가 출력되지 않음

⑨ user1 로그아웃 후 user2 사용자로 로그인

S3 서비스로 이동

user2 사용자는 S3 서비스에 대해 아무런 권한이 없기 때문에 버킷 내용을 볼 수 없음

EC2 서비스로 이동

대시보드에 현황이 출력되는 것을 확인

인스턴스 목록을 확인하고 실행 상태의 인스턴스 중지

🔎 AmazonEC2ReadOnlyAccess

https://docs.aws.amazon.com/ko_kr/aws-managed-policy/latest/reference/AmazonEC2ReadOnlyAccess.html

⑩ user2 로그아웃 후 user3 사용자로 로그인

S3 서비스로 이동

user3 사용자는 S3 서비스에 대한 권한이 부여되지 않았기 때문에 버킷 목록을 조회할 수 없음

EC2 서비스로 이동

인스턴스 목록에서 인스턴스 중지

인스턴스 다시 시작

⑪ user3 사용자를 S3-Support 사용자 그룹에 추가한 후 S3 서비스로 이동

➕ (크롬 브라우저) 할당받은 계정으로 user3 사용자를 S3-Support 사용자 그룹에 추가

➰ (엣지 브라우저) user3 사용자가 S3 서비스로 이동

버킷 및 객체 목록, 상세 조회가 가능하고 다운로드도 가능

📌 실습 #1

user3 사용자 버킷을 생성하려고 할 때 아래와 같은 오류가 발생했습니다.

오류 내용을 참고해서 user3 사용자가 버킷을 생성할 수 있도록 user3 사용자 권한에 인라인 정책을 추가해보세요.

user3 사용자가 버킷을 생성할 수 있는지 확인

버킷 생성 확인

user1 사용자가 EC2 인스턴스 목록을 열람할 수 있게 권한 부여
S3 Support 그룹에 속한 사용자가 버킷을 생성할 수 있도록 권한 수정
EC2 Supoort 그룹에 속한 사용자가 인스턴스를 중지할 수 있도록 권한 수정

📌 리소스 정리

크롬 브라우저에서 발급 받은 계정으로 진행

📖 S3 객체(=파일)를 모두 삭제한 후 버킷 삭제

📖 EC2 인스턴스 종료

📖 다음 실습을 위해 default 보안 그룹을 제외하고 모두 삭제

📖 발급 받은 것을 제외하고 본인이 생성한 사용자, 사용자 그룹 삭제

📌 Access Key를 이용한 AWS 서비스 이용

📖 AWS 서비스를 이용한 방법

① Management Console을 이용하는 방법
사람인 사용자가 로그인 후 사용하는 방법

② AWS CLI
사람 또는 프로그램이 Access Key를 이용해서 사용하는 방법

③ 각 개발 언어별 SDK
응용 프로그램을 만들 때 사용하는 방법 (예: Python용 AWS SDK = Boto3)

📖 AWS CLI 설치

https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/getting-started-install.html

아래 명령어로 설치 프로그램을 다운로드 후 기본 설정 상태로 설치 진행

c:\Users\r2com> msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi

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

c:\Users\r2com> aws --version
aws-cli/2.15.34 Python/3.11.8 Windows/10 exe/AMD64 prompt/off

📖 사용자 목록 조회

https://docs.aws.amazon.com/cli/latest/reference/iam/list-users.html

c:\Users\r2com> aws iam list-users

Unable to locate credentials. You can configure credentials by running "aws configure".

📖 발급받은 계정으로 액세스 키 생성

Management Console에서 진행

액세스 키는 절대 외부에 노출되지 않도록 관리하고 분실에 대비해 csv 파일 다운로드
블로그, 깃허브, 노션 등에 등록되지 않도록 유의

📖 aws configure 명령으로 사용자 크리덴셜 등록

c:\Users\r2com> aws configure

# 앞에서 생성한 액세스키 정보를 입력
AWS Access Key ID [None]: AKI*******8*QCT7ZRMQ	

AWS Secret Access Key [None]: 8Xkk7***********************+quQdb

# 본인에게 할당된 리전 입력
Default region name [None]: ap-northeast-1		

Default output format [None]: json

📖 aws iam list-users 명령 실행

C:\Users\r2com>aws iam list-users

{
    "Users": [
        {
            "Path": "/",
            "UserName": "Rookies037",
            "UserId": "AIDA2UC27STP7KVGOBWSG",
            "Arn": "arn:aws:iam::730335253727:user/Rookies037",
            "CreateDate": "2024-03-28T05:34:09+00:00",
            "PasswordLastUsed": "2024-04-02T00:36:06+00:00"
            }
      ]
 }

📖 S3 버킷 목록 조회

https://docs.aws.amazon.com/cli/latest/reference/s3api/list-buckets.html

c:\Users\r2com> aws s3api list-buckets
{
    "Buckets": [],
    "Owner": {
        "ID": "6cd308e9e7b9df3954da56e915d2cfe9c6ce626ba00a538a8b3eafd5b7137d4c"
    }
}

📖 S3 버킷 생성 후 조회

https://docs.aws.amazon.com/cli/latest/reference/s3api/create-bucket.html

c:\Users\r2com> aws s3api create-bucket --bucket rookies-inst-mybucket

An error occurred (IllegalLocationConstraintException) when calling the CreateBucket operation: The unspecified location constraint is incompatible for the region specific endpoint this request was sent to.




C:\Users\r2com>aws s3api create-bucket --bucket rookies037-mybucket --create-bucket-configuration 
									  			~~~~~~~~~~~~~~~~~~~
                          	                    # 버킷 이름 (유일해야 함)
LocationConstraint=ap-northeast-1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 버킷을 생성할 위치(리전)

{
    "Location": "http://rookies037-mybucket.s3.amazonaws.com/"
}

c:\Users\r2com> aws s3api list-buckets
{
    "Buckets": [
        {
             "Name": "rookies037-mybucket",
            "CreationDate": "2024-04-02T04:22:04+00:00"
        }
    ],
    "Owner": {
        "ID": "6cd308e9e7b9df3954da56e915d2cfe9c6ce626ba00a538a8b3eafd5b7137d4c"
    }
}

📖 S3 버킷을 삭제 후 조회

https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-bucket.html

c:\Users\r2com> aws s3api delete-bucket --bucket rookies037-mybucket

c:\Users\r2com> aws s3api list-buckets
{
    "Buckets": [],
    "Owner": {
        "ID": "6cd308e9e7b9df3954da56e915d2cfe9c6ce626ba00a538a8b3eafd5b7137d4c"
    }
}

📌 실습 #2

AWS CLI를 이용해서 S3 버킷을 생성하고, 생성한 버킷에 (작은 크기의) 파일을 업로드한 후 Management Console에 접속해서 업로드 한 파일을 확인해보세요. 버킷에 등록된 모든 객체를 삭제하고 버킷을 삭제도 해보세요.

💡 <참고>
https://docs.aws.amazon.com/cli/latest/reference/s3api/create-bucket.html
https://docs.aws.amazon.com/cli/latest/reference/s3/cp.html
https://docs.aws.amazon.com/cli/latest/reference/s3api/put-object.html
https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-objects.html

① 버킷 생성

② 파일 업로드

③ 버킷 안 파일 조회

④ 콘솔에서 파일 확인

⑤ 버킷 안의 모든 객체 삭제

⑥ 버킷 삭제

📌 리소스 정리

📖 S3 버킷이 없어야 함

존재하는 경우 버킷을 비우고 삭제해주기

📌 VPC (Virtual Private Cloud)

AWS 사용자 계정 전용 가상 네트워크

AWS 클라우드에서 다른 가상 네트워크와 논리적으로 분리

한 AWS 리전 안에서만 존재할 수 있고, 한 리전에 만든 VPC는 다른 리전에서는 보이지 않음 → VPC Peering

생성 시 RFC 1918에 지정된 프라이빗 주소 체계를 사용할 것을 권고
https://datatracker.ietf.org/doc/html/rfc1918#section-3
▫ 10.0.0.0 - 10.255.255.255 (10/8 prefix)
▫ 172.16.0.0 - 172.31.255.255 (172.16/12 prefix)
▫ 192.168.0.0 - 192.168.255.255 (192.168/16 prefix)

📖 VPC 구성 옵션

https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/create-vpc.html

가용 영역(AZ, Availbility Zone)

  • AWS 리전에 중복 전원, 네트워킹 및 연결이 있는 하나 이상의 개별 데이터 센터

CIDR 블록

  • VPC와 서브넷의 IP 주소 범위를 지정

DNS 옵션

  • 서브넷에서 시작된 EC2 인스턴스의 퍼블릭 IPv4 DNS 호스트 이름이 필요한 경우 두 DNS 옵션을 모두 활성화

인터넷 게이트웨이

  • 인터넷에 VPC를 연결시켜주는 역할

  • 퍼블릭 서브넷의 인스턴스는 서브넷 라우팅 테이블에 인터넷으로 향하는 트래픽을 인터넷 게이트웨이로 전송하는 경로가 포함되어 있으므로 인터넷에 액세스 가능

  • 인터넷에서 서버에 직접 연결할 필요가 없는 경우 퍼블릭 서브넷에 배포하기 X

명칭

  • VPC 및 기타 VPC 리소스에 지정한 이름

NAT 게이트웨이

  • 프라이빗 서브넷의 인스턴스가 아웃바운드 트래픽을 전송할 수 있도록 하지만 인터넷의 리소스가 인스턴스에 연결하는 것을 방지

  • 프로덕션 환경에서는 각 활성 AZ에 NAT 게이트웨이를 배포하는 것이 좋음

라우팅 테이블

  • 서브넷 또는 게이트웨이의 네트워크 트래픽이 전송되는 위치를 결정하는 라우팅이라는 규칙 집합을 포함

서브넷

  • VPC의 IP 주소 범위

  • EC2 인스턴스와 같은 AWS 리소스를 서브넷으로 시작할 수 있음

  • 각 서브넷은 단일 가용 영역 내에서만 존재

  • 두 개 이상의 가용 영역에서 인스턴스를 시작하면 단일 가용 영역의 장애로부터 애플리케이션을 보호할 수 있음

  • 퍼블릭 서브넷에는 인터넷 게이트웨이로 직접 연결되는 경로가 존재

  • 퍼블릭 서브넷의 리소스는 퍼블릭 인터넷에 액세스 가능

  • 프라이빗 서브넷에는 인터넷 게이트웨이로 직접 연결되는 경로가 없음

  • 프라이빗 서브넷의 리소스에는 퍼블릭 인터넷에 액세스하기 위해 NAT 장치와 같은 다른 구성 요소가 필요

Tenancy

  • 이 옵션은 VPC로 시작하는 EC2 인스턴스가 다른 AWS 계정과 공유되는 하드웨어에서 실행되는지 아니면 사용자 전용 하드웨어에서 실행되는지를 정의

  • VPC의 테넌시를 Default로 선택하면 이 VPC로 시작된 EC2 인스턴스는 인스턴스를 시작할 때 지정된 테넌시 속성을 사용

📖 기본 VPC(default VPC)

https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/default-vpc.html

계정이 2013년 12월 4일 이후에 생성된 경우 각 리전에 기본 VPC가 함께 제공
각 가용 영역의 퍼블릭 서브넷, 인터넷 게이트웨이 및 DNS 확인 활성화 설정과 함께 제공

📝 기본 VPC 구성요소

IPv4 CIDR 블록의 크기가 /16(172.31.0.0/16)인 VPC 생성
→ 최대 65,536 개의 프라이빗 IPv4 주소를 제공

각 가용 영역에 크기 /20의 기본 서브넷 생성
→ 서브넷 당 최대 4,096 개의 주소가 제공되며 그 중 일부는 내부용으로 예약

인터넷 게이트웨이를 만들어 기본 VPC에 연결

기본 라우팅 테이블에 모든 트래픽(0.0.0.0/0)이 인터넷 게이트웨이로 전달되는 경로를 추가

기본 보안 그룹을 만들어 기본 VPC와 연결

네트워크 ACL(액세스 제어 목록)을 생성하여 기본 VPC와 연결

AWS 계정에서 설정된 기본 DHCP 옵션을 기본 VPC와 연결

📖 서브넷(subnet)

VPC 내의 논리적 구분

EC2 인스턴스를 배치하는 장소 → 인스턴스는 서브넷 안에 위치

  • 한번 서브넷에 인스턴스를 생성하면 다른 서브넷으로 옮길 수 없음
  • 인스턴스를 종료하고 다른 서브넷에 새 인스턴스를 만들 수는 있음

인스턴스를 서로 격리하며 인스턴스 간의 트래픽 흐름을 제어하고 인스턴스를 기능 별로 묶는 역할

서브넷은 하나의 가용 영역(AZ) 내에서만 존재할 수 있음

서브넷 CIDR 블록

  • VPC의 일부이고, VPC 내에서 유니크해야 함

  • 모든 서브넷에서 처음 4개의 IP와 마지막 1개는 예약되어 있으므로 인스턴스에 할당할 수 없음

    • Ex. 서브넷의 CIDR이 172.16.100.0/24인 경우
      172.16.100.0 네트워크 주소
      172.16.100.1 AWS에서 VPC 라우팅용으로 예약
      172.16.100.2 DNS 서버 주소
      172.16.100.3 AWS에서 나중에 사용하려고 예약
      172.16.100.255 네트워크 브로드캐스트 주소

퍼블릭 서브넷
서브넷이 인터넷 게이트웨이로 향하는 라우팅이 있는 라우팅 테이블과 연결된 경우

프라이빗 서브넷
서브넷이 인터넷 게이트웨이로 향하는 라우팅이 없는 라우팅 테이블과 연결된 경우

📖 ENI(Elastic Network Interface, 탄력적 네트워크 인터페이스)

물리 서버의 네트워크 인터페이스와 같은 기능 수행
VPC에서 가상 네트워크 카드를 나타내는 논리적 네트워크 구성 요소

📖 인터넷 게이트웨이(IGW, Internet GateWay)

https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/VPC_Internet_Gateway.html

퍼블릭 IP 주소를 갖는 인스턴스가 인터넷에 연결할 수 있도록 기능 제공

처음 VPC를 만들면 인터넷 게이트웨이가 연결되어 있지 않으므로, 직접 인터넷 게이트웨이를 만들고 VPC와 연결해야 함

하나의 VPC는 하나의 인터넷 게이트웨이만 연결할 수 있음

📖 라우팅

VPC의 네트워크 트래픽을 전달할 위치를 결정하는데 사용되는 규칙

트래픽을 전달할 IP 주소 범위(대상 주소)와 트래픽을 전송할 게이트웨이, 네트워크 인터페이스 또는 연결(대상) 지정

VPC는 소프트웨어 함수로 IP 라우팅을 구현하고 사용자는 라우팅 테이블만 관리

라우팅 테이블 → 라우팅의 집합으로, 서브넷과 연결할 수 있음

기본 라우팅 테이블 → VPC와 함께 자동으로 제공되는 라우팅 테이블
💬 기본 VPC인 경우, localigw로의 라우팅을 포함
💬 기본 VPC가 아닌 경우, local 라우팅만 포함

	------------------------------	----------------------
	대상 → target address 		    대상 → 해당 트래픽을 
	       트래픽의 목적지 주소		       전달할 곳
	------------------------------	----------------------
	0.0.0.0/0						igw-0cc400f9a8a4e5545
	172.31.0.0/16					local
	------------------------------	----------------------

200.40.100.50 주소로 트래픽을 보내려고 하면,
라우팅 할 위치와 가장 근접하게 일치하는 항목을 기반으로 라우팅 처리
→ 인터넷 게이트웨이로 라우팅됨

172.31.0.10 주소 트래픽을 보내려고 하면,
VPC 내에서 해당 주소를 사용하는 호스트를 찾아 라우팅 처리

라우팅 테이블에 라이팅을 기술할 때 라우팅 순서는 중요 X
→ 가장 근접하게 일치하는 항목을 기반으로 라우팅을 처리하기 때문

📖 기본 VPC 생성 실습

✖ 기존에 생성되어 있는 VPC 모두 삭제

💻 기본 VPC 생성

라우팅 테이블을 클릭해 내용 확인

📖 보안 그룹(sg, security group)

방화벽과 같은 기능 제공

인스턴스의 ENI에서 송수신하는 트래픽 제어

모든 ENI는 최소 한 개 이상의 보안 그룹과 연결되어야 하고, 보안 그룹은 여러 ENI와 연결될 수 있음

생성 시 → 보안 그룹 이름, 설명, 포함될 VPC 저장
생성 후 → 인바운드, 아웃바운드 규칙 지정

상태 저장 방화벽 역할
→ 보안 그룹이 트래픽을 한 방향으로 전달되도록 허용할 때 반대 방향의 응답 트래픽을 지능적으로 허용
Ex. 웹 클라이언트에서 HTTP(S)로 요청을 허용했다면 요청에 대한 응답도 허용

📖 NACL(Network Access Control List)

보안 그룹과 유사
💬 원본 또는 대상 주소의 CIDR, 프로토콜, 포트를 기반으로 트래픽을 인바운드, 아웃바운드 규칙으로 제어 → 방화벽과 같은 역할
💬 VPC에 삭제할 수 없는 기본 NACL이 있음

서브넷에 연결되어 해당 서브넷과 송수신되는 트래픽 제어

상태 비저장
💬 NACL을 통과한 연결 상태를 추적하지 않음
💬 모든 인바운드와 아웃바운드 트래픽의 허용 규칙을 별도로 작성해야 함

규칙을 적용할 때 규칙 번호의 오름차순으로 처리

📖 보안 그룹 vs NACL

보안 그룹NACL
인스턴스 레벨에서 운영 (ENI)서브넷 레벨에서 운영
인스턴스와 연결된 경우에만 인스턴스에 적용연결된 서브넷에서 배포된 모든 인스턴스에 적용
허용 규칙만 지원허용 및 거부 규칙 지원
트래픽 허용 여부를 결정하기 전에 모든 규칙 평가트래픽 허용 여부를 결정할 때 가장 낮은 번호의 규칙부터 순서대로 규칙 평가
상태 저장 → 규칙에 관계없이 반환 트래픽이 허용상태 비저장 → 반환 트래픽이 규칙에 따라 명시적으로 허용되어야 함

📌 Amazon EC2(Elastic Compute Cloud)

https://aws.amazon.com/ko/ec2/

안정적으로 확장 가능한 인프라에 온디맨드로 액세스

99.99%의 가용성을 지원하는 SLA(Service Level Agreement, 서비스 수준 계약, 공급업체가 고객에게 제공하기로 약속한 서비스 수준을 명시하는 아웃소싱 및 기술 공급업체 계약)를 기반으로 몇 분 안에 용량 크기를 조정

애플리케이션을 위한 안전한 컴퓨팅 제공

보안은 AWS Nitro System에서 Amazon EC2를 기반으로 구축

📢 여기서 잠깐! AWS Nitro System이란?
가상화 및 하드웨어 기술 스택으로 EC2와 같은 가상머신 서비스에서 물리적 하드웨어와 가상화 계층 간의 관계를 정의하는 핵심 구성요소 중 하나

AWS Graviton 기반 인스턴스, Amazon EC2 스팟 인스턴스 및 AWS Savings Plans와 같은 유연한 옵션을 통해 성능과 비용 최적화

AWS Migration Tools, AWS Managed Services 또는 Amazon Lightsail을 사용하여 간편하게 앱을 마이그레이션하고 구축

📖 AMI(Amazon Machine Image)

https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/AMIs.html

인스턴스를 시작하는데 필요한 소프트웨어 구성(운영체제, 애플리케이션 서버, 애플리케이션)이 포함된 템플릿

사용자 커뮤니티 또는 AWS Marketplace에서 제공하는 AMI를 선택하거나, 자체 AMI를 선택할 수 있음

📖 인스턴스 타입 명명 규칙

https://aws.amazon.com/ko/ec2/instance-types/

인스턴스
애플리케이션을 실행할 수 있는 가상 서버

사용 사례(use case)에 맞는 최적화된 다양한 유형의 인스턴스 제공

CPU, 메모리, 스토리지 및 네트워킹 용량의 다양한 조합 제공

🔎 인스턴스 패밀리

용어
C컴퓨팅 최적화
D고밀도 스토리지
FFPGA
G그래픽 집약적
Hpc고성능 컴퓨팅
I스토리지 최적화
InfAWS Inferentia
M범용
MacmacOS
PGPU 가속
R메모리 최적화
T버스트 가능한 성능
TrnAWS Trainium
U고용량 메모리
VT비디오 트랜스코딩
X메모리 집약적

🔎 프로세서 패밀리

용어
aAMD 프로세서
gAWS Graviton 프로세서
i인텔 프로세서

🔎 추가 기능

용어
d인스턴스 스토어 볼륨
n네트워크 및 EBS 최적화
e추가 스토리지 또는 메모리
z고성능
flexFlex 인스턴스

📖 EBS(Elastic Block Store)

https://aws.amazon.com/ko/ebs/

사용이 쉽고 확장 가능한 고성능 블록 스토리지 서비스로서 Amazon Elastic Compute Cloud(Amazon EC2)용으로 설계

📖 EBS 스냅샷

https://docs.aws.amazon.com/ko_kr/ebs/latest/userguide/ebs-snapshots.html

EBS 볼륨, 부팅 볼륨 및 온프레미스 블록 데이터와 같은 블록 스토리지 데이터를 보호하도록 설계된 간단하고 안전한 데이터 보호 솔루션

데이터의 특정 시점 복사본이며, 재해 복구를 지원하고 리전 및 계정 간의 데이터를 마이그레이션하며 백업 규정 준수를 개선하는데 사용

📖 EIP(Elastic IP, 탄력적 IP)

정적 IPv4 주소로, AWS 계정에 할당되며 릴리스 할 때까지 할당된 상태를 유지

EC2 인스턴스를 중지하고 다시 시작하면 퍼블릭 IP 주소가 변경되나, EC2 인스턴스에 EIP 주소를 연결하면 EC2 인스턴스를 다시 시작해도 동일한 IP 주소로 접속 가능

EIP 주소 요금
https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html#eip-pricing
2024년 2월 1일부터, 실행 중인 인스턴스와 연결된 주소를 포함하여 모든 탄략적 IP 주소에 대해 요금이 부과

📌 AWS 아키텍처 설계 시 사용할 수 있는 도구

https://aws.amazon.com/ko/architecture/icons/

실습. 웹 서비스 환경을 구성

0개의 댓글