데이터베이스 인증 및 연결
이 페이지에서는 MongoDB 호환성을 갖춘 Firestore 데이터베이스를 인증하고 연결하는 방법을 설명합니다.연결 요구사항
MongoDB 호환성을 갖춘 Firestore 클라이언트에는 다음이 필요합니다.
- 드라이버는
load balanced
모드로 연결해야 합니다. 이렇게 하면 드라이버가 연결하려는 정확한 서버 토폴로지를 파악하려고 시도하지 않습니다. - 운전자는 SSL을 사용 설정하여 연결해야 합니다.
- 드라이버는 재시도 가능한 쓰기를 사용 중지해야 합니다. MongoDB 호환성을 갖춘 Firestore는 현재 재시도 가능한 쓰기를 지원하지 않습니다.
연결 문자열 검색
데이터베이스 연결 문자열은 데이터베이스의 UID, 데이터베이스의 위치, 인증 메커니즘에 따라 다릅니다. 다음 안내에서는 연결 문자열이 생성되는 방식을 설명합니다.
정확한 연결 문자열은 인증 메커니즘에 따라 다르지만 기본 연결 문자열은 다음 형식을 사용합니다.
mongodb://UID.LOCATION.firestore.goog:443/DATABASE_ID?loadBalanced=true&tls=true&retryWrites=false
다음 방법 중 하나로 기본 연결 문자열을 가져올 수 있습니다.
콘솔
-
Google Cloud 콘솔에서 데이터베이스 페이지로 이동합니다.
- 데이터베이스 목록에서 관련 데이터베이스의 데이터베이스 ID를 클릭합니다.
- 탐색기 패널에는 기본 연결 문자열이 표시됩니다. 이 연결 문자열을 복사하여 사용하여 데이터베이스에 연결합니다.
gcloud
gcloud firestore database describe
를 사용하여 UID 및 위치 정보를 검색합니다.
gcloud firestore databases describe \ --database=DATABASE_ID \ --format='yaml(locationId, uid)'
DATABASE_ID를 데이터베이스 ID로 바꿉니다.
출력에는 데이터베이스의 위치와 UID가 포함됩니다. 이 정보를 사용하여 기본 연결 문자열을 구성합니다.
기본 연결 문자열과 다음 방법 중 하나를 사용하여 데이터베이스를 인증하고 연결합니다.
사용자 이름 및 비밀번호로 연결 (SCRAM)
다음 단계에 따라 데이터베이스의 사용자 인증 정보를 만들고 데이터베이스에 연결합니다.
시작하기 전에
사용자를 만드는 데 필요한 권한을 얻으려면 관리자에게 데이터베이스에 대한 userCredsAdmin (roles/datastore.userCredsAdmin
) IAM 역할을 부여해 달라고 요청하세요.
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
사용자 만들기 및 데이터베이스 연결
MongoDB 호환성을 갖춘 Firestore 데이터베이스의 사용자를 만들려면 다음 메서드 중 하나를 사용하세요.
Google Cloud console
-
Google Cloud 콘솔에서 데이터베이스 페이지로 이동합니다.
- 데이터베이스 목록에서 데이터베이스를 선택합니다.
- 탐색 메뉴에서 인증을 클릭합니다.
- Add User(사용자 추가)를 클릭합니다.
- Username(사용자 이름)을 입력합니다.
- 새 사용자의 역할을 선택합니다.
-
추가를 클릭합니다.
새 사용자의 비밀번호가 확인 대화상자에 표시됩니다.
gcloud CLI
-
SCRAM으로 인증하려면 먼저 사용자 인증 정보를 만들어야 합니다.
gcloud alpha firestore user-creds
명령어를 사용합니다. 다음을 바꿉니다.gcloud alpha firestore user-creds create USERNAME --database=DATABASE_ID
- USERNAME: 만들 사용자 이름입니다.
- DATABASE_ID: 데이터베이스 ID
이 명령어의 출력에는 사용자의 비밀번호가 포함됩니다.
다음과 유사한 결과가 출력됩니다.
name: projects/PROJECT_NAME/databases/DATABASE_ID/userCreds/USERNAME resourceIdentity: principal: principal://firestore.googleapis.com/projects/PROJECT_NUMBER/name/databases/DATABASE_ID/userCreds/USERNAME securePassword: PASSWORD
-
기본적으로 이 새 사용자 사용자 인증 정보에는 권한이 없습니다. 데이터베이스에 대한 읽기 및 쓰기 액세스 권한의 경우 이 특정 데이터베이스의
roles/datastore.user
역할을 추가합니다. 다음을 바꿉니다.gcloud projects add-iam-policy-binding PROJECT_NAME \ --member='principal://firestore.googleapis.com/projects/PROJECT_NUMBER/name/databases/DATABASE_ID/userCreds/USERNAME' \ --role=roles/datastore.user \ --condition='expression=resource.name == "projects/PROJECT_NAME/databases/DATABASE_ID",title="CONDITION_TITLE"'
- PROJECT_NAME: 프로젝트의 이름
- PROJECT_NUMBER: 프로젝트 번호입니다.
- DATABASE_ID: 데이터베이스 ID
- USERNAME: 이전에 만든 사용자 이름입니다.
- CONDITION_TITLE: 이 조건의 제목입니다. 이 조건은 이 데이터베이스에 대한 액세스만 제한합니다.
다음 연결 문자열을 사용하여 SCRAM으로 데이터베이스에 연결합니다.
mongodb://USERNAME:PASSWORD@UID.LOCATION.firestore.goog:443/DATABASE_ID?loadBalanced=true&authMechanism=SCRAM-SHA-256&tls=true&retryWrites=false
다음을 바꿉니다.
- USERNAME: 사용자 이름입니다.
- PASSWORD: 이 사용자에 대해 생성한 비밀번호입니다.
- UID: 데이터베이스의 UID입니다.
- LOCATION: 데이터베이스의 위치입니다.
- DATABASE_ID: 데이터베이스 ID
Google 인증 라이브러리 연결
다음 코드 샘플은Google Cloud 표준 OAuth 라이브러리를 사용하는 OIDC 콜백 핸들러를 등록합니다.
이 라이브러리를 사용하면 다양한 유형의 인증(애플리케이션 기본 사용자 인증 정보, 워크로드 ID 제휴)을 사용할 수 있습니다.
이렇게 하려면 인증 라이브러리를 종속 항목으로 추가해야 합니다.
// Maven
<dependency>
<groupId>com.google.auth</groupId>
<artifactId>google-auth-library-oauth2-http</artifactId>
<version>1.19.0</version>
</dependency>
// Gradle
implementation 'com.google.auth:google-auth-library-oauth2-http:1.19.0'
다음 코드 샘플은 연결하는 방법을 보여줍니다.
val db = MongoClients.create( connectIgnite( "DATABASE_UID", "LOCATION" ).build() ).getDatabase("DATABASE_ID") /** * Creates a connection to a Firestore with MongoDB Compatibility database. * @param databaseUid The uid of the database to connect to as a string. For example: f116f93a-519c-208a-9a72-3ef6c9a1f081 * @param locationId The location of the database to connect to, for example: nam5, us-central1, us-east4 etc... * @param environment Whether to try and fetch an auth credential from the GCE VM metadata service or whether to call gcloud. */ private static MongoClientSettings.Builder connectIgnite( String databaseUid: String String locationId:String ): MongoClientSettings.Builder { MongoCredential credential = MongoCredential.createOidcCredential(null) .withMechanismProperty( MongoCredential.OIDC_CALLBACK_KEY, new MongoCredential.OidcCallback() { @Override MongoCredential.OidcCallbackResult onRequest( MongoCredential.OidcCallbackContext context) { // Customize this credential builder for additional credential types. GoogleCredentials credentials = GoogleCredentials.getApplicationDefault(); return new MongoCredential.OidcCallbackResult( credentials.getAccessToken().getTokenValue(), Duration.between(Instant.now(), credentials.getAccessToken().getExpirationTime().toInstant())); } }, ); return MongoClientSettings.builder() .hosts(listOf(ServerAddress( "$databaseUid.$locationId.firestore.goog", 443))) .credential(credential) .applyToClusterSettings(builder -> builder.mode(ClusterConnectionMode.LOAD_BALANCED)) ).applyToSslSettings(ssl -> ssl.enabled(true)); }
다음을 바꿉니다.
- DATABASE_UID: 프로젝트의 이름
- LOCATION: 데이터베이스의 위치입니다.
- DATABASE_ID 데이터베이스 ID입니다.
Compute Engine VM에서 연결
Compute Engine 서비스 계정을 사용하여 데이터베이스를 인증하고 연결할 수 있습니다. 이렇게 하려면 데이터베이스가 포함된 Google Cloud 프로젝트에 대한 IAM 정책을 만듭니다.
시작하기 전에
VM에 사용자 관리형 서비스 계정을 구성합니다.
- VM을 만드는 동안 서비스 계정을 구성하려면 사용자 관리 서비스 계정을 사용하는 VM 만들기를 참고하세요.
- 기존 VM에서 서비스 계정을 구성하려면 연결된 서비스 계정 변경을 참고하세요.
서비스 계정 이메일을 기록해 둡니다.
사용자 인증 정보 구성
서비스 계정에 Firestore에 대한 읽기 및 쓰기 액세스 권한을 부여하려면 다음 명령어를 실행합니다.roles/datastore.user
gcloud projects add-iam-policy-binding PROJECT_NAME --member="SERVICE_ACCOUNT_EMAIL" --role=roles/datastore.user
다음을 바꿉니다.
- PROJECT_NAME: 프로젝트의 이름
- SERVICE_ACCOUNT_EMAIL: 만든 서비스 계정의 이메일 주소입니다.
연결 문자열 구성
다음 형식을 사용하여 연결 문자열을 구성합니다.
mongodb://DATABASE_UID.LOCATION.firestore.goog:443/DATABASE_ID?loadBalanced=true&tls=true&retryWrites=false&authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:FIRESTORE
다음을 바꿉니다.
- DATABASE_UID: 프로젝트의 이름
- LOCATION: 데이터베이스의 위치입니다.
- DATABASE_ID 데이터베이스 ID입니다.
UID 및 위치 검색에 관한 자세한 내용은 연결 문자열 검색을 참고하세요.
임시 액세스 토큰으로 연결
임시 Google Cloud 액세스 토큰을 사용하여 mongosh
와 같은 진단 도구를 실행할 수 있습니다. gcloud auth print-access-token
를 사용하여 단기 액세스 토큰으로 인증할 수 있습니다. 이 토큰은 1시간 동안 유효합니다.
예를 들어 다음 명령어를 사용하여 mongosh
로 데이터베이스에 연결합니다.
mongosh --tls \ --username access_token --password $(gcloud auth print-access-token) \ 'mongodb://UID.LOCATION.firestore.goog:443/DATABASE_ID?loadBalanced=true&authMechanism=PLAIN&authSource=$external&retryWrites=false'
다음을 바꿉니다.
- DATABASE_UID: 데이터베이스의 UID
- LOCATION: 데이터베이스 위치
- DATABASE_ID: 데이터베이스 ID