생성형 AI 활용한 클라우드&보안 전문가 양성 캠프
#1 user1, user2, user3 사용자 생성
IAM > 사용자 > [사용자 생성] 버튼 클릭
사용자 세부 정보 입력하고 [다음] 버튼을 클릭
사용자 이름은 "발급받은본인계정_user1" 형식으로 지정합니다.
권한 정책을 선택하지 않고 [다음] 버튼을 클릭
입력한 내용을 확인하고 [사용자 생성] 버튼을 클릭
동일한 방법으로 user2와 user3를 생성 ⇒ 사용자 목록에서 추가된 사용자를 확인
사용자 이름은 "발급받은본인계정_user2", "발급받은본인계정_user3" 형식으로 지정합니다.
#2 S3-Support, EC2-Support, EC2-Admin 사용자 그룹 생성
사용자 그룹 이름을 입력하고 그룹에 소속된 사용자를 선택한 후 권한 정책 연결 없이 그룹을 생성
그룹 이름을 "발급받은본인계정_그룹이름" 형식으로 지정합니다.
세 개의 그룹에 사용자 한 명이 추가되고 권한이 정의되어 있지 않은 것을 확인
#3 S3-Support 사용자 그룹에 S3 읽기 전용 관리형 정책 추가
IAM > 사용자 그룹 > S3-Support 그룹 선택 > 권한 탭 > 권한 추가 : 정책 연결
AmazonS3ReadOnlyAccess 정책을 선택하고 해당 정책에 JSON 정책 문서를 확인한 후 [정책 연결] 버튼을 클릭
해당 그룹에 속한 사용자에게도 동일한 권한이 부여된 것을 확인할 수 있음
#4 EC2-Support 사용자 그룹에 EC2 인스턴스 읽기 전용 AWS 관리형 권한을 설정
#5 EC2-Admin 사용자 그룹에 EC2 인스턴스 읽기, 실행, 중지 권한을 부여 (인라인 정책을 적용)
JSON 편집기를 이용하는 경우
정책 이름을 입력하고 [정책 생성] 버튼을 클릭
"발급받은본인계정_EC2-Admin-Policy" 형식으로 정책 이름을 지정
EC2-Admin 사용자 그룹에 생성한 정책이 연결된 것을 확인
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
이후 정리는 수업 내용 복습 겸 정리
6. EC2 인스턴스 생성
본인에게 할당된 리전을 확인하고 동일 리전을 사용
EC2 대시보드 화면에서 [인스턴스 시작] 버튼을 클릭
인스턴스의 이름을 입력하고,Amazon Linux 2023 AMI를 선택(프리 티어 사용 가능한 이미지를 선택)
인스턴스 유형으로 t2.micro를 선택하고 새 키 페어 생성 링크를 클릭해서 키 페어를 생성
키 페어 이름을 입력하고[키 페어 생성] 버튼을 클릭 => 내려받은 키 페어 파일은 해당 인스턴스 접속을 위해서 잘 보관해야 함
나머지 설정을 그대로 유지한 상태로 [인스턴스 시작] 버튼을 클릭
인스턴스 실행을 확인
7. S3 버킷 생성
S3 인트로 페이지에서[버킷 만들기] 버튼을 클릭
할당 받은 리전을 선택하고 버킷 이름을 입력한 후 나머지 설정을 그대로 둔 상태에서 [버킷 만들기] 버튼을 클릭
버킷 이름은 글로벌하게 유일해야함
AmazonS3ReadOnlyAccess 권한 확인
https://docs.aws.amazon.com/ko_kr/aws-managed-policy/latest/reference/AmazonS3ReadOnlyAccess.html
EC2 서비스로 이동 => EC2 서비스에 대한 권한이 없으므로 대시보드에 정보가 출력되지 않음
AmazonEC2ReadOnlyAccess 권한 확인
https://docs.aws.amazon.com/ko_kr/aws-managed-policy/latest/reference/AmazonEC2ReadOnlyAccess.html
S3 서비스로 이동 ⇒ user3 사용자는 S3 서비스에 대한 권한이 부여되지 않았기 때문에 버킷 목록을 조회할 수 없음
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
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\*> msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi
설치가 완료되면 새 명령 프롬프트를 실행해서 설치 여부를 확인
c:\Users\ * > aws --version
aws-cli/2.18.17 Python/3.12.6 Windows/11 exe/AMD64
C:\Users\ * > aws help
aws
^^^
Description
***********
The AWS Command Line Interface is a unified tool to manage your AWS
services.
Synopsis
********
aws [options] <command> <subcommand> [parameters]
Use *aws command help* for information on a specific command. Use *aws ⇐ 명령어 사용법법
help topics* to view a list of available help topics. The synopsis for
each command shows its parameters and their usage. Optional parameters
are shown in square brackets.
:
사용자 목록을 조회
https://docs.aws.amazon.com/cli/latest/reference/iam/list-users.html
C:\Users\*> aws iam list-users
Unable to locate credentials. You can configure credentials by running "aws configure".
aws configure 명령으로 사용자 크리덴셀을 등록
C:\Users\*> aws configure
AWS Access Key ID [None]: ********* ⇐ 앞에서 생성한 액세스키 정보를 입력
AWS Secret Access Key [None]:**********************
Default region name [None]: us-west-2 ⇐ 본인에게 할당된 리전을 입력
Default output format [None]: json ⇐ 출력 형식을 지정
aws iam list-users 명령을 실행
C:\Users\ * > aws iam list-users
{
"Users": [
{
"Path": "/",
"UserName": "",
"UserId": "",
"Arn": "",
"CreateDate": "2024-10-26T03:40:25+00:00"
},
{
"Path": "/",
"UserName": "",
"UserId": "",
"Arn": "",
"CreateDate": "2024-10-26T03:40:10+00:00",
"PasswordLastUsed": "2024-10-30T00:21:43+00:00"
},
{
"Path": "/",
"UserName": "",
"UserId": "",
"Arn": "",
"CreateDate": "2024-10-30T02:15:27+00:00"
}
]
}
S3 버킷 목록을 조회
https://docs.aws.amazon.com/cli/latest/reference/s3api/list-buckets.html
C:\Users\ * > aws s3api list-buckets
{
"Buckets": [], ⇐ 생성된 버킷이 없음
"Owner": {
"ID": ""
},
"Prefix": null
}
S3 버킷 생성 후 조회
https://docs.aws.amazon.com/cli/latest/reference/s3api/create-bucket.html
생성할 버킷 이름
~~~~~~~~~~~~~~~~~~~~~
C:\Users\*> aws s3api create-bucket --bucket-*-clibucket
~~~~~~~~~~~~
발급받은 계정 이름
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\*> aws s3api create-bucket --bucket- *-clibucket --create-bucket-configuration LocationConstraint= us-west-2 ~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| +-- 버킷 이름에 대문자를 사용할 수 없으며, 유일해야 함
+-- 버킷을 생성할 리전을 지정 (본인에게 할당된 리전을 사용)
{
"Location": "http://*-clibucket.s3.amazonaws.com/"
}
C:\Users\*> aws s3api list-buckets
{
"Buckets": [
{
"Name": "*-clibucket",
"CreationDate": "2024-10-30T03:05:35+00:00"
}
],
"Owner": {
"ID": ""
},
"Prefix": null
}
S3 버킷을 삭제 후 조회
https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-bucket.html
C:\Users\*> aws s3api delete-bucket --bucket *-clibucket
C:\Users\*> aws s3api list-buckets
{
"Buckets": [],
"Owner": {
"ID": ""
},
"Prefix": null
}
VPC(Vitual Private Cloud)
- 네트워크 계층
- AWS 사용자 계정 전용 가상 네트워크
- AWS 클라우드에서 다른 가상 네트워크와 논리적으로 분리
- 한 AWS 리전 안에서만 존재할 수 있고, 한 리전에 만든 VPC는 다른 리전에서는 보이지 않음 ⇒ VPC Peering
생성시 RFC 1918에 지정된 프라이빗 주소 체계 사용을 권고
- 10.0.0.0/8 => 10.0.0.0 ~ 10.255.255.255
- 172.16.0.0/12 => 172.16.0.0 ~ 172.31.255.255
- 192.168.0.0/16 => 192.168.0.0 ~ 192.168.255,255
참조 ⇒ https://aws.amazon.com/ko/what-is/cidr/
VPC 구성 옵션
https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/create-vpc-options.html
- 가용 영역(AZ) - AWS 리전에 중복 전원, 네트워킹 및 연결이 있는 하나 이상의 개별 데이터 센터
- CIDR 블록 - VPC와 서브넷의 IP 주소 범위를 지정
- DNS 옵션 - 서브넷에서 시작된 EC2 인스턴스의 퍼블릭 IPv4 DNS 호스트 이름이 필요한 경우, DNS 호스트 이름 활성화 및 DNS 확인 활성화 옵션을 활성화
- 인터넷 게이트웨이(IGW) - VPC의 서브넷에 속한 인스턴스에 대해 인터넷 송수신 액세스를 활성화
- 이름 - VPC 이름
- NAT 게이트웨이 - 클라우드 플랫폼 내부에 있는 여러 대의 비공인 IP를 가진 고객의 서버가 공인 IP 주소를 가진 외부 서버와 통신할 수 있도록 연결하는 NAT 서비스
- 라우팅 테이블 - 서브넷 또는 게이트웨이의 네트워크 트래픽이 전송되는 위치를 결정하는 라우팅 규칙 집합
- 서브넷 - VPC의 IP 주소 범위로, 특정 서브넷에 AWS 리소스를 생성할 수 있음
- Tenancy - VPC로 시작하는 EC2 인스턴스가 다른 AWS 계정과 공유되는 하드웨어에서 실행되는지 아니면 사용자 전용 하드웨어에서 실행되는지를 정의
기본 VPC(default VPC)
https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/default-vpc.html
- 계정이 2013년 12월 4일 이후에 생성된 경우 각 리전에 기본 VPC가 함께 제공
- 각 가용 영역의 퍼블릭 서브넷, 인터넷 게이트웨이 및 DNS 확인 활성화 설정과 함께 제공
~~~~~~~~~~~~~
인터넷 게이트웨이로의 라이팅이 포함된 서브넷 = 인터넷과 연결이 가능한 서브넷
기본 VPC 구성 요소
- 크기가 /16 IPv4 CIDR 블록(172.31.0.0/16)인 VPC를 생성 ⇒ 최대 65,536개(2^16)의 프라이빗 IPv4 주소를 제공
- 각 가용 영역에 크기가 /20 기본 서브넷을 생성 ⇒ 서브넷당 최대 4,096개(2^12)의 주소를 제공하며 그 중 일부(5개)는 예약
- 인터넷 게이트웨이를 생성하고 기본 VPC에 연결
- 모든 트래픽(0.0.0.0/0)이 인터넷 게이트웨이를 가리키는 경로를 기본 라우팅 테이블에 추가
- 기본 보안 그룹을 생성하고 이를 기본 VPC와 연결
- 기본 네트워크 ACL(액세스 제어 목록)을 생성하고 이를 기본 VPC와 연결
- AWS 계정에 설정된 기본 DHCP 옵션을 기본 VPC와 연결
서브넷(subnet)
- VPC 내 논리 컨테이너
- EC2 인스턴스를 배치하는 장소 = 인스턴스는 서브넷 안에 위치
한번 서브넷에 인스턴스를 생성하면 다른 서브넷으로 옮길 수 없음
인스턴스를 종료하고 다른 서브넷에 새 인스턴스를 만들 수는 있음
- 인스턴스를 서로 격리하고, 인스턴스 간의 트랙픽 흐름을 제어하고, 인스턴스를 기능별로 묶을 수 있음
- 서브넷은 하나의 가용 영역 내에서만 존재할 수 있음
- 서브넷 CIDR 블록
- VPC의 일부, VPC 내에서는 유니크해야 함
- 모든 서브넷에서 처음 4개의 IP와 마지막 1개는 예약되어 있으므로 인스턴스에 할당할 수 없음
- 예 : 서브넷 CIDR이 172.16.100.0/24인 경우
172.16.100.0 ~ 172.16.100.3
172.16.100.255
10.0.0.0 네트워크 주소
10.0.0.1 AWS에서 VPC 라우터용으로 예약
10.0.0.2 DNS 서버 주소
10.0.0.3 AWS에서 나중에 사용하려고 예약
10.0.0.255 네트워크 브로드캐스트 주소
- 퍼블릿 서브넷: 서브넷이 인터넷 게이트웨이로 향하는 라우팅이 있는 라우팅 테이블과 연결된 경우
- 프라이빗 서브넷: 서브넷이 인터넷 게이트웨이로 향하는 라우팅이 없는 라우팅 테이블과 연결된 경우
ENI(Elastic Network Interface: 탄력적 네트워크 인터페이스)
- 물리 서버의 네트워크 인터페이스와 같은 기능을 수행
- VPC에서 가상 네트워크 카드를 나타내는 논리적 네트워킹 구성 요소
인터넷 게이트웨이(igw)
- 퍼블릭 IP 주소를 갖는 인스턴스가 인터넷에 연결할 수 있도록 기능을 제공
- 처음 VPC를 만들면 인터넷 게이트웨이가 연결되어 있지 않으므로, 직접 인터넷 게이트웨이를 만들고 VPC와 연결해야 함
- 하나의 VPC는 하나의 인터넷 게이트웨이만 연결 할 수 있음
라우팅(routing)
- VPC의 네트워크 트래픽을 전달할 위치를 결정하는 데 사용되는 규칙
- 트래픽을 전달할 IP 주소 범위(대상 주소)와 트래픽을 전송할 게이트웨이, 네트워크 인터페이스 또는 연결(대상)을 지정
- VPC는 소프트웨어 함스로 IP 라우팅을 구현 => 사용자는 라우팅 테이블만 관리
- 라우팅 테이블 -> 라우팅 집합으로, 서브넷과 연결할 수 있음
- 기본 라우팅 테이블: VPC와 함꼐 자동으로 제공되는 라우팅 테이블
- 기본 VPC인 경우, local 및 igw로의 라우팅을 포함
- 기본 VPC인 아닌 경우, local 라우팅만 포함
예를 들어, 라우팅 테이블이 아래와 같이 정의되어 있는 경우,
--------------------------------- - --------------------
대상 주소 대상
--------------------------------- ---------------------
172.31.0.0/16 local
0.0.0.0/0 igw-xxxxxxxxx
~~~~~~~~~ ~~~~~~~~~~~~~
인터넷 상의 모든 호스트 IP를 기반 인터넷 게이트웨이
--------------------------------- ---------------------
- 192.51.100.50으로 패킷을 보낼려고 하면, …
라우팅할 위치와 가장 근접하게 일치하는 항목을 기반으로 라우팅을 처리 → 인터넷 게이트웨이로 라우팅됨⇒ 라우팅 테이블의 항목들간의 순서는 중요하지 않음
--------------------------------- ---------------------
대상 주소 대상
--------------------------------- ---------------------
10.0.0.0/16 Local
2001:db8:1234:1a00::/56 Local
172.31.0.0/16 pcx-11223344556677889
0.0.0.0/0 igw-12345678901234567
::/0 eigw-aabbccddee1122334
--------------------------------- ---------------------
- VPC(10.0.0.0/16) 내에서 라우팅되는 IPv4 트래픽은 Local 경로로 처리
- VPC(2001:db8:1234:1a00::/56) 내에서 라우팅되는 IPv6 트래픽은 Local 경로로 처리
- 172.31.0.0/16의 경로는 피어링 연결로 트래픽을 전송
- 모든 IPv4 트래픽(0.0.0.0/0)의 경로는 인터넷 게이트웨이로 트래픽을 전송 ⇒ VPC 내 그리고 피어링 연결을 통한 트래픽을 제외한 모든 IPv4 트래픽은 인터넷 게이트웨이로 라우팅
- 모든 IPv6 트래픽(::/0)의 경로는 외부 전용 인터넷 게이트웨이로 트래픽을 전송 ⇒ VPC 내 트래픽을 제외한 모든 IPv6 트래픽은 외부 전용 인터넷 게이트웨이로 라우팅
보안 그룹(sg, Security Group)
- 방화벽과 같은 기능을 제공
- 인스턴스의 ENI에서 송수신하는 트래픽을 제어
- 모든 ENI는 최소 한개 이상의 보안 그룹과 연결되어야 하고, 보안 그룹은 여러 ENI와 연결될 수 있음
- 생성할 때 보안 그룹 이름, 설명, 포함될 VPC를 지정하고, 생성 후에 인바운드, 아웃바운드 규칙을 지정 => 트래픽을 허용
- 상태 저장 방화벽 역할 => 보안 그룹이 트래픽을 한 방향으로 전달되도록 허용할 때 반대 방향의 응답 트래픽을 지능적으로 허용 (예: 웹 클라이언트에서 HTTPS로 요청을 허용했다면 요청에 대한 응답도 허용)
NACL(Network Access Control List, 네트워크 ACL)
- 보안 그룹과 유사
- 원본 또는 대상 주소 CIDR, 프로토콜, 포트를 기반으로 트래픽을 인바운드, 아웃바운드 규칙으로 제어 => 방화벽과 같은 역할
- VPC에 삭제할 수 없는 기본 NACL이 있음
- 서브넷에 연결되어 해당 서브넷과 송수신되는 트래픽을 제어
- 상태 비저장 NACL을 통과한 연결 상태를 추적하지 않음 모든 인바운드와 아웃바운드 트래픽의 허용 규칙을 별도로 작성해야 함
- 규칙을 적용할 떄 규칙 번호의 오름차순으로 처리
#!/bin/sh
이 줄은 스크립트가 sh 셸을 통해 실행되어야 한다는 것을 지정합니다.
yum -y install httpd
- yum: 패키지 관리 도구로, CentOS와 RHEL에서 패키지를 설치할 때 주로 사용합니다.
- -y: 사용자에게 설치 여부를 묻지 않고 자동으로 "Yes"를 선택해 설치를 진행합니다.
- install httpd: httpd라는 이름의 Apache HTTP 서버 패키지를 설치합니다
chkconfig httpd on
- chkconfig: 서비스의 시작 여부를 설정할 때 사용하는 명령어입니다. (현재는 systemctl로 대체된 경우가 많음)
- httpd on: 서버가 재부팅되더라도 Apache HTTP 서버가 자동으로 시작되도록 설정합니다.
systemctl start httpd
- systemctl: 시스템 서비스를 관리하는 명령어입니다.
- start httpd: Apache HTTP 서버(httpd)를 즉시 시작합니다.
--------------------------------------------------------------------------------------------------------------------------------------------------------
Bitvise SSH Client 설치 (SSH Client 프로그램이 없는 경우)
https://bitvise.com/ssh-client-download
EC2 인스턴스로 SSH 접속
키 페어 파일이 있는 곳에서 명령어를 실행
~~~~~~~~~~~~~~~~~~~~~~~~
C:\Users\ * \Downloads> ssh -*my_new_keypair.pem ec2-user@*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~ ~~~~~~~~~~~~
| | |
| | +-- 접속지 주소소
| +-- 사용자 이름 ⇒ Amazon Linux인 경우 ec2-user 기본
+-- 인스턴스 생성 시 다운로드 받은 키 페어 파일을 명시
, #_
~\_ ####_ Amazon Linux 2023
~~ \_#####\
~~ \###|
~~ \#/ ___ https://aws.amazon.com/linux/amazon-linux-2023
~~ V~' '->
~~~ /
~~._. _/
_/ _/
_/m/'
[ec2-user@ip-*~]$
~~~~~~~~ ~~~~~~~~~~~~~~
| |
| +-- 내부 IP
+-- 접속한 사용자 이름
[ec2-user@ip-*~]$ systemctl status httpd ⇐ 웹 서버가 실행되고 있는지 확인
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; preset: disabled)
Active: active (running) since Wed 2024-10-30 07:15:14 UTC; 26min ago
Docs: man:httpd.service(8)
Main PID: 3772 (httpd)
Status: "Total requests: 0; Idle/Busy workers 100/0;Requests/sec: 0; Bytes served/sec: 0 B/sec"
Tasks: 177 (limit: 1112)
Memory: 13.0M
CPU: 914ms
CGroup: /system.slice/httpd.service
├─3772 /usr/sbin/httpd -DFOREGROUND
├─3878 /usr/sbin/httpd -DFOREGROUND
├─3881 /usr/sbin/httpd -DFOREGROUND
├─3882 /usr/sbin/httpd -DFOREGROUND
└─3883 /usr/sbin/httpd -DFOREGROUND
Oct 30 07:15:14 ip-10-0-10-169.ap-northeast-2.compute.internal systemd[1]: Starting httpd.service - The Apache HT>
Oct 30 07:15:14 ip-10-0-10-169.ap-northeast-2.compute.internal systemd[1]: Started httpd.service - The Apache HTT>
Oct 30 07:15:14 ip-10-0-10-169.ap-northeast-2.compute.internal httpd[3772]: Server configured, listening on: port>
lines 1-19/19 (END)
[ec2-user@ip-* ~]$ curl http://localhost ⇐ 웹 서버의 웹 루트 디렉터리의 기본 페이지를 요청
<html><body><h1>It works!</h1></body></html>
내 PC에서 EC2 인스턴스의 80 포트로 요청을 전달
[ec2-user@ip-* ~]$ exit ⇐ SSH 연결을 종료
logout
Connection to * closed.
C:\Users\myanj\Downloads>
C:\Users\ * \Downloads> curl http:// * ⇐ 연결되지 않음 ⇒ 보안그룹에 인바운드 80 포트를
curl: (28) Failed to connect to * port 80 after 22085 ms: Could not connect to server 허용하지 않기 때문
C:\Users\ * Downloads> curl -v http:// *
* Trying * :80...
* connect to * port 80 from 0.0.0.0 port 62378 failed: Timed out
* Failed to connect to * port 80 after 21039 ms: Could not connect to server
* closing connection #0
curl: (28) Failed to connect to * port 80 after 21039 ms: Could not connect to server
내 PC에서 EC2 인스턴스의 80 포트로 요청을 전달
C:\Users\*\Downloads> curl -v http:// *
* Trying * :80... ⇐ 연결 시도
* Connected to * ( * ) port 80
> GET / HTTP/1.1 ⇐ 요청 전달
> Host: *
> User-Agent: curl/8.9.1
> Accept: */*
>
* Request completely sent off
< HTTP/1.1 403 Forbidden ⇐ 응답 수신
< Date: Wed, 30 Oct 2024 07:52:09 GMT
< Server: Apache/2.4.62 (Amazon Linux)
< Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT
< ETag: "2d-432a5e4a73a80"
< Accept-Ranges: bytes
< Content-Length: 45
< Content-Type: text/html; charset=UTF-8
<
<html><body><h1>It works!</h1></body></html> ⇐ 응답 본문
* Connection #0 to host 43.202.0.212 left intact ⇐ 연결 해제
NACL에 80 포트로 들어오는 트래픽을 거부하는 규칙을 10번으로 추가
C:\Users\*\Downloads> curl -v http:// *
* Trying * :80...
* connect to * port 80 from 0.0.0.0 port 62698 failed: Timed out
* Failed to connect to * port 80 after 21032 ms: Could not connect to server
* closing connection #0
curl: (28) Failed to connect to * port 80 after 21032 ms: Could not connect to server
NACL에 80 포트로 들어오는 트래픽을 허가하는 규칙을 20번으로 추가
C:\Users\*\Downloads> curl -v http:// *
* Trying * :80...
* connect to * port 80 from 0.0.0.0 port 62698 failed: Timed out
* Failed to connect to * port 80 after 21032 ms: Could not connect to server
* closing connection #0
curl: (28) Failed to connect to * port 80 after 21032 ms: Could not connect to server
NACL에 80 포트로 들어오는 트래픽을 허가하는 규칙을 5번으로 추가
C:\Users\*\Downloads> curl -v http:// *
* Trying * :80...
* Connected to * ( * ) port 80
> GET / HTTP/1.1
> Host: *
> User-Agent: curl/8.9.1
> Accept: */*
>
* Request completely sent off
< HTTP/1.1 403 Forbidden
< Date: Wed, 30 Oct 2024 08:04:14 GMT
< Server: Apache/2.4.62 (Amazon Linux)
< Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT
< ETag: "2d-432a5e4a73a80"
< Accept-Ranges: bytes
< Content-Length: 45
< Content-Type: text/html; charset=UTF-8
<
<html><body><h1>It works!</h1></body></html>
* Connection #0 to host * left intact