카테고리 없음

[DevOps] AWS S3

sumni0530 2022. 9. 21. 00:15

Amazon S3(Simple Storage Service)란? 

Amazon에서 확장성, 데이터 가용성, 보안 및 성능을 제공하는 객체 스토리지 서비스이다. 

모든 객체는 S3 버킷에 저장되며, 객체 명 앞에 접두사로 붙은 공유 이름을 사용하여 구성할 수 있다.

예를 들면, /animal/dog/sigorjabjong.jsp 객체가 있으면 /animal/dog는 공유 이름, sigorjabjong.jsp는 객체 명이다.

Amazon S3 동작 방식 - 데이터의 이동 / 저장 / 처리을 지원한다.

요금표를 기준으로 보면 S3 스토리지의 티어마다 가격이 크게 다르며, 1TB 기준으로 1~100$ 까지 다양하다. 

데이터 사용 빈도와 방식에 따라서 티어를 선택하며, 로그와 같이 장기간 보관하고 사용도가 적은 것은 1TB를 사용하는데 1$를 지불하며 사용할 수 있다.

S3에서 보장하는 성능을 활용하여 사용하는 주요 사례로는 아래와 같다.

  • 파일 및 데이터의 백업 및 복원
  • 클라우드의 데이터 저장
  • 로그 등 장기간 보관이 필요한 데이터 저장 
  • 웹 저장소
  • 데이터 레이크 구축

S3에 저장된 객체를 관리하고, 사용성을 최적화하기 위해 아래와 같이 스토리지 관련 기능을 제공한다.

또한, 객체에 대한 액세스 관리와 보안 기능을 제공하며, 데이터에 대한 쿼리 기능도 제공한다.

  • 스토리지 관리 및 모니터링
  • 스토리지 분석 및 인사이트 제공 (CloudWatch, Storage Lens)
    • 스토리지 클래스 관리를 토한 비용 최적화 가능
  • 엑세스 관리(IAM, ACL, 버킷 정책, S3 액세스 포인트, 쿼리 문자열 인증 등)
  • 보안 (VPC 엔드포인트)

 

S3 객체를 public으로 설정하기

여러 방식 중에서 액세스 포인트 변경을 통해 S3 객체를 public으로 설정해보자.

public으로 설정하고자하는 [객체 선택] - [권한] - [퍼블릭 액세스 차단 설정]을 편집한다.

[모든 퍼블릭 액세스 차단] 체크 박스를 모두 해제하여 임의의 사용자가 접근할 수 있도록 액세를 허용한다.

 

 

S3 객체를 웹 스토리지로 사용하기

웹 호스팅을 위해서 [호스팅 기능 활성화]와 [public bucket 만들기]를 수행해야한다. 

 

호스팅 기능 활성화는 [버킷 선택] - [속성] - [웹 사이트 호스팅] 편집을 통해 웹호스팅 기능을 활성화한다.

 

버킷을 public으로 만들기 위해서는 버킷 정책을 통해 수행할 수 있다. 

수행 전 [버킷 선택] - [권한]에서 퍼블릭 엑세스 차단이 해제되었는지 확인하여 버킷의 액세스를 확인한다.

