brunch

You can make anything
by writing

- C.S.Lewis -

by 클라우드 엔지니어 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로 변환된다.

접속한다.


감사합니다.



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

매거진 선택

키워드 선택 0 / 3 0
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari
;