Register now for Android Dev Summit 2019!

엔터프라이즈 Android의 새로운 기능

이 페이지에서는 Android Q에 새로 도입된 엔터프라이즈 API, 기능 및 동작 변경사항을 간략하게 설명합니다.

회사 소유 기기의 직장 프로필

Android Q에서는 직장 프로필만 필요한 회사 소유 기기의 새로운 프로비저닝 및 증명 기능을 소개합니다.

직장 프로필을 위한 향상된 프로비저닝 도구

이제 QR 코드 또는 제로터치를 사용하여 등록된 Android Q 이상 기기에서 직장 프로필을 프로비저닝할 수 있습니다. 회사 소유 기기를 프로비저닝하는 동안 새로운 추가 인텐트를 사용하면 DPC(기기 정책 컨트롤러 앱)에서 직장 프로필 또는 완전 관리형 설정을 시작할 수 있습니다. 직장 프로필이 생성되거나 완전 관리가 설정된 후 초기 정책을 적용하려면 DPC에서 정책 준수 화면을 실행해야 합니다.

DPC manifest 파일에서 활동의 GET_PROVISIONING_MODE에 대한 새로운 인텐트 필터를 선언하고 BIND_DEVICE_ADMIN 권한을 추가하여 임의의 앱이 활동을 시작하지 못하도록 합니다. 예:

<activity
        android:name=".GetProvisioningModeActivity"
        android:label="@string/app_name"
        android:permission="android.permission.BIND_DEVICE_ADMIN">
        <intent-filter>
            <action
                android:name="android.app.action.GET_PROVISIONING_MODE" />
            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
    </activity>
    

프로비저닝하는 동안 시스템에서는 인텐트 필터와 관련된 활동을 실행합니다. 이 활동의 목적은 관리 모드(직장 프로필 또는 완전 관리형)를 지정하는 것입니다.

기기에 적절한 관리 모드를 결정하기 전에 추가 프로비저닝을 검색하는 것이 유용할 수 있습니다. 이 활동에서는 getIntent()를 호출하여 다음을 검색할 수 있습니다.

DPC는 새로운 결과 인텐트를 만들고 이 인텐트에 다음 항목을 추가할 수도 있습니다.

기기에서 관리 모드를 설정하려면 putExtra(DevicePolicyManager.EXTRA_PROVISIONING_MODE,desiredProvisioningMode)를 호출합니다. 여기서 desiredProvisioningMode는 다음과 같습니다.

  • 직장 프로필: PROVISIONING_MODE_MANAGED_PROFILE
  • 완전 관리형: PROVISIONING_MODE_FULLY_MANAGED_DEVICE

setResult(RESULT_OK, Intent)를 통해 프로비저닝 세부정보를 다시 설정으로 보내 직장 프로필 또는 완전 관리형 프로비저닝을 완료하고 finish()를 사용하여 모든 활성 화면을 닫습니다.

프로비저닝이 완료된 후 DPC에 새 인텐트를 사용하여 규정 준수 화면을 실행하고 초기 정책 설정을 적용할 수 있습니다. 직장 프로필 기기에서 규정 준수 화면은 직장 프로필에 표시됩니다. DPC에서는 사용자가 설정 절차를 빠져나와도 준수 화면이 사용자에게 표시되게 해야 합니다.

DPC manifest 파일에서 활동의 ADMIN_POLICY_COMPLIANCE에 대한 새로운 인텐트 필터를 선언하고 BIND_DEVICE_ADMIN 권한을 추가하여 임의의 앱이 활동을 시작하지 못하도록 합니다. 예:

<activity
        android:name=".PolicyComplianceActivity"
        android:label="@string/app_name"
        android:permission="android.permission.BIND_DEVICE_ADMIN">
        <intent-filter>
            <action android:name="android.app.action.ADMIN_POLICY_COMPLIANCE" />
            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
    </activity>
    

DPC에서 ACTION_PROFILE_PROVISIONING_COMPLETE 브로드캐스트를 수신 대기하는 대신 이 새로운 인텐트를 사용해야 합니다.

