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

S3 객체 쓰기와 설정 변경 권한을 필요한 주체와 리소스로 제한해 원치 않는 업로드와 변경을 방지합니다.

설명

버킷 정책에서 Principal: "*"에 Put 계열 작업을 허용하면 의도하지 않은 주체가 객체를 쓰거나 설정을 변경할 수 있습니다. 실제로 가능한 작업은 지정한 작업 이름과 리소스, 조건, 명시적 거부와 Block Public Access 설정에 따라 달라집니다.

Put 계열 작업이 모두 객체 업로드를 의미하지는 않습니다. s3:PutObject는 객체를 쓰는 작업이지만, 다른 작업은 별도의 설정을 변경할 수 있으므로 각 작업에 필요한 권한을 구분해야 합니다.

잠재적 영향

  • 객체 쓰기 권한이 필요 없는 주체에게 실제로 s3:PutObject가 허용되면 새 객체를 생성하거나 같은 키의 현재 내용을 바꿀 수 있습니다. 버전 관리와 조건부 요청 등 다른 설정도 결과에 영향을 줍니다.
  • 애플리케이션이 사용하는 객체가 변경되면 제공되는 콘텐츠나 처리 결과에 영향을 줄 수 있습니다. 다른 Put 계열 작업의 영향은 그 작업이 변경하는 리소스와 설정에 따라 판단해야 합니다.
  • 불필요한 업로드가 허용되면 저장 공간과 요청 비용이 늘어날 수 있습니다. Put 계열 권한만으로 읽기나 삭제까지 허용되는 것은 아닙니다.

해결 방법

  • 실제 필요한 작업 이름을 확인하고, 쓰기 또는 설정 변경 권한을 필요한 주체와 리소스 ARN에만 부여하세요.
  • 조건, 명시적 거부, Block Public Access를 포함한 전체 정책으로 실제 권한을 확인하세요.
  • 객체 업로드가 필요한 경우에는 업로드된 데이터를 사용하는 서비스의 검증 절차와 저장 비용도 함께 점검하세요.

예시

아래의 기존 예제는 그대로 배포할 수 없습니다. Version: "2020-10-07"은 지원되지 않는 정책 언어 버전이며, PutObject에는 서비스 접두사가 없고 Resource도 빠져 있습니다. 실제 정책에는 지원되는 버전, s3:PutObject 같은 정확한 작업 이름, 올바른 대상 ARN을 지정하세요.

변경 전

yaml
- name: Bucket
  amazon.aws.s3_bucket:
    name: mys3bucket
    state: present
    policy:
      Version: "2020-10-07"
      Statement:
        - Effect: Allow
          Action: PutObject
          Principal: "*"

변경 후

yaml
- name: Bucket
  amazon.aws.s3_bucket:
    name: mys3bucket
    state: present
    policy:
      Version: "2020-10-07"
      Statement:
        - Effect: Allow
          Action: PutObject
          Principal:
            AWS: "arn:aws:iam::123456789012:role/upload-service-role"

설명:

  • 첫 번째 예시: Principal: "*"로 객체 쓰기의 주체를 제한하지 않습니다. 정책 형식을 고칠 때 권한을 부여할 주체와 객체 범위도 함께 제한하세요.
  • 두 번째 예시: 업로드를 담당하는 역할을 지정합니다. 정책 형식을 고치고 실제 역할 ARN과 대상 객체 ARN을 사용한 뒤, 필요한 업로드는 허용되고 원치 않는 쓰기는 거부되는지 확인하세요.

참조