Ssoon

S3 Security Exercises - Access Key & Bucket ACL 설정 본문

AWS Hacking & Security Study

S3 Security Exercises - Access Key & Bucket ACL 설정

구구달스 2023. 8. 28. 18:53
CloudNet@가시다님이 진행하는 "AWS Hacking & Security Study" 1기 스터디입니다.
# AWS Storage Immersion Day - S3 Security Best Practices 를 참조하였습니다.

✅ AWS CloudFormation 스택 배포

  • 링크 클릭 후 생성 (가시다님 제공 실습환경) 

KeyPair 를 선택합니다.

스택을 생성합니다.

IAM 사용자에 대한 액세스 키 생성

출처: https://digitalcloud.training/aws-iam/

 

  • Access Key 는 IAM 사용자 또는 AWS 계정 루트 사용자의 장기 자격 증명입니다.
  • Access Key 를 사용하여 AWS CLI 또는 AWS API 에 대한 프로그래밍 방식 요청에 서명할 수 있습니다.

 💠 Access Key = Access Key ID + Secret Access Key

  ✔ Access Key ID

  • AWS 계정을 식별하는 고유한 식별자입니다.  
  • 20자의 길이로 된 알파벳과 숫자의 조합입니다.
  • AWS API 호출 시 식별되는 사용자를 나타냅니다.

  ✔ Secret Access Key

  • Access Key ID와 함께 사용되며, 계정에 대한 액세스 권한을 제어합니다.
  • 40자의 길이로 된 알파벳과 숫자의 조합입니다.

[user1]
aws_access_key_id = AKIATU4765ECK6YYJTOY
aws_secret_access_key = 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
[user2]
aws_access_key_id = AKIATU4765ECKNY5DVN6
aws_secret_access_key = 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

 

 AWS CLI 구성

CLI 접속을 위해 EC2의 Public IP 정보를 확인 후 해당 EC2에 접속합니다.

 AWS CLI를 설정합니다

  • Access Key ID 와 Secret Access Key 를 공백으로 둡니다

 AWS CLI에서 사용할 자격 증명 파일을 생성합니다.

 텍스트 편집기에서 업데이트된 자격 증명 파일을 복사

✅ Amazon S3 버킷 생성

✔ 새로운 Bucket 을 생성합니다.

✔ Bucket 생성시 기본으로 public access 가 block(차단) 되어 있습니다.

공용 액세스 차단 및 버킷 ACL 사용 안 함

public access 를 허용 합니다.

