AWS세팅 (보안그룹추가 / ECR / ECS / IAM)

StrayCat·2026년 3월 15일

1. AWS 보안그룹 추가

우선 AWS에 가입하고, 결제정보 등록하고, 무료버전 선택 후 AWS 콘솔에 접속한다

한국이면 서버는 아시아태평양 - 서울로 해주자

검색창에 ec2를 검색해서 먼저 들어가주자

들어오면 좌측 메뉴에 보안 그룹이 보일 것이다
들어가자

보안그룹 하나가 생겨있는 것을 볼 수 있다

보안그룹에 들어가면 인바운드 / 아웃바운드 규칙 2개의 탭이 보인다

AWS EC2 (Elastic Compute Cloud)
AWS가 제공하는 클라우드 가상 서버 서비스다. 물리적 서버를 직접 구매하지 않고, 필요한 만큼 빌려 쓰는 방식이다. 스펙 조절, 생성/삭제가 자유로워 서버 인프라를 유연하게 운영할 수 있다.

인바운드 규칙 (Inbound Rule)
외부 → EC2 서버로 들어오는 트래픽을 제어한다. 예: 포트 22(SSH) 허용, 포트 8080(HTTP) 허용 등. 명시적으로 허용하지 않으면 기본 차단이다.

아웃바운드 규칙 (Outbound Rule)
EC2 서버 → 외부로 나가는 트래픽을 제어한다. 기본값은 모든 외부 통신 허용이다. 보안을 강화할 경우 특정 IP/포트만 허용하도록 제한할 수 있다.

우리는 인바운드 규칙을 편집해줄거다. 클릭

규칙 추가를 눌러서 새로운 인바운드규칙을 생성해주자

80포트 / 0.0.0.0/0 설정해주자

TCP 포트 80번을 모든 IP(0.0.0.0/0)에서 접근 허용한다는 의미다.

항목의미
유형사용자 지정 TCPTCP 프로토콜로 직접 포트 지정
포트80HTTP 기본 포트
소스0.0.0.0/0전세계 모든 IP 허용

포트 80은 일반 HTTP 웹 서버 포트다. 즉, "누구든 이 서버의 웹 페이지에 접근할 수 있다" 는 설정이다.
노란 경고 메시지도 바로 그 이유 때문에 뜨는 것으로, 0.0.0.0/0은 보안상 열린 설정이므로, 공개 웹 서버가 아닌 경우엔 특정 IP만 허용하는 것이 권장된다.

실무에서는 80포트 대신 443(HTTPS) 을 주로 쓰고, 80은 443으로 리다이렉트용으로만 여는 경우가 많다.

8080 포트도 모든 IP로 받도록 인바운드 규칙을 만들어주자


2. ECR 세팅

AWS ECR (Elastic Container Registry)

Docker 이미지를 저장하고 관리하는 AWS 전용 컨테이너 이미지 저장소다.

Docker Hub와 동일한 역할이지만, AWS 생태계 안에서 동작한다는 점이 다르다.

EC2, ECS, EKS 등 AWS 서비스와 IAM 인증 기반으로 자연스럽게 연동된다.

이미지 취약점 스캔, 버전 관리, 암호화 등 보안 기능도 기본 제공된다.

CI/CD 파이프라인에서 빌드한 이미지를 ECR에 push하고, 배포 시 pull하는 흐름으로 많이 사용된다.

"AWS 전용 Docker Hub" 라고 생각하면 된다.

상단 검색에서 ECR 검색 후 이동 (Elastic Container Registry)

리포지토리 생성을 클릭해주자

이런 창이 뜰 것이다. 리포지토리 이름을 설정해주어야 하는데 이 이름은

전에 만든 깃랩의 그룹과 프로젝트명과 일치시켜준다

입력을 마쳤으면 하단에 생성을 클릭해서 생성해준다

생성된것을 확인할 수 있다

리포지토리에 들어가보자

처음엔 아무것도 없다 (이미지를 올리지 않았기 때문에)
오른쪽에 있는 '푸시 명령 보기'를 클릭해보면

