AWS CLI로 Amazon S3 시작하기

AWS CLI로 Amazon S3 시작하기

AWS Command Line Interface(AWS CLI)를 사용해 일반 목적 버킷과 객체로 작업하며 Amazon S3를 시작할 수 있어요. 버킷은 객체를 담는 컨테이너이고, 객체는 파일과 그 파일을 설명하는 메타데이터예요.

객체를 저장하려면 버킷을 만든 뒤 그 버킷에 객체를 업로드해요. 객체가 버킷에 들어가면 열고, 내려받고, 옮길 수 있어요.

Amazon S3는 사용한 만큼만 비용을 내요. 새 고객이라면 AWS 프리 티어로 무료로 시작할 수 있어요.

출처: 문서

본문

설정 (Setting up)

AWS CLI를 Amazon S3와 함께 사용하기 전에 다음이 있는지 확인하세요.

  • AWS 계정 가입(s3:* 권한이 있는 사용자 생성 포함).
  • AWS CLI 설치 및 구성.

설치가 되었는지 확인하려면 다음 명령을 실행하세요.

aws sts get-caller-identity

Step 1: 첫 번째 Amazon S3 버킷 만들기

예시처럼 amzn-s3-demo-bucket을 고유한 버킷 이름으로, us-east-1을 원하는 리전으로 바꾸세요.

버킷 만들기 (s3api create-bucket):

aws s3api create-bucket --bucket amzn-s3-demo-bucket --region us-east-1

us-east-1 외의 리전에서는 location constraint를 지정해야 해요:

aws s3api create-bucket --bucket amzn-s3-demo-bucket --region us-west-2 --create-bucket-configuration LocationConstraint=us-west-2

참고: 버킷을 만든 후에는 리전을 변경할 수 없어요. 버킷 이름은 파티션 안에서 고유해야 하고(파티션: aws, aws-cn, aws-us-gov), 3~63자, 소문자·숫자·마침표(.)·하이픈(-)만 사용, 문자·숫자로 시작·끝나야 해요. 만든 후에는 이름을 변경할 수 없어요.

버킷 생성 확인 (aws s3 ls):

aws s3 ls

Object Ownership 설정 — ACL을 비활성화하고 Bucket owner enforced(기본값)로 설정:

aws s3api put-bucket-ownership-controls --bucket amzn-s3-demo-bucket --ownership-controls="Rules=[{ObjectOwnership=BucketOwnerEnforced}]"

Bucket owner preferred 설정:

aws s3api put-bucket-ownership-controls --bucket amzn-s3-demo-bucket --ownership-controls="Rules=[{ObjectOwnership=BucketOwnerPreferred}]"

Object writer 설정:

aws s3api put-bucket-ownership-controls --bucket amzn-s3-demo-bucket --ownership-controls="Rules=[{ObjectOwnership=ObjectWriter}]"

Block Public Access 확인 (새 버킷에서는 기본적으로 활성화):

aws s3api get-public-access-block --bucket amzn-s3-demo-bucket

버전 관리 활성화:

aws s3api put-bucket-versioning --bucket amzn-s3-demo-bucket --versioning-configuration Status=Enabled

Object Lock 활성화 (버킷 버전 관리 필요) — 새 버킷의 경우:

aws s3api create-bucket --bucket amzn-s3-demo-bucket --region us-east-1 --object-lock-enabled-for-bucket

기존 버킷의 경우:

aws s3api put-object-lock-configuration --bucket amzn-s3-demo-bucket --object-lock-configuration '{"ObjectLockEnabled": "Enabled"}'

기본 보존과 함께 설정하려면:

aws s3api put-object-lock-configuration --bucket amzn-s3-demo-bucket --object-lock-configuration '{"ObjectLockEnabled":"Enabled","Rule":{"DefaultRetention":{"Mode":"COMPLIANCE","Days":30}}}'

"COMPLIANCE"를 "GOVERNANCE"로 바꾸면 덜 제한적인 모드가 되고, 일수도 필요에 따라 조정할 수 있어요.

태그 추가:

aws s3api put-bucket-tagging --bucket amzn-s3-demo-bucket --tagging 'TagSet=[{Key=Purpose,Value=Testing},{Key=Environment,Value=Development}]'

기본 암호화 확인 — 모든 버킷의 기본 암호화는 SSE-S3예요:

aws s3api get-bucket-encryption --bucket amzn-s3-demo-bucket

SSE-KMS 구성 및 S3 Bucket Keys 활성화:

aws s3api put-bucket-encryption --bucket amzn-s3-demo-bucket --server-side-encryption-configuration "{ \"Rules\":[{ \"ApplyServerSideEncryptionByDefault\": { \"SSEAlgorithm\":\"aws:kms\",\"KMSMasterKeyID\":\"YOUR-KMS-KEY-ARN\"},\"BucketKeyEnabled\":true}]}"

참고: AWS CLI에서는 새 버킷 생성 시 S3 Bucket Keys가 기본적으로 활성화되지 않아요(콘솔과 다름). KMS 키는 버킷과 같은 AWS 리전에 있어야 해요.

DSSE-KMS 구성:

