와일드카드 주체와 삭제 작업을 포함한 S3 버킷 정책

S3 삭제 권한을 필요한 주체로 제한하고 버전 관리와 보존 정책을 함께 검토해 데이터 손실 위험을 줄입니다.

설명

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을 실제 값으로 바꾼 뒤, 필요한 객체에만 삭제 권한이 적용되는지 확인하세요.

참조