본문 바로가기
CloudNetaStudy/[Study] AHSS

[1주차] S3 취약점 및 보안 정리

by HeeWorld 2023. 8. 28.

What is IAM?
더보기

IAM(Identity and Access Management)

  • AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스
  • IAM을 사용하면 사용자가 액세스할 수 있는 AWS 리소스를 제어하는 권한을 중앙에서 관리할 수 있음
  • IAM을 사용하여 리소스를 사용하도록 인증(로그인) 및 권한 부여(권한 있음)된 대상을 제어

IAM 작동방식

  • AWS 계정에 대한 인증 및 권한 부여를 제어하는 데 필요한 인프라를 제공
  • AWS 계정에서 신뢰하는 보안 주체(IAM 사용자, 페더레이션 사용자, IAM 역할 또는 애플리케이션)와 로그인 보안 인증 정보를 일치시키는 방식으로 인증이 제공
  • 보안 주체에게 리소스 액세스 권한을 부여하도록 요청하며, 권한 부여 요청에 대한 응답으로 액세스 권한이 부여
  • 인증된 후에는 보안 주체가 AWS 계정에서 리소스에 조치를 취하거나 작업을 수행할 수 있음

AWS 자격증명: 사용자

  • 특정 사용자에게 AWS 계정 액세스 권한을 부여하고 AWS 계정의 리소스에 액세스할 수 있는 특정 권한을 제공할 수 있음
IAM IAM Identity Center
사용자에게 AWS 리소스에 대한 장기 보안 인증 부여 사용자가 AWS에 로그인할 때마다 설정되는 임시 보안 인증(단기)

IAM 정책 및 그룹

  • 엑세스 관리를 통해 계정에서 보안 주체 엔터티에 허용된 권한을 정의할 수 있음
  • 정책 생성하고 IAM 자격 증명(사용자, 사용자 그룹 또는 역할) 또는 AWS 리소스에 연결하여 AWS에서 액세스를 관리
  • IAM 사용자를 생성할 경우, 권한을 부여하지 않는 한 사용자는 계정 내에서 어떠한 것으로도 액세스할 수 없음
    명시적으로 허용되지 않은 작업 또는 리소스는 기본적으로 모두 거부
  • IAM 사용자를 IAM 그룹으로 구성하고 이 그룹에 정책을 연결할 수 있음
  • 사용자 또는 그룹에 여러 정책을 연결하여 다양한 권한을 부여할 수 있음
Group 별로 권한(정책)을 부여할 수 있음

 

출처: https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/introduction.html

 

What is S3?
더보기

Amazon S3(Simple Storage Service)

  • 비정형 데이터를 저장을 하기 위한 서버리스 오브젝트 스토리지 서비스
  • S3는 데이터 레이크, 웹 사이트, 모바일 애플리케이션, 백업 및 복원, 아카이브, 엔터프라이즈 애플리케이션, IoT 디바이스, 빅 데이터 분석 등 Needs에 따라 원하는 양의 데이터를 저장하고 보호할 수 있음.

 

S3 관리 및 보안

  • 기본적으로 S3 버킷 및 객체는 Private이며 생성한 S3 리소스에만 액세스할 수 있음
S3 퍼블릭 액세스 차단 S3 버킷과 객체에 대한 퍼블릭 액세스 차단
특정한 경우가 아니라면 퍼블릭 액세스 차단 설정을 활성화된 상태로 유지 권고
⭐️ IAM(Identity and Access Management) 리소스를 사용하도록 인증(로그인) 및 권한 부여된 대상을 제어
버킷 정책 버킷 안에 있는 객체에 대한 액세스 권한을 부여할 수 있는 리소스 기반 정책
버킷에 연결된 권한은 버킷 소유자가 소유한 버킷의 모든 객체에 적용
버킷 정책은 JSON 기반 IAM 정책 언어를 사용

Amazon S3 액세스 포인트 데이터 액세스를 대규모로 관리하기 위해 전용 액세스 정책이 포함된 네트워크 엔드포인트를 구성
액세스 제어 목록(ACL) 인증된 사용자에게 개별 버킷 및 객체에 대한 읽기 및 쓰기 권한을 부여
ACL 대신 S3 리소스 기반 정책이나 IAM을 사용하는 것을 권고
기본적으로 객체 소유권은 버킷 소유자 적용 설정으로 설정되며 모든 ACL이 비활성화
S3 객체 소유권 ACL을 비활성화 또는 활성화하는 데 사용할 수 있는 Amazon S3 버킷 수준 설정
기본적으로 ACL은 비활성화
IAM Access Analyzer for S3
S3 버킷 액세스 정책을 평가 및 모니터링하여 정책이 S3 리소스에 대한 의도된 액세스만 제공하는지 확인

 

