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

OSS 삭제 권한을 필요한 계정과 역할로 제한하여 의도하지 않은 데이터 손실과 설정 삭제를 방지합니다.

설명

OSS 버킷 정책에서 삭제 작업을 모든 주체에게 허용하면, 적절한 접근 제한이 없는 경우 삭제 권한이 필요 없는 주체도 데이터나 설정을 삭제할 수 있습니다. 실제 권한은 작업, 대상 리소스, 조건, 명시적 거부 및 공개 접근 차단 설정에 따라 달라집니다.

버킷, 객체와 설정의 삭제는 서로 다른 작업입니다. 특히 DeleteBucket은 버킷 소유자만 실행할 수 있고 버킷이 비어 있어야 합니다. 이 권한을 지정했다고 해서 누구나 버킷과 그 안의 데이터를 한꺼번에 삭제할 수 있는 것은 아닙니다.

잠재적 영향

  • 실제 객체 삭제 권한이 그 권한을 필요로 하지 않는 주체에게 부여되면 데이터나 애플리케이션이 사용하는 객체가 삭제될 수 있습니다.
  • 버킷 설정을 삭제하는 작업이 허용되면 해당 설정이 사라져 운영 방식에 영향을 줄 수 있습니다. 버킷 자체의 삭제와 객체 또는 설정의 삭제는 구분해야 합니다.
  • 삭제가 실제로 발생하면 데이터 복구와 서비스 장애 대응이 필요할 수 있습니다. 버전 관리나 보존 정책의 효과도 작업과 대상에 따라 별도로 확인해야 합니다.

해결 방법

  • 필요한 계정이나 역할에 필요한 삭제 작업과 리소스만 허용하세요. 공개 접근을 위한 정책에 불필요한 삭제 권한을 포함하지 마세요.
  • 객체와 버킷의 리소스 표현을 구분하고, 조건과 명시적 거부, ACL, 공개 접근 차단을 함께 검토하세요. private ACL만으로 정책에 의한 접근이 모두 차단되지는 않습니다.
  • 공급자 1.220.0부터 인라인 policy는 사용 중단 대상으로 지정되었습니다. 새 구성은 alicloud_oss_bucket_policy로 관리하고, 전환 후에도 필요한 권한과 제한이 유지되는지 검증하세요.

예시

다음 예시는 공급자 1.293.0에서 지원하는 기존 인라인 정책 형식입니다. 사용 가능한 고유한 버킷 이름을 선택하고 정책의 리소스 경로도 함께 변경하세요.

버킷 삭제와 업로드 작업 지정

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

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

oss:DeleteBucket에는 소유자와 빈 버킷이라는 제약이 계속 적용됩니다. 함께 지정한 oss:PutObject는 객체 업로드 권한이므로, 공개 접근 차단 등을 고려하여 필요한 업로더에게만 허용하세요.

목록 조회만 허용하는 구문

hcl
resource "alicloud_oss_bucket" "bucket-policy2" {
  bucket = "bucket-2-policy"
  acl    = "private"

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

이 구문은 삭제 권한 대신 oss:ListObjects를 허용합니다. 다른 정책의 삭제 권한을 제거하는 효과는 없으며, 공개 목록 조회가 실제로 허용되면 객체 이름 등이 노출될 수 있습니다. 목록 공개도 업무상 필요한지 확인하세요.

참조