Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Cloud Storage용 Firebase 보안 규칙 언어의 핵심 구문 알아보기

Cloud Storage용 Firebase 보안 규칙을 사용하면 Cloud Storage 버킷에 저장된 객체에 대한 액세스를 제어할 수 있습니다. 유연한 규칙 구문을 사용하면 Cloud Storage 버킷에 대한 모든 쓰기에서 특정 파일에 대한 작업에 이르기까지 모든 작업을 제어하는 ​​규칙을 만들 수 있습니다.

이 가이드에서는 완전한 규칙 집합을 만들기 위한 Cloud Storage 보안 규칙의 기본 구문과 구조를 설명합니다.

서비스 및 데이터베이스 선언

Cloud Storage에 대한 Firebase 보안 규칙은 항상 다음 선언으로 시작합니다.

service firebase.storage {
    // ...
}

service firebase.storage 선언은 클라우드 경우 FireStore 같은 다른 제품에 대한 클라우드 스토리지 보안 규칙과 규칙 간의 충돌을 방지 클라우드 스토리지에 대한 규칙을 스코프.

기본 읽기/쓰기 규칙

기본 규칙은 구성 match 클라우드 스토리지 버킷, 파일 이름을 지정하는 매치 문을 식별 문 및이 allow 지정된 데이터를 읽고하는 것은 허용 될 때 식을 자세히. allow 식이 액세스하거나 허용 또는 거부되고있는 접근 방법 관련 (예를 들어, 읽기, 쓰기) 및 조건을 지정합니다.

당신의 기본 규칙 집합에서 첫 번째 match 문은 사용 {bucket} 규칙 프로젝트에서 모든 버킷에 적용 나타 내기 위해 와일드 카드 표현식입니다. 다음 섹션에서 와일드카드 일치의 개념에 대해 더 논의할 것입니다.

service firebase.storage {
  // The {bucket} wildcard indicates we match files in all Cloud Storage buckets
  match /b/{bucket}/o {
    // Match filename
    match /filename {
      allow read: if <condition>;
      allow write: if <condition>;
    }
  }
}

모든 match 문은 파일을 가리킵니다. 매치 문에서와 같이 특정 파일을 가리킬 수 있습니다 match /images/profilePhoto.png .

와일드카드 일치

하나의 파일을 가리키는에 additiont에서, 규칙과 같이 슬래시를 포함하여 이름에 특정 문자열 접두어, 어떤 파일을 가리 키도록 와일드 카드를 사용할 수 match /images/{imageId} .

위의 예에서, 경기 문은 사용 {imageId} 와일드 카드 구문을. 이 수단 규칙은 어떤 파일에 적용 /images/ 와 같은 이름의 시작에 /images/profilePhoto.png 또는 /images/croppedProfilePhoto.png . (가) 때 allow 경기 문에 표현식 평가의 imageId 변수는 다음과 같은 이미지 파일 이름에 해결할 수 profilePhoto.png 또는 croppedProfilePhoto.png .

와일드 카드 변수는 내부에서 참조 할 수있는 match 파일 이름이나 경로 인증을 제공 :

// Another way to restrict the name of a file
match /images/{imageId} {
  allow read: if imageId == "profilePhoto.png";
}

계층적 데이터

이전에 말했듯이 Cloud Storage 버킷에는 계층 구조가 없습니다. 그러나 파일 이름에 슬래시를 포함하는 파일 명명 규칙을 사용하여 중첩된 일련의 디렉터리 및 하위 디렉터리처럼 보이는 구조를 모방할 수 있습니다. Firebase 보안 규칙이 이러한 파일 이름과 상호 작용하는 방식을 이해하는 것이 중요합니다.

모든 시작의 이름을 가진 파일의 일련의 상황을 고려 /images/ 줄기를. 온 정의 된 액세스 제어 있도록 중포 기지 보안 규칙 만 일치하는 파일 이름에 적용 /images/ 에 적용되지 않는 줄기 /mp3s/ 줄기. 대신 다른 파일 이름 패턴과 일치하는 명시적 규칙을 작성하십시오.

service firebase.storage {
  match /b/{bucket}/o {
    match /images/{imageId} {
      allow read, write: if <condition>;
    }

    // Explicitly define rules for the 'mp3s' pattern
    match /mp3s/{mp3Id} {
      allow read, write: if <condition>;
    }
  }
}

중첩되면 match 문을 내부의 경로 match 문은 항상 외부의 경로에 추가됩니다 match 문. 따라서 다음 두 규칙 집합은 동일합니다.

service firebase.storage {
  match /b/{bucket}/o {
    match /images {
      // Exact match for "images/profilePhoto.png"
      match /profilePhoto.png {
        allow write: if <condition>;
      }
    }
  }
}
service firebase.storage {
  match /b/{bucket}/o {
    // Exact match for "images/profilePhoto.png"
    match /images/profilePhoto.png {
      allow write: if <condition>;
      }
  }
}

재귀 일치 와일드카드

파일명의 끝과 일치 리턴 스트링, 다중 세그먼트 와일드 카드가 추가로 더 복잡한 매칭으로 선언 될 수 와일드 카드 이외에 =** 같은 와일드 이름 {path=**} :

// Partial match for files that start with "images"
match /images {

  // Exact match for "images/**"
  // e.g. images/users/user:12345/profilePhoto.png is matched
  // images/profilePhoto.png is also matched!
  match /{allImages=**} {
    // This rule matches one or more path segments (**)
    // allImages is a path that contains all segments matched
    allow read: if <other_condition>;
  }
}

여러 규칙이 파일과 일치하는 경우, 결과는이다 OR 모든 규칙 평가의 결과. 파일에 evalutes에 일치하는 규칙이있는 경우 즉, true , 결과는 true .

