Cloud Storage용 Firebase 보안 규칙

다른 사용자가 사용할 수 있도록 파일을 저장할 수 있는 애플리케이션을 개발할 때 간단하고 쉽고 빠른 방법으로 이를 수행할 수 있는 기술 중 하나로 Firebase용 Cloud Storage(Firebase Storage라고도 함)를 발견했을 것입니다. 다른 옵션보다 Firebase 저장소를 선택하셨다면 축하드립니다. 그러나 간단한 방법으로 데이터를 저장하는 것 외에도 데이터가 안전한지 확인해야 합니다. Firebase 저장소에서 이를 수행하기 위해 이 기사의 주요 주제인 보안 규칙을 사용합니다.



보안 규칙





실시간 데이터베이스 규칙을 보거나 사용한 적이 있는 사람은 Firebase 콘솔의 저장소 규칙 탭에 액세스할 때 보안 규칙의 구조가 다르다는 것을 알 수 있습니다. 실시간 데이터베이스 규칙은 JSON 트리로 구성되는 반면 Cloud Storage 규칙은 따옴표 없이 JSON처럼 보이기 때문입니다.

service firebase.storage {
 match /b/{bucket}/o {
   match /{allPaths=**} {
     allow read, write: if request.auth != null;
   }
 }
}


이 조직은 Google Cloud Platform과 같은 일부 Cloud Firestore 서비스에서 사용됩니다. Realtime Database과 마찬가지로 Cloud Storage 보안 규칙을 사용하면 파일에 대한 읽기 및/또는 쓰기 작업을 제어할 수 있습니다. 또한 이러한 파일의 구조와 포함된 메타데이터를 제어할 수 있습니다.

Cloud Storage 보안 규칙을 사용하려면 allowmatch 2개의 예약어를 알아야 합니다.

허용하다



이름에서 알 수 있듯이 allow는 지정된 조건(선택 사항)에 따라 연산( read 또는 write )이 허용되는지 여부를 나타냅니다. 예를 들어:

// If no condition is specified, the rule becomes true

allow read;

// Use the if word to specify a condition:

allow read: if <condition>;

// You can also use a single condition for reading and writing

allow read, write: if <condition>;


간단한 규칙



테스트를 위해 실시간 데이터베이스 규칙( .write.read )을 모두 true로 설정하여 데이터베이스가 완전히 안전하지 않은 경우를 기억하십니까? Cloud Storage에서 이에 상응하는 것은 다음과 같습니다.

service firebase.storage {
 match /b/{bucket}/o {
   match /{allPaths=**} {
     allow read, write;
   }
 }
}


참고: 이렇게 하면 스토리지가 공개되므로 누구나(애플리케이션 사용자가 아니더라도) 클라우드 스토리지에서 파일을 저장하고 검색할 수 있습니다. 이 규칙은 테스트용으로만 사용하십시오.

위의 예와 반대로 수행하려면 실시간 데이터베이스에서 .write.readfalse에 넣습니다. 따라서 아무도(프로젝트 관리자를 제외하고) 데이터베이스에 액세스할 수 없습니다. Cloud Storage에서는 다음 규칙을 사용하여 이를 달성할 수 있습니다.

service firebase.storage {
 match /b/{bucket}/o {
   match /{allPaths=**} {
     allow read, write: if false;
   }
 }
}


실시간 데이터베이스에서 언제 auth!=null를 사용했습니까? 등록된 Firebase 인증 사용자만 데이터베이스에 액세스할 수 있도록 허용했습니다. Cloud Storage에서 다음을 수행할 수도 있습니다.

service firebase.storage {
 match /b/{bucket}/o {
   match /{allPaths=**} {
     allow read, write: if request.auth != null;
   }
 }
}


성냥



아시다시피 지금까지 작성한 모든 규칙에서 일치라는 단어를 사용합니다. 각 규칙을 적용하려는 경로를 지정하는 역할을 합니다. 이 경로는 자세히 지정하거나(정확한 경로 및 정적 경로) 변수를 통해(동적 경로) 지정할 수 있습니다.

정확한 경로



이것은 규칙을 적용하려는 파일의 정확한 경로를 이미 알고 있을 때 사용되는 가장 간단한 일치입니다. 예를 들어,/images 디렉토리에 있는 profilePicture.png 및 thumbnail.png 파일에 규칙을 적용하려면 다음을 수행하십시오.

match /imagens/profilePicture.png {
 allow write: if <condição>;
}
match /imagens/miniatura.png {
 allow write: if <condição>;
}



또 다른 방법은 경로를 분할하여 트리에 분기를 만드는 것입니다.

match /imagens {
   match /profilePicture.png {
       allow write: if <condição>;
   }
   match /miniatura.png {
       allow write: if <condição>;
   }
}


동적 경로(변수 사용)



때때로 우리는 파일이나 디렉토리의 이름을 모를 수 있습니다. 이 경우 실시간 데이터베이스에서와 같이 변수를 사용하지만(달러 기호 $ 사용) 여기서는 변수 이름을 중괄호 안에 넣습니다. 예를 들어:

match /images {

    //All images in the images directory.

    match /{ImageName} {
      allow read: if <condition>;
    }

    //All images in the images directory, including subdirectories

    match /{allImages=**} {
      allow read: if <other_condition>;
    }
}


유효성 검사 규칙 사용



파일 저장 및 읽기 권한을 제어하는 ​​것 외에도 Cloud Storage에 저장되는 파일의 유효성을 검사할 수도 있습니다. 이 기사를 너무 많이 확장하지 않기 위해 검증을 보여주기 위해 한 가지 예만 남길 것입니다.

match /{imageId} {
 allow write: if request.resource.size < 2 * 1024 * 1024
              && request.resource.contentType.matches('image/.*')
}


위의 이 규칙을 사용하여 파일이 저장되는지 확인합니다.
  • 2MB를 초과하지 않습니다.
  • 형식(jpg, png, bmp, ...)에 관계없이 이미지입니다.

  • 이것은 Firebase용 Cloud Storage 규칙에 대한 간단한 소개였습니다. 즐거운 코딩하세요!

    -
    DISCORD 커뮤니티에 가입하세요

    데이터를 안전하게 유지하는 데 도움이 되는 더 중요한 정보 및 추세는 join our community

    좋은 웹페이지 즐겨찾기