버킷의 이름은 글로벌하게 유일해야 함
rookies037-mybucket
~~~~~~~~~~
할당 받은 AWS 계정을 사용
https://docs.aws.amazon.com/ko_kr/aws-managed-policy/latest/reference/AmazonS3ReadOnlyAccess.html
권한이 없으므로 파일 업로드에 실패
EC2 서비스에 대한 권한이 없으므로 대시보드에 정보가 출력되지 않음
user2 사용자는 S3 서비스에 대해 아무런 권한이 없기 때문에 버킷 내용을 볼 수 없음
대시보드에 현황이 출력되는 것을 확인
https://docs.aws.amazon.com/ko_kr/aws-managed-policy/latest/reference/AmazonEC2ReadOnlyAccess.html
user3 사용자는 S3 서비스에 대한 권한이 부여되지 않았기 때문에 버킷 목록을 조회할 수 없음
버킷 및 객체 목록, 상세 조회가 가능하고 다운로드도 가능
user3 사용자 버킷을 생성하려고 할 때 아래와 같은 오류가 발생했습니다.
오류 내용을 참고해서 user3 사용자가 버킷을 생성할 수 있도록 user3 사용자 권한에 인라인 정책을 추가해보세요.
버킷 생성 확인
user1 사용자가 EC2 인스턴스 목록을 열람할 수 있게 권한 부여
S3 Support 그룹에 속한 사용자가 버킷을 생성할 수 있도록 권한 수정
EC2 Supoort 그룹에 속한 사용자가 인스턴스를 중지할 수 있도록 권한 수정
크롬 브라우저에서 발급 받은 계정으로 진행
① Management Console을 이용하는 방법
사람인 사용자가 로그인 후 사용하는 방법
② AWS CLI
사람 또는 프로그램이 Access Key를 이용해서 사용하는 방법
③ 각 개발 언어별 SDK
응용 프로그램을 만들 때 사용하는 방법 (예: Python용 AWS SDK = Boto3)
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 파일 다운로드
블로그, 깃허브, 노션 등에 등록되지 않도록 유의
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
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"
}
]
}
https://docs.aws.amazon.com/cli/latest/reference/s3api/list-buckets.html
c:\Users\r2com> aws s3api list-buckets
{
"Buckets": [],
"Owner": {
"ID": "6cd308e9e7b9df3954da56e915d2cfe9c6ce626ba00a538a8b3eafd5b7137d4c"
}
}
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"
}
}
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"
}
}
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
① 버킷 생성
② 파일 업로드
③ 버킷 안 파일 조회
④ 콘솔에서 파일 확인
⑤ 버킷 안의 모든 객체 삭제
⑥ 버킷 삭제
존재하는 경우 버킷을 비우고 삭제해주기
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)
https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/create-vpc.html
가용 영역(AZ
, Availbility Zone)
CIDR 블록
DNS 옵션
인터넷 게이트웨이
인터넷에 VPC를 연결시켜주는 역할
퍼블릭 서브넷의 인스턴스는 서브넷 라우팅 테이블에 인터넷으로 향하는 트래픽을 인터넷 게이트웨이로 전송하는 경로가 포함되어 있으므로 인터넷에 액세스 가능
인터넷에서 서버에 직접 연결할 필요가 없는 경우 퍼블릭 서브넷에 배포하기 X
명칭
NAT 게이트웨이
프라이빗 서브넷의 인스턴스가 아웃바운드 트래픽을 전송할 수 있도록 하지만 인터넷의 리소스가 인스턴스에 연결하는 것을 방지
프로덕션 환경에서는 각 활성 AZ에 NAT 게이트웨이를 배포하는 것이 좋음
라우팅 테이블
서브넷
VPC의 IP 주소 범위
EC2 인스턴스와 같은 AWS 리소스를 서브넷으로 시작할 수 있음
각 서브넷은 단일 가용 영역 내에서만 존재
두 개 이상의 가용 영역에서 인스턴스를 시작하면 단일 가용 영역의 장애로부터 애플리케이션을 보호할 수 있음
퍼블릭 서브넷에는 인터넷 게이트웨이로 직접 연결되는 경로가 존재
퍼블릭 서브넷의 리소스는 퍼블릭 인터넷에 액세스 가능
프라이빗 서브넷에는 인터넷 게이트웨이로 직접 연결되는 경로가 없음
프라이빗 서브넷의 리소스에는 퍼블릭 인터넷에 액세스하기 위해 NAT 장치와 같은 다른 구성 요소가 필요
Tenancy
이 옵션은 VPC로 시작하는 EC2 인스턴스가 다른 AWS 계정과 공유되는 하드웨어에서 실행되는지 아니면 사용자 전용 하드웨어에서 실행되는지를 정의
VPC의 테넌시를 Default로 선택하면 이 VPC로 시작된 EC2 인스턴스는 인스턴스를 시작할 때 지정된 테넌시 속성을 사용
https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/default-vpc.html
계정이 2013년 12월 4일 이후에 생성된 경우 각 리전에 기본 VPC가 함께 제공
각 가용 영역의 퍼블릭 서브넷, 인터넷 게이트웨이 및 DNS 확인 활성화 설정과 함께 제공
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와 연결
VPC 내의 논리적 구분
EC2 인스턴스를 배치하는 장소 → 인스턴스는 서브넷 안에 위치
인스턴스를 서로 격리하며 인스턴스 간의 트래픽 흐름을 제어하고 인스턴스를 기능 별로 묶는 역할
서브넷은 하나의 가용 영역(AZ) 내에서만 존재할 수 있음
서브넷 CIDR 블록
VPC의 일부이고, VPC 내에서 유니크해야 함
모든 서브넷에서 처음 4개의 IP와 마지막 1개는 예약되어 있으므로 인스턴스에 할당할 수 없음
퍼블릭 서브넷
서브넷이 인터넷 게이트웨이로 향하는 라우팅이 있는 라우팅 테이블과 연결된 경우
프라이빗 서브넷
서브넷이 인터넷 게이트웨이로 향하는 라우팅이 없는 라우팅 테이블과 연결된 경우
물리 서버의 네트워크 인터페이스와 같은 기능 수행
VPC에서 가상 네트워크 카드를 나타내는 논리적 네트워크 구성 요소
https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/VPC_Internet_Gateway.html
퍼블릭 IP 주소를 갖는 인스턴스가 인터넷에 연결할 수 있도록 기능 제공
처음 VPC를 만들면 인터넷 게이트웨이가 연결되어 있지 않으므로, 직접 인터넷 게이트웨이를 만들고 VPC와 연결해야 함
하나의 VPC는 하나의 인터넷 게이트웨이만 연결할 수 있음
VPC의 네트워크 트래픽을 전달할 위치를 결정하는데 사용되는 규칙
트래픽을 전달할 IP 주소 범위(대상 주소)와 트래픽을 전송할 게이트웨이, 네트워크 인터페이스 또는 연결(대상) 지정
VPC는 소프트웨어 함수로 IP 라우팅을 구현하고 사용자는 라우팅 테이블만 관리
라우팅 테이블 → 라우팅의 집합으로, 서브넷과 연결할 수 있음
기본 라우팅 테이블 → VPC와 함께 자동으로 제공되는 라우팅 테이블
💬 기본 VPC인 경우, local
및 igw
로의 라우팅을 포함
💬 기본 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
→ 가장 근접하게 일치하는 항목을 기반으로 라우팅을 처리하기 때문
방화벽과 같은 기능 제공
인스턴스의 ENI에서 송수신하는 트래픽 제어
모든 ENI는 최소 한 개 이상의 보안 그룹과 연결되어야 하고, 보안 그룹은 여러 ENI와 연결될 수 있음
생성 시 → 보안 그룹 이름, 설명, 포함될 VPC 저장
생성 후 → 인바운드, 아웃바운드 규칙 지정
상태 저장 방화벽 역할
→ 보안 그룹이 트래픽을 한 방향으로 전달되도록 허용할 때 반대 방향의 응답 트래픽을 지능적으로 허용
Ex. 웹 클라이언트에서 HTTP(S)로 요청을 허용했다면 요청에 대한 응답도 허용
보안 그룹과 유사
💬 원본 또는 대상 주소의 CIDR, 프로토콜, 포트를 기반으로 트래픽을 인바운드, 아웃바운드 규칙으로 제어 → 방화벽과 같은 역할
💬 VPC에 삭제할 수 없는 기본 NACL이 있음
서브넷에 연결되어 해당 서브넷과 송수신되는 트래픽 제어
상태 비저장
💬 NACL을 통과한 연결 상태를 추적하지 않음
💬 모든 인바운드와 아웃바운드 트래픽의 허용 규칙을 별도로 작성해야 함
규칙을 적용할 때 규칙 번호의 오름차순으로 처리
보안 그룹 | NACL |
---|---|
인스턴스 레벨에서 운영 (ENI) | 서브넷 레벨에서 운영 |
인스턴스와 연결된 경우에만 인스턴스에 적용 | 연결된 서브넷에서 배포된 모든 인스턴스에 적용 |
허용 규칙만 지원 | 허용 및 거부 규칙 지원 |
트래픽 허용 여부를 결정하기 전에 모든 규칙 평가 | 트래픽 허용 여부를 결정할 때 가장 낮은 번호의 규칙부터 순서대로 규칙 평가 |
상태 저장 → 규칙에 관계없이 반환 트래픽이 허용 | 상태 비저장 → 반환 트래픽이 규칙에 따라 명시적으로 허용되어야 함 |
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을 사용하여 간편하게 앱을 마이그레이션하고 구축
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 | 고밀도 스토리지 |
F | FPGA |
G | 그래픽 집약적 |
Hpc | 고성능 컴퓨팅 |
I | 스토리지 최적화 |
Inf | AWS Inferentia |
M | 범용 |
Mac | macOS |
P | GPU 가속 |
R | 메모리 최적화 |
T | 버스트 가능한 성능 |
Trn | AWS Trainium |
U | 고용량 메모리 |
VT | 비디오 트랜스코딩 |
X | 메모리 집약적 |
용어 | 뜻 |
---|---|
a | AMD 프로세서 |
g | AWS Graviton 프로세서 |
i | 인텔 프로세서 |
용어 | 뜻 |
---|---|
d | 인스턴스 스토어 볼륨 |
n | 네트워크 및 EBS 최적화 |
e | 추가 스토리지 또는 메모리 |
z | 고성능 |
flex | Flex 인스턴스 |
https://aws.amazon.com/ko/ebs/
사용이 쉽고 확장 가능한 고성능 블록 스토리지 서비스로서 Amazon Elastic Compute Cloud(Amazon EC2)용으로 설계
https://docs.aws.amazon.com/ko_kr/ebs/latest/userguide/ebs-snapshots.html
EBS 볼륨, 부팅 볼륨 및 온프레미스 블록 데이터와 같은 블록 스토리지 데이터를 보호하도록 설계된 간단하고 안전한 데이터 보호 솔루션
데이터의 특정 시점 복사본이며, 재해 복구를 지원하고 리전 및 계정 간의 데이터를 마이그레이션하며 백업 규정 준수를 개선하는데 사용
정적 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 주소에 대해 요금이 부과
https://aws.amazon.com/ko/architecture/icons/