와일드카드 주체와 Put 작업을 지정한 OSS 버킷 정책

OSS 업로드와 설정 변경 권한을 필요한 주체로 제한하여 원치 않는 콘텐츠 저장과 운영 변경을 방지합니다.

설명

OSS의 업로드나 설정 변경 작업을 모든 주체에게 허용하면, 적절한 접근 제한이 없는 경우 신뢰하지 않는 주체가 데이터를 저장하거나 구성을 변경할 수 있습니다. 실제 권한은 작업, 대상 리소스, 조건, 명시적 거부와 공개 접근 차단 설정에 따라 달라집니다.

PutObject는 객체를 업로드하며, 다른 Put 작업은 설정을 변경할 수 있습니다. 작업마다 제약도 다릅니다. 예를 들어 PutObjectACL은 객체에 읽기·쓰기 권한이 있는 버킷 소유자만 호출할 수 있으므로, 와일드카드 주체를 지정했다고 해서 누구나 기존 객체의 ACL을 바꿀 수 있는 것은 아닙니다.

잠재적 영향

  • 실제 업로드 권한이 그 권한을 필요로 하지 않는 주체에게 부여되면 원치 않는 객체가 추가되고 저장 비용이 늘어날 수 있습니다.
  • 같은 객체 이름으로 쓰기가 허용되면 애플리케이션이 읽는 내용이 바뀔 수 있습니다. 버전 관리가 활성화되어 있어도 현재 버전은 바뀔 수 있으며, 이것이 이전 버전 삭제를 의미하지는 않습니다.
  • 설정 변경 권한이 실제로 적용되면 접근 제어 등 운영 설정이 바뀔 수 있습니다. 작업별 소유권과 권한 제약을 함께 확인해야 합니다.

해결 방법

  • 업로드와 설정 변경에 필요한 주체와 작업을 제한하고, 작업별로 버킷 또는 객체의 리소스 경로를 지정하세요. 공개 읽기가 필요하더라도 공개 쓰기를 함께 허용하지 마세요.
  • 조건과 명시적 거부, ACL, 공개 접근 차단을 함께 검토하고, 각 API의 소유권 및 권한 요건을 확인하세요. private ACL만으로 정책 기반 접근이 모두 차단되지는 않습니다.
  • 공급자 1.220.0부터 인라인 policy는 사용 중단 대상으로 지정되었습니다. 새 구성은 alicloud_oss_bucket_policy로 관리하고, 기존 정책을 옮긴 뒤 필요한 업로드와 접근 제한을 검증하세요.

예시

다음은 공급자 1.293.0에서 지원하는 기존 인라인 정책 형식의 예시입니다. 사용 가능한 고유한 버킷 이름을 선택하고 정책의 객체 경로도 함께 변경하세요. 두 예시 모두 권한을 모든 주체에게 지정하므로 그대로 운영에 적용하지 마세요.

업로드와 객체 ACL 변경 권한

hcl
resource "alicloud_oss_bucket" "bucket-policy4" {
  bucket = "bucket-4-policy"
  acl    = "private"

  policy = <<POLICY
  {"Statement": [
    {
        "Action": [
            "oss:PutObjectAcl", "oss:PutObject"
        ],
        "Effect": "Allow",
        "Principal": [
            "*"
        ],
        "Resource": [
            "acs:oss:*:*:bucket-4-policy/*"
        ]
    }
  ],
   "Version":"1"}
  POLICY
}

업로드는 필요한 계정이나 역할로 제한하고 객체 경로도 필요한 범위로 줄이세요. oss:PutObjectAcl에는 별도의 소유권 및 권한 제약이 적용되며, 업로드만 필요한 주체에게 함께 부여할 권한이 아닙니다.

멀티파트 업로드 취소 권한

hcl
resource "alicloud_oss_bucket" "bucket-policy1" {
  bucket = "bucket-1-policy"
  acl    = "private"

  policy = <<POLICY
  {"Statement": [
    {
        "Action": [
            "oss:AbortMultipartUpload"
        ],
        "Effect": "Allow",
        "Principal": [
            "*"
        ],
        "Resource": [
            "acs:oss:*:*:bucket-1-policy/*"
        ]
    }
  ],
   "Version":"1"}
  POLICY
}

oss:AbortMultipartUpload는 유효한 업로드 ID와 권한이 있으면 멀티파트 업로드를 취소하고 이미 업로드된 부분 데이터를 삭제합니다. 완료된 객체를 삭제하지는 않지만 업로드를 중단시킬 수 있으므로, 이 권한도 필요한 운영 주체로 제한하세요.

참조