인텐트 필터와 관련된 활동은 getIntent()를 호출하여 EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE을 검색할 수 있습니다. 정책 준수를 수행한 후 ADMIN_POLICY_COMPLIANCEsetResult(RESULT_OK, Intent)를 반환하고 finish()를 사용하여 모든 활성 화면을 닫아야 합니다.

완전 관리형 기기에서는 사용자가 홈 화면으로 돌아갑니다. 직장 프로필 기기에서는 홈 화면으로 돌아가기 전에 개인 계정을 추가하라는 메시지를 사용자에게 표시합니다.

직장 프로필 기기 ID 증명

제로터치 등록을 사용하여 프로비저닝된 직장 프로필의 관리자로 설정된 DPC는 이제 IMEI 또는 제조업체의 일련번호와 같은 보안 하드웨어 증명 기기 ID를 받을 수 있습니다. 해당 기기는 보안 하드웨어(예: TEE(신뢰할 수 있는 실행 환경) 또는 SE(보안 요소))를 포함하고 기기 ID 증명 및 제로터치 등록을 지원해야 합니다.

직장 프로필의 관리 구성요소는 DevicePolicyManager.generateKeyPair()를 호출하여 idAttestationFlags 인수의 ID_TYPE_SERIAL, ID_TYPE_IMEI 또는 ID_TYPE_MEID 중 하나 이상을 전달할 수 있습니다.

기기 ID 추출 및 검증에 대해 자세히 알아보려면 키 증명으로 하드웨어 지원 키 쌍 인증을 참조하세요.

직장 프로필 개선사항

새 API에서는 교차 프로필 캘린더를 공개하고 알 수 없는 출처의 앱 설치를 기기 전체에서 차단할 수 있습니다.

직장 프로필 캘린더에 대한 액세스

개인 프로필로 실행되는 앱에서는 직장 프로필 캘린더의 일정을 표시할 수 있습니다. 직장 프로필 캘린더 데이터를 쿼리하려면 다음 콘텐츠 제공업체 URI를 통해 캘린더 제공자 API를 호출합니다.

직장 프로필 캘린더를 사용할 수 없는 경우 쿼리하면 null이 반환됩니다. IT 관리자가 액세스를 차단하거나 직장 프로필이 꺼져 있으면 직장 프로필 캘린더를 사용할 수 없습니다. 기기를 사용하는 사람이 설정에서 교차 프로필 캘린더를 끌 수도 있습니다.

개인 프로필로 실행되는 앱은 작업 이벤트를 표시하고 작업 이벤트를 편집하려는 사용자를 직장 프로필의 동일한 이벤트로 이동하여 리디렉션할 수 있습니다. 앱이 개인 및 직장 프로필에 모두 설치된 경우에는 startViewCalendarEventInManagedProfile()를 호출합니다. 교차 프로필 캘린더 이벤트를 지원하려는 앱에서는 ACTION_VIEW_MANAGED_PROFILE_CALENDAR_EVENT 작업을 처리해야 합니다. 다음 추가 인텐트의 데이터를 사용하여 기존 이벤트를 표시하도록 사용자 인터페이스를 준비합니다.

직장 프로필 캘린더 액세스 관리

IT 관리자는 직장 프로필이 개인 프로필과 캘린더 정보를 공유하는 것을 차단할 수 있습니다. 직장 프로필 캘린더에 액세스하도록 허용하려면 직장 프로필의 관리 구성요소에서 setCrossProfileCalendarPackages()를 호출해야 합니다.

이 메서드가 호출되지 않거나 빈 세트로 호출된 경우 어떤 앱에서도 직장 프로필 캘린더를 읽을 수 없습니다. 직장 프로필 캘린더에 대한 읽기 액세스를 모든 앱에 부여하려면 null을 전달합니다. 일련의 특정 앱에서만 직장 프로필 캘린더를 읽을 수 있도록 하려면 해당 앱의 패키지 이름을 전달합니다.

