본문 바로가기
클라우드 서버/AWS

[AWS EC2]AWS CLI를 사용하여 EC2에서 DynamoDB에 안전하게 액세스하는 방법

by 보안매크로 2024. 6. 30.
728x90

DynamoDB란 무엇입니까?

이는 서버리스인 AWS 서비스입니다. 즉, AWS에서 완전히 관리하고 내결함성이 있음을 의미합니다. 유연한 스키마를 허용하고 데이터가 제대로 구조화되지 않았거나 예측할 수 없는 경우에 적합한 이름/값 저장소가 있는 NoSQL 유형의 데이터베이스입니다. AWS는 백엔드의 파티션 전체에서 데이터베이스를 실제로 확장하는 방법을 관리합니다. 데이터는 한 지역의 여러 AZ에 걸쳐 복제된 파티션에 저장됩니다. 마이크로초 지연 시간이 필요한 경우 DynamoDB Accelerator(DAX)를 사용하여 이를 달성할 수 있습니다.

EC2란 무엇입니까?

Amazon Elastic Compute Cloud(Amazon EC2)는 클라우드에서 확장 가능한 온디맨드 컴퓨팅 리소스를 제공하는 핵심 서비스입니다. 이를 통해 사용자는 특정 요구 사항을 충족할 수 있는 유연성을 갖춘 인스턴스라고 하는 가상 서버를 프로비저닝할 수 있습니다. EC2는 인스턴스의 빠른 시작, 보안 조치 구성, 네트워킹 관리를 지원하여 하드웨어 비용을 줄이고 애플리케이션 개발을 가속화합니다.

AWS IAM 역할이란 무엇입니까?

AWS Identity and Access Management(IAM) 역할을 통해 Amazon EC2 애플리케이션은 AWS에서 자동으로 생성하고 관리하는 임시 보안 자격 증명을 활용할 수 있습니다. 임시 자격 증명을 사용하면 EC2 인스턴스에 장기 키가 필요하지 않으므로 IAM에서 권장됩니다. 또한 EC2의 IAM 역할은 장기 AWS 액세스 키를 수동으로 관리해야 하는 요구 사항을 제거합니다. 이제 기존 EC2 인스턴스에 IAM 역할을 연결하여 애플리케이션이 AWS의 임시 보안 자격 증명에 액세스하도록 권한을 부여할 수 있습니다. 또한 기존 EC2 인스턴스와 연결된 IAM 역할을 교체하여 AWS 리소스에 대한 액세스를 관리하는 데 유연성과 보안을 제공할 수 있습니다.

사용 사례

LUIT Media Inc.는 영화, TV 프로그램 및 기타 엔터테인먼트 콘텐츠를 제작하여 전 세계 소비자에게 배포하는 미디어 제작 및 배포 회사입니다. 회사는 AWS DynamoDB를 사용하여 미디어 콘텐츠 데이터를 저장하고 관리하기로 결정했습니다. DynamoDB 테이블에 대한 보안 액세스를 보장하기 위해 회사는 t.2micro EC2 인스턴스를 생성하고 MediaCatalog 데이터베이스를 읽는 데 필요한 최소한의 권한이 있는 IAM 역할로 이를 구성합니다. 이렇게 하면 권한이 있는 사용자만 테이블의 데이터에 액세스할 수 있으며, 테이블 데이터가 무단으로 수정될 위험이 없습니다.

목표

  1. 최신 영화 릴리스에 대한 DynamoDB 테이블 생성
  2. t.2micro Ec2 인스턴스 생성
  3. IAM 역할과 최소 권한 원칙을 사용하여 EC2 인스턴스에 DynamoDB에 대한 읽기 액세스 권한을 부여합니다.
  4. EC2 인스턴스에서 AWS CLI를 사용하여 DynamoDB 테이블 스캔
  5. EC2 인스턴스에서 AWS CLI를 사용하여 DynamoDB 테이블에 항목을 쓸 수 없는지 확인합니다.
  6. 발전: AWS CLI에서 목표를 달성합니다.