이런식으로 운영체제별로 어떻게 사용해야 하는지 친절히 설명해준다


3. ECS 세팅

AWS ECS (Elastic Container Service)

Docker 컨테이너를 AWS 위에서 실행하고 관리해주는 컨테이너 오케스트레이션(orchestration, 컨테이너의 배포·실행·확장을 자동으로 조율하는 것) 서비스다. ECR에서 이미지를 가져와 컨테이너를 실행하는 역할을 담당한다.

서버를 직접 관리하는 EC2 모드와, 서버 관리 없이 컨테이너만 실행하는 Fargate 모드 두 가지 방식을 지원한다.

컨테이너가 죽으면 자동으로 재시작하고, 트래픽에 따라 컨테이너 수를 자동으로 늘리거나 줄이는 오토 스케일링(Auto Scaling) 도 지원한다.

Kubernetes(K8s)보다 러닝커브가 낮아, AWS 환경에서 컨테이너를 처음 도입할 때 많이 선택된다.

ECS도 세팅해보자


3-1. 클러스터 세팅

전과 동일하게 ECS 검색 후 들어가주자

좌측 클러스터로 들어가주자

ECS 클러스터란?

ECS에서 컨테이너들을 실행하는 논리적인 그룹 단위다.

쉽게 말해, 컨테이너들이 돌아가는 "운동장" 같은 개념이다. 실제 컨테이너가 클러스터 안에서 실행되며, EC2 모드라면 그 운동장 안에 EC2 서버들이 들어오고, Fargate 모드라면 서버 없이 AWS가 알아서 처리한다.

클러스터 (Cluster)         ← 전체 운동장
 └── 서비스 (Service)      ← 특정 앱을 몇 개 유지할지 관리
      └── 태스크 (Task)    ← 실제 실행 중인 컨테이너 묶음

클러스터 생성을 눌러서 클러스터를 만들어보자

이름과 네임스페이스를 적어주고 생성해주자

로딩이 돌아가는 모습을 볼 수 있다

나는 오류가 발생해서 AWS CLI 통해서 수동 커맨드를 입력해주어야 한다


3-2. AWS CLI 설치 및 권한설정

https://awscli.amazonaws.com/AWSCLIV2.msi

해당 링크로 AWS CLI 프로그램을 설치해주자

이후 터미널을 열고

C:\Users\User>aws --version
aws-cli/2.34.9 Python/3.13.11 Windows/11 exe/AMD64

버전이 뜨면 설치가 잘 된것이다

다음은 자격증명(Credentials)설정을 해주자

aws configure

를 입력하면 아래 4가지를 순서대로 묻는다

AWS Access Key ID     : 발급받은 키 입력
AWS Secret Access Key : 발급받은 시크릿 키 입력
Default region name   : ap-northeast-2
Default output format : json

Access Key가 없다면?

AWS 콘솔 → IAM → 사용자 → 본인 계정
→ 보안 자격 증명 탭
→ 액세스 키 만들기

AccessKey를 먼저 발급받아보자

aws 콘솔에서 우측 상단 아이디 클릭 > 보안 자격 증명 클릭

중간 액세스 키 섹션에서 엑세스 키 만들기 클릭

계속 만들기 클릭

키를 발급받을 수 있다

키를 정상적으로 받았다면 다시 터미널로 돌아가서

aws configure

이렇게 위에 적힌 순서대로 입력해주자

입력을 완료 후

aws sts get-caller-identity

해당 커맨드로 연결을 확인하면

{
    "UserId": "AIDA...",
    "Account": "123456789012",
    "Arn": "arn:aws:iam::123456789012:user/yourname"
}

이런 식으로 나오면 연결 성공이다

이제 클러스터 생성을 위한 Service Linked Role을 생성해주자

aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com

성공하면 아래처럼 출력된다

{
    "Role": {
        "RoleName": "AWSServiceRoleForECS",
        ...
    }
}

이미 존재하면 "already exists" 에러가 뜨는데, 그것도 정상이다. 그냥 넘어가면 된다.

C:\Users\User>aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com

