와일드카드 주체를 사용하는 S3 버킷 정책

S3 버킷 정책의 와일드카드 주체를 점검하고 작업, 조건, 명시적 거부, 공개 접근 차단 설정을 함께 확인합니다.

설명

S3 버킷 정책의 Principal: "*"는 다른 AWS 계정뿐 아니라 익명 요청도 포함할 수 있습니다. 필요한 범위보다 넓게 접근을 허용하면 의도하지 않은 주체가 객체를 읽거나 변경할 수 있습니다. 실제 권한은 허용한 작업, 리소스, 조건, 명시적 거부와 S3 Block Public Access 설정에 따라 달라지므로 정책 전체를 함께 검토해야 합니다.

잠재적 영향

  • 의도하지 않은 주체에게 객체 읽기가 실제로 허용되면 파일, 로그, 백업 등의 정보가 노출될 수 있습니다.
  • 쓰기나 삭제 작업이 허용되면 데이터 무결성이나 가용성에 영향을 줄 수 있습니다. 와일드카드 주체만으로 모든 작업이 허용되는 것은 아닙니다.

해결 방법

  • 필요한 계정, 역할, 서비스 주체를 지정하고 각 작업과 리소스 범위를 최소한으로 제한하세요.
  • 와일드카드를 조건과 함께 사용해야 한다면 조건의 키, 연산자, 값이 의도한 요청만 허용하는지 검토하세요.
  • 공개 접근이 필요하지 않다면 S3 Block Public Access를 적용하고 계정과 버킷에서 실제로 적용되는 설정을 함께 확인하세요. 필요한 외부 연동이 유지되는지도 점검하세요.

예시

첫 예제는 Resource에 SQS 리소스를 가리키는 ${aws_sqs_queue.q.arn}을 사용하므로 유효한 S3 버킷 정책으로 배포할 수 없습니다. 실제 S3 리소스 ARN을 지정해야 합니다. 두 번째 예제의 계정과 역할 ARN도 실제 값으로 바꾸고 관련 권한과 공개 접근 차단 설정을 확인하세요.

변경 전

yaml
- name: Create a simple s3 bucket with a policy
  amazon.aws.s3_bucket:
    name: mys3bucket
    policy:
      Version: "2012-10-17"
      Id: "sqspolicy"
      Statement:
        - Sid: First
          Effect: Allow
          Principal: "*"
          Action: "*"
          Resource: ${aws_sqs_queue.q.arn}

변경 후

yaml
- name: Create a simple s3 bucket with a policy
  amazon.aws.s3_bucket:
    name: mys3bucket
    policy:
      Version: "2012-10-17"
      Id: "bucket-policy"
      Statement:
        - Sid: AllowReadFromSpecificRole
          Effect: Allow
          Principal:
            AWS: "arn:aws:iam::123456789012:role/app-bucket-reader"
          Action:
            - "s3:GetObject"
          Resource: "arn:aws:s3:::mys3bucket/*"

설명:

  • 변경 전: Principal: "*"와 Action: "*"는 주체와 작업을 제한하지 않는 조합입니다. 다만 잘못된 Resource 때문에 이 예제 자체를 유효한 접근 허용 정책으로 사용할 수는 없습니다.
  • 변경 후: 이 정책 구문은 지정한 역할에 해당 버킷 객체의 s3:GetObject만 허용합니다. 역할에 적용되는 다른 정책이 추가 권한을 부여하는지도 확인하세요.

참조