SFTP to S3 보안 구조
1단계: S3 버킷 및 폴더 구조 준비
먼저 데이터를 담을 바구니를 준비합니다.
예:
s3://my-sftp-bucket/home/user01/예:
s3://my-sftp-bucket/home/user02/
2단계: IAM 실행 역할(Execution Role) 생성
SFTP 서버가 유저를 대신해 S3에 접근할 수 있는 '권한'이 필요합니다.
IAM 콘솔에서 [역할 생성] → [AWS 서비스] → [Transfer]를 선택합니다.
아래와 같은 권한 정책(Policy)을 연결합니다. (버킷 전체가 아니라 특정 경로만 허용하는 정책)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowListingOfUserFolder",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::my-sftp-bucket"],
"Condition": {
"StringLike": {
"s3:prefix": ["home/user01/*", "home/user01"]
}
}
},
{
"Sid": "HomeDirObjectAccess",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject",
"s3:GetObjectVersion"
],
"Resource": "arn:aws:s3:::my-sftp-bucket/home/user01/*"
}
]
}
3단계: SFTP 서버 생성
AWS Transfer Family 콘솔에서 [Create server]를 클릭합니다.
프로토콜:
SFTP선택.ID 제공자:
Service managed(가장 간편한 방식).엔드포인트:
Publicly accessible또는 보안을 위해VPC hosted선택.스토리지:
Amazon S3선택 후 생성.
4단계: 사용자 추가 및 Chroot
사용자를 만들 때 [논리적 디렉터리(Logical directories)]를 사용하면 사용자는 자신의 상위 폴더 구조를 볼 수 없게 됩니다.
서버 상세 페이지에서 [Add user] 클릭.
사용자 이름:
user01홈 디렉터리 유형:
Logical선택.매핑(Mapping):
입력(Entry):
/(사용자가 접속했을 때 보게 될 최상위 경로)대상(Target):
/my-sftp-bucket/home/user01
역할(Role): 2단계에서 만든 IAM 역할을 선택합니다.
SSH 공개 키: 사용자의 공개 키(
.pub)를 등록합니다.
일반 매핑 vs 논리적 매핑 비교
항목 | 일반 경로 (Path) | 논리적 경로 (Logical) |
사용자 경험 |
|
|
보안성 | 상위 폴더 구조가 노출될 수 있음 | 철저히 격리됨 |
권장 상황 | 내부 관리용 | 외부 협력사/고객용 (강력 추천) |
Tip
범용 정책(Scoped-down Policy)을 활용하세요! 사용자가 100명이면 IAM 정책 100개를 만들어야 할까요? 아닙니다. 정책 내 리소스 부분에 ${transfer:UserName} 변수를 사용하면, 하나의 정책으로 모든 사용자가 각자의 이름과 매칭되는 폴더에만 접근하게 만들 수 있습니다.효율적인 관리는 '변수' 활용에서 시작됩니다.
댓글
댓글 0개
이 문서에는 댓글을 달 수 없습니다.