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

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

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

Android 10에는 직장 프로필만 필요한 회사 소유 기기를 위한 새로운 프로비저닝 및 증명 기능이 도입되었습니다.

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

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

DPC의 매니페스트 파일에서 활동에서 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의 매니페스트 파일에서 활동에서 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를 사용하면 교차 프로필 캘린더 공개 상태 및 알 수 없는 소스의 앱 설치에 대한 기기 전체 차단을 지원할 수 있습니다.

직장 프로필, 기기 전반의 알 수 없는 소스

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

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

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

직장 프로필 관리자가 DevicePolicyManager.setPermittedInputMethods()를 호출하면 사용자는 전체 기기가 아닌 직장 프로필 내의 허용된 입력 방법으로만 제한되므로 개인 기기의 입력 방법을 완전히 제어할 수 있습니다.

알림 없이 직장 프로필 삭제

DevicePolicyManager.wipeData()WIPE_SILENTLY 플래그를 추가했습니다. 이 플래그가 설정되면 wipeData()를 사용하여 직장 프로필을 완전 삭제한 후에도 사용자에게 알림이 표시되지 않습니다.

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

Android 10에는 수동 시스템 업데이트, EAP Wi-Fi 네트워크의 사용자 인증 정보를 포함하도록 QR 코드 및 NFC 프로비저닝 확장, DNS over TLS 지원 등 완전 관리형 기기를 위한 새로운 기능과 API가 도입되었습니다.

수동 시스템 업데이트 설치

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

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

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

기기가 다시 시작되면 DPC는 Build.FINGERPRINT와 같은 버전 API를 사용하여 설치가 완료되었는지 확인해야 합니다. 업데이트가 실패하면 IT 관리자에게 실패를 보고합니다.

EAP Wi-Fi 프로비저닝

Android 10에서는 기기 프로비저닝에 사용되는 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 10에서는 isAlwaysOnVpnLockdownEnabled() 메서드를 추가합니다.

새 위임 범위

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

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

  1. DelegatedAdminReceiver의 서브클래스를 위임 앱에 추가합니다.
  2. 앱 매니페스트에서 <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 10에서 완전 관리형 기기의 관리자는 네트워크 로깅을 전문화된 앱에 위임할 수 있습니다.

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

위임 앱은 다음 DevicePolicyManager 메서드를 호출할 수 있습니다(admin 인수에 null 전달).

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

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

인증서 선택

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

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

기기 관리 정책의 지원 중단

Android 10에서는 앱 및 DPC가 레거시 기기 관리 정책을 적용하지 못하도록 합니다. 고객과 파트너는 완전 관리형 기기 또는 직장 프로필로 전환하는 것이 좋습니다. Android 10을 타겟팅하는 기기 관리자가 다음 정책을 호출하면 SecurityException이 발생합니다.

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

이 변경사항에 관한 자세한 내용은 기기 관리자 지원 중단을 참고하세요.

앱의 새로운 기능

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

화면 잠금 품질 검사

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

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

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

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

VPN 앱의 HTTP 프록시 지원

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

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

VPN 서비스 모드

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

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

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

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

키체인 향상

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

앱에서 KeyChain.choosePrivateKeyAlias()를 호출하면 Android 10 이상 기기는 호출에 지정된 발급기관 및 키 알고리즘을 기반으로 사용자가 선택할 수 있는 인증서 목록을 필터링합니다.

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

또한 KeyChain에서는 키 또는 CA 인증서를 가져오기 전에 더 이상 기기에 화면 잠금을 설정하지 않아도 됩니다.