[AWS] Amazon S3 및 DynamoDB를 사용한 웹 애플리케이션 배포

vinca·2023년 11월 10일
0

Introduction

본 실습 과정은 AWS Training and Certification을 바탕으로 작성되었습니다.


사례

현재 위와 같은 구조의 필수 리소스들이 실습 지원을 위해 미리 생성되어 있다.

구성 요소

  • 퍼블릭 서브넷 2개
  • 각 퍼블릭 서브넷을 포함하는 가용 영역 2개
  • VPC
  • 인터넷 게이트웨이
  • 인터넷으로의 경로가 포함된 라우팅 테이블
  • Employee Directory 애플리케이션을 호스팅할 EC2 인스턴스

목표

Amazon DynamoDB 및 Amazon S3 버킷을 추가하여 아래와 같은 구조가 되도록 만들어보자.


웹 서버에 접속

PublicWebApplicationURL을 통해서 먼저 EC2로 띄워진 웹 서버에 접속해 보자.

이 웹 서버는 Amazon DynamoDBAmazon S3 버킷직원 사진(S3)직원의 정보(DynamoDB)를 출력하고, 관리할 수 있는 웹 페이지이다.

접속 결과

현재 Amazon DynamoDBAmazon S3 버킷이 없으므로 찾을 수 없다는 메세지가 출력되는 것을 확인할 수 있다.

S3 생성

S3 구성의 문제를 해결해보자.

이 문제를 해결하려면 S3 버킷을 생성한 후 해당 버킷에 이미지를 업로드하면 된다.

다음과 같이 생성해주도록 하자.

Copy settings from an existing bucket 옵션?
다른 버킷과 동일한 설정을 사용하는 버킷을 생성할 수 있다.
이 실습에서는 사용하지 않는다.

S3 버킷 정책 생성

현재 애플리케이션(EC2)은 직원용 이미지 버킷(S3)에 접근할 수 있는 권한이 없다.

따라서 애플리케이션(EC2)에 이미지를 표시할 수 있도록 하기 위해서 IAM 사용자가 해당 S3 버킷 액세스를 허용하는 정책을 구성해주도록 하자.


Amazon S3 👉 Bucket 👉 semployee-photo-bucket-vinca-0001 👉 Permissions
위치로 접근해준다.

Bucket policy 부분에서 EmployeeDirectoryAppRole 라는 역할을 가진 IAM 사용자가 S3에 접근이 가능하도록 정책을 구성한다.

이후 접근 가능한 리소스로는 arn:aws:s3:::employee-photo-bucket-vinca-0001 생성한 버킷의 ARN 값을 넣어준다.

이를 통해 employee-photo-bucket-vinca-0001 버킷에 EmployeeDirectoryAppRole 역할을 가진 사용자가 접근할 수 있게 되었다.

이는 S3의 리소스 기반 정책에 해당한다.
자세한 내용은 여기를 참고.

EmployeeDirectoryAppRole

EmployeeDirectoryAppRole 역할은 어떤 권한을 가지고 있는지 확인해 보자.

DirectoryWebApplicationDynamoDBPolicy
DirectoryWebApplicationSSHPolicy로 총 2개가 있는데 이 중 SSH 접속은 우리가 할일이 없으므로, 중요한 DynamoDB 쪽만 살펴 보자.

