설명
S3 삭제 권한은 실제로 삭제가 필요한 주체에게만 부여해야 합니다. 버킷 정책에서 Principal: "*"에 삭제 작업을 허용하면 익명 요청을 포함한 원치 않는 접근까지 허용할 위험이 있습니다. 실제 삭제 가능 여부는 허용한 작업과 리소스, 조건, 명시적 거부와 Block Public Access 설정에 따라 달라집니다.
잠재적 영향
- 실제 정책 평가에서 삭제 권한이 필요 없는 주체에게 객체 삭제가 허용되면 데이터 손실이나 서비스 중단으로 이어질 수 있습니다.
- 로그와 백업 객체를 삭제할 수 있는 권한은 조사와 복구에 영향을 줄 수 있습니다. 삭제 권한만으로 객체 읽기 권한까지 부여되는 것은 아닙니다.
- 버전 관리가 활성화된 일반 S3 버킷에서는 보통 삭제 마커가 추가됩니다. 특정 버전의 영구 삭제에는 별도의 버전 삭제 권한이 필요하므로, 영향은 버전 관리 상태와 실제 허용 작업에 따라 달라집니다.
해결 방법
- 필요한 삭제 작업과 접근 주체를 확인하고, 권한을 해당 주체와 리소스 ARN으로 제한하세요.
- 조건, 명시적 거부, Block Public Access를 함께 점검해 실제 접근 범위를 확인하세요.
- 버전 삭제 권한과 보존 정책을 별도로 검토하고 복구 절차를 시험하세요. 버전 관리만으로 모든 삭제가 방지되지는 않습니다.
예시
아래의 기존 예제는 그대로 배포할 수 없습니다. Version: "2020-10-07"은 지원되는 정책 언어 버전이 아니고, DeleteObject에는 서비스 접두사가 없으며, Resource도 빠져 있습니다. 실제 정책에서는 지원되는 버전, s3:DeleteObject 같은 정확한 작업 이름, 대상 리소스를 지정하세요.
변경 전
yaml
- name: Bucket
amazon.aws.s3_bucket:
name: mys3bucket
state: present
policy:
Version: "2020-10-07"
Statement:
- Effect: Allow
Action: DeleteObject
Principal: "*"
변경 후
yaml
- name: Bucket
amazon.aws.s3_bucket:
name: mys3bucket
state: present
policy:
Version: "2020-10-07"
Statement:
- Effect: Allow
Action: DeleteObject
Principal:
AWS: "arn:aws:iam::123456789012:role/ops-bucket-admin"
설명:
- 첫 번째 예시:
Principal: "*"로 삭제 작업의 주체를 제한하지 않습니다. 앞서 설명한 형식 문제를 고치더라도 이런 권한 범위가 필요한지 검토해야 합니다. - 두 번째 예시: 특정 역할을 삭제 작업의 주체로 지정합니다. 정책 형식 문제를 고치고 역할 ARN을 실제 값으로 바꾼 뒤, 필요한 객체에만 삭제 권한이 적용되는지 확인하세요.