✔ Block public access 에 Block(차단)을 해지합니다.

  • 공개적인 액세스를 방지하고 버킷과 그 안의 객체들이 인터넷을 통해 무단으로 접근되는 것을 방지하기 위한 보안 기능

  • Block Public Access to Buckets and Objects Granted Through New Access Control Lists (ACLs)
    • 새로운 액세스 제어 목록(ACL)을 사용하여 버킷 또는 객체에 공개 액세스를 설정하려고 할 때 차단됩니다.
    • 새로운 ACL을 통해 공개 액세스를 설정해도, 이 옵션이 액세스를 차단하여 실제로는 액세스 권한이 적용되지 않습니다.
    • 이미 공개 액세스가 설정된 기존의 액세스 제어 목록(ACL)에는 영향을 주지 않습니다. 이 옵션은 새로운 ACL에만 적용됩니다.
  • Block public access to buckets and objects granted through any access control lists (ACLs) 
    • 모든 액세스 제어 목록(ACL)을 사용하여 버킷 또는 객체에 공개 액세스를 설정하려고 할 때 차단됩니다.
    • 어떤 ACL을 통해 공개 액세스를 설정하더라도, 이 옵션이 액세스를 차단하여 실제로는 액세스 권한이 적용되지 않습니다.
    • 이미 공개 액세스가 설정된 기존의 액세스 제어 목록(ACL)에도 영향을 주며, 이 옵션을 활성화하면 해당 설정이 무시됩니다.
  • Block public access to buckets and objects granted through new public bucket or access point policies
    • 새로운 공개 버킷 정책이나 액세스 포인트 정책을 사용하여 버킷이나 객체에 공개 액세스를 설정하려고 할 때 차단됩니다.
    • 새로운 정책을 통해 공개 액세스를 설정해도, 이 옵션이 액세스를 차단하여 실제로는 액세스 권한이 적용되지 않습니다.
    • 이미 공개 액세스가 설정된 기존의 버킷 정책이나 액세스 포인트 정책에는 영향을 주지 않습니다. 이 옵션은 새로운 정책에만 적용됩니다.
  • Block public and cross-account access to buckets and objects through any public bucket or access point policies
    • 공개 버킷 정책이나 액세스 포인트 정책을 사용하여 버킷이나 객체에 공개 액세스를 설정하려고 할 때 차단됩니다.
    • 다른 AWS 계정으로부터의 액세스를 허용하는 정책이 설정되어 있을 때도, 이 옵션이 액세스를 차단하여 실제로는 액세스 권한이 적용되지 않습니다.
    • 이미 공개 액세스가 설정된 기존의 버킷 정책이나 액세스 포인트 정책에는 영향을 주지 않습니다. 이 옵션은 새로운 정책에만 적용됩니다.

 ACL을 활성화 합니다

  • "Object Ownership"
    • 객체(파일 또는 데이터 아이템)에 대한 소유자를 지칭하는 개념
    • S3에서 객체는 버킷 내에서 데이터를 나타내는 기본 단위 => 객체들은 특정 사용자나 역할에 의해 생성 => 객체를 생성한 주체가 소유자 => 소유자는 해당 객체에 대한 권한을 관리하고 조절하는 주체
  • 다른 AWS 계정으로부터 이 버킷에 업로드되는 객체의 소유권을 조절하고, 액세스 제어 목록 (ACLs)을 활용하여 객체에 대한 접근 권한을 설정할 수 있습니다. 객체 소유권은 보안과 액세스 관리에 중요한 역할을 하며, 이를 통해 데이터의 소유자가 액세스를 제어할 수 있는 구조를 만들 수 있습니다.

  • ACLs Disabled (Recommended)
    • 객체 소유권 편집 시에 Access Control Lists (ACLs)를 사용하지 않도록 설정하는 것을 의미합니다.
    • Access Control Lists (ACLs)은 객체에 대한 개별적인 액세스 권한을 설정하는 방법 중 하나입니다.
    • 객체 소유자는 주로 IAM 정책이나 버킷 정책을 통해 객체에 대한 액세스 권한을 설정합니다.
    • ACLs를 비활성화하면 객체의 보안을 조금 더 중앙 집중화하여 관리할 수 있으며, 복잡한 권한 구성을 피할 수 있습니다.
  • ACLs Enabled
    • 객체 소유권 편집 시에 Access Control Lists (ACLs)를 사용하도록 설정하는 것을 의미합니다.
    • 객체 소유자는 개별 객체에 대한 ACLs를 설정하여 액세스 권한을 조정할 수 있습니다.
    • 개별적인 객체에 대한 세부적인 권한을 설정하고 싶을 때 유용합니다.
    • 특정 사용자나 그룹에 대한 객체 액세스 권한을 조정하려는 경우에 활용됩니다.

  • Bucket Owner Preferred
    • 객체 소유권을 버킷 소유자에게 선호하는 방식으로 설정하는 옵션
    • 객체의 실제 생성자가 다른 AWS 계정이더라도, 객체 소유자로서 버킷 소유자가 지정됩니다.
    • 객체의 소유자는 버킷 소유자로 설정되므로, 해당 버킷의 소유자가 객체에 대한 모든 액세스 권한을 가집니다.
    • 다른 AWS 계정에서 객체를 업로드한 경우에도, 액세스 권한을 설정하는 주체는 버킷 소유자입니다.
  • Object Writer
    • 객체의 실제 생성자를 객체 소유자로 설정하는 방식
    • 객체를 생성한 AWS 계정이 해당 객체의 소유자가 됩니다.
    • 객체의 생성자가 해당 객체에 대한 액세스 권한을 조절하며, 일반적으로 버킷 소유자는 해당 객체에 대한 권한을 가지지 않습니다.
    • 다른 AWS 계정에서 객체를 업로드한 경우, 그 계정이 객체의 소유자가 됩니다.

"Bucket owner preferred"를 선택하면 버킷 소유자가 객체에 대한 소유자로 설정되어 액세스를 통제하게 되고, "Object writer"를 선택하면 객체를 생성한 계정이 객체의 소유자로 설정되어 액세스를 조절할 수 있습니다. 


Hello.txt 파일 (아무파일이나 상관없음) 을 앞서 생성한 S3 Bucket 에 업로드합니다.

 

 

 

 

 

 

 

 

 

 

 
Comments