서버 클라이언트 라이브러리 보안
Firestore용 서버 클라이언트 라이브러리를 사용하면 ID 및 액세스 관리(IAM)로 리소스에 대한 액세스를 관리할 수 있습니다. IAM을 사용하면 특정 Google Cloud Platform 리소스에 대한 더욱 세분화된 액세스 권한을 부여하고 다른 리소스에 대한 무단 액세스를 방지할 수 있습니다. 이 페이지에서는 Firestore의 IAM 권한과 역할을 설명합니다. IAM에 대한 자세한 내용은 IAM 문서를 참조하세요.
IAM은 최소 권한의 보안 원칙을 채택하여 리소스에 대해 필요한 액세스 권한만 부여할 수 있게 해줍니다.
IAM을 사용하면 IAM 정책을 설정하여 어떠한 리소스에 대해 누구(사용자)에게 어떠한(역할) 권한이 있는지를 제어할 수 있습니다.
IAM 정책은 사용자에게 역할을 한 개 이상 부여하여 특정 권한을 부여합니다. 예를 들어 datastore.indexAdmin
역할을 부여받은 사용자는 색인을 생성, 수정, 삭제, 나열 또는 볼 수 있습니다.
권한 및 역할
이 섹션에는 Firestore에서 지원하는 권한과 역할이 요약되어 있습니다.
API 메서드에 필요한 권한
다음 표에서는 각 작업을 수행하려는 호출자가 가져야 하는 권한을 보여줍니다.
메소드 | 필수 권한 |
---|---|
projects.databases.documents |
|
batchGet |
datastore.entities.get |
beginTransaction |
datastore.databases.get |
commit 업데이트 또는 변환, exists 전제조건을 false 로 설정 |
datastore.entities.create |
commit 업데이트 또는 변환, exists 전제조건을 true 로 설정
| datastore.entities.update |
commit 업데이트 또는 변환, 전제조건 없음
| datastore.entities.create |
commit 삭제 |
datastore.entities.delete |
createDocument |
datastore.entities.create |
delete |
datastore.entities.delete |
get |
datastore.entities.get |
list |
datastore.entities.get datastore.entities.list |
listCollectionIds |
datastore.entities.list |
patch |
datastore.entities.update |
rollback |
datastore.databases.get |
runQuery |
datastore.entities.get |
write (RPC) 업데이트 또는 변환, exists 전제조건을 false 로 설정 |
datastore.entities.create |
write (RPC) 업데이트 또는 변환, exists 전제조건을 true 로 설정 |
datastore.entities.update |
write (RPC) 업데이트 또는 변환, 전제조건 없음 |
datastore.entities.create |
write (RPC) 삭제
| datastore.entities.delete |
projects.databases.indexes |
|
create |
datastore.indexes.create |
delete |
datastore.indexes.delete |
get |
datastore.indexes.get |
list |
datastore.indexes.list |
projects.databases |
|
get |
datastore.databases.getMetadata |
list |
datastore.databases.list |
patch |
datastore.databases.update |
projects.locations |
|
get |
datastore.locations.get |
list |
datastore.locations.list |
사전 정의된 역할
IAM을 사용하면 Firestore의 모든 API 메서드에서 API를 요청하는 계정에 리소스를 사용할 수 있는 충분한 권한이 확인합니다. 권한을 부여하려면 사용자, 그룹 또는 서비스 계정에 역할을 부여하는 정책을 설정합니다. 프로젝트 사용자에게 기본 역할인 소유자, 편집자, 뷰어 외에도 Firestore 역할을 부여할 수 있습니다.
다음 표에서는 Firestore IAM 역할을 보여줍니다. 사용자, 그룹 또는 서비스 계정에 여러 역할을 부여할 수 있습니다.
역할 | 권한 | 설명 |
---|---|---|
roles/datastore.owner |
appengine.applications.get datastore.* resourcemanager.projects.get resourcemanager.projects.list | Firestore에 대한 전체 액세스 권한입니다. |
roles/datastore.user |
appengine.applications.get datastore.databases.get datastore.databases.getMetadata datastore.entities.* datastore.indexes.list datastore.namespaces.get datastore.namespaces.list datastore.statistics.get datastore.statistics.list resourcemanager.projects.get resourcemanager.projects.list |
Firestore 데이터베이스의 데이터에 대한 읽기/쓰기 권한입니다. 애플리케이션 개발자 및 서비스 계정용입니다. |
roles/datastore.viewer |
appengine.applications.get datastore.databases.get datastore.databases.getMetadata datastore.entities.get datastore.entities.list datastore.indexes.get datastore.indexes.list datastore.namespaces.get datastore.namespaces.list datastore.statistics.get datastore.statistics.list resourcemanager.projects.get resourcemanager.projects.list |
모든 Firestore 리소스에 대한 읽기 액세스 권한입니다. |
roles/datastore.importExportAdmin |
appengine.applications.get datastore.databases.export datastore.databases.getMetadata datastore.databases.import datastore.operations.cancel datastore.operations.get datastore.operations.list resourcemanager.projects.get resourcemanager.projects.list |
가져오기 및 내보내기를 관리할 수 있는 전체 액세스 권한입니다. |
roles/datastore.indexAdmin |
appengine.applications.get datastore.databases.getMetadata datastore.indexes.* resourcemanager.projects.get resourcemanager.projects.list |
색인 정의를 관리할 수 있는 전체 액세스 권한입니다. |
roles/datastore.keyVisualizerViewer |
datastore.databases.getMetadata datastore.keyVisualizerScans.get datastore.keyVisualizerScans.list resourcemanager.projects.get resourcemanager.projects.list |
Key Visualizer 스캔에 대한 전체 액세스 권한입니다. |
커스텀 역할
사전 정의된 역할로 비즈니스 요구 사항이 해결되지 않는 경우, 권한을 지정하여 자신만의 커스텀 역할을 정의할 수 있습니다.
권한
다음 표에는 Firestore에서 지원하는 권한이 나와 있습니다.
데이터베이스 권한 이름 | 설명 | |
---|---|---|
datastore.databases.get |
트랜잭션을 시작하거나 롤백합니다. | |
datastore.databases.import |
항목을 데이터베이스로 가져옵니다. | |
datastore.databases.export |
데이터베이스의 항목을 내보냅니다. | |
datastore.databases.getMetadata |
데이터베이스에서 메타데이터를 읽습니다. | |
datastore.databases.list |
프로젝트의 데이터베이스를 나열합니다. | |
datastore.databases.create |
데이터베이스를 만듭니다. | |
datastore.databases.update |
데이터베이스를 업데이트합니다. | |
항목 권한 이름 | 설명 | |
datastore.entities.create |
문서를 만듭니다. | |
datastore.entities.delete |
문서를 삭제합니다. | |
datastore.entities.get |
문서를 읽습니다. | |
datastore.entities.list |
프로젝트의 문서 이름을 나열합니다. (문서 데이터에 액세스하려면 datastore.entities.get 가 필요합니다.) |
|
datastore.entities.update |
문서를 업데이트합니다. | |
색인 권한 이름 | 설명 | |
datastore.indexes.create |
색인을 만듭니다. | |
datastore.indexes.delete |
색인을 삭제합니다. | |
datastore.indexes.get |
색인에서 메타데이터를 읽습니다. | |
datastore.indexes.list |
프로젝트의 색인을 나열합니다. | |
datastore.indexes.update |
색인을 업데이트합니다. | |
작업 권한 이름 | 설명 | |
datastore.operations.cancel |
장기 실행 작업을 취소합니다. | |
datastore.operations.delete |
장기 실행 작업을 삭제합니다. | |
datastore.operations.get |
장기 실행 작업의 최신 상태를 가져옵니다. | |
datastore.operations.list |
장기 실행 작업을 나열합니다. | |
프로젝트 권한 이름 | 설명 | |
resourcemanager.projects.get |
프로젝트의 리소스를 찾아봅니다. | |
resourcemanager.projects.list |
소유한 프로젝트를 나열합니다. | |
위치 권한 이름 | 설명 | |
datastore.locations.get |
데이터베이스 위치에 대한 세부정보를 가져옵니다. 새 데이터베이스를 만드는 데 필요합니다. | |
datastore.locations.list |
사용 가능한 데이터베이스 위치를 나열합니다. 새 데이터베이스를 만드는 데 필요합니다. | |
Key Visualizer 권한 이름 | 설명 | |
datastore.keyVisualizerScans.get |
Key Visualizer 스캔에 대한 세부정보를 가져옵니다. | |
datastore.keyVisualizerScans.list |
사용 가능한 Key Visualizer 스캔을 나열합니다. |
역할 변경 지연 시간
Firestore는 IAM 권한을 5분 동안 캐시하므로 역할 변경이 적용되기까지 최대 5분이 걸립니다.
Firestore IAM 관리
Google Cloud Console, IAM API 또는 gcloud
명령줄 도구를 사용하여 Cloud IAM 정책을 가져오고 설정할 수 있습니다. 자세한 내용은 프로젝트 구성원에게 액세스 권한 부여, 변경, 취소를 참조하세요.
IAM 조건
IAM 조건을 사용하면 조건부 액세스 제어를 정의하고 적용할 수 있습니다.
예를 들어 다음 조건은 지정된 날짜까지 주 구성원에게 datastore.user
역할을 할당합니다.
{
"role": "roles/datastore.user",
"members": [
"user:travis@example.com"
],
"condition": {
"title": "Expires_December_1_2023",
"description": "Expires on December 1, 2023",
"expression":
"request.time < timestamp('2023-12-01T00:00:00.000Z')"
}
}
임시 액세스를 위한 IAM 조건을 정의하는 방법은 임시 액세스 구성을 참조하세요.
IAM에 대한 보안 규칙 종속 항목
모바일/웹 클라이언트의 Firestore 보안 규칙은 다음 서비스 계정과 IAM binding에 따라 다릅니다.
서비스 계정 | IAM 역할 |
---|---|
service-project_number@firebase-rules.iam.gserviceaccount.com |
roles/firebaserules.system |
Firebase에서 자동으로 이 서비스 계정을 설정합니다. 이 서비스 계정에서 firebaserules.system
역할을 삭제하면 보안 규칙이 모든 요청을 거부합니다. 이 IAM 바인딩을 복원하려면 다음 gcloud CLI 명령어를 사용합니다.
gcloud projects add-iam-policy-binding project_id \ --member=serviceAccount:service-project_number@firebase-rules.iam.gserviceaccount.com \ --role=roles/firebaserules.system
project_id 및 project_number를 확인하려면 프로젝트 식별을 참조하세요.
firebaserules.system
역할은 콘솔에서 기본적으로 숨겨져 있으므로 Google Cloud 콘솔 대신 Google Cloud CLI를 사용합니다.