콘솔로 이동

ML Kit Android 앱의 클라우드 사용자 인증 정보 보호

Android 앱에서 ML Kit의 Cloud API 중 하나를 사용하는 경우 프로덕션 환경에서 앱을 실행하기 전에 승인되지 않은 API 액세스를 방지하기 위한 몇 가지 추가 조치를 취해야 합니다.

프로덕션 앱의 경우 인증된 클라이언트만 클라우드 서비스에 액세스할 수 있는지 확인합니다. 루팅되지 않은 기기에서만 아래에 설명된 방법으로 인증할 수 있습니다.

그런 다음 테스트와 개발 중에 편리하게 사용할 수 있는 디버그 전용 API 키를 만듭니다.

1. Firebase에 프로덕션 앱 등록

먼저 프로덕션 앱을 Firebase에 등록합니다.

가장 빠르게 등록하는 방법은 Firebase 프로젝트를 Google Play 프로젝트와 연결하는 것입니다. Firebase 콘솔에서 프로젝트 설정의 통합 섹션에서 연결할 수 있습니다.

프로젝트를 연결하면 프로덕션 앱의 SHA-1 서명을 Firebase 프로젝트로 가져오게 되며, 설정 페이지에서 이를 확인할 수 있습니다. Firebase 프로젝트와 Google Play 프로젝트를 연결하면 비정상 종료 및 수익 통계를 포함한 다른 Google Play 데이터는 Firebase에서, 애널리틱스를 포함한 Firebase 데이터는 Google Play에서 액세스할 수 있습니다.

또는 Firebase 프로젝트와 Google Play 프로젝트 간에 데이터를 공유하지 않으려는 경우 설정 페이지에서 앱의 SHA-1 서명을 직접 지정할 수 있습니다. 앱의 SHA-1 서명을 가져오는 방법을 알아보려면 클라이언트 인증을 참조하세요.

2. API 키 범위 제한

다음으로 Cloud Vision API에 대한 액세스를 허용하지 않도록 기존 API 키를 구성합니다.

  1. Cloud Console의 사용자 인증 정보 페이지를 엽니다.

  2. 목록에 있는 각 API 키에 대해 편집 화면을 열고 키 제한 섹션에서 Cloud Vision API를 제외한 모든 사용 가능한 API를 목록에 추가합니다.

3. 디버그 전용 API 키 생성 및 사용

마지막으로 개발용으로만 사용할 새 API 키를 만듭니다. ML Kit는 에뮬레이터에서 실행할 때와 같이 앱 인증이 불가능한 환경에서 API 키를 사용하여 Cloud 서비스에 액세스할 수 있습니다.

  1. 개발에 사용할 새 API 키를 만듭니다.

    1. Cloud Console의 사용자 인증 정보 페이지를 엽니다.
    2. 사용자 인증 정보 만들기 > API 키를 클릭하고 새 API 키를 기록합니다. 이 키는 인증되지 않은 앱에서의 API 액세스를 허용하므로 이 키를 기밀로 유지해야 합니다 .
  2. 출시된 앱에서 새로운 디버그 API 키가 유출되지 않으려면 디버그 빌드에만 사용되는 Android 매니페스트 파일에 디버그 API 키를 지정합니다.

    1. 디버그 매니페스트가 없으면 파일 > 새로 만들기 > 기타 > Android 매니페스트 파일을 클릭하고 대상 소스 세트에서 debug를 선택하여 하나 만듭니다.

    2. 디버그 매니페스트에 다음 선언을 추가합니다.

      <application>
      <meta-data
          android:name="com.firebase.ml.cloud.ApiKeyForDebug"
          android:value="your-debug-api-key" />
      </application>
      
  3. 앱에서 ML Kit가 인증서의 디지털 지문 일치를 통해 프로덕션 환경에 있는 클라이언트를 인증하고 디버그 빌드에서만 API 키(디버그 키)를 사용하도록 구성합니다.

    자바

    FirebaseVisionCloudImageLabelerOptions.Builder optionsBuilder =
            new FirebaseVisionCloudImageLabelerOptions.Builder();
    if (!BuildConfig.DEBUG) {
        // Requires physical, non-rooted device:
        optionsBuilder.enforceCertFingerprintMatch();
    }
    
    // Set other options. For example:
    optionsBuilder.setConfidenceThreshold(0.8f);
    // ...
    
    // And lastly:
    FirebaseVisionCloudImageLabelerOptions options = optionsBuilder.build();
    FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage);

    Kotlin

    val optionsBuilder = FirebaseVisionCloudImageLabelerOptions.Builder()
    if (!BuildConfig.DEBUG) {
        // Requires physical, non-rooted device:
        optionsBuilder.enforceCertFingerprintMatch()
    }
    
    // Set other options. For example:
    optionsBuilder.setConfidenceThreshold(0.8f)
    // ...
    
    // And lastly:
    val options = optionsBuilder.build()
    FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage)

다음 단계

다른 Firebase 기능 사용 시 실행할 앱 준비에 대한 내용은 출시 체크리스트를 참조하세요.