AWS CLOUD · EC2 · S3 · POWERSHELL
AWS S3 파일 업로드와 다운로드 완벽 가이드: Windows EC2에서 PowerShell로 파일 전송하기
AWS S3 버킷에 파일을 올리고, 다른 EC2 서버에서 내려받는 방법을 실제 작업 순서에 맞춰 정리합니다.
작성 기준일: 2026년 10월 12일
1. AWS S3 업로드와 다운로드란?
AWS S3(Simple Storage Service)는 파일과 데이터를 객체(Object) 형태로 저장하는 스토리지 서비스입니다. Windows EC2 서버에서 AWS CLI를 사용하면 PowerShell 명령어로 S3에 파일을 업로드하거나 S3에 저장된 파일을 로컬 서버로 다운로드할 수 있습니다.
UPLOAD · 업로드
EC2 → S3
서버에 있는 파일을 S3 버킷에 저장합니다.
DOWNLOAD · 다운로드
S3 → EC2
S3에 저장된 파일을 서버의 지정된 폴더로 내려받습니다.
두 작업 모두 기본적으로 aws s3 cp 명령어를 사용합니다. 차이는 원본과 대상의 위치입니다.
2. 사전 준비
이 글에서는 다음과 같은 환경을 가정합니다.
| 항목 | 예시 |
|---|---|
| 운영체제 | Windows EC2 |
| 명령어 실행 환경 | Windows PowerShell |
| S3 버킷 | company-files |
| 로컬 파일 | C:\Upload\report.xlsx |
| 다운로드 폴더 | C:\Download |
중요: company-files와 파일 경로는 설명을 위한 예시입니다. 실제 버킷명과 파일 경로로 바꾸어 실행하세요. AWS CLI가 설치되어 있어야 하며, 현재 인증 주체에 필요한 S3 권한이 부여되어 있어야 합니다.
3. Step 1. AWS 연결 및 버킷 확인
① 현재 AWS 인증 주체 확인
aws sts get-caller-identity
현재 AWS CLI가 어떤 AWS 계정과 인증 주체를 사용하는지 확인합니다. 다른 EC2 서버에서 명령어를 실행했을 때도 인증 주체가 올바른지 확인하는 것이 좋습니다.
② S3 버킷 목록 확인
aws s3 ls
출력 결과에서 대상 버킷을 확인합니다. 목록에 버킷이 보이지 않는다고 해서 반드시 버킷이 없는 것은 아닙니다. 인증 주체의 목록 조회 권한이나 계정 설정도 확인해야 합니다.
③ 특정 버킷 내부 확인
aws s3 ls s3://company-files/
특정 경로 아래의 파일을 확인하려면 다음과 같이 실행합니다.
aws s3 ls s3://company-files/reports/
S3의 reports/는 객체 키의 접두사(prefix)입니다. 일반적인 Windows 폴더와 완전히 동일한 구조는 아니지만, AWS CLI에서는 폴더처럼 다룰 수 있습니다.
4. Step 2. Windows EC2에서 S3로 파일 업로드
① 업로드할 파일 준비
먼저 로컬 파일이 존재하는지 확인합니다.
Test-Path "C:\Upload\report.xlsx"
True가 반환되면 해당 경로에 파일이 존재합니다. False라면 파일 경로와 이름을 먼저 확인하세요.
② 특정 파일 업로드
로컬 파일을 S3 버킷의 루트 경로에 업로드합니다.
aws s3 cp "C:\Upload\report.xlsx" s3://company-files/report.xlsx
명령어의 의미는 다음과 같습니다.
"C:\Upload\report.xlsx": 업로드할 로컬 파일s3://company-files/report.xlsx: 업로드할 S3 객체의 위치
즉, 로컬 파일이 S3의 report.xlsx 객체로 저장됩니다.
③ S3의 특정 경로에 업로드
버킷 안의 reports 접두사 아래에 저장하려면 다음과 같이 실행합니다.
aws s3 cp "C:\Upload\report.xlsx" s3://company-files/reports/report.xlsx
업로드 후 S3에서 파일을 확인합니다.
aws s3 ls s3://company-files/reports/
④ 로컬 폴더 전체 업로드
로컬 폴더 안의 파일과 하위 폴더까지 업로드하려면 --recursive 옵션을 사용합니다.
aws s3 cp "C:\Upload\" s3://company-files/uploads/ --recursive
이 명령어는 C:\Upload 아래의 파일을 S3의 uploads/ 접두사 아래로 복사합니다. 대상에 같은 객체 키가 이미 있다면 기존 객체를 덮어쓸 수 있으므로 실행 전에 대상 경로를 확인하세요.
- 기본 객체 업로드에 필요한 대표 권한:
s3:PutObject - 버킷 내부 파일 목록을 확인할 경우:
s3:ListBucket - AWS KMS 고객 관리형 키로 암호화한다면 추가 KMS 권한이 필요할 수 있습니다.
5. Step 3. S3에서 Windows EC2로 파일 다운로드
① 다운로드 폴더 생성
New-Item -ItemType Directory -Force -Path "C:\Download"
폴더가 이미 존재해도 실행할 수 있습니다.
② 특정 파일 다운로드
S3에 저장된 파일을 현재 EC2 서버로 내려받습니다.
aws s3 cp s3://company-files/report.xlsx "C:\Download\report.xlsx"
이번에는 S3 경로가 원본이고 Windows 경로가 대상입니다. 앞에서 살펴본 업로드 명령어와 원본 및 대상의 위치가 반대입니다.
③ 특정 경로의 파일 다운로드
aws s3 cp s3://company-files/reports/report.xlsx "C:\Download\report.xlsx"
S3 객체 키와 파일명이 정확히 일치해야 합니다. 대소문자와 확장자까지 확인하세요.
④ S3의 특정 경로 전체 다운로드
aws s3 cp s3://company-files/uploads/ "C:\Download\uploads\" --recursive
지정한 S3 접두사 아래의 객체를 로컬 폴더로 복사합니다. 다운로드 대상의 로컬 파일과 이름이 겹치는 경우에도 주의해야 합니다.
⑤ 버킷 전체 다운로드
aws s3 cp s3://company-files/ "C:\Download\" --recursive
버킷 전체를 내려받는 방법입니다. 객체 수와 전체 용량이 많으면 다운로드 시간과 저장 공간이 크게 늘어날 수 있으므로 필요한 접두사만 지정하는 방식을 먼저 검토하세요.
6. 업로드와 다운로드 명령어 비교
| 작업 | 명령어 | 방향 |
|---|---|---|
| 파일 업로드 | aws s3 cp 로컬파일 s3://버킷/키 |
로컬 → S3 |
| 파일 다운로드 | aws s3 cp s3://버킷/키 로컬파일 |
S3 → 로컬 |
| 폴더 전체 업로드 | aws s3 cp 로컬폴더 s3://버킷/접두사/ --recursive |
로컬 → S3 |
| 경로 전체 다운로드 | aws s3 cp s3://버킷/접두사/ 로컬폴더 --recursive |
S3 → 로컬 |
기억할 규칙은 간단합니다. 첫 번째 인자는 원본, 두 번째 인자는 대상입니다. --recursive는 여러 객체를 재귀적으로 복사할 때 사용합니다.
7. 업로드와 다운로드 결과 검증
① S3에 객체가 존재하는지 확인
aws s3 ls s3://company-files/report.xlsx
목록 결과가 표시되는지 확인합니다. 목록 조회에는 별도의 권한이 필요할 수 있습니다.
② 다운로드 파일 존재 여부 확인
Test-Path "C:\Download\report.xlsx"
③ 로컬 파일의 크기 확인
Get-Item "C:\Download\report.xlsx" |
Select-Object Name, Length, LastWriteTime
파일 크기와 수정 시간을 확인할 수 있습니다. 더 엄격한 검증이 필요하면 S3 객체의 메타데이터와 체크섬을 비교하세요. 단순히 파일이 존재한다는 사실만으로 파일 내용까지 정상이라고 보장할 수는 없습니다.
8. 자주 발생하는 오류와 해결 방법
AccessDenied
업로드는 s3:PutObject, 다운로드는 s3:GetObject 권한이 대표적으로 필요합니다. 목록 확인에는 s3:ListBucket 권한이 필요할 수 있습니다. IAM 정책, 버킷 정책, VPC 엔드포인트 정책, KMS 권한 등도 확인하세요.
파일 또는 객체를 찾을 수 없음
버킷명, 객체 키, 확장자 및 대소문자를 확인하세요. 로컬 경로가 잘못되었거나 S3 객체가 다른 접두사 아래에 있을 수도 있습니다.
인증 오류
다음 명령어로 현재 인증 주체를 확인하세요.
aws sts get-caller-identity
EC2에 연결된 IAM 역할, AWS CLI 프로필, 환경 변수 및 자격 증명 설정을 확인합니다. EC2에서는 장기 액세스 키를 직접 저장하기보다 인스턴스 역할을 사용하는 방식을 우선 검토하세요.
같은 이름의 파일이 이미 존재함
S3에 같은 객체 키로 업로드하면 기존 객체가 대체될 수 있습니다. 다운로드도 로컬 대상 파일과 충돌할 수 있습니다. 중요한 데이터라면 작업 전에 대상 경로와 버전 관리 정책을 확인하세요.
9. EC2에서 IAM 역할을 사용하는 이유
다른 EC2 서버에서도 동일한 S3 버킷을 확인할 수 있다고 해서 두 서버가 동일한 권한을 가진 것은 아닙니다. 각 서버의 인증 주체와 정책에 따라 업로드 또는 다운로드가 거부될 수 있습니다.
EC2에 적절한 IAM 역할을 연결하면 AWS CLI가 인스턴스 프로파일을 통해 임시 자격 증명을 사용할 수 있습니다. 이를 이용하면 장기 액세스 키를 서버에 직접 저장하는 방식을 피할 수 있습니다.
필요한 권한은 작업 범위에 맞게 최소한으로 부여해야 합니다. 예를 들어 다운로드 전용 서버에는 업로드 권한까지 무조건 부여할 필요가 없습니다.
10. 한 번에 따라 하는 최종 실습
다음 예제는 Windows EC2에서 파일 하나를 S3에 업로드한 후 다시 다운로드하는 순서입니다. 실제 경로와 버킷명으로 바꾸어 실행하세요.
# 1. 현재 AWS 인증 주체 확인
aws sts get-caller-identity
# 2. 버킷 확인
aws s3 ls s3://company-files/
# 3. 업로드할 로컬 파일 확인
Test-Path "C:\Upload\report.xlsx"
# 4. S3에 파일 업로드
aws s3 cp "C:\Upload\report.xlsx" s3://company-files/report.xlsx
# 5. S3 객체 확인
aws s3 ls s3://company-files/report.xlsx
# 6. 다운로드 폴더 생성
New-Item -ItemType Directory -Force -Path "C:\Download"
# 7. S3에서 파일 다운로드
aws s3 cp s3://company-files/report.xlsx "C:\Download\report.xlsx"
# 8. 다운로드 결과 확인
Test-Path "C:\Download\report.xlsx"
# 9. 파일 크기 확인
Get-Item "C:\Download\report.xlsx" |
Select-Object Name, Length, LastWriteTime
실습 주의: 위 명령어는 업로드와 다운로드가 모두 가능한 권한을 전제로 합니다. 실제 환경에서 실행한 결과가 아니라 재현 가능한 명령어 예시입니다. 업로드 전에 대상 객체가 이미 존재하는지 확인하고, 운영 파일을 덮어쓰지 않도록 주의하세요.
11. 자주 묻는 질문(FAQ)
Q1. 다른 EC2 서버에서도 동일한 버킷명이 보이면 바로 다운로드할 수 있나요?
반드시 그렇지는 않습니다. 현재 인증 주체가 해당 객체를 읽을 권한을 가지고 있어야 하며, 객체 키와 암호화 설정도 올바르게 지정되어야 합니다.
Q2. 업로드와 다운로드에 다른 명령어를 사용하나요?
기본적으로 둘 다 aws s3 cp를 사용합니다. 원본과 대상의 위치를 반대로 지정하면 됩니다.
Q3. 폴더를 업로드하거나 다운로드하려면 어떻게 하나요?
--recursive 옵션을 사용합니다. 폴더 전체를 대상으로 하기 전에 파일 수, 저장 공간 및 덮어쓰기 가능성을 확인하세요.
Q4. 버킷 목록은 보이는데 파일 다운로드가 실패합니다.
버킷 목록 조회 권한과 객체 읽기 권한은 다를 수 있습니다. s3:GetObject, 버킷 정책 및 필요한 KMS 권한 등을 확인하세요.
Q5. 업로드한 파일이 다른 서버에서도 보이나요?
같은 버킷과 객체 키를 조회하고 접근 권한이 있다면 다른 서버에서도 해당 객체를 확인할 수 있습니다. 각 서버의 로컬 파일이 자동으로 동기화되는 것은 아닙니다.
12. 공식 문서 및 출처
- AWS CLI 공식 문서 - s3 cp: 업로드, 다운로드 및 재귀 복사 명령어
- Amazon S3 공식 가이드 - AWS CLI 시작하기: 객체 확인과 파일 다운로드 예제
- Amazon S3 공식 문서 - API 작업별 권한: S3 객체 작업과 IAM 권한
- AWS CLI 공식 문서 - IAM 역할 사용: EC2 인스턴스 프로파일과 역할 기반 인증
작성 기준일: 2026년 10월 12일. AWS CLI 버전, IAM 정책, 버킷 정책 및 암호화 설정에 따라 실제 동작은 달라질 수 있습니다. 게시 전후 변경된 내용은 공식 문서에서 재확인하세요. 본문은 공식 문서를 바탕으로 작성한 실습 안내이며, 사용자의 AWS 환경에서 직접 실행한 테스트 결과는 아닙니다.
#AWS #AmazonS3 #EC2 #AWSCLI #PowerShell #WindowsServer #파일업로드 #파일다운로드 #IAM #클라우드개발
댓글
댓글 쓰기