Infra/cloud

[AFOS] 4주차 스토리지 서비스 - 실습 : S3

미니문92 2021. 7. 13. 19:43

8. 실습 : Public 용 S3

실습 구성


  • S3 → 버킷 만들기 : 버킷 이름(유일한 이름), 리전(서울), Uncheck(모든 퍼블릭 액세스 차단 후 아래 알고 있음 체크) 후 버킷 만들기 클릭

체크 해제

  • 생성된 버킷 클릭 후 자신의 PC에서 아무 이미지 파일 업로드 → 파일 추가

생성된 버킷 확인

 

버킷 클릭 후 업로드

 

업로드 후 해당 파일 클릭

 

객체 URL로 접근 확인

 

권한때문에 접근이 안됨

 

객체 - 파일 클릭 후 작업 탭 - 퍼블릭으로 설정

 

상태 변경

 

정상 접근 확인

 

  • 업로드 된 객체 클릭 후 객체 URL 클릭하여 복사 후 웹 브라우저에서 열기
  • 웹 서버의 index.html 파일 수정
# 아래는 index.html 파일을 덮어쓰기, 아래 닉네임과 src 부분은 변경

cat <<EOF> /var/www/html/index.html
<html>
<body>
<h1>minimun S3 Storage<br>
<img src="https://s3-test-mym.s3.ap-northeast-2.amazonaws.com/%EC%8B%A0%EC%A0%95%ED%98%B8.jpg">
</body>
</html>
EOF

객체 마다 모든 사람 읽기 체크 하지 않고 버킷에 객체가 업로드 시 자동으로 모든 사람 읽기 가능하게 하기

권한 변경 - 버킷 정책 편집

 

# 버킷 - 권한 - 버킷 정책 - 편집 후 아래 입력 후 변경 사항 저장
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadGetObject",
      "Effect": "Allow",
      "Principal": "*",
      "Action": [
        "s3:GetObject"
        ],
      "Resource": [
        "arn:aws:s3:::BUCKET_NAME/*"
        ]
    }
  ]
}

버킷-권한-버킷정책-편집 후 위 변경 사항 저장

 



9. 실습 : Private 용 S3

AWS CLI - S3 사용

# S3 조회
aws s3 ls 
2021-07-13 18:42:23 minimun-test-s3

# 버킷 조회(하위 디렉터리 포함)
aws s3 ls s3://버킷
aws s3 ls s3://버킷 --recursive

# S3 버킷 생성
aws s3 mb s3://버킷(유일한 이름) --region ap-northeast-2
[root@EC2-STG2 ~]# aws s3 mb s3://minimun-test-s3-s3 --region ap-northeast-2
make_bucket: miminmun-test-s3-s3

# 버킷 이름을 변수에 지정
# MyS3=버킷
[root@EC2-STG2 ~]# MyS3=minimun-test-s3-s3




# 로컬 파일을 S3로 업로드
echo "111" > /var/www/html/111.txt
aws s3 cp /var/www/html/111.txt s3://$MyS3
aws s3 ls s3://$MyS3

# 로컬 파일 생성
[root@EC2-STG2 ~]# echo "111" > /var/www/html/111.txt

# 로컬 파일 s3로 이동
[root@EC2-STG2 ~]# aws s3 cp /var/www/html/111.txt s3://$MyS3
upload: ../var/www/html/111.txt to s3://minimun-test-s3-s3/111.txt    

# s3 디렉토리 목록 확인하기
[root@EC2-STG2 ~]# aws s3 ls s3://$MyS3
2021-07-13 18:50:12          4 111.txt





# 웹 디렉터리(하위 포함)을 버킷에 업로드(백업)하기

# 디렉토리 구조 확인
[root@EC2-STG2 ~]# tree /var/www/html
/var/www/html
├── 111.txt
├── efs
│   └── index.html
└── index.html


# 기존 S3 버켓을 지우고, 현재 디렉토리에 있는 파일 동기화
[root@EC2-STG2 ~]# aws s3 sync --delete /var/www/html s3://$MyS3
upload: ../var/www/html/efs/index.html to s3://minimun-test-s3-s3/efs/index.html
upload: ../var/www/html/index.html to s3://minimun-test-s3-s3/index.html 


# 서브 디렉토리 포함 확인
[root@EC2-STG2 ~]# aws s3 ls s3://$MyS3 --recursive
2021-07-06 16:50:15          4 111.txt
2021-07-06 16:54:50         60 efs/index.html
2021-07-06 16:54:50        137 index.html

 


 

(옵션) 매 1분 마다 웹 디렉터리(하위 포함)을 버킷에 업로드(백업)하기 - 동기화 하기

# crontab 내용 추가
cat <<EOF >> /etc/crontab
*/1 * * * * root aws s3 sync --delete /var/www/html s3://$MyS3
EOF

# 적용 및 실시간 로그
systemctl restart crond
tail -f /var/log/cron

# 파일 추가 생성
echo "222" > /var/www/html/222.txt
echo "333" > /var/www/html/333.txt
while true; do aws s3 ls s3://$MyS3; date; echo "---[S3 ls]---"; sleep 3; done

 


 

(옵션) Pre-sign URL 현재 버킷의 객체는 외부에서 접근이 불가능하지만 특정 기간 동안 특정 객체 다운 허용

# 파일 생성
echo "presigned test" > /var/www/html/presigned.txt
aws s3 cp /var/www/html/presigned.txt s3://$MyS3

# 직접 객체 URL 바로 접속 시 안됨

# Pre-sign URL 생성 : 120초
aws s3 presign s3://$MyS3/presigned.txt --expires-in 120

 


 

(옵션) S3 Browser 등을 통해서 S3 버킷 보기