설명
OSS의 업로드나 설정 변경 작업을 모든 주체에게 허용하면, 적절한 접근 제한이 없는 경우 신뢰하지 않는 주체가 데이터를 저장하거나 구성을 변경할 수 있습니다. 실제 권한은 작업, 대상 리소스, 조건, 명시적 거부와 공개 접근 차단 설정에 따라 달라집니다.
PutObject는 객체를 업로드하며, 다른 Put 작업은 설정을 변경할 수 있습니다. 작업마다 제약도 다릅니다. 예를 들어 PutObjectACL은 객체에 읽기·쓰기 권한이 있는 버킷 소유자만 호출할 수 있으므로, 와일드카드 주체를 지정했다고 해서 누구나 기존 객체의 ACL을 바꿀 수 있는 것은 아닙니다.
잠재적 영향
- 실제 업로드 권한이 그 권한을 필요로 하지 않는 주체에게 부여되면 원치 않는 객체가 추가되고 저장 비용이 늘어날 수 있습니다.
- 같은 객체 이름으로 쓰기가 허용되면 애플리케이션이 읽는 내용이 바뀔 수 있습니다. 버전 관리가 활성화되어 있어도 현재 버전은 바뀔 수 있으며, 이것이 이전 버전 삭제를 의미하지는 않습니다.
- 설정 변경 권한이 실제로 적용되면 접근 제어 등 운영 설정이 바뀔 수 있습니다. 작업별 소유권과 권한 제약을 함께 확인해야 합니다.
해결 방법
- 업로드와 설정 변경에 필요한 주체와 작업을 제한하고, 작업별로 버킷 또는 객체의 리소스 경로를 지정하세요. 공개 읽기가 필요하더라도 공개 쓰기를 함께 허용하지 마세요.
- 조건과 명시적 거부, ACL, 공개 접근 차단을 함께 검토하고, 각 API의 소유권 및 권한 요건을 확인하세요.
privateACL만으로 정책 기반 접근이 모두 차단되지는 않습니다. - 공급자 1.220.0부터 인라인
policy는 사용 중단 대상으로 지정되었습니다. 새 구성은alicloud_oss_bucket_policy로 관리하고, 기존 정책을 옮긴 뒤 필요한 업로드와 접근 제한을 검증하세요.
예시
다음은 공급자 1.293.0에서 지원하는 기존 인라인 정책 형식의 예시입니다. 사용 가능한 고유한 버킷 이름을 선택하고 정책의 객체 경로도 함께 변경하세요. 두 예시 모두 권한을 모든 주체에게 지정하므로 그대로 운영에 적용하지 마세요.
업로드와 객체 ACL 변경 권한
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에는 별도의 소유권 및 권한 제약이 적용되며, 업로드만 필요한 주체에게 함께 부여할 권한이 아닙니다.
멀티파트 업로드 취소 권한
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와 권한이 있으면 멀티파트 업로드를 취소하고 이미 업로드된 부분 데이터를 삭제합니다. 완료된 객체를 삭제하지는 않지만 업로드를 중단시킬 수 있으므로, 이 권한도 필요한 운영 주체로 제한하세요.