DynamoDB 테이블 생성

  1. DynamoDB>테이블>테이블 생성 으로 이동하여 테이블 이름, 파티션 키, 정렬 키를 입력합니다.

2. 테이블 설정에서 기본 설정을 선택합니다. 테이블 생성 버튼을 클릭합니다 .

3. 테이블>탐색기 항목>최신 영화>항목 만들기 버튼을 클릭합니다 .

4. 파티션 키 및 정렬 키에 대한 값을 입력합니다. 그런 다음 새 속성 추가>문자열을 클릭하여 항목을 추가합니다 .

5. 항목에 대한 속성 추가를 완료했으면 항목 생성 버튼을 클릭합니다. 항목 생성 버튼을 클릭하면 더 많은 항목을 추가할 수 있습니다.

성공!!!

EC2 인스턴스 생성

t.2micro EC2 인스턴스를 생성하고 최소 권한 원칙을 적용하여 EC2 인스턴스에 DynamoDB에 대한 읽기 전용 액세스 권한을 부여합니다.

  1. EC2 > 인스턴스 > 인스턴스 시작 으로 이동하여 인스턴스 이름을 지정하고 Amazon Linux 2 AMI 및 t2.micro 인스턴스 유형을 선택합니다. 키 쌍을 추가하세요.
  2. 네트워크 설정 아래에서 편집 버튼을 클릭합니다 . 보안 그룹 아래에서 보안 그룹 생성을 클릭한 다음 이름을 MovieRelease로 지정하고 설명을 입력합니다. 인스턴스 시작 버튼을 클릭합니다 .

IAM 역할 생성

이제 EC2 인스턴스를 생성했으며 역할을 생성하여 읽기 전용 권한을 부여해야 합니다.

  1. IAM > 역할 로 이동하여 역할 생성 버튼을 클릭합니다 .
  2. 신뢰할 수 있는 엔터티 유형으로 AWS 서비스를 선택하고 서비스로 EC2를 선택합니다. 다음 버튼을 클릭하세요.

3. 검색 상자에 'Dynamo'를 입력하고 AmazonDynamoDBReadOnlyAccess를 선택합니다 . 다음 버튼을 클릭하세요 .

4. 역할 이름과 설명을 입력하고 역할 생성 버튼을 클릭합니다.

EC2 인스턴스에 IAM 역할 연결

EC2 > 인스턴스로 이동한 다음 작업> Security > IAM 역할 수정을 클릭합니다. IAM 역할을 선택하고 IAM 역할 업데이트 버튼을 클릭합니다.

테이블 데이터가 무단으로 수정될 위험이 없도록 EC2 인스턴스에서 AWS CLI를 사용하여 데이터베이스 테이블에 대한 읽기 전용 권한을 확인하는 시간입니다.

  1. EC2>인스턴스 로 이동하여 MoviesReleases 인스턴스를 선택하고 연결 버튼을 클릭하세요.
  2. EC2 Instance Connect 탭을 클릭 하고 Connect 버튼을 클릭합니다.

아래 명령을 실행하고 테이블을 스캔할 수 있고 총 개수가 10인지 확인합니다.

aws dynamodb 스캔 --table-name 최신 영화 --region us-east- 1

또한 아래 명령을 사용하여 특정 항목을 검색할 수도 있습니다.

aws dynamodb 스캔 --table-name RecentMovies --filter-expression "Title = :username" --expression-attribute-values ​​'{ ":username": { "S":"LUIT Seven" }}'

쿼리는 어떻습니까? 스캔과 쿼리의 차이점은 무엇입니까? 테이블 스캔에는 테이블의 모든 항목을 검사하는 작업이 포함되므로 효율성이 떨어집니다. 반면 쿼리는 스캔보다 효율적이며 파티션 키 또는 파티션 키와 정렬 키의 조합을 기반으로 특정 항목을 검색하려는 경우에 적합합니다. 쿼리는 제공된 키 조건을 기반으로 필요한 항목에 직접 액세스하므로 성능이 뛰어납니다.

