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– 버킷을 정적 웹사이트로 구성