aws: [ERROR]: An error occurred (InvalidInput) when calling the CreateServiceLinkedRole operation: Service role name AWSServiceRoleForECS has been taken in this account, please try a different suffix.

Additional error details:
Type: Sender

나는 이런 메세지가 떴는데 정상이다. 다음 과정으로 넘어가자

우선 아까 클러스터 생성 실패한 CloudFormation 스택을 삭제해주자

aws cloudformation delete-stack --stack-name Infra-ECS-Cluster-project-cluster-6465bae3
C:\Users\User>aws cloudformation delete-stack --stack-name Infra-ECS-Cluster-project-cluster-6465bae3
C:\Users\User>aws cloudformation describe-stacks --stack-name Infra-ECS-Cluster-project-cluster-6465bae3
aws: [ERROR]: An error occurred (ValidationError) when calling the DescribeStacks operation: Stack with id Infra-ECS-Cluster-project-cluster-6465bae3 does not exist
Additional error details:
Type: Sender

정상적으로 삭제 완료되었다

다시 클러스터 생성을 진행해준다

aws ecs create-cluster --cluster-name project-cluster
{
    "cluster": {
        "clusterArn": "arn:aws:ecs:ap-northeast-2:336805808295:cluster/project-cluster",
        "clusterName": "project-cluster", //생성된 클러스터 이름
        "status": "ACTIVE", // 클러스터 정상 활성화
        "registeredContainerInstancesCount": 0,
        "runningTasksCount": 0, // 아직 실행중 컨테이너 없음
        "pendingTasksCount": 0,
        "activeServicesCount": 0, // 아직 등록된 컨테이너 없음
        "statistics": [],
        "tags": [],
        "settings": [
            {
                "name": "containerInsights",
                "value": "disabled"
            }
        ],
        "capacityProviders": [],
        "defaultCapacityProviderStrategy": []
    }
}

이런식으로 응답이 오면 성공이다

클러스터에 돌아가면 클러스터가 생성된 것을 확인할 수 있다

클러스터를 생성했으니 다음은 좌측의 태스크 정의로 들어가서 태스크를 생성해보자


3-3. 태스크 생성

우측 태스크 정의 생성 > 새 태스크 정의 생성

이름을 세팅해주고

컨테이너 이름을 세팅해주자
이미지 URI는 ECR에 등록해둔 URI를 사용해주자

이렇게 카피해서 붙여준다

스프링부트 프로젝트를 8080으로 띄울거기 때문에 포트번호도 8080으로 맵핑해준다

이제 다른내용은 건드리지 않고 생성해준다

정상적으로 생성된 모습이다

다음은 서비스를 생성해보자


3-4. 서비스 생성

다시 클러스터로 돌아와서 클러스터 이름을 클릭해주자

하단 서비스 영역의 서비스 생성을 눌러주자

아까 지정했던 태스크를 패밀리로 설정해주자

서비스 이름도 설정해주자

아래 네트워크 탭을 열어보면

회원 가입후 별도 설정하지 않았다면 자동으로 서브넷과 보안그룹이 할당되어있다

로드밸런서 탭도 열어서 설정해주자

입력 완료 후 생성을 눌러주자

클러스터 처럼 시간이 걸린다

서비스 생성 프로그레스

다음은 IAM으로 액세스 관리를 해보자


4. IAM

IAM 검색해서 들어간다

좌측 사용자로 들어간다

사용자 생성을 클릭해주자

이름을 입력하고 다음으로 넘어가자

직접 정책 연결 선택

AdministratorAccess 권한 선택 후 다음

정보 확인 후 사용자 생성

사용자가 정상적으로 생성된 것을 확인할 수 있다

사용자 이름을 클릭해서 사용자 정보로 들어가보자

액세스 키 만들기를 클릭해주자

기타를 선택해주고 다음 클릭

설명태그는 비워두고 액세스 키 만들기 클릭

아까랑 비슷하게 키를 저장해주자

다음 포스팅은 깃랩 CI 파일 작성 및 PUSH다.

profile
알면 좋은 것보단 잊어버리기 싫은 것들을 기록합니다.

0개의 댓글