이전에 설정한 앱 패키지를 가져오려면 직장 프로필의 관리 구성요소에서 getCrossProfileCalendarPackages()를 호출하면 됩니다.

직장 프로필, 기기 전반의 알 수 없는 출처

Google Play(또는 기타 신뢰할 수 있는 앱 스토어) 이외의 출처에서 다운로드한 앱을 알 수 없는 소스의 앱이라고 합니다. 이제 Android Q에서 직장 프로필 관리자가 새로운 사용자 제한 DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY를 추가하여 사용자나 프로필이 기기의 어디에도 알 수 없는 소스의 앱을 설치하지 못하도록 차단할 수 있습니다. 하지만 이 제한을 추가해도 기기 사용자는 계속 adb를 사용해 앱을 설치할 수 있습니다.

사용자가 실수로 알 수 없는 소스의 앱을 설치하지 않도록 이 사용자 제한사항을 추가하는 것이 좋습니다. 제한사항 추가를 위해 Google Play 서비스를 설치할 필요가 없기 때문입니다. 이전 Android 버전을 지원하려면 Google Play의 관리형 구성 값을 설정하면 됩니다.

허용된 입력 기기를 직장 프로필로 제한

직장 프로필 관리자가 DevicePolicyManager.setPermittedInputMethods()를 호출하면 사용자는 전체 기기가 아닌 해당 직장 프로필 내의 허용된 입력 메서드만 사용할 수 있으므로 개인용 기기에서 입력 메서드를 완전히 관리할 수 있습니다.

알림 없이 직장 프로필 삭제

새로운 WIPE_SILENTLY 플래그가 DevicePolicyManager.wipeData()에 추가되었습니다. 이 플래그가 설정된 경우에는 wipeData()를 사용해 직장 프로필을 삭제한 후에도 사용자에게 알림이 표시되지 않습니다.

완전 관리형 기기의 새로운 기능

Android Q에서는 수동 시스템 업데이트, EAP Wi-Fi 네트워크용 사용자 인증 정보를 포함하기 위한 QR 코드 및 NFC 프로비저닝 확장, DNS over TLS 지원 등을 포함하여 완전 관리형 기기를 위한 새로운 기능 및 API를 소개합니다.

수동 시스템 업데이트 설치

Android Q에서 완전 관리형 기기의 관리자는 시스템 업데이트 파일을 통해 시스템 업데이트를 설치할 수 있습니다. 수동 시스템 업데이트를 통해 IT 관리자는 다음 작업을 수행할 수 있습니다.

  • 업데이트를 광범위하게 설치하기 전에 소수의 기기에서 테스트합니다.
  • 대역폭이 제한된 네트워크에서 중복 다운로드를 방지합니다.
  • 설치를 조정하거나 사용되지 않는 동안에만 기기를 업데이트합니다.

우선 IT 관리자는 지연된 시스템 업데이트 정책을 설정하여 자동 설치를 연기합니다(필요한 경우). 그런 다음, 기기 DPC에서 기기 제조업체의 시스템 업데이트 파일 경로를 사용하여 installSystemUpdate()를 호출합니다. 시스템에서 기기가 다시 시작되기 전에 발생하는 오류를 신고하는 데 사용할 수 있는 InstallSystemUpdateCallback 개체를 전달합니다. 문제가 발생하면 시스템에서 오류 코드와 함께 onInstallUpdateError()를 호출합니다.

기기가 다시 시작된 후 DPC에서는 Build.FINGERPRINT 등의 버전 API를 사용하여 설치 성공 여부를 확인해야 합니다. 업데이트에 실패하면 IT 관리자에게 실패를 보고합니다.

EAP Wi-Fi 프로비저닝

Android Q에서는 이제 기기 프로비저닝에 사용되는 QR 코드와 NFC 데이터에 인증서와 같은 EAP 구성 및 사용자 인증 정보를 포함할 수 있습니다. 사용자가 QR 코드를 스캔하거나 NFC 태그를 탭하면 기기는 자동으로 EAP를 사용하여 해당 지역 Wi-Fi 네트워크에 인증되고 추가적인 수동 입력 없이 프로비저닝 프로세스를 시작합니다.

EAP를 사용하여 Wi-Fi를 인증하려면 "EAP" 값과 함께 EXTRA_PROVISIONING_WIFI_SECURITY_TYPE 항목을 추가합니다. EAP 인증을 지정하려면 인텐트에 다음 프로비저닝 항목을 추가하면 됩니다.

비공개 DNS 지원

조직에서는 DNS over TLS(Android 기기의 비공개 DNS)를 사용하여 내부 호스트 이름의 DNS 쿼리를 비롯한 DNS 쿼리 유출을 방지할 수 있습니다. 완전 관리형 기기의 관리 구성요소를 통해 기기의 비공개 DNS 설정을 관리할 수 있습니다. 비공개 DNS 모드를 설정하려면 다음과 같이 호출합니다.

DPC에서 이러한 메서드 중 하나를 호출하는 경우 호출이 성공하면 시스템에서 PRIVATE_DNS_SET_NO_ERROR를 반환합니다. 호출이 실패하면 오류를 반환합니다.

기기에 설정된 비공개 DNS 모드 및 호스트를 검색하려면 getGlobalPrivateDnsMode()getGlobalPrivateDnsHost()를 호출합니다. DISALLOW_CONFIG_PRIVATE_DNS 사용자 제한을 추가하여 사용자가 비공개 DNS 설정을 변경하지 못하게 할 수 있습니다.

VPN 잠금 모드 예외

VPN 잠금 모드를 사용하면 DPC가 VPN을 사용하지 않는 모든 네트워크 트래픽을 차단할 수 있습니다. 이제 완전 관리형 기기 및 직장 프로필 관리자가 잠금 모드에서 앱을 예외로 설정할 수 있습니다. 예외 앱은 기본적으로 VPN을 사용하지만, VPN을 사용할 수 없으면 자동으로 다른 네트워크에 연결됩니다. 명시적으로 VPN 액세스가 거부된 예외 앱은 다른 네트워크만 사용합니다.

잠금 모드에서 앱을 예외로 설정하려면 예외 앱 패키지 목록을 허용하는 새 DevicePolicyManager 메서드 setAlwaysOnVpnPackage()를 호출합니다. DPC에서 추가하는 모든 앱 패키지는 메서드 호출 시 기기에 설치되어야 합니다. 앱이 제거되고 재설치된 경우에는 앱을 다시 예외로 설정해야 합니다. 이전에 잠금 모드에서 예외로 설정된 앱을 가져오려면 getAlwaysOnVpnLockdownWhitelist()를 호출합니다.

완전 관리형 기기 및 직장 프로필의 관리자가 잠금 모드 상태를 확인할 수 있도록 Android Q에서는 isAlwaysOnVpnLockdownEnabled() 메서드를 추가합니다.

새 위임 범위

Android Q는 DPC가 다른 더 전문화된 앱에 위임할 수 있는 함수 목록을 확장합니다. Android에서는 작업에 필요한 API 메서드를 범위로 그룹화합니다. 범위를 위임하려면 setDelegatedScopes()를 호출하고 다음 범위 중 하나 이상을 전달합니다.

Android Q에서는 위임 앱을 위한 새 클래스 DelegatedAdminReceiver를 도입했습니다. 시스템에서는 이 broadcast receiver를 사용하여 DPC 같은 콜백을 위임 앱에 보냅니다. 네트워크 활동 로깅 및 인증서 선택이 위임된 앱에서는 이 클래스를 구현해야 합니다. 위임 앱에 이 구성요소를 추가하려면 다음 단계를 따르세요.

  1. 위임 앱에 DelegatedAdminReceiver의 서브클래스를 추가합니다.
  2. 앱 manifest에서 <receiver>를 선언하여 각 콜백의 인텐트 필터 작업을 추가합니다. ACTION_NETWORK_LOGS_AVAILABLE 또는 ACTION_CHOOSE_PRIVATE_KEY_ALIAS를 예로 들 수 있습니다.
  3. BIND_DEVICE_ADMIN 권한으로 broadcast receiver를 보호합니다.