이번에는 쿼리를 시도해 보겠습니다. 아래 명령을 실행하세요. 총 스캔 횟수가 1임을 나타냅니다.

aws dynamodb 쿼리 --table-name RecentMovies --key-condition-expression "Title = :name" --expression-attribute-values ​​'{":name":{"S":"LUIT Eight"}}'

2. 이제 쓰기 권한이 있는지 확인하기 위해 테이블에 항목을 작성해 보겠습니다. 할당된 역할에 읽기 전용 권한을 할당했기 때문에 항목을 추가할 수 없습니다. 아래 명령을 실행하세요. 사용자가 PutItem 작업을 수행할 권한이 없다는 오류 메시지가 표시되는 것을 확인했습니다.

aws dynamodb put-item --table-name RecentMovies --item '{"Title": {"S": "LUIT Eleven"}, "ReleaseDate": {"S": "11/11/2023"}, " 장르": {"S": "미스터리"},"등급": {"S": "5"}}' --region us-east-1
 

고급: DynamoDB 및 EC2를 생성하고 AWS CLI에서 IAM 역할을 연결합니다.

DynamDB 생성 및 항목 일괄 쓰기

  1. 아래 create-table 명령을 실행하여 DyanmoDB 테이블을 생성한 후, aws dynamodb describe-table --table-name LatestMovies | grep TableStatus명령을 실행하여 상태를 확인합니다. 또한 DaynamoDB> Tables를 방문하시면 통계를 확인하실 수 있습니다.
aws dynamodb 생성 - 테이블 \ 
    --table-name RecentMovies \ 
    --attribute-definitions \
         AttributeName = Title,AttributeType = S \ 
        AttributeName = ReleaseDate,AttributeType = S \ 
    --key-schema \
         AttributeName = Title,KeyType = HASH \ 
        AttributeName = ReleaseDate,KeyType = RANGE \ 
    --provisioned-throughput \
         ReadCapacityUnits = 5 ,WriteCapacityUnits = 5 \ 
    --table-class STANDARD
활성 테이블 상태
DynamDB > 테이블

2. aws dynamodb batch-write-item-request-items file://latestmovie.json명령을 실행하여 DynamoDB 테이블에 최신 영화 10개를 추가합니다.

EC2 생성

  1. 이미지 ID, 인스턴스 유형, 키 이름, 보안 그룹 ID, 서브넷 ID를 수집합니다. 그런 다음 아래 명령을 실행하십시오.
aws ec2 run-instances --image-id ami- 01 c647eace872fc02 --count  1  --instance-type t2 .micro  --key-name LauraFinal --security-group-ids sg- 08 f89cbc621ab4361 --subnet-id subnet- 0 c52c705a4d00d82c

IAM 역할을 생성하고 이를 EC2에 연결합니다.

  1. 역할을 생성하고 아래 명령을 실행하여 EC2가 IAM 역할을 맡을 수 있도록 신뢰 정책을 추가합니다.
aws iam create-role --role-name DynamoDBReadOnlyRole --assume-role-policy-document file://EC2DynamoDBReadOnlyRole-Trust-Policy.json

2. 아래 명령을 실행하여 생성한 역할에 역할 정책을 연결합니다.

aws iam Attach-role-policy --role-name DynamoDBReadOnlyRole --policy-arn arn:aws:iam::aws:policy/AmazonDynamoDBReadOnlyAccess

3. 아래 명령을 실행하여 인스턴스 프로파일을 생성합니다.

aws iam create -instance-profile --instance-profile-name LUITEC2DynamoReadOnl
 y

테이블을 스캔하여 DynamoDB 테이블인 EC2를 생성했는지 확인하고 읽기 전용 권한을 연결해 보겠습니다. 아래 명령을 실행하세요. 이야! 성공!

aws dynamodb 스캔 --테이블 이름 최신 영화
에프

축하해요! EC2에서 DynamoDB 테이블에 성공적으로 액세스했습니다.

출처: https://aws.plainenglish.io/create-dynamodb-and-ec2-from-aws-cli-with-read-only-permission-d81a69ff1197

728x90