이후 [버킷 정책]에서 편집을 누르고 버킷 정책을 편집한다. 아래 나와있는 부분 중 Resource는 public으로 만들고 싶은 버킷을 이름을 정확히 입력해야 한다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::Bucket-Name/*"
            ]
        }
    ]
}

 

EC2에서 S3 CLI 사용하기

CLI(Command Line Interface)를 사용하기 위해서는 EC2 인스턴스에 awscli를 설치해야하고, aws 접속 설정을 한다. 

### aswcli 설치
sudo apt install awscli

### awscli 설정
aws configure
Access Key: 입력하지 않음
Secret Access Key: 입력하지 않음
region: ap-northeast-2
format: json

이후 명령어를 통 동작 확인을 하면 정상적으로 표시가 되지 않는데, EC2의 권한 설정을 하지 않아서 발생하는 것이다.

$ aws s3 ls
Unable to locate credentials. You can configure credentials by running "aws configure".

 

EC2 Role 생성

IAM 서비스에서 IAM 역할을 추가로 생성한다. 역할 추가 시에 IAM에 대한 권한이 있는 계정 혹은 역할을 획득해야 한다.

생성 정보는 아래를 참고한다.

  • 신뢰할 수 있는 엔터티 : AWS 서비스
  • 사용 사례 : EC2
  • 권한 정책 : AmazonS3FullAccess 선택

EC2 생성 게정에서 [EC2 서비스] - [인스턴스 선택] - [작업] - [보안] - [iAM 역할 수정]을 눌러 위에서 생성한 역할을 연결한다.

IAM 역할 연결 시에도 IAM 권한이 필요하기 때문에 EC2 생성 계정에서 SwitchRole을 사용한다.

 

이후에는 정상적으로 cli를 사용할 수 있다.

awscli 관련해서는 아래 참고 자료를 확인해서 필요한 명령어를 사용하면 된다.

 

 

 

AWS CLI

EC2에 awscli가 설치되었다면 명령어를 통해 인스턴스 정보를 확인할 수 있다. 

클라우드 플랫폼에서 인스턴스에 메타데이터를 제공하기 위한 내부 주소인 169.254.169.254를 사용한다. 

# 인스턴스 id를 확인 명령어 
~$ curl 169.254.169.254/latest/meta-data/instance-id
i-123add21345f

 

접속한 인스턴스의 계정 설정을 위해 aws configure 명령어를 사용한다.

콘솔에서 등록한 Access key / Secret Access Key를 입력한다. IAM 콘솔에서 [사용자] - [보안자격] - [액세스키] - [액세스 키 만들기]를 통해 생성한 값을 입력한다. 리전과 포맷도 설정할 수 있다.

~$ aws configure
AWS Access Key ID [None]:
AWS Secret Access Key[None]:
Default region name [ap-northeast-2]:
Default output format [json]:

설정된 값은 ~/.aws/configure 파일에 default 값으로 등록된다. 

인스턴스에  권한이 없다면,  role을 생성 후에 해당 인스턴스에 부여한다. 역할을 수정하기 위해선 현재 계정이 IAM 권한이 필요하기 때문에 없다면 switch role을 사용하여 IAM 권한이 있는 사용자에서 수행한다. 부여하는 방법은 [인스턴스] - [작업] - [인스턴스 설정] -[보안] - [IAM 역할 수정]에서 생성한 role을 선택한다. 

 

기본 계정 이외에 역할을 추가로 설정하려면 profile 옵션을 사용며, profile 옵션 뒤 생성할 계정/역할 이름을 지정한다.

aws configure --profile admin

역할은 별도의 키 지정이 불필요하기 때문에 key 값은 입력하지 않으며, role_arn과 source_profile을 설정 파일에 직접 입력해준다.

vim ~/.aws/configure


# configure 설정 파일
[default]
region = ap-northeast-2
output = json
[profile honux]
region = ap-northeast-2
output = json
[profile admin]
region = ap-northeast-2
output = json
# 추가해야되는 부분 
role = arn = arn:aws:iam::1238912498:role/honux-admin
source_profile = honux

 

role을 사용하여 aws cli를 사용하려면 생성과 마찬가지로 profile 옵션과 역할 이름을 붙여서 사용한다.

# 사용자 계정으로 iam cli 사용시 에러 발생 
aws iam list-users
An error occuredd (AccessDenied) ~ 

# iam 권한이 부여된 역할 사용
aws iam list-users --profile admin
{
	"Users": ~
}

 

참고 자료

https://aws.amazon.com/ko/s3/?nc=sn&loc=1

https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/cli-services-s3-commands.html