이 페이지에서는 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는 새로운 결과 인텐트를 만들고 이 인텐트에 다음 항목을 추가할 수도 있습니다.
EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE: 기존 번들에 추가하거나 새 번들을 만듭니다. 이 번들은 DPC가 정책 준수 화면을 실행할 때 추가 인텐트로 전송됩니다.EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE: 직장 계정을 직장 프로필 프로비저닝의 일부로 추가하는 경우에만 이전할 계정을 지정할 수 있습니다.EXTRA_PROVISIONING_SKIP_EDUCATION_SCREENS
기기에서 관리 모드를 설정하려면
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_COMPLIANCE는 setResult(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에서는 설치가 완료되었는지 확인해야 합니다.
다음과 같은 버전 API를 사용합니다.
Build.FINGERPRINT 업데이트가 실패하면 IT 관리자에게 실패를 보고합니다.
EAP Wi-Fi 프로비저닝
Android 10에서는 이제 기기 프로비저닝에 사용되는 QR 코드와 NFC 데이터에 인증서와 같은 EAP 구성 및 사용자 인증 정보를 포함할 수 있습니다. 사용자가 QR 코드를 스캔하거나 NFC 태그를 탭하면 기기는 자동으로 EAP를 사용하여 해당 지역 Wi-Fi 네트워크에 인증되고 추가적인 수동 입력 없이 프로비저닝 프로세스를 시작합니다.
EAP를 사용하여 Wi-Fi를 인증하려면
EXTRA_PROVISIONING_WIFI_SECURITY_TYPE
추가 항목을 "EAP" 값과 함께 추가합니다. EAP 인증을 지정하려면 인텐트에 다음 프로비저닝 항목을 추가하면 됩니다.
EXTRA_PROVISIONING_WIFI_EAP_METHODEXTRA_PROVISIONING_WIFI_IDENTITYEXTRA_PROVISIONING_WIFI_ANONYMOUS_IDENTITYEXTRA_PROVISIONING_WIFI_DOMAINEXTRA_PROVISIONING_WIFI_PHASE2_AUTHEXTRA_PROVISIONING_WIFI_USER_CERTIFICATEEXTRA_PROVISIONING_WIFI_CA_CERTIFICATE
비공개 DNS 지원
조직에서는 DNS over TLS (Android 기기의 비공개 DNS)를 사용하여 내부 호스트 이름의 DNS 쿼리를 비롯한 DNS 쿼리 유출을 방지할 수 있습니다. 완전 관리형 기기의 관리 구성요소를 통해 기기의 비공개 DNS 설정을 관리할 수 있습니다. 비공개 DNS 모드를 설정하려면 다음과 같이 호출합니다.
setGlobalPrivateDnsModeOpportunistic(): 시스템에서 지원 네임서버를 검색할 수 있는 경우 기기에서 비공개 DNS를 사용하려면 이 메서드를 호출합니다.setGlobalPrivateDnsModeSpecifiedHost():privateDnsHost인수에 RFC7858을 지원하는 네임서버의 호스트 이름을 지정하려면 이 메서드를 호출합니다.
DPC가 이러한 메서드 중 하나를 호출하면 호출이 성공한 경우 시스템에서 PRIVATE_DNS_SET_NO_ERROR를 반환합니다. 호출이 실패하면 오류를 반환합니다.
기기에 설정된 비공개 DNS 모드 및 호스트를 검색하려면 getGlobalPrivateDnsMode()
및 getGlobalPrivateDnsHost()를 호출합니다.
사용자 제한을 추가하여 사용자가 비공개 DNS 설정을 변경하지 못하게 할 수 있습니다.DISALLOW_CONFIG_PRIVATE_DNS
VPN 잠금 모드 예외
VPN 잠금 모드를 사용하면 DPC가 VPN을 사용하지 않는 모든 네트워크 트래픽을 차단할 수 있습니다. 완전 관리형 기기 및 직장 프로필 관리자가 잠금 모드에서 앱을 예외로 설정할 수 있습니다. 예외 앱은 기본적으로 VPN을 사용하지만, VPN을 사용할 수 없으면 자동으로 다른 네트워크에 연결됩니다. 명시적으로 VPN 액세스가 거부된 예외 앱은 다른 네트워크만 사용합니다.
앱을 잠금 모드에서 예외로 설정하려면 예외 앱 패키지 목록을 허용하는 새
DevicePolicyManager 메서드
setAlwaysOnVpnPackage()
를 호출합니다. DPC에서 추가하는 모든 앱 패키지는 메서드 호출 시 기기에 설치되어야 합니다. 앱이 제거되고 재설치된 경우에는 앱을 다시 예외로 설정해야 합니다. 이전에 잠금 모드에서 예외로 설정된 앱을 가져오려면
다음을 호출합니다.
getAlwaysOnVpnLockdownWhitelist()
완전 관리형 기기 및 직장 프로필의 관리자가 잠금 모드
상태를 확인할 수 있도록 Android 10에서는
isAlwaysOnVpnLockdownEnabled()
메서드를 추가합니다.
새 위임 범위
Android 10에서는 DPC가 다른 더 전문화된 앱에 위임할 수 있는 함수 목록을 확장했습니다. Android는 작업을 위해 필요한 API 메서드를 범위 로 그룹화합니다. 범위를 위임하려면
setDelegatedScopes()
을 호출하고 다음 범위 중 하나 이상을 전달합니다.
DELEGATION_NETWORK_LOGGING: 네트워크 활동 로깅을 위임합니다.DELEGATION_CERT_SELECTION: 인증서 선택을 위임합니다.
Android 10에서는 위임 앱을 위한 새 클래스
DelegatedAdminReceiver
를 도입했습니다. 시스템에서는 이 broadcast receiver를 사용하여 DPC 같은 콜백을 위임 앱에 보냅니다. 네트워크 활동 로깅 및 인증서 선택이 위임된 앱에서는 이 클래스를 구현해야 합니다. 위임 앱에 이 구성요소를 추가하려면 다음 단계를 따르세요.
- 위임 앱에
DelegatedAdminReceiver의 서브클래스를 추가합니다. - 앱 매니페스트에서
<receiver>를 선언하여 각 콜백의 인텐트 필터 작업을 추가합니다. 예를 들어ACTION_NETWORK_LOGS_AVAILABLE또는ACTION_CHOOSE_PRIVATE_KEY_ALIAS입니다. 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 메서드를 호출할 수 있습니다(null 인수에 admin 전달).
로그 손실을 방지하려면 다른 앱에 위임할 계획인 경우 DPC에서 네트워크 로깅을 사용하지 않아야 합니다. 위임 앱에서는 네트워크 로그를 사용하고
수집해야 합니다. DPC에서 네트워크 로깅을 위임한 후에는 추가
onNetworkLogsAvailable()
콜백을 수신하지 않습니다.
위임 앱에서 네트워크 활동 로깅을 보고하는 방법을 알아보려면 개발자 가이드 네트워크 활동 로깅을 읽어 보세요.
인증서 선택
Android 10에서 관리자는 완전 관리형 기기, 직장 프로필 및 보조 사용자의 인증서 선택을 전문화된 앱에 위임할 수 있습니다.
인증서 별칭을 선택하려면 앞에서 설명한 대로 위임 앱에서 먼저 서브클래스를 만들어야 합니다.
DelegatedAdminReceiver
서브클래스에서
onChoosePrivateKeyAlias() 콜백을 구현하고 기본
인증서의 별칭을 반환하거나 사용자에게 인증서를 선택하라는 메시지를 표시하려면 null을 반환합니다.
기기 관리 정책의 지원 중단
Android 10에서는 앱 및 DPC가 레거시 기기
관리 정책을 적용하지 않도록 합니다. 고객과 파트너에게 완전 관리형 기기 또는 직장 프로필로 전환하도록 추천합니다. Android 10을 타겟팅하는 기기 관리자가 다음
정책을 호출하면 SecurityException
이 발생합니다.
USES_POLICY_DISABLE_CAMERAUSES_POLICY_DISABLE_KEYGUARD_FEATURESUSES_POLICY_EXPIRE_PASSWORDUSES_POLICY_LIMIT_PASSWORD
일부 애플리케이션은 소비자 기기 관리에 기기 관리자를 사용합니다. 예를 들어, 분실한 기기를 잠그고 완전 삭제합니다. 이를 사용 설정하려면 다음 정책을 계속 사용할 수 있습니다.
이 변경사항에 대한 자세한 내용은 기기 관리 지원 중단을 읽어 보세요.
앱의 새로운 기능
Android 10을 타겟팅하는 앱에서는 기밀 데이터를 표시하거나 중요 기능을 실행하기 전에 기기에 설정된 화면 잠금 복잡성을 쿼리할 수 있습니다. KeyChain API를 호출하는 앱은 동작이 개선되는 이점을 얻을 수 있고 VPN 앱에 새로운 기능을 사용할 수도 있습니다.
화면 잠금 품질 검사
Android 10부터, 화면 잠금이 필요한 중요 기능이 있는 앱에서는 기기 또는 직장 프로필의 화면 잠금 복잡성을 쿼리할 수 있습니다. 더 강력한 화면 잠금이 필요한 앱에서는 사용자를 시스템 화면 잠금 설정으로 이동하여 보안 설정을 업데이트하게 할 수 있습니다.
화면 잠금 품질을 검사하려면 다음을 수행하세요.
- 앱 매니페스트에 새
REQUEST_PASSWORD_COMPLEXITY권한을 추가합니다. DevicePolicyManager.getPasswordComplexity()를 호출합니다. 복잡성은 다음 네 가지 카테고리로 구분됩니다.
시스템 화면 잠금 설정을 실행하려면 추가 EXTRA_PASSWORD_COMPLEXITY와 함께
ACTION_SET_NEW_PASSWORD
를 사용합니다. 추가 인텐트에 지정된 복잡성을 충족하지 않는 옵션은 비활성화됩니다. 사용자는 사용 가능한 화면 잠금 옵션 중에서 선택하거나 화면을 종료할 수 있습니다.
권장사항: 시스템 화면 잠금 페이지를 실행하기 전에 앱에서 메시지를 표시하세요. 앱이 다시 시작되면
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에서 더 이상 기기의 화면 잠금 기능을 요구하지 않습니다.