brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Sep 04. 2019

150. SFTP서비스 사용하기2

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로 변환된다.

접속한다.


감사합니다.



브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari