Firebase Summit에서 발표된 모든 내용을 살펴보고 Firebase로 앱을 빠르게 개발하고 안심하고 앱을 실행하는 방법을 알아보세요. 자세히 알아보기

Firebase ML Android 앱의 클라우드 자격 증명 보호

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

Android 앱에서 Firebase ML의 클라우드 API 중 하나를 사용하는 경우 프로덕션 환경에서 앱을 시작하기 전에 승인되지 않은 API 액세스를 방지하기 위해 몇 가지 추가 단계를 수행해야 합니다.

프로덕션 앱의 경우 인증된 클라이언트만 클라우드 서비스에 액세스할 수 있도록 합니다. (루팅되지 않은 장치만 설명된 방법을 사용하여 인증할 수 있습니다.)

그런 다음 테스트 및 개발 중에 편의를 위해 사용할 수 있는 디버그 전용 API 키를 만듭니다.

1. Firebase에 프로덕션 앱 등록

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

  1. 앱의 SHA-1 서명이 있는지 확인합니다. 방법을 알아 보려면 클라이언트 인증 을 참조하십시오.

  2. Firebase 콘솔에서 프로젝트 설정 으로 이동한 다음 설정 탭을 선택합니다.

  3. 내 앱 카드까지 아래로 스크롤한 다음 Android 앱을 선택합니다.

  4. 앱 정보에 앱의 SHA-1 서명을 추가합니다.

2. API 키의 범위 제한

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

  1. Google Cloud Console의 사용자 인증 정보 페이지를 엽니다. 메시지가 표시되면 프로젝트를 선택합니다.

  2. 목록의 각 기존 API 키에 대해 편집 보기를 엽니다.

  3. API 제한 섹션에서 키 제한 을 선택한 다음 API 키에 액세스 권한을 부여하려는 모든 API를 목록에 추가합니다. Cloud Vision API를 포함 하지 않도록 합니다.

    API 키의 API 제한 을 구성할 때 키가 액세스할 수 있는 API를 명시적으로 선언하는 것입니다. 기본적으로 API 제한 섹션에 키 제한 안 함을 선택하면 API 키를 사용하여 프로젝트에 대해 활성화된 모든 API에 액세스할 수 있습니다.

이제 기존 API 키는 클라우드 ML 서비스에 대한 액세스 권한을 부여하지 않지만 각 키는 API 제한 목록에 추가한 모든 API에 대해 계속 작동합니다.

향후 추가 API를 활성화하는 경우 해당 API 키에 대한 API 제한 목록에 추가해야 합니다.

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

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

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

    1. Google 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. 앱에서 Firebase ML을 구성하여 인증서 지문 일치를 사용하여 프로덕션에서 클라이언트를 인증하고 API 키(디버그 키)를 디버그 빌드에서만 사용하도록 구성합니다.

    Java

    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+KTX

    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 기능을 사용할 때 앱을 실행하도록 준비하는 방법에 대한 정보는 실행 체크리스트 를 참조하세요.