brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Aug 12. 2021

암호화 사용하여 서버에서 S3로 데이터 올리기, 내리기


암호화해서 서버에서 S3로 데이터를 올리고 내려보자



<1> 암호화 키 3가지 이해

<2> 서버와 계정  준비

<3>  S3 버킷 만들고, 서버에서 S3로 데이터를 올려보자

<4>  S3에  올라간 데이터 암호화 적용

<5>  S3  버킷에  SSE-S3  암호화 적용 후 , 데이터 올리기

<6>  데이터 올릴 때 KMS 암호화 적용해 올리기

<7>  S3에  암호화 아니면 못 올리게  버킷 정책 설정하여 사용하기

<8>  S3 버킷에서 다운로드하기

<9> S3버킷에서 HTTPS로만 다운로드 가능하게 하기- 전송 시 암호화




<1> 암호화 키 3가지 이해


1

Amazon S3 (SSE-S3) = 서버 사이트 암호화-S3 = AWS 관리 , 정기적으로 순환됨


2

KMS (SSE-KMS) = 서버 사이트 암호화-키 관리 서비스 =  사용자 마스터기 CMK를 사용한 서버 측 암호화, 사용자가 관리


3

SSE-C  = 서버 사이트 암호화- 고객 =  사용자 키를 사용한 서버 측 암호화 




<2>  서버와 계정  준비


1

테스트해볼 생각이면, EC2를 만들어 Access-key를 사용해도 되고,

EC2에 S3 role을 적용해 사용해도 된다.

EC2에 S3 role을 적용 시 세션 매니저를  사용하려면, ssm, ssmmessages 권한도 부여하자.

테스트 이면 admin-role을 만들어 ec2에 부여해해 보자.

여기서는 test ec2를 하나 만들고  EC2에 admin-role을 부여하여 테스트한다.

admin-role을 만들고, ec2 보안에서 admin-role을 연결하면 된다.


cloudformation으로 ec2 하나 만들어 보자


서울 리전

ec2 key-pairs는 미리 하나 만들자

seo-s3 test-keypairs.ppk

seo-admin-role을 만들고(iam), ec2 보안에서 admin-role을 연결하면 된다.


or


1

IDC 서버에서 S3로 데이터를 올리려면 AWS Access-key가 필요하다.

AWS에서 Awccess-key를 만들고, S3 권한을 받자.



2

EC2 로그인

ec2에서 연결에서 접속  또는 연결에서 세션 매니저로 접속




<3> S3 버킷 만들고, 서버에서 S3로 데이터를 올려보자


1

서버-------S3 구성이다


2

S3 버킷 만들기

[ec2-user@ip-172-31-10-129 ~]$ aws s3 mb s3://seo-bucket11

make_bucket: seo-bucket11


버킷 이름 적어 놓기

s3 명령어

https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/cli-services-s3-commands.html#using-s3-commands-managing-buckets-creating


3

버킷에 파일 하나 올리기

touch 111

touch 222

touch 333

touch 444


확인

bucket=seo-bucket11

aws s3api list-objects-v2 --bucket $bucket --query 'Contents[].{Key: Key}'

aws s3 cp 111 s3://${bucket}


4

올라간것 확인

aws s3api list-objects-v2 --bucket $bucket --query 'Contents[].{Key: Key}'


5

AWS console에서 암호화된 내용 확인하기

111 파일 클릭해서 확인


6

디폴트 세팅 확인하기

s3 >  seo-bucket11 >  Properties >  아래  Default encryption  확인 : Disabled



<4>  S3에  올라간 데이터 암호화 적용


111 파일 클릭 > Properties   >  Edit > Servr-side encryption settings >   Enable  > Amazon S3 key (SSE-S3)로 변경  > 저장





<5>   S3  버킷에  SSE-S3  암호화 적용 후 , 데이터 올리기


1

seo-bucket11   > Properties   >  아래 Default encryption > Edit >  Enable   > Amazon S3 key (SSE-S3)로 변경  > 저장