S3 작동 방식

Amazon S3용 AWS PrivateLink

  • Virtual Private Cloud(VPC)에서 인터페이스 VPC 엔드포인트 (인터페이스 엔드포인트)를 프로비저닝할 수 있음
  • 인터페이스 엔드포인트는 VPC의 서브넷에서 프라이빗 IP 주소가 할당된 하나 이상의 탄력적 네트워크 인터페이스(ENI)로 표시

Amazon Macie

  • 데이터 보안 및 데이터 프라이버시 서비스로서, 기계 학습(ML) 및 패턴 일치를 활용하여 민감한 데이터를 검색하고 보호
  • 관리형 데이터와 사용자가 설정할 수 있는 사용자 지정 데이터를 사용하여 데이터를 검색
    ex)
    관리형 데이터 
    - 자격증명: AWS secret access key, HTTP 헤더 등
    - 금융정보: 계좌번호, 비밀번호, 카드 번호 등

    - 개인식별 정보: 주민등록번호, 여권번호, 운전면허 번호 등
     

 

버킷

  • Amazon S3에 저장된 객체에 대한 컨테이너
  • 버킷에 저장할 수 있는 객체 수에는 제한이 없고, 1개의 계정에서 100개까지 포함 가능
  • Amazon S3 네임스페이스를 최상위 수준으로 구성
  • 리소스에 대한 액세스를 관리하는 데 사용할 수 있는 버킷 정책, 액세스 제어 목록(ACL), S3 액세스 포인트와 같은 제어 옵션을 제공

 

객체

  • Amazon S3에 저장되는 기본 개체이며, 객체 데이터와 메타데이터로 구성
  • 메타데이터는 객체를 설명하는 이름-값 페어의 집합
  • 객체는 키(이름) 및 버전 ID를 통해 버킷 내에서 고유하게 식별

 

  • 객체 키(또는 키 이름)는 버킷 내 객체에 대한 고유한 식별자
  • 버킷 내 모든 객체는 정확히 하나의 키를 가짐
  • 모든 객체는 웹 서비스 엔드포인트, 버킷 이름, 키, 그리고 선택 사항인 버전의 조합을 통해 고유하게 주소를 지정할 수 있음

 

버킷 정책

  • 버킷과 해당 버킷의 객체에 액세스 권한을 부여할 수 있는 리소스 기반 AWS Identity and Access Management(IAM) 정책
  • AWS에서 표준인 JSON 기반 액세스 정책 언어가 사용
  • 버킷의 객체에 대한 권한을 추가하거나 거부할 수 있음

 

ACL

  • ACL을 사용하여 권한이 부여된 사용자에게 개별 버킷 및 객체에 대한 읽기 및 쓰기 권한을 부여
  • 기본적으로 객체 소유권은 버킷 소유자 적용 설정으로 설정되며 모든 ACL이 비활성화

 

S3 Type

  • S3 Storage Class는 Object 별로 적용하며, Object 생성 시 지정할 수도, 추후에 수정할 수 있음

 

출처: https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/Welcome.html

 

 


I. S3 권한 설정 실습 & IAM Access Analyzer

 

# 사전 작업

 

- <Local> 기존 IAM 자격 증명 확인

 

스터디 때 실습 따라 간다고, local에 IAM 자격이 있어서 aws configure 명령어 사용시 기존 IAM 확인됨

heekyung@Hee-MacBookAir ~ % aws configure
AWS Access Key ID [****************JA5D]: ^C

 

heekyung@Hee-MacBookAir ~ % aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ****************JA5D shared-credentials-file
secret_key     ****************LG/C shared-credentials-file
    region           ap-northeast-2      config-file    ~/.aws/config

 

 

처음부터 configure 삭제할 때 잘못 삭제해서 이러지도 저러지도 못해서 uninstall 하고 다시 설치했다..

근데 계속 기존의 configure 나와서 진짜 대환장 파티

구글링 계속 했는데, aws configure 하고 그냥 엔터 쭉 치면 초기화 된다고해서 했는데 초기화 안됨

 

결국 찾은 방법은 .aws 디렉터리를 이름을 바꿔버리니 configure 초기화 됨! (진짜 머리털 다 뽑을뻔 🤬)

 

