brunch

150. SFTP서비스 사용하기2

by Master Seo

SFTP 서비스를 이용해 S3에 데이터를 넣고 관리하고자 한다.

접근 로그는 cloud watch log에 남겨야 한다.

보안상 사용자별 S3 사용 범위를 최소화 해야한다


<1> SFTP 서비스 구성

sftp client (linux, Mac,windows) -------- sftp 서비스 --- s3



<2> 작업 순서 요약


1. 테스트 리눅스 서버 1대 생성 (sftp-client , MAC PC면 만들 필요는 없다)

2. S3 버킷 생성 : s3-sftp-900 (디폴트로 생성, not public)

3. 계정으로 접속했을때 S3에 접근할수 있는 policy와 role 생성

policy 생성 : s3-sftp-access900

role 생성 : s3-sftp-accss900-role

Trust relationships 수정



4. SFTP 만들때, Cloudwatch log에 로그 남기기 위해 role 생성 - cloudwatchlog-sftp900-role


5. SFTP 서버 생성

- Logging role 지정 : cloudwatchlog-sftp900-role

Cloudwatch log에 접속로그 남기기.


6. SFTP 계정 900 생성

s3-sftp-access900-role , Home : s3-sftp-900 ,900, public 키 생성 ssh-keygen -P "" -f 900-key


7. 900계정으로 sftp 접속 테스트

[root@ip-10-0-0-108 ~]# sftp -i key900 900@s-bf1b2b4c71f64b17b.server.transfer.ap-northeast-2.amazonaws.com



<권한 제한하기>


8. s3범위 사용 축소를 위해 policy생성과 SFTP 사용자별 적용

축소범위가 기본 정책보다 우선 적용된다.

SFTP 각 계정에 Policy 적용


9. 테스트

# sftp -i 900-key

900@s-8f9ceb35f6894f339.server.transfer.ap-northeast-2.amazonaws.com




<2> 구축하기

1. 테스트 리눅스 서버 1대 생성 (sftp-client , MAC PC면 만들 필요는 없다)

2. S3 버킷 생성 : s3-sftp-900 (디폴트로 생성, not public)

3. 계정으로 접속했을때 S3에 접근할수 있는 policy와 role 생성

IAM Poilicy > Create > Visual editor로 생성 > s3 > ListBucket > bucket이름

policy 생성 : s3-sftp-access900

role 생성 : s3-sftp-accss900-role

Trust relationships 수정


S3버킷 읽는 policy와 role

policy


{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutObject", // put 오브젝트
"s3:GetObject", // get 오브젝트
"s3:ListBucket", // List 버킷
"s3:DeleteObject" // delete 오브젝트
],
"Resource": [
"arn:aws:s3:::s3-sftp-access-900", // 버킷
"arn:aws:s3:::s3-sftp-access-900/*"
]
}
]
}


Roles

s3-sftp-access900

attatch s3-sftp-access900

s3-sftp-access900-role


Edit Trust Relationship


{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "transfer.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}




4. SFTP 만들때, Cloudwatch log에 로그 남기기 위해 role 생성 - cloudwatchlog-sftp900-role

cloudwatch에 로그를 남길수 있는 role 생성 (접속 로그를 남기진 않으면 생성하지 않아도 됨)


IAM > Create role > EC2 > CloudWatchLogsRWAccess

cloudwatchlog-sftp900-role


Trust relationship 추가.


Edit Trust Relationship

{

"Version": "2012-10-17",

"Statement": [

{

"Effect": "Allow",

"Principal": {

"Service": "transfer.amazonaws.com"

},

"Action": "sts:AssumeRole"

}

]

}



5. SFTP 생성

- Logging role : cloudwatch-sftp900-role



6. SFTP Users 900 생성.

SFTP > Add user > 900 > s3-sftp-access900-role > Home : s3-sftp-900 , 900, public 키 생성


public 키 생성을 위해 Ec2서버에 로그인.

ssh-keygen -P "" -f key900


[root@ip-10-0-0-108 ~]# ls

key900 key900.pub


[root@ip-10-0-0-108 ~]# more key900.pub

Notepad에서 키 연결해서 sftp public키 등록.



7. 900계정으로 sftp 접속 테스트


[root@ip-10-0-0-108 ~]# sftp -i key900 900@s-bf1b2b4c71f64b17b.server.transfer.ap-northeast-2.amazonaws.com


sftp> put 1

Uploading 1 to /s3-sftp-900/900/1 100% 0 0.0KB/s 00:00


sftp> ls

1


Cloudwatch log 도 확인.



<사용 범위 축소 하기 >


8. s3범위 사용 축소를 위해 policy생성과 SFTP 사용자별 적용


축소범위가 기본 정책보다 우선 적용된다.


SFTP 사용자별 범위 축소지정

1 ) policy 는 sftp - down900- policy

{

"Version": "2012-10-17",

"Statement": [

{

"Sid": "AllowListingOfUserFolder",

"Action": [

"s3:ListBucket"

],

"Effect": "Allow",

"Resource": [

"arn:aws:s3:::${transfer:HomeBucket}"

],

"Condition": {

"StringLike": {

"s3:prefix": [

"${transfer:HomeFolder}/*",

"${transfer:HomeFolder}"

]

}

}

},

{

"Sid": "HomeDirObjectAccess",

"Effect": "Allow",

"Action": [

"s3:PutObject",

"s3:GetObject",

"s3:DeleteObjectVersion",

"s3:DeleteObject",

"s3:GetObjectVersion",

"s3:GetObjectACL",

"s3:PutObjectACL"

],

"Resource": "arn:aws:s3:::${transfer:HomeDirectory}*"

}

]

}



2) SFTP 각 계정에 Policy 적용


SFTP > Servers > sftp server > 계정 900 > Edit > Policy > Selete policy from IAM > 적용




참고

https://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/users.html




9. 테스트


# sftp -i 900-key

900@s-8f9ceb35f6894f339.server.transfer.ap-northeast-2.amazonaws.com


sftp> ls

1 2 3

sftp> pwd

Remote working directory: /s3-sftp-900/900

sftp> cd ..


sftp> ls

Couldn't read directory: Permission denied

다른 디렉토리에 접근 못하도록 제한 되었다 !!!



sftp> pwd

Remote working directory: /s3-sftp-900


sftp> cd 900



별첨1 . winscp로 테스트


sftp client 로 접속 하기.

sftp client download

https://winscp.net/eng/download.php


ssh-keygen으로 만든 private key 900을 putty-keygen으로 900.ppk private key를 만들어 접속한다


또는


Winscp에서 900키를 열면 900.ppk로 변환된다.

접속한다.


감사합니다.



keyword
매거진의 이전글149. AWS  SFTP서비스 사용하기1