참고

https://docs.amazonaws.cn/en_us/AmazonS3/latest/userguide/default-bucket-encryption.html


2

파일 222 올리기

aws s3 cp 222 s3://${bucket}


3

AWS 콘솔  > S3에서 확인

222 파일 클릭  > Servr-side encryption settings에서 확인

Default encryption

Enabled

Server-side encryption

Amazon S3 master-key (SSE-S3)




<6>  데이터 올릴 때 KMS 암호화 적용해 올리기


1

aws s3 cp 333 s3://${bucket} --sse aws:kms


2

AWS 콘솔에서 확인하기

333 파일 클릭 

Server-side encryption settings

AWS Key Management Service key (SSE-KMS)  확인함




<7> S3에  암호화 아니면 못 올리게  버킷 정책 설정하여 사용하기


1

AWS 콘솔  > Permission (버켓 정책)에 적용하기

aes256으로 적용

seo-bucket11


https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/UsingServerSideEncryption.html



2

kms로 올려보기

실패

[ec2-user@ip-172-31-10-129 ~]$ aws s3 cp 444 s3://${bucket} --sse aws:kms

upload failed: ./444 to s3://seo-bucket11/444 An error occurred (AccessDenied) when calling the PutObject operation: Access Denied


3

AES256으로 올리기

성공

[ec2-user@ip-172-31-10-129 ~]$ aws s3 cp 444 s3://${bucket} --sse AES256

upload: ./444 to s3://seo-bucket11/444



https://aws.amazon.com/ko/premiumsupport/knowledge-center/s3-bucket-store-kms-encrypted-objects/



<8>  S3 버킷에서 다운로드하기


1

[ec2-user@ip-172-31-10-129 ~]$ mkdir ddd


[ec2-user@ip-172-31-10-129 ~]$ cd ddd

2

[ec2-user@ip-172-31-10-129 ddd]$ aws s3api get-object --bucket $bucket --key 111 111 --endpoint-url http://s3.amazonaws.com

{

    "AcceptRanges": "bytes", 

    "ContentType": "binary/octet-stream", 

    "LastModified": "Thu, 12 Aug 2021 01:09:55 GMT", 

    "ContentLength": 0, 

    "ETag": "\"d41d8cd98f00b204e9800998ecf8427e\"", 

    "ServerSideEncryption": "AES256", 

    "Metadata": {}

}

3

[ec2-user@ip-172-31-10-129 ddd]$ ls

111




<9> S3버킷에서 HTTPS로만 다운로드 가능하게 하기- 전송 시 암호화


1

암호화되지 않은 HTTP로는  다운로드 안되게 S3 버킷에 정책 적용함

https://aws.amazon.com/ko/premiumsupport/knowledge-center/s3-bucket-policy-for-config-rule/



2

테스트

안됨

[ec2-user@ip-172-31-10-129 ddd]$ aws s3api get-object --bucket $bucket --key 222 222 --endpoint-url http://s3.amazonaws.com

An error occurred (AccessDenied) when calling the GetObject operation: Access Denied


3

https로 변경해 다운로드

잘됨


[ec2-user@ip-172-31-10-129 ddd]$ aws s3api get-object --bucket $bucket --key 222 222 --endpoint-url https://s3.amazonaws.com

{

    "AcceptRanges": "bytes", 

    "ContentType": "binary/octet-stream", 

    "LastModified": "Thu, 12 Aug 2021 01:15:17 GMT", 

    "ContentLength": 0, 

    "ETag": "\"d41d8cd98f00b204e9800998ecf8427e\"", 

    "ServerSideEncryption": "AES256", 

    "Metadata": {}

}


[ec2-user@ip-172-31-10-129 ddd]$ ls

111  222




기타

https://aws.amazon.com/ko/premiumsupport/knowledge-center/decrypt-kms-encrypted-objects-s3/



https://brunch.co.kr/@topasvga/1759



같이 볼만한 자료

https://brunch.co.kr/@topasvga/2928


감사합니다.       

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