의미

  • Action : dynamodb:ListTables
    이 역할을 가진 사용자는 dynamodb:ListTables 작업을 수행할 수 있다.

  • Resource: arn:aws:dynamodb:ap-southeast-1:668206941722:table/*
    어떤 리소스?
    ap-southeast-1에 생성된 668206941722 계정의 모든 DynamoDB 테이블 리소스에 대해서

  • Effect: "Allow"
    권한을 허용한다.

아래 쪽이 짤리긴 했지만 동일하다.

Action으로 dynamodb:PutItem, dynamodb:DeleteItem, dynamodb:UpdateItem, dynamodb:Scan 와 같은 작업을 수행 가능하다는 것을 의미하고,

이러한 작업을 수행할 Resuorcearn:aws:dynamodb:ap-southeast-1:668206941722:table/Employees로 지정되어 있다.

웹에서 S3 버킷 연결

EC2 인스턴스의 퍼블릭 아이피 주소를 통해 웹으로 다시 돌아가서 S3 버킷과 연결을 해보자.


Configuration Settings에 버킷의 명을 입력하고 Save버튼을 눌러 보자.

아니? 웹에서 접속이 잘된다?
분명 나는 EmployeeDirectoryAppRole 역할을 가지는 경우, 접속이 가능하도록 했는데?

Principal": {
"AWS": "arn:aws:iam::668206941722:role/EmployeeDirectoryAppRole"
}

웹에서 접속이 가능한 이유

S3 버킷에 접속할 수 있는 권한은 분명히 이전 버킷 정책 생성 과정에서 해주었다.

하지만, EmployeeDirectoryAppRole 라는 역할을 가진 IAM 사용자가 S3에 접근이 가능하도록 정책을 구성하였을 뿐.

그 어디에도 웹 접속에 대해서 허용한 적은 없다.

웹에서 IAM 사용자로 로그인한 기억이 아무리 봐도 없다.
하지만 웹에서 S3로의 접속이 되는 아이러니한 상황..😮

이는 두가지 경우의 수를 생각해 볼 수 있다.

경우의 수

  1. 웹 페이지에 AWS 자격 증명이 저장되어 있는 경우

사용자가 웹 페이지를 통해 AWS 자격 증명을 제공하고 이 자격 증명에 EmployeeDirectoryAppRole의 권한이 부여되어 있는 경우, 사용자는 이 권한을 사용하여 S3 버킷에 액세스할 수 있다.

  1. IAM 역할이 EC2 인스턴스에 연결되어 있는 경우

IAM 역할 EmployeeDirectoryAppRole EC2 인스턴스에 연결 되었을 때는, 해당 인스턴스에서 IAM 역할을 사용하여 AWS 서비스에 액세스할 수 있다.

정답

정답은 2번 " IAM 역할이 EC2 인스턴스에 연결되어 있는 경우 " 이다. (AWS 측 답변)

이를 알아보기 위해서는 EC2 인스턴스에 접속하여 다음 명령어를 치면 EC2 인스턴스에 연결된 IAM 역할을 알 수 있다.

aws iam get-role --role-name EmployeeDirectoryAppRole

하지만 안타깝게도 이는 AWS 측에서 EC2로의 접근을 차단해 놔서 직접 확인할 수는 없었다..

버킷에 이미지 업로드

https://aws-tc-largeobjects.s3-us-west-2.amazonaws.com/ILT-TF-100-TECESS-5/app/sample-photos.zip

위 링크를 통해 이미지를 다운받고, 압축을 풀어서 S3 버킷에 추가해 주도록 하자.

웹 페이지로 돌아가 Images 탭을 확인해보면 S3버킷에 올렸던 이미지들이 출력되는 것을 확인할 수 있다.

Amazon DynamoDB 테이블 생성

Amazon DynamoDB는 대표적인 NoSQL DB이다.
따라서 Key와 value값으로 구성된다.

테이블 명과, Partition key만을 지정하고 생성해 주도록 하자.

여기서 "파티션 키(Partition Key)"는 테이블 내의 각 항목을 고유하게 식별하는 데 사용되는 필드이다.

연결 확인

IAM 역할EmployeeDirectoryAppRole은 Employee Directory 웹 애플리케이션을 호스팅하는 EC2 인스턴스에 연결되어 있는 상태이다.

따라서, EC2 웹 페이지에서 DynamoDB 테이블에 액세스할 수 있으며, 웹 브라우저에서 애플리케이션 인터페이스를 통해 DynamoDB 테이블 항목을 확인하고 추가 및 삭제할 수 있다.

추가해 보도록 하자.

추가한 결과

AWS 관리 콘솔에서 수정


관리 콘솔에서 다음과 같이 내용을 수정해보자.

다음과 같이 웹 페이지에서도 수정된 것을 확인할 수 있다.

AWS 관리 콘솔에서 생성

관리 콘솔에서 Create Item을 통해서 생성해보자.

다음과 같이 웹 페이지에서도 잘 반영되어 생성된 것을 확인할 수 있다.

profile
붉은 배 오색 딱다구리 개발자 🦃Cloud & DevOps

0개의 댓글