[AWS] S3 객체 권한 변경 - PutObjectAcl

2025. 4. 12. 02:35·개발 (Development)/AWS

최근 업무 중에 Amazon S3에서 업로드한 파일에 대해 외부 사용자와 공유해야 할 일이 생겼습니다. 단순히 presigned URL로는 해결이 어려운 상황이었고, 결국 객체 자체의 접근 권한(ACL)을 변경해야 했습니다. 이때 처음 접한 개념이 바로 PutObjectAcl 이었습니다.

PutObjectAcl은 어떤 역할을 할까?

간단히 말하면, PutObjectAcl은 S3에 올라간 객체(파일)에 대해 누가 접근할 수 있는지를 설정하는 기능입니다. ACL(Access Control List)이라는 이름처럼, 객체별로 읽기/쓰기 권한을 세밀하게 제어할 수 있게 해줍니다.

처음에는 버킷 정책으로 충분하지 않을까 싶었는데, 버킷 단위와 객체 단위는 다르게 동작합니다. 실제로 특정 파일 하나만 공개해야 하는 경우라면, ACL을 사용하는 것이 더 간편했습니다.

직접 사용해본 예시

테스트용 파일 photo.jpg를 퍼블릭하게 공개하려면 다음과 같은 AWS CLI 명령어를 사용했습니다.

aws s3api put-object-acl \
  --bucket my-bucket \
  --key photo.jpg \
  --acl public-read

명령어를 실행하고 나니, 해당 파일을 웹 브라우저에서 바로 열 수 있게 되었습니다. 이처럼 public-read 옵션을 지정하면 누구나 접근 가능한 객체로 전환됩니다. 객체 URL만 알면 로그인 없이 접근 가능한 상태가 되죠.

주의할 점: 보안에 민감한 설정

직접 사용해보면서 가장 크게 느낀 점은 작은 설정 하나로 보안이 완전히 달라질 수 있다는 것입니다. PutObjectAcl로 객체 하나만 공개한다고 생각할 수 있지만, 잘못 설정되면 중요한 내부 파일도 외부에 노출될 위험이 있습니다.

CloudTrail 로그를 확인해보면, 실제로 PutObjectAcl 호출 기록이 남아 있어 누가 어떤 시점에 권한을 변경했는지 추적할 수 있었습니다. 팀원들과 협업할 때는 이런 이벤트를 기반으로 권한 변경 여부를 체크하는 것도 좋은 방법이 될 수 있겠다는 생각이 들었습니다.

마무리하며

PutObjectAcl은 S3의 권한 설정을 객체 단위로 세밀하게 제어할 수 있는 강력한 도구입니다. 하지만 그만큼 보안 리스크도 존재하므로 사용 시에는 다음을 꼭 고려해야 한다고 느꼈습니다:

  • CloudTrail을 통한 로그 기록 활성화
  • IAM 권한 최소화(불필요한 사용자에게 ACL 변경 권한 부여 금지)
  • 정기적인 권한 검토

저처럼 처음 사용해보는 분들이라면 테스트 환경에서 충분히 시도해본 후 실제 서비스에 적용하는 것을 추천드립니다.

반응형

'개발 (Development) > AWS' 카테고리의 다른 글

[AWS] AWS 환경에서 모델 학습 API 호출 시 Broken pipe 에러 해결 과정  (0) 2025.06.28
[AWS] AWS ECR에 MFA로 Docker 로그인 자동화하기 (.bat 파일)  (0) 2025.04.12
[AWS] AWS S3 버킷이 데이터 레이크인지 데이터 웨어하우스인지 확인하는 방법  (0) 2025.04.10
'개발 (Development)/AWS' 카테고리의 다른 글
  • [AWS] AWS 환경에서 모델 학습 API 호출 시 Broken pipe 에러 해결 과정
  • [AWS] AWS ECR에 MFA로 Docker 로그인 자동화하기 (.bat 파일)
  • [AWS] AWS S3 버킷이 데이터 레이크인지 데이터 웨어하우스인지 확인하는 방법
LoopThinker
LoopThinker
모르는 것을 알아가고, 아는 것을 더 깊게 파고드는 공간
  • LoopThinker
    CodeMemoir
    LoopThinker
  • 전체
    오늘
    어제
    • 분류 전체보기 (216)
      • 개발 (Development) (151)
        • Algorithm (1)
        • Angular (1)
        • AWS (4)
        • DeepSeek (2)
        • Docker (7)
        • Git (3)
        • Java (30)
        • JavaScript (4)
        • Kafka (5)
        • Kubernetes (4)
        • Linux (6)
        • PostgreSQL (37)
        • Python (26)
        • React (3)
        • TypeScript (3)
        • Vue.js (5)
        • General (10)
      • 데이터 분석 (Data Analysis) (1)
      • 알고리즘 문제 풀이 (Problem Solving.. (27)
      • 자격증 (Certifications) (24)
        • ADsP (14)
        • 정보처리기사 (4)
        • Linux Master (5)
        • SQLD (1)
      • 기술 동향 (Tech Trends) (10)
      • 기타 (Others) (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자바
    리눅스 마스터 2급 2차
    백준온라인저지
    ADsP
    JSON
    docker
    java
    PostgreSQL
    Vue.js
    백준자바
    javascript
    오답노트
    Linux master
    timescaledb
    백준
    리눅스 마스터 2급
    DevOps
    데이터분석
    MyBatis
    python
    Kubernetes
    백준알고리즘
    springboot
    Kafka
    JPA
    Linux
    typescript
    AWS
    deepseek
    pandas
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
LoopThinker
[AWS] S3 객체 권한 변경 - PutObjectAcl
상단으로

티스토리툴바