설명
버킷 정책에서 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을 사용한 뒤, 필요한 업로드는 허용되고 원치 않는 쓰기는 거부되는지 확인하세요.