AWS EC2 ~ IAM (23/03/20)

nazzzo·2023년 3월 20일
0

AWS EC2


EC2는 아마존 웹서비스 중에서 가장 기본적인 배포 방식 중 하나입니다

AWS에는 두 종류의 계정이 존재합니다

- 루트 계정 : AWS의 주인 계정입니다
- IAM 사용자 계정 : 루트 계정을 통해 생성할 수 있는  서브 계정입니다 (루트 사용자가 권한 제어)

IAM은 Identity and Access Management의 약자입니다

그리고 앞으로의 배포 작업은 루트 계정 대신 IAM 계정을 통해 진행하도록 하겠습니다



1. IAM

사이트 상단 검색창을 통해서 IAM 서비스에 접속할 수 있습니다


IAM 서비스창이 열리면 사용자 탭에서 IAM 계정 생성이 가능합니다


사용할 계정명을 적고 다음 버튼을 클릭


그룹은 여러 사용자 계정을 그룹화하여 권한을 좀 더 편리하게 관리하기 위한 옵션

여기서는 우선 직접 정책 연결을 선택하겠습니다


ec2 검색 → AmazonEC2FullAccess 체크 → 다음 버튼 클릭


사용자 생성버튼을 누르면 계정이 생성됩니다
(사용자 계정을 생성한 뒤에도 권한 설정을 원하는대로 변경 가능!)



계정 생성을 마쳤으면 다음으로 보안 자격 증명 탭을 클릭합니다

여기서는 우상단의 콘솔 액세스 활성화 버튼과 하단의 액세스 키에 주목


    1. 콘솔 로그인 : 우상단의 콘솔 액세스 활성화 버튼을 눌러서 사용자 지정 암호를 적용합니다

생성된 콘솔 로그인 링크를 클릭하면 IAM 계정으로 AWS에 접속할 수 있습니다
(루트 사용자는 자동으로 접속 해제)


    1. 액세스 키 : 관리자용 서버(DB 등)에 액세스 키를 가진 사람들만 접속이 가능하도록 합니다

CLI(첫번째) 옵션을 선택합니다


csv 파일은 절대 깃헙에 업로드하는 일이 없도록 엄중 보관할 것!




2. AWS CLI


AWS는 CLI 환경에서도 접속해서 사용할 수 있습니다

먼저 아래 링크를 클릭합니다

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


AWS CLI 설치 및 업데이트 지침 란에서 사용중인 OS 환경에 따라 탭을 클릭합니다
(윈도우 사용자라면 리눅스가 아닌 윈도우탭을 열어서 확인)


  • for Mac
// GUI Installer
curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg AWSCLIV2.pkg -target /


아래는 설치 상태 확인을 위한 명령어입니다

aws --version
// aws-cli/2.11.4 Python/3.11.2 Darwin/22.3.0 exe/x86_64 prompt/off



2-1. CLI로 인스턴스 생성하기


AWS CLI 기본 설정

*먼저 다운로드 받은 csv 파일을 확인해야 합니다


// CLI 설정 진입 명령어
aws configure

AWS Access Key ID [None]: ****
AWS Secret Access Key [None]: ****
Default region name [None]: ap-northeast-2    
Default output format [None]: json


// 설정 완료 후 확인을 위한 명령어
aws configure list

keypair 생성

// keysample은 키페어명입니다
aws ec2 create-key-pair --key-name keysample --query 'KeyMaterial' --output text > [저장할 파일 이름].pem

현재 디렉토리에 키페어 파일이 생성됩니다
+) 키페어명과 저장될 파일명은 달라도 괜찮습니다
+) 만약 지금까지의 설정에 오류가 있다면 생성 실패


  • 권한 설정 ~ forMac
// 만약 아래와 같은 에러 메세지가 뜬다면

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'xxx.pem' are too open.


chmod 400 [키페어 파일명].pem
// change mod 400 ~ 유저에게만 읽기 권한이 있고 그 외는 권한이 없는 상태를 뜻합니다

  • 생성된 키페어를 확인하려면
aws ec2 describe-key-pairs
  • 키페어 삭제 명령어
aws ec2 delete-key-pair --key-name keysample



2-2. 보안 그룹 설정 ~ 방화벽


1. 그룹 생성

aws ec2 create-security-group --group-name front-end-sg --description "front-sg"

// 그룹 아이디(식별자)가 출력됩니다
{
    "GroupId": "sg-039684fc62f2924d3"
}

2. 그룹 규칙 생성

현재 아웃바운드 규칙은 모두에게 허용으로 기본세팅값이 설정되어 있지만
인바운드 규칙은 비어있습니다


// 22번 포트 인바운드 규칙 생성
aws ec2 authorize-security-group-ingress --group-id [그룹 아이디] --protocol tcp --port 22 --cidr 0.0.0.0/0

// 80번 포트 인바운드 규칙 생성
aws ec2 authorize-security-group-ingress --group-id [그룹 아이디] --protocol tcp --port 80 --cidr 0.0.0.0/0

+) 그룹 삭제 명령어

aws ec2 delete-security-group --group-id front-end-sg --group-id [그룹 아이디]

3. EC2 인스턴스 생성

aws ec2 run-instances --image-id ami-0e735aba742568824 --count 1 --instance-type t2.micro --key-name keysample --security-group-ids sg-039684fc62f2924d3

// --image-id ami-0e735aba742568824 (OS ~ Ubunto)
// --count 1 (생성할 인스턴스 수)
// --instance-type t2.micro
// --key-name keysample
// --security-group-ids sg-039684fc62f2924d3




// 실행
{
    "Groups": [],
    "Instances": [
        {
            "AmiLaunchIndex": 0,
            "ImageId": "ami-0e735aba742568824",
            "InstanceId": "i-08421d7026e62a6eb",
            "InstanceType": "t2.micro",
            "KeyName": "keysample",
...
}

*여기까지의 모든 진행 과정은 AWS 콘솔에서도 그때그때 확인 가능


// 키페어 생성
aws ec2 create-key-pair --key-name frontend --query 'KeyMaterial' --query 'KeyMaterial' --output text > frontend.pem
sudo chmod 400 frontend.pem


// 보안 그룹
aws ec2 create-security-group --group-name frontend-sg --description "frontend-sg" --output text --query 'GroupId'


// 인바운드 설정
// group id ~ sg-000732c6cd684ea09
aws ec2 authorize-security-group-ingress --group-id sg-000732c6cd684ea09 --protocol tcp --port 22 --cidr 0.0.0.0/0

aws ec2 authorize-security-group-ingress --group-id sg-000732c6cd684ea09 --protocol tcp --port 80 --cidr 0.0.0.0/0

aws ec2 authorize-security-group-ingress --group-id sg-000732c6cd684ea09 --protocol tcp --port 443 --cidr 0.0.0.0/0

aws ec2 authorize-security-group-ingress --group-id sg-000732c6cd684ea09 --protocol tcp --port 3306 --cidr 0.0.0.0/0


// 인스턴스 생성
aws ec2 run-instances --image-id ami-0e735aba742568824 --count 1 --instance-type t2.micro --key-name frontend --security-group-ids sg-000732c6cd684ea09 --output text --query 'Instances[0].instanceId'


// 확인
aws ec2 describe-instances --instance-ids i-008bb3f67a4030ab7 --query 'Reservations[*].Instances[*].PublicDnsName' --output text


// ec2-52-78-181-122.ap-northeast-2.compute.amazonaws.com
// 원격 접속
ssh -i frontend.pem ubuntu@ec2-52-78-181-122.ap-northeast-2.compute.amazonaws.com

0개의 댓글