다음 스니펫은 네트워크 로깅 및 인증서 선택을 둘 다 처리하는 단일 위임 앱의 앱 매니페스트를 보여 줍니다.

<receiver android:name=".app.DelegatedAdminReceiver"
            android:permission="android.permission.BIND_DELEGATED_ADMIN">
        <intent-filter>
            <action android:name="android.app.admin.action.NETWORK_LOGS_AVAILABLE">
            <action android:name="android.app.action.CHOOSE_PRIVATE_KEY_ALIAS">
        </intent-filter>
        </receiver>
    

네트워크 활동 로깅

조직에서 멀웨어를 감지하고 추적할 수 있도록 DPC에서는 시스템별로 TCP 연결 및 DNS 조회를 기록할 수 있습니다. Android Q에서 완전 관리형 기기의 관리자는 네트워크 로깅을 전문화된 앱에 위임할 수 있습니다.

시스템에서 배치를 사용할 수 있게 된 후 네트워크 로그를 검색하려면 앞에 설명된 대로 위임 앱에서 먼저 DelegatedAdminReceiver의 서브클래스를 추가해야 합니다. 서브클래스에서 로그 검색의 지침에 따라 onNetworkLogsAvailable() 콜백을 구현합니다.

위임 앱은 admin 인수에 null을 전달하는 다음과 같은 DevicePolicyManger 메서드를 호출할 수 있습니다.

로그 손실을 방지하려면 다른 앱에 위임할 계획인 경우 DPC에서 네트워크 로깅을 사용하지 않아야 합니다. 위임 앱에서는 네트워크 로그를 사용하고 수집해야 합니다. DPC에서 네트워크 로깅을 위임한 후에는 추가 onNetworkLogsAvailable() 콜백을 수신하지 않습니다.

위임 앱에서 네트워크 활동 로깅을 보고하는 방법을 알아보려면 개발자 가이드 네트워크 활동 로깅을 읽어 보세요.

인증서 선택

Android Q에서 완전 관리형 기기, 직장 프로필 및 보조 사용자의 관리자는 인증서 선택을 전문화된 앱에 위임할 수 있습니다.

인증서 별칭을 선택하려면 앞에서 설명한 대로 위임 앱에서 먼저 DelegatedAdminReceiver 서브클래스를 만들어야 합니다. 서브클래스에서 onChoosePrivateKeyAlias() 콜백을 구현하고 기본 인증서의 별칭을 반환합니다. 또는 사용자에게 인증서를 선택하라는 메시지를 표시하려면 null 서브클래스를 만들어야 합니다.

기기 관리 정책의 지원 중단

Android Q에서는 앱 및 DPC가 레거시 기기 관리 정책을 적용하지 않도록 합니다. 고객과 파트너에게 완전 관리형 기기 또는 직장 프로필로 전환하도록 추천합니다. Android Q를 타겟팅하는 기기 관리자가 호출하는 경우 SecurityException을 발생시키는 정책은 다음과 같습니다.

일부 애플리케이션은 소비자 기기 관리에 기기 관리자를 사용합니다. 예를 들어, 분실한 기기를 잠그고 완전 삭제합니다. 이 기능을 사용하기 위해 다음 정책이 계속 제공됩니다.

이 변경사항에 대한 자세한 내용은 기기 관리 지원 중단을 읽어 보세요.

앱의 새로운 기능

Android Q를 타겟팅하는 앱에서는 기밀 데이터를 표시하거나 중요 기능을 실행하기 전에 기기에 설정된 화면 잠금 복잡성을 쿼리할 수 있습니다. KeyChain API를 호출하는 앱은 동작이 개선되는 이점을 얻을 수 있고 VPN 앱에 새로운 기능을 사용할 수도 있습니다.

화면 잠금 품질 검사

Android Q부터, 화면 잠금이 필요한 중요 기능이 있는 앱에서는 기기 또는 직장 프로필의 화면 잠금 복잡성을 쿼리할 수 있습니다. 더 강력한 화면 잠금이 필요한 앱에서는 사용자를 시스템 화면 잠금 설정으로 이동하여 보안 설정을 업데이트하게 할 수 있습니다.

