설명
public-read ACL은 소유자 외의 모든 사용자에게 READ 권한을 부여하며 익명 요청도 포함합니다. 버킷의 READ는 버킷 내 객체 목록 조회를, 객체의 READ는 해당 객체의 내용과 메타데이터 읽기를 허용합니다. 버킷 ACL만으로 모든 객체 내용을 읽을 수 있는 것은 아닙니다.
실제 권한은 객체 소유권(Object Ownership), 공개 접근 차단(Block Public Access)과 정책의 영향을 받습니다. BucketOwnerEnforced로 ACL을 비활성화하면 ACL은 권한 평가에 사용되지 않으며 ACL 설정 요청이 거부될 수 있습니다.
잠재적 영향
- 공개 읽기가 실제로 허용되면 외부 사용자가 객체 이름이나 공개할 의도가 없던 객체 내용을 확인할 수 있습니다.
public-read-write는 읽기뿐 아니라 버킷에 새 객체를 쓰는 권한도 부여합니다. 기존 객체의 덮어쓰기·삭제는 버킷 및 객체 소유자의 권한에 따른 제한을 받지만, 불필요한 업로드도 비용과 운영 문제를 일으킬 수 있습니다.
해결 방법
- 공개할 필요가 없는 버킷과 객체에서 공개 ACL 권한을 제거하고, 필요한 계정과 역할에만 정책으로 접근을 허용하세요.
- 필요한 ACL 권한을 정책으로 이전한 뒤 가능하면 ACL을 비활성화하고 공개 접근 차단을 적용하세요. 기존 접근 경로를 먼저 확인해 정상적인 사용이 중단되지 않도록 하세요.
- 실제 버킷과 객체의 ACL 및 정책을 확인하고, 필요한 접근은 유지되며 원하지 않는 접근은 거부되는지 검증하세요. 버킷 ACL만 바꾸어서는 객체 ACL이나 별도 정책의 권한이 제거되지 않습니다.
예시
아래는 현재 버킷 관리 모듈의 예시입니다. bucket_name에는 관리 대상 버킷을 지정하세요. 두 예제는 ACL이 활성화된 기존 버킷을 전제로 하며, 공개 ACL은 공개 접근 차단 설정에 따라 거부되거나 무시될 수 있습니다. 첫 예제를 적용하려고 기존 보호 설정을 완화하지 마세요.
변경 전
yaml
- name: Set a bucket ACL
amazon.aws.s3_bucket:
name: "{{ bucket_name }}"
state: present
acl: public-read
이 ACL이 적용되면 익명 사용자도 버킷 내 객체 목록을 조회할 수 있습니다. 개별 객체의 읽기 권한은 별도로 확인해야 합니다.
변경 후
yaml
- name: Set a bucket ACL
amazon.aws.s3_bucket:
name: "{{ bucket_name }}"
state: present
acl: private
공개 ACL 권한을 제거하고 소유자에게만 ACL 권한을 부여합니다. 다른 정책으로 허용한 접근은 유지될 수 있으므로 전체 권한도 함께 점검하세요. 이미 ACL이 비활성화된 버킷에는 ACL 변경을 요청할 필요가 없습니다.