어느 경우 위의 규칙에서 파일 "이미지 / profilePhoto.png는"읽을 수있는 condition 또는 other_condition 결과에만 적용됩니다 true로 평가 파일 "12345 / profilePhoto.png 이미지 / 사용자 / 사용자가"하면서, other_condition .

Cloud Storage 보안 규칙은 계단식으로 적용되지 않으며 요청 경로가 지정된 규칙이 있는 경로와 일치할 때만 규칙이 평가됩니다.

버전 1

Firebase 보안 규칙은 기본적으로 버전 1을 사용합니다. 버전 1에서 재귀 와일드카드는 0개 이상의 요소가 아닌 하나 이상의 파일 이름 요소와 일치합니다. 따라서, match /images/{filenamePrefixWildcard}/{imageFilename=**} /images/profilePics/profile.png 같은 파일 이름을 일치하지만 /images/badge.png 없습니다. 사용 /images/{imagePrefixorFilename=**} 대신.

재귀 와일드카드는 일치 문의 끝에 와야 합니다.

더 강력한 기능을 사용하려면 버전 2를 사용하는 것이 좋습니다.

버전 2

Firebase 보안 규칙 버전 2에서 재귀 와일드 카드는 0개 이상의 경로 항목과 일치합니다. 따라서 /images/{filenamePrefixWildcard}/{imageFilename=**} 일치는 /images/profilePics/profile.png 및 /images/badge.png을는 파일 이름.

당신은 선택-에 있어야 버전 2에 추가하여 rules_version = '2'; 보안 규칙 상단:

rules_version = '2';
service cloud.storage {
  match /b/{bucket}/o {
   ...
 }
}

매치 문당 최대 하나의 재귀 와일드카드를 가질 수 있지만 버전 2에서는 이 와일드카드를 매치 문의 아무 곳에나 배치할 수 있습니다. 예를 들어:

rules_version = '2';
service firebase.storage {
 match /b/{bucket}/o {
   // Matches any file in a songs "subdirectory" under the
   // top level of your Cloud Storage bucket.
   match /{prefixSegment=**}/songs/{mp3filenames} {
     allow read, write: if <condition>;
   }
  }
}

세분화된 작업

일부 상황에서는 분해하는 것이 유용 readwrite 더 세부적인 운영에. 예를 들어 앱에서 파일 삭제와 파일 생성에 대해 다른 조건을 적용하려고 할 수 있습니다.

read 동작은으로 나눌 수 있습니다 getlist .

write 규칙으로 나눌 수 있습니다 create , updatedelete :

service firebase.storage {
  match /b/{bucket}/o {
    // A read rule can be divided into read and list rules
    match /images/{imageId} {
      // Applies to single document read requests
      allow get: if <condition>;
      // Applies to list and listAll requests (Rules Version 2)
      allow list: if <condition>;

    // A write rule can be divided into create, update, and delete rules
    match /images/{imageId} {
      // Applies to writes to nonexistent files
      allow create: if <condition>;

      // Applies to updates to file metadata
      allow update: if <condition>;

      // Applies to delete operations
      allow delete: if <condition>;
    }
  }
 }
}

겹치는 일치 문

파일 이름이 하나 이상 일치하는 것이 가능 match 문을. 다중이 경우에 allow 표현이 요청과 일치, 액세스는 조건이있는 경우 허용되는 true :

service firebase.storage {
  match b/{bucket}/o {
    // Matches any filename containing string '/images/'.
    match /images/{imageId} {
      allow read, write: if false;
    }

    // Matches all filenames containing string `/images/`
    match /images/{imageId=**} {
      allow read, write: if true;
    }
  }
}

위의 예에서, 모든 읽기 및 문자열로 파일에 기록 /images/ 두 번째 규칙은 항상 있기 때문에 어디서든 파일 이름에 허용되는 true 첫 번째 규칙은 항상 비록 false .

규칙은 필터가 아닙니다.

데이터를 보호하고 파일 작업을 수행하기 시작하면 보안 규칙은 필터가 아님을 명심하십시오. 파일 이름 패턴과 일치하는 파일 집합에 대해 작업을 수행할 수 없으며 Cloud Storage는 현재 클라이언트에 액세스 권한이 있는 파일에만 액세스할 것으로 예상합니다.

예를 들어 다음 보안 규칙을 사용합니다.

service firebase.storage {
  match /b/{bucket}/o {
    // Allow the client to read files with contentType 'image/png'
    match /aFileNamePrefix/{aFileName} {
      allow read: if resource.contentType == 'image/png';
    }
  }
}

거부 : 결과 집합 파일을 포함 할 수 있기 때문에이 규칙은 다음과 같은 요청을 거부 contentType 아닌 image/png :

편물
filesRef = storage.ref().child("aFilenamePrefix");

filesRef.listAll()
    .then(function(result) {
      console.log("Success: ", result.items);
    })
});

Cloud Storage 보안 규칙의 규칙은 잠재적인 결과에 대해 각 쿼리를 평가하고 클라이언트에게 읽기 권한이 없는 파일을 반환할 수 있는 경우 요청에 실패합니다. 액세스 요청은 규칙에서 설정한 제약 조건을 따라야 합니다.

다음 단계

Cloud Storage용 Firebase 보안 규칙에 대한 이해를 심화할 수 있습니다.

  • 규칙 언어, 동적의 다음 주요 개념을 알아 조건 , 규칙 체크 사용자 인증을하자, 기존 및 수신 데이터를 비교, 입력 데이터의 유효성을 검사, 그리고 더.

  • 일반적인 보안 사용 사례 및 검토 중포 기지 보안 규칙 정의 주소 그 것을 .

Cloud Storage와 관련된 Firebase 보안 규칙 사용 사례를 탐색할 수 있습니다.