heekyung@Hee-MacBookAir ~ % brew uninstall awscli
Uninstalling /opt/homebrew/Cellar/awscli/2.13.13... (13,536 files, 117.9MB)

heekyung@Hee-MacBookAir ~ % brew install awscli

heekyung@Hee-MacBookAir ~ % aws --version
aws-cli/2.13.15 Python/3.11.5 Darwin/22.6.0 source/arm64 prompt/off

heekyung@Hee-MacBookAir ~ % aws configure
AWS Access Key ID [****************JA5D]: ^C

heekyung@Hee-MacBookAir ~ % mv .aws .aws_two

 

1.  <Local> IAM 자격 증명 설정

 

heekyung@Hee-MacBookAir ~ % aws configure
AWS Access Key ID [None]: 
AWS Secret Access Key [None]: 
Default region name [None]: ap-northeast-2
Default output format [None]:

heekyung@Hee-MacBookAir ~ % aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ******************** shared-credentials-file
secret_key     ******************** shared-credentials-file
    region           ap-northeast-2      config-file    ~/.aws/config

 

2. Key 변수 설정

 

heekyung@Hee-MacBookAir ~ % KEYNAME=ahss-hee

 

3. Stack 배포

 

heekyung@Hee-MacBookAir ~ % curl -O https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/security/ahss-ec2.yaml
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  3224  100  3224    0     0  37268      0 --:--:-- --:--:-- --:--:-- 40300


heekyung@Hee-MacBookAir ~ % aws cloudformation deploy --template-file ahss-ec2.yaml --stack-name myec2 --parameter-overrides KeyName=$KEYNAME --region ap-northeast-2

Waiting for changeset to be created..
Waiting for stack create/update to complete
Successfully created/updated stack - myec2

 

스택 생성 완료 확인

 

4. EC2 IP 출력

 

heekyung@Hee-MacBookAir ~ % aws cloudformation describe-stacks --stack-name myec2 --query 'Stacks[*].Outputs[0].OutputValue' --output text
54.XX.XX.XX

 

 

5. EC2 인스턴스 접근

 

- 키 파일 경로는 key가 있는 디렉터리 경로 사용

- 키의 파일 권한은 사전에 바꿈. (기존 파일 권한 644 → chmod 400 ahss-hee.pem) 

 

heekyung@Hee-MacBookAir ~ % ssh -i ~/Downloads/ahss-hee.pem ec2-user@$(aws cloudformation describe-stacks --stack-name myec2 --query 'Stacks[*].Outputs[0].OutputValue' --output text)

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
[ec2-user@My-EC2 ~]$

 

준비 끝!

 

 

I.  AWS S3 버킷 생성

 

1. S3 버킷 생성

 

heekyung@Hee-MacBookAir ~ % NICKNAME=hee

heekyung@Hee-MacBookAir ~ % aws s3 mb s3://ahss-$NICKNAME --region ap-northeast-2
make_bucket: ahss-hee

 

- S3 버킷 조회 (CLI)

  → 버킷을 조회 및 접근할 수 없도록 기본적으로 차단되어 있음.

 

heekyung@Hee-MacBookAir ~ % aws s3 ls
2023-09-02 17:21:23 ahss-hee

heekyung@Hee-MacBookAir ~ % aws s3api get-public-access-block --bucket ahss-$NICKNAME
{
    "PublicAccessBlockConfiguration": {
        "BlockPublicAcls": true,
        "IgnorePublicAcls": true,
        "BlockPublicPolicy": true,
        "RestrictPublicBuckets": true
    }
}

 

Amazon S3 > 버킷 > ahss-hee (버킷 이름) > 퍼블릭 엑세스 차단 편집(버킷 설정)

 

 

 

2. 퍼블릭 액세스 차단 편집

모든 퍼블릭 액세스 차단 활성화 → ‘변경 사항 저장’ 클릭 → ‘확인’ 입력

 

 

Amazon S3 > 버킷 > ahss-hee(버킷 이름) > 권한 > 퍼블릭 액세스 차단(버킷 설정)

 

 

 

CLi로 설정 이전 명령어 동일하게 사용하여 확인 시, 권한 값이 true → false로 바뀐 것을 확인

 

heekyung@Hee-MacBookAir ~ % aws s3api get-public-access-block --bucket ahss-$NICKNAME
{
    "PublicAccessBlockConfiguration": {
        "BlockPublicAcls": true,
        "IgnorePublicAcls": true,
        "BlockPublicPolicy": true,
        "RestrictPublicBuckets": true
    }
}