aws s3api put-bucket-encryption --bucket amzn-s3-demo-bucket --server-side-encryption-configuration '{ "Rules":[{ "ApplyServerSideEncryptionByDefault": { "SSEAlgorithm":"aws:kms:dsse","KMSMasterKeyID":"YOUR-KMS-KEY-ARN"}}]}'

Step 2: 버킷에 객체 업로드

테스트 파일 만들기:

echo 'Hello, Amazon S3!' > example.txt

업로드 (s3 cp):

aws s3 cp example.txt s3://amzn-s3-demo-bucket/

성공하면 다음과 같은 출력이 보여요:

upload: ./example.txt to s3://amzn-s3-demo-bucket/example.txt

업로드 확인:

aws s3 ls s3://amzn-s3-demo-bucket/

Step 3: 객체 다운로드

객체 정보 조회:

aws s3api head-object --bucket amzn-s3-demo-bucket --key example.txt

다운로드:

aws s3 cp s3://amzn-s3-demo-bucket/example.txt downloaded-example.txt

내용 확인:

cat downloaded-example.txt

참고:

  • AWS CLI는 와일드카드나 --recursive 플래그로 여러 객체를 한 번에 다운로드할 수 있어요(콘솔과 다름).
  • AWS CLI로 다운로드할 때는 객체 키 이름 끝의 마침표(.)가 보존돼요(콘솔에서는 제거됨).

여러 객체를 다운로드하는 예시 — 특정 확장자의 객체를 exclude/include 필터로 재귀 복사:

aws s3 cp s3://amzn-s3-demo-bucket/ . --recursive --exclude "*" --include "*.txt"

Step 4: 객체를 폴더에 복사

Amazon S3에서 폴더는 객체 키의 접두사로 표현돼요. 접두사로 "폴더"를 만들어 객체를 복사해요:

aws s3 cp s3://amzn-s3-demo-source-bucket/example.txt s3://amzn-s3-demo-destination-bucket/favorite-files/example.txt

복사 확인:

aws s3 ls s3://amzn-s3-demo-destination-bucket/favorite-files/

Step 5: 객체와 버킷 삭제

더 이상 필요 없으면 삭제하세요. 버킷을 삭제하기 전에 비우거나 객체를 삭제해야 해요. 같은 버킷 이름을 계속 쓰려면 객체를 삭제하거나 버킷을 비우되 버킷 자체는 삭제하지 마세요.

특정 객체 삭제:

aws s3 rm s3://amzn-s3-demo-bucket/example.txt

성공하면:

delete: s3://amzn-s3-demo-bucket/example.txt

버킷 비우기 — 옵션 1: rm --recursive 명령으로 모든 객체 삭제:

aws s3 rm s3://amzn-s3-demo-bucket --recursive

참고: 객체가 많거나 큰 경우 이 명령이 시간 초과될 수 있어요. 대량 데이터 버킷에는 S3 Lifecycle 규칙으로 객체를 만료시키는 것을 권장해요.

옵션 2: S3 Lifecycle 규칙 사용 (큰 버킷 권장) — 규칙이 처리되기까지 최대 24시간이 걸릴 수 있어요.

버전 관리 버킷 비우기 — 버전 관리가 활성화된 버킷은 객체 버전과 삭제 마커를 삭제해야 해요:

aws s3api delete-objects --bucket amzn-s3-demo-bucket --delete "$(aws s3api list-object-versions --bucket amzn-s3-demo-bucket --output json --query='{Objects: Versions[].{Key:Key,VersionId:VersionId}}')"
aws s3api delete-objects --bucket amzn-s3-demo-bucket --delete "$(aws s3api list-object-versions --bucket amzn-s3-demo-bucket --output json --query='{Objects: DeleteMarkers[].{Key:Key,VersionId:VersionId}}')"

버킷 삭제:

aws s3api delete-bucket --bucket amzn-s3-demo-bucket

삭제 확인:

aws s3 ls

다음 단계 (Next steps)

이번 예시에서 AWS CLI로 기본적인 Amazon S3 작업을 배웠어요. Amazon S3용 일반적인 AWS CLI 명령은 다음과 같아요.

  • cp – 로컬 파일 시스템과 Amazon S3 간 또는 Amazon S3 위치 간 파일·객체 복사
  • ls – 지정된 버킷과 접두사 아래의 Amazon S3 객체·공통 접두사 나열
  • mb – Amazon S3 버킷 생성
  • mv – 로컬 파일 시스템과 Amazon S3 간 또는 Amazon S3 위치 간 파일·객체 이동
  • presign – AWS 자격 증명 없이 임시 접근을 허용하는 사전 서명된 URL 생성
  • rb – 빈 Amazon S3 버킷 제거. --force 플래그로 내용물이 있는 버킷을 한 번에 비우고 삭제할 수 있음. 되돌릴 수 없음
  • rm – Amazon S3에서 객체 삭제
  • sync – 소스 디렉터리의 새 파일·업데이트된 파일을 대상으로 재귀 복사해 디렉터리와 S3 접두사 동기화
  • website – 버킷을 정적 웹사이트로 구성

더 알아보기 (Learn more)