화면 잠금 품질을 검사하려면 다음을 수행하세요.

시스템 화면 잠금 설정을 실행하려면 추가 EXTRA_PASSWORD_COMPLEXITY와 함께 ACTION_SET_NEW_PASSWORD를 사용합니다. 추가 인텐트에 지정된 복잡성을 충족하지 않는 옵션은 비활성화됩니다. 사용자는 사용 가능한 화면 잠금 옵션 중에서 선택하거나 화면을 종료할 수 있습니다.

권장사항: 시스템 화면 잠금 페이지를 실행하기 전에 앱에서 메시지를 표시하세요. 앱이 다시 시작되면 DevicePolicyManager.getPasswordComplexity()를 다시 호출합니다. 더 강력한 화면 잠금이 필요하면 보안 설정을 업데이트하도록 사용자에게 반복해서 메시지를 표시하는 대신 액세스를 제한하세요.

VPN 앱의 HTTP 프록시 지원

Android Q에서는 VPN 앱에서 VPN 연결을 위해 HTTP 프록시를 설정할 수 있습니다. HTTP 프록시를 추가하려면 VPN 앱에서 호스트 및 포트를 사용하여 ProxyInfo 인스턴스를 구성한 후 VpnService.Builder.setHttpProxy()를 호출해야 합니다. 시스템과 대부분의 네트워킹 라이브러리에서는 이 프록시 설정을 사용하지만, 시스템에서는 강제로 앱이 HTTP 요청을 프록시하도록 하지 않습니다.

HTTP 프록시 설정 방법을 보여 주는 샘플 코드는 ToyVPN 샘플 앱을 참조하세요.

VPN 서비스 모드

이제 VPN 앱에서 상시 사용 설정 VPN으로 인해 서비스가 실행 중인지, 잠금 모드가 활성 상태인지 탐색할 수 있습니다. Android Q에 추가된 새 메서드를 사용하여 사용자 인터페이스를 조정할 수 있습니다. 예를 들어, 상시 사용 설정 VPN에서 서비스 수명 주기를 관리하는 경우 연결 해제 버튼을 사용 중지할 수 있습니다.

VPN 앱은 서비스에 연결하고 로컬 인터페이스를 설정한 후 다음 VpnService 메서드를 호출할 수 있습니다.

  • isAlwaysOn() - 상시 사용 설정 VPN으로 인해 시스템에서 서비스를 시작했는지 확인
  • isLockdownEnabled() - 시스템에서 VPN을 사용하지 않는 연결을 차단하는지 확인

서비스가 실행되는 동안 상시 사용 설정 상태는 유지되지만 잠금 모드 상태는 변경될 수 있습니다.

키체인 향상

Android Q에 KeyChain API와 관련된 몇 가지 개선 사항이 도입되었습니다.

앱에서 KeyChain.choosePrivateKeyAlias()를 호출하면 기기에서는 사용자가 통화에 지정된 발급기관과 키 알고리즘에 근거하여 선택할 수 있는 인증서 목록을 필터링합니다.

예를 들어 TLS 서버에서 TLS 핸드셰이크의 일부로 인증서 요청 메시지를 전송하고 브라우저에서 KeyChain.choosePrivateKeyAlias()를 호출하면 인증서 선택 프롬프트에 이제 발급기관 매개변수와 일치하는 옵션만 포함됩니다. 일치하는 옵션을 사용할 수 없거나 기기에 설치된 인증서가 없는 경우에는 선택 프롬프트가 사용자에게 표시되지 않습니다.

또한 KeyChain에서 키 또는 CA 인증서를 가져오기 전에 더 이상 기기의 화면 잠금 기능을 요구하지 않습니다.

자세히 알아보기

앱에 영향을 줄 수 있는 다른 변경사항을 알아보려면 Q를 타겟팅하는 앱모든 앱의 Android Q 동작 변경 페이지를 참조하세요.