heekyung@Hee-MacBookAir ~ % aws s3api get-public-access-block --bucket ahss-$NICKNAME | jq
{
  "PublicAccessBlockConfiguration": {
    "BlockPublicAcls": true,
    "IgnorePublicAcls": true,
    "BlockPublicPolicy": true,
    "RestrictPublicBuckets": true
  }
}

 

 

※ 처음에 jq 명령어 사용했을 때 'zsh: command not found: jq' 떠서 또 당황

바로 command install 🥲

 

heekyung@Hee-MacBookAir ~ % brew install jq

 

 

3. 버킷에 텍스트 파일 3개 생성 및 파일 업로드

 

# Create File

heekyung@Hee-MacBookAir ~ % echo "hee1" > hee1.txt
heekyung@Hee-MacBookAir ~ % echo "hee2" > hee2.txt
heekyung@Hee-MacBookAir ~ % echo "hee3" > hee3.txt

# File uploade

heekyung@Hee-MacBookAir ~ % aws s3 cp hee1.txt s3://ahss-$NICKNAME
upload: ./hee1.txt to s3://ahss-hee/hee1.txt

heekyung@Hee-MacBookAir ~ % aws s3 cp hee2.txt s3://ahss-$NICKNAME
upload: ./hee2.txt to s3://ahss-hee/hee2.txt

heekyung@Hee-MacBookAir ~ % aws s3 cp hee3.txt s3://ahss-$NICKNAME
upload: ./hee3.txt to s3://ahss-hee/hee3.txt

 

- CLI 파일 확인

 

# Check File

heekyung@Hee-MacBookAir ~ % aws s3 ls s3://ahss-$NICKNAME --recursive --human-readable --summarize
2023-09-02 17:30:00    5 Bytes hee1.txt
2023-09-02 17:30:02    5 Bytes hee2.txt
2023-09-02 17:30:06    5 Bytes hee3.txt

Total Objects: 3
   Total Size: 15 Bytes

heekyung@Hee-MacBookAir ~ % aws s3api list-objects --bucket ahss-$NICKNAME | jq
{
  "Contents": [
    {
      "Key": "hee1.txt",
      "LastModified": "2023-09-02T08:30:00+00:00",
      "ETag": "\"aef6593273794e84aa13fc2f25de27b5\"",
      "Size": 5,
      "StorageClass": "STANDARD",
      "Owner": {
        "ID": "4b7ee06fbcbdb25abd091d081bfdb7bfe8caeb960b79d96e6bba9acd7593cd64"
      }
    },
    {
      "Key": "hee2.txt",
      "LastModified": "2023-09-02T08:30:02+00:00",
      "ETag": "\"f227504cbfa12aba83de5c2bbdc88668\"",
      "Size": 5,
      "StorageClass": "STANDARD",
      "Owner": {
        "ID": "4b7ee06fbcbdb25abd091d081bfdb7bfe8caeb960b79d96e6bba9acd7593cd64"
      }
    },
    {
      "Key": "hee3.txt",
      "LastModified": "2023-09-02T08:30:06+00:00",
      "ETag": "\"67620069faaf425f78b581a5a4dfd4d8\"",
      "Size": 5,
      "StorageClass": "STANDARD",
      "Owner": {
        "ID": "4b7ee06fbcbdb25abd091d081bfdb7bfe8caeb960b79d96e6bba9acd7593cd64"
      }
    }
  ],
  "RequestCharged": null
}

 

- Amazon S3 > 버킷 > ahss-hee > 객체 (GUI) 확인

 

 

객체 URL 확인 (Amazon S3 > 버킷 > ahss-hee > hee1.txt / hee2.txt / hee3.txt

 

 

 

4. <EC2> 버킷 탐색

 

[ec2-user@My-EC2 ~]$ NICKNAME=hee

[ec2-user@My-EC2 ~]$ aws s3 ls s3://ahss-$NICKNAME --human-readable
Unable to locate credentials. You can configure credentials by running "aws configure".

 

[ec2-user@My-EC2 ~]$ aws s3 ls s3://ahss-$NICKNAME --human-readable --no-sign-request

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

 

 

5. 권한 변경

 

Amazon S3 > 버킷 > ahss-hee > hee1.txt / hee2.txt / hee3.txt

 

권한 → ACL(엑세스 제어 목록) → '버킷 소유자 적용' 클릭 'ACL 활성화됨' / '버킷 소유자 선호' 클릭  변경 사항 저장

 

상단 우측에 편집 버튼이 Disable 되어 있어서 거짓말 안하고 5초 정도 멍때렸다.........

 

 

 

6. ACL 편집

 

Amazon S3 > 버킷 > ahss-hee > hee1.txt

 

권한 → ACL(액세스 제어 목록) 편집 : 모든사람(퍼블릭 액세스) - 객체 (Check 나열) → ‘변경 사항 저장’

 

ACL 설정 변경 전에는 우측 상단 편집이 Disable 되어있었는데, 현재 편집 버튼 Enable 되어있음.

 

모든사람(퍼블릭 액세스) > 읽기 체크 후에 아래 안내박스(?)에 체크를 해줘야 변경 사항 저장 가능

 

모든 사람(퍼블릭 액세스) 객체에 읽기 권한이 생긴 것을 확인

 

6. 버킷 재탐색

 

[ec2-user@My-EC2 ~]$ aws s3 ls s3://ahss-$NICKNAME --human-readable --no-sign-request

2023-09-02 08:30:00    5 Bytes hee1.txt
2023-09-02 08:30:02    5 Bytes hee2.txt
2023-09-02 08:30:06    5 Bytes hee3.txt

 

[ec2-user@My-EC2 ~]$ aws s3 cp s3://ahss-$NICKNAME/hee1.txt . --no-sign-request
fatal error: An error occurred (403) when calling the HeadObject operation: Forbidden

 

권한이 없어서 그런가 파일에 접근할 수 없음!

 

 

7. 객체 별 권한 설정

 

Amazon S3 > 버킷 > ahss-hee > hee1.txt / hee2.txt / hee3.txt

 

- hee1.txt : 모든사람(퍼블릭 액세스) - 객체 (Check 읽기) → ‘변경 사항 저장’

- hee2.txt : 인증된 사용자 그룹(AWS 계정이 있는 모든 사용자) - 객체 (Check 읽기) → ‘변경 사항 저장’

 

 

<hee1.txt>

모든 사람(퍼블릭 액세스)의 객체는 현재 -

 

hee1.txt의 모든 사람(퍼플릭 액세스) 체크

 

하단에 보면 이러한 변경 사항이 객체에 미치는 영향을 이해합니다. 체크하고 변경 사항 저장 클릭 (이해 못하면 저장 안됨)

 

아까와 달리 모든 사람(퍼블릭 액세스) 객체에 읽기 권한 부여됨

 

<hee2.txt>

 

인증된 사용자 그룹(AWS 계정이 있는 모든 사용자)의 객체에 권한이 없음

 

인증된 사용자 그룹(AWS 계정이 있는 모든 사용자) 객체 체크!

 

인증된 사용자 그룹(AWS 계정이 있는 모든 사용자)의 객체에 읽기 권한이 부여됨

 

♥ S3 버킷을 새로고침해서 액세스 확인

 

 

9. <EC2> 버킷 재탐색

 

[ec2-user@My-EC2 ~]$ aws s3 cp s3://ahss-$NICKNAME/hee1.txt . --no-sign-request
download: s3://ahss-hee/hee1.txt to ./hee1.txt

[ec2-user@My-EC2 ~]$ aws s3 cp s3://ahss-$NICKNAME/hee2.txt . --no-sign-request
fatal error: An error occurred (403) when calling the HeadObject operation: Forbidden

[ec2-user@My-EC2 ~]$ aws s3 cp s3://ahss-$NICKNAME/hee3.txt . --no-sign-request
fatal error: An error occurred (403) when calling the HeadObject operation: Forbidden

 

버킷에 정책이 없어서  hee1.txt를 제외하고 인증된 사용자 권한을 준 hee2.txt도 아무것도 하지 않은 hee.text도 접근 불가..!

 

 

10. <Local> 버킷에 객체 복사

 

# 버킷 파일 Copy (IAM 설정으로 인해 cp 가능)

heekyung@Hee-MacBookAir ~ % aws s3 cp s3://ahss-$NICKNAME/hee2.txt .
download: s3://ahss-hee/hee2.txt to ./hee2.txt


# flaws.cloud Level2

heekyung@Hee-MacBookAir ~ % aws s3 ls s3://level2-c8b217a33fcf1f839f6f1f73a00a9ae7.flaws.cloud --human-readable
2017-02-27 11:02:15   78.9 KiB everyone.png
2017-03-03 12:47:17    1.4 KiB hint1.html
2017-02-27 11:04:39    1.0 KiB hint2.html
2017-02-27 11:02:14    2.7 KiB index.html
2017-02-27 11:02:14   26 Bytes robots.txt
2017-02-27 11:02:15    1.0 KiB secret-e4443fc.html

heekyung@Hee-MacBookAir ~ % aws s3 cp s3://level2-c8b217a33fcf1f839f6f1f73a00a9ae7.flaws.cloud/secret-e4443fc.html .
download: s3://level2-c8b217a33fcf1f839f6f1f73a00a9ae7.flaws.cloud/secret-e4443fc.html to ./secret-e4443fc.html

heekyung@Hee-MacBookAir ~ % cat secret-e4443fc.html
<html>
    <head>
        <title>flAWS</title>
        <META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
        <style>
            body { font-family: Andale Mono, monospace; }
            :not(center) > pre { background-color: #202020; padding: 4px; border-radius: 5px; border-color:#00d000;
            border-width: 1px; border-style: solid;}
        </style>
    </head>
<body
  text="#00d000"
  bgcolor="#000000"
  style="max-width:800px; margin-left:auto ;margin-right:auto"
  vlink="#00ff00" link="#00ff00">

<center>
<pre >
 _____  _       ____  __    __  _____
|     || |     /    ||  |__|  |/ ___/
|   __|| |    |  o  ||  |  |  (   \_
|  |_  | |___ |     ||  |  |  |\__  |
|   _] |     ||  _  ||  `  '  |/  \ |
|  |   |     ||  |  | \      / \    |
|__|   |_____||__|__|  \_/\_/   \___|
</pre>

<h1>Congrats! You found the secret file!</h1>
</center>


Level 3 is at <a href="http://level3-9afd3927f195e10225021a578e6f78df.flaws.cloud">http://level3-9afd3927f195e10225021a578e6f78df.flaws.cloud</a>%

 

11. 버킷 정책 설정 

 

Amazon S3 > 버킷 > ahss-hee > 권한 > 버킷 정책 > 편집 

 

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::ahss-닉네임/*"
        }
    ]
}

 

 

 

 

정책 확인!

 

<Local> 버킷의 정책이 지정되었는지 cli로 확인

 

heekyung@Hee-MacBookAir ~ % aws s3api get-bucket-policy --bucket ahss-$NICKNAME | jq -r .Policy | jq
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadGetObject",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::ahss-hee/*"
    }
  ]
}

 

12. <EC2> 버킷 재탐색

 

[ec2-user@My-EC2 ~]$ aws s3 cp s3://ahss-$NICKNAME/hee1.txt . --no-sign-request
download: s3://ahss-hee/hee1.txt to ./hee1.txt

[ec2-user@My-EC2 ~]$ aws s3 cp s3://ahss-$NICKNAME/hee2.txt . --no-sign-request
download: s3://ahss-hee/hee2.txt to ./hee2.txt

[ec2-user@My-EC2 ~]$ aws s3 cp s3://ahss-$NICKNAME/hee3.txt . --no-sign-request
download: s3://ahss-hee/hee3.txt to ./hee3.txt

 

버킷에 정책을 준 뒤에 모든 파일에 접근 가능한 것을 확인!

 

 

(Option) 13. <Local> IAM Access Analyzer 액세스 분석기 

 

# Access 분석기 설정

heekyung@Hee-MacBookAir ~ % ANA_ARN=$(aws accessanalyzer create-analyzer --analyzer-name firstanalyzer --type ACCOUNT --output text --query arn)

heekyung@Hee-MacBookAir ~ % echo $ANA_ARN
arn:aws:access-analyzer:ap-northeast-2:360877687314:analyzer/firstanalyzer

 

# S3 버킷 스캔 수행

heekyung@Hee-MacBookAir ~ % aws accessanalyzer start-resource-scan --analyzer-arn $ANA_ARN --resource-arn arn:aws:s3:::ahss-$NICKNAM

# S3 버킷 스캔 결과 확인

heekyung@Hee-MacBookAir ~ % aws accessanalyzer get-analyzed-resource --analyzer-arn $ANA_ARN --resource-arn arn:aws:s3:::ahss-$NICKNAME | jq
{
  "resource": {
    "resourceArn": "arn:aws:s3:::ahss-hee",
    "resourceType": "AWS::S3::Bucket",
    "createdAt": "2023-09-02T09:05:59.431000+00:00",
    "analyzedAt": "2023-09-02T09:06:42.488000+00:00",
    "updatedAt": "2023-09-02T09:05:59.431000+00:00",
    "isPublic": true,
    "actions": [
      "s3:GetObject",
      "s3:ListBucket",
      "s3:ListBucketMultipartUploads",
      "s3:ListBucketVersions"
    ],
    "sharedVia": [
      "BUCKET_ACL",
      "POLICY"
    ],
    "status": "ACTIVE",
    "resourceOwnerAccount": "360877687314"
  }
}

 

나는 이상하게 액세스 분석기가 분석한 버킷 정책 및 ACL이 확인되지 않는다...

나는 또 어디서 뭘 잘못한걸까?... 다시 시도해봐야겠다...

 

다시 열받기 시작함

 

- 액세스 분석기 삭제

 

내가 설정을 다르게 한게 없는데 도대체 왜 안되는거지?????? 삭제는 왜 되는거야;;

이건 to be continued 다시 해서 업데이트 친다!!

 

heekyung@Hee-MacBookAir ~ % aws accessanalyzer delete-analyzer  --analyzer-name firstanalyzer

 

 

14. 실습 완료 후 버킷 삭제

 

# 모든 객제 Delete

heekyung@Hee-MacBookAir ~ % aws s3 rm s3://ahss-$NICKNAME --recursive
delete: s3://ahss-hee/hee3.txt
delete: s3://ahss-hee/hee1.txt
delete: s3://ahss-hee/hee2.txt

# 버킷 Delete

heekyung@Hee-MacBookAir ~ % aws s3 rb s3://ahss-$NICKNAME
remove_bucket: ahss-hee

# 버킷 확인

heekyung@Hee-MacBookAir ~ % aws s3 ls

 

 

아까랑 다르게 S3에 들어가면 버킷 만들기가 뜸

 

 

 


 

II. S3 보안 강화

 

 

1. <Local> S3 버킷 생성

 

# Nickname 설정

heekyung@Hee-MacBookAir ~ % NICKNAME=hee

# S3 버킷 생성

heekyung@Hee-MacBookAir ~ % aws s3 mb s3://ahss-$NICKNAME-presign --region ap-northeast-2
make_bucket: ahss-hee-presign

 

# 버킷 확인

heekyung@Hee-MacBookAir ~ % aws s3 ls
2023-09-02 18:28:42 ahss-hee-presign

heekyung@Hee-MacBookAir ~ % aws s3api get-public-access-block --bucket ahss-$NICKNAME-presign | jq
{
  "PublicAccessBlockConfiguration": {
    "BlockPublicAcls": true,
    "IgnorePublicAcls": true,
    "BlockPublicPolicy": true,
    "RestrictPublicBuckets": true
  }
}

 

 

생성된 버킷 확인!

 

2. <Local> 그림 파일 다운

 

heekyung@Hee-MacBookAir ~ % curl https://www.nasa.gov/sites/default/files/thumbnails/image/main_image_star-forming_region_carina_nircam_final-5mb.jpg -o jameswebb.jpg
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 5185k  100 5185k    0     0  4685k      0  0:00:01  0:00:01 --:--:-- 4714k

 

# S3에 이미지 업로드

heekyung@Hee-MacBookAir ~ % aws s3 cp jameswebb.jpg s3://ahss-$NICKNAME-presign
upload: ./jameswebb.jpg to s3://ahss-hee-presign/jameswebb.jpg

 

# S3 이미지 확인

heekyung@Hee-MacBookAir ~ % aws s3 ls s3://ahss-$NICKNAME-presign --human-readable
2023-09-02 18:31:26    5.1 MiB jameswebb.jpg

heekyung@Hee-MacBookAir ~ % aws s3api list-objects --bucket ahss-$NICKNAME-presign | jq
{
  "Contents": [
    {
      "Key": "jameswebb.jpg",
      "LastModified": "2023-09-02T09:31:26+00:00",
      "ETag": "\"3bae2c6845352e627516a529fd507ffb\"",
      "Size": 5310371,
      "StorageClass": "STANDARD",
      "Owner": {
        "ID": "4b7ee06fbcbdb25abd091d081bfdb7bfe8caeb960b79d96e6bba9acd7593cd64"
      }
    }
  ],
  "RequestCharged": null
}

 

버킷에 이미지 업로드 확인!

 

3. <EC2> 이미지 업로드 (IAM 없음)

 

# Nickname 설정

[ec2-user@My-EC2 ~]$ NICKNAME=hee

# 객체 URL 접근 시도

[ec2-user@My-EC2 ~]$ lynx --dump https://ahss-$NICKNAME-presign.s3.ap-northeast-2.amazonaws.com/jameswebb.jpg
   AccessDeniedAccess
   DeniedVGKEE4QNBTDSWH80kaEeQkflWuA2NPRxXDQSwuADD6/gGoLn45YXqPGmgNm2UaKmS
   j6ZlISkeLoHz4yK15sGS3NSz94=

 

4. <Local> URL 생성(100분)

 

heekyung@Hee-MacBookAir ~ % aws s3 presign s3://ahss-$NICKNAME-presign/jameswebb.jpg --expires-in 600
https://ahss-hee-presign.s3.ap-northeast-2.amazonaws.com/jameswebb.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAVIBP4QIJLCENJA5D%2F20230902%2Fap-northeast-2%2Fs3%2Faws4_request&X-Amz-Date=20230902T093549Z&X-Amz-Expires=600&X-Amz-SignedHeaders=host&X-Amz-Signature=f47ddb4bba631c3f1298334f0c986bafed3a7a32fadc8bd637cfe92c56221e41

 

5. <EC2> Local에서 생성된 URL export

 

# URL export

[ec2-user@My-EC2 ~]$ URL='https://ahss-hee-presign.s3.ap-northeast-2.amazonaws.com/jameswebb.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAVIBP4QIJLCENJA5D%2F20230902%2Fap-northeast-2%2Fs3%2Faws4_request&X-Amz-Date=20230902T093549Z&X-Amz-Expires=600&X-Amz-SignedHeaders=host&X-Amz-Signature=f47ddb4bba631c3f1298334f0c986bafed3a7a32fadc8bd637cfe92c56221e41'

 

# URL 확인

[ec2-user@My-EC2 ~]$ curl -O $URL
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 5185k  100 5185k    0     0  31.8M      0 --:--:-- --:--:-- --:--:-- 32.0M

[ec2-user@My-EC2 ~]$ ls -al *.jpg
-rw-rw-r-- 1 ec2-user ec2-user 5310371  9월  2 09:37 jameswebb.jpg

 

6. 브라우저에서 URL 호출

 

브라우저에서 URL을 호출하면 아름다운 우주 사진을 볼 수 있음!

 

6. 버킷 삭제

 

- 실습 후 버킷안에 있는 이미지 삭제하고 버킷도 삭제

 

버킷 이름 기재후 버킷 삭제 클릭!

 

 


 

더보기

느낀점

 

일단 나는 IT쪽 전공자가 아니라 슈퍼 문과 출신이다(평생 경영 관련된 학문만 공부).

일평생 Window랑만 짱친이었다... (리누스 토발즈..... 누구세요?)

아무튼 어떤 계기로 클라우드에 왕 관심을 갖게 되어서 시작하게 되었고, 현회사 입사전에 AWS를 잠깐 배운게 전부이다.

 

그리고 2년동안 AWS의 A조차 사용해본적이 없었던 사람이라 수월하게 스터디를 따라갈 수 있을지 걱정했다.

그래도 우리 초이, 홍, 안매님과 함께여서 나도 열심히 따라가야겠다고 생각했다.

 

아무튼 첫 스터디 후 첫 과제인데, 음... 과제를 1시간 30분동안 했는데 나는 EC2에 모든 것을 하는 줄 알았는데, 31분이 되던 때

뭔가 잘못되었음을 느꼈다ㅎㅎ 지금 이 글 쓰는동안 스택은 날라가고 있다.... 스택이 다 날라갔다... 다시 과제를 하러 간다ㅠㅠㅠ

 

 

<After>

 

모든 과제를 끝내고나니 AWS가 재미있어졌다!

과제를 하는동안 essential 유튜브를 4개나 들었으니, 하나당 50분이라고 하면 대략 4시간 정도 과제를 한건가?

처음하는거다 보니까 잘하고 싶었고, Notion에 있는대로 하나하나 차근차근 따라가니까 재미있었다.

 

나는 항상 일을 할 때도 무언가 테스트를 진행할 때도 내가 하면 잘안되는...? 이상하게 남은 잘되는데 내가하면 error가 되거나,

정상적으로 안되는...? 일이 많다

이번에 액세스 분석기도 그렇다 왜 나는 안되는걸까...ㅠㅠㅠ 저거는 내일 다시 해보고 업데이트를 쳐야지

 

새롭게 얻어가고 배워가는 것이 많아서 진짜 재미있었다!

이번주 스터티도 열심히 들어야지 😎

'CloudNetaStudy > [Study] AHSS' 카테고리의 다른 글

[2주차] AWS IAM(Identity and Access Management)  (0) 2023.09.05