서버 클라이언트 라이브러리 보안

Firestore용 서버 클라이언트 라이브러리를 사용하면 Identity and Access Management(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
datastore.entities.update
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
datastore.entities.list
write (RPC) 업데이트 또는 변환, exists 전제조건false로 설정 datastore.entities.create
write (RPC) 업데이트 또는 변환, exists 전제조건true로 설정 datastore.entities.update
write (RPC) 업데이트 또는 변환, 전제조건 없음 datastore.entities.create
datastore.entities.update
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
복원 datastore.backups.restoreDatabase
projects.locations
get datastore.locations.get
list datastore.locations.list
projects.databases.backupschedules
get datastore.backupSchedules.get
list datastore.backupSchedules.list
create datastore.backupSchedules.create
update datastore.backupSchedules.update
delete datastore.backupSchedules.delete
projects.locations.backups
get datastore.backups.get
list datastore.backups.list
delete datastore.backups.delete

사전 정의된 역할

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 스캔에 대한 전체 액세스 권한입니다.
roles/datastore.backupSchedulesViewer datastore.backupSchedules.get
datastore.backupSchedules.list
Firestore 데이터베이스의 백업 일정에 대한 읽기 액세스 권한입니다.
roles/datastore.backupSchedulesAdmin datastore.backupSchedules.get
datastore.backupSchedules.list
datastore.backupSchedules.create
datastore.backupSchedules.update
datastore.backupSchedules.delete
datastore.databases.list
datastore.databases.getMetadata
Firestore 데이터베이스의 백업 일정에 대한 전체 액세스 권한입니다.
roles/datastore.backupsViewer datastore.backups.get
datastore.backups.list
Firestore 위치의 백업 정보에 대한 읽기 액세스 권한입니다.
roles/datastore.backupsAdmin datastore.backups.get
datastore.backups.list
datastore.backups.delete
Firestore 위치의 백업에 대한 전체 액세스 권한입니다.
roles/datastore.restoreAdmin datastore.backups.get
datastore.backups.list
datastore.backups.restoreDatabase
datastore.databases.list
datastore.databases.create
datastore.databases.getMetadata
datastore.operations.list
datastore.operations.get
Firestore 백업을 새 데이터베이스로 복원할 수 있습니다. 이 역할은 백업에서 복원할 필요 없이 새 데이터베이스를 만들 수 있는 기능도 제공합니다.

커스텀 역할

사전 정의된 역할로 비즈니스 요구 사항이 해결되지 않는 경우, 권한을 지정하여 자신만의 커스텀 역할을 정의할 수 있습니다.

권한

다음 표에는 Firestore에서 지원하는 권한이 나와 있습니다.

데이터베이스 권한 이름 설명
datastore.databases.get 트랜잭션을 시작하거나 롤백합니다.
datastore.databases.import 항목을 데이터베이스로 가져옵니다.
datastore.databases.export 데이터베이스의 항목을 내보냅니다.
datastore.databases.getMetadata 데이터베이스에서 메타데이터를 읽습니다.
datastore.databases.list 프로젝트의 데이터베이스를 나열합니다.
datastore.databases.create 데이터베이스를 만듭니다.
datastore.databases.update 데이터베이스를 업데이트합니다.
datastore.databases.delete 데이터베이스를 삭제합니다.
datastore.databases.createTagBinding 데이터베이스의 태그 바인딩을 만듭니다.
datastore.databases.deleteTagBinding 데이터베이스의 태그 바인딩을 삭제합니다.
datastore.databases.listTagBindings 데이터베이스의 모든 태그 바인딩을 나열합니다.
datastore.databases.listEffectiveTagBindings 데이터베이스의 유효한 태그 바인딩을 나열합니다.
항목 권한 이름 설명
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 스캔을 나열합니다.
백업 일정 권한 이름 설명
datastore.backupSchedules.get 백업 일정에 대한 세부정보를 가져옵니다.
datastore.backupSchedules.list 사용 가능한 백업 일정을 나열합니다.
datastore.backupSchedules.create 백업 일정을 만듭니다.
datastore.backupSchedules.update 백업 일정을 업데이트합니다.
datastore.backupSchedules.delete 백업 일정을 삭제합니다.
백업 권한 이름 설명
datastore.backups.get 백업에 대한 세부정보를 가져옵니다.
datastore.backups.list 사용 가능한 백업을 나열합니다.
datastore.backups.delete 백업을 삭제합니다.
datastore.backups.restoreDatabase 백업에서 데이터베이스를 복원합니다.

역할 변경 지연 시간

Firestore는 IAM 권한을 5분 동안 캐시하므로 역할 변경이 적용되기까지 최대 5분이 걸립니다.

Firestore IAM 관리

Google Cloud Console, IAM API 또는 gcloud 명령줄 도구를 사용하여 Cloud 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 조건을 구성하는 방법을 알아보려면 데이터베이스 액세스 조건 구성을 참조하세요.

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_idproject_number를 확인하려면 프로젝트 식별을 참조하세요.

firebaserules.system 역할은 콘솔에서 기본적으로 숨겨져 있으므로 Google Cloud 콘솔 대신 Google Cloud CLI를 사용합니다.

다음 단계