모든 AWS 계정에 읽기를 허용하는 S3 ACL

authenticated-read ACL은 소유자 계정에만 접근을 제한하지 않습니다. 모든 AWS 계정의 읽기 권한이 필요한지 확인하세요.

설명

authenticated-read ACL은 소유자에게 모든 ACL 권한을 주고 AuthenticatedUsers 그룹에 READ를 줍니다. 이 그룹은 서명된 요청을 보내는 모든 AWS 계정을 뜻하며, 소유자의 계정이나 조직 안의 사용자로 제한되지 않습니다. 익명 접근을 허용하는 public-read와는 구분되지만 내부 사용자 전용 설정은 아닙니다.

버킷의 READ는 버킷 내 객체 목록 조회를, 객체의 READ는 그 객체의 내용과 메타데이터 읽기를 허용합니다. 실제 권한은 객체 소유권(Object Ownership), 공개 접근 차단(Block Public Access)과 정책에도 영향을 받습니다. ACL이 비활성화된 버킷에서는 ACL이 접근 권한을 부여하지 않습니다.

잠재적 영향

  • 버킷 ACL이 실제로 적용되면 목록을 볼 필요가 없는 다른 AWS 계정에도 객체 이름이나 목록 정보가 공유될 수 있습니다.
  • 객체 ACL이 실제로 적용되면 해당 객체의 내용과 메타데이터가 의도한 계정 범위를 넘어 공개될 수 있습니다. 인증된 요청이라는 사실만으로 신뢰할 수 있는 사용자라고 판단해서는 안 됩니다.

해결 방법

  • 모든 AWS 계정에 읽기를 허용할 필요가 없는 버킷과 객체에서 authenticated-read 권한을 제거하세요. 필요한 계정과 역할은 정책에서 명시적으로 허용하세요.
  • ACL에 의존하는 정상적인 접근을 정책으로 이전한 뒤, 가능하면 ACL을 비활성화하고 공개 접근 차단을 적용하세요.
  • 실제 버킷과 객체 ACL 및 정책을 확인하고, 필요한 접근은 유지되며 원하지 않는 계정의 접근은 거부되는지 검증하세요. 버킷 ACL 변경만으로 객체 ACL이나 다른 정책의 권한까지 제거되지는 않습니다.

예시

현재 버킷 관리 모듈을 사용하며, bucket_name은 관리 대상 버킷으로 지정하세요. ACL이 활성화된 기존 버킷을 전제로 합니다. 공개 접근 차단 설정에 따라 첫 ACL이 거부되거나 무시될 수 있으며, 예제를 적용하기 위해 보호 설정을 완화해서는 안 됩니다.

모든 AWS 계정의 목록 조회

yaml
- name: Set a bucket ACL
  amazon.aws.s3_bucket:
    name: "{{ bucket_name }}"
    state: present
    acl: authenticated-read

이 ACL이 적용되면 서명된 요청을 보내는 모든 AWS 계정에 버킷 내 객체 목록 조회를 허용합니다. 모든 객체의 내용 읽기를 허용하는 버킷 ACL은 아닙니다.

소유자 전용 ACL

yaml
- name: Set a bucket ACL
  amazon.aws.s3_bucket:
    name: "{{ bucket_name }}"
    state: present
    acl: private

소유자에게만 ACL 권한을 부여합니다. 정책으로 허용된 접근은 별도로 유지될 수 있습니다. 이미 ACL을 비활성화한 버킷이라면 ACL을 다시 설정하지 말고 정책과 실제 접근 권한을 관리하세요.

참조