Android용 Intune 앱 SDK - 앱 참여 기능

Android용 Microsoft Intune 앱 SDK를 사용하면 Intune 앱 보호 정책(MAM 정책이라고도 함)을 네이티브 Java/Kotlin Android 앱에 통합할 수 있습니다. Intune 관리 애플리케이션은 Intune 앱 SDK와 통합됩니다. Intune 관리자는 Intune에서 앱을 적극적으로 관리할 때 Intune 관리 앱에 앱 보호 정책을 쉽게 배포할 수 있습니다.

참고

이 가이드는 여러 단계로 나뉩니다. 먼저 통합 계획을 검토합니다.

7단계: 앱 참여 기능

스테이지 목표

  • Intune 앱 SDK에서 제공하는 앱 참여 기능에 대해 알아봅니다.
  • 앱 및 사용자와 관련된 앱 참여 기능을 통합합니다.
  • 이러한 기능의 통합을 테스트합니다.

"앱 참여 기능"이란?

이 SDK 통합 프로세스는 개발자가 작성해야 하는 앱별 코드의 양을 최소화하려고 시도합니다. SDK 통합의 이전 단계를 성공적으로 완료하면 이제 앱에서 파일 암호화, 복사/붙여넣기 제한, 스크린샷 차단 및 데이터 전송 제한과 같은 대부분의 앱 보호 정책 설정을 적용합니다.

그러나 일부 설정은 앱별 코드를 적용해야 제대로 적용할 수 있습니다. 이러한 설정을 앱 참여 기능이라고 합니다. 일반적으로 SDK에는 이러한 설정을 자동으로 적용하기 위한 애플리케이션 코드 또는 최종 사용자 시나리오에 대한 컨텍스트가 충분하지 않으므로 개발자가 SDK API를 적절하게 호출해야 합니다.

앱 참여 기능이 반드시 선택 사항은 아닙니다. 앱의 기존 기능에 따라 이러한 기능이 필요할 수 있습니다. 자세한 내용은 SDK 통합을 위한 주요 결정을 참조하세요.

이 가이드의 이전 단계에서는 이미 여러 앱 참여 기능에 대해 설명했습니다.

이 가이드의 나머지 부분에서는 나머지 앱 참여 기능 집합에 대해 설명합니다.

  • 정책을 적용하여 로컬 또는 클라우드 저장소에 파일을 저장하거나 파일을 엽니다.
  • 알림의 콘텐츠를 제한하는 정책을 적용합니다.
  • 백업 데이터를 보호하는 정책을 적용합니다.
  • 화면 캡처를 제한하는 정책을 적용합니다(앱에 사용자 지정 화면 캡처 코드가 있는 경우).
  • 앱 보호 CA를 지원합니다.
  • SDK의 알림을 등록합니다.
  • 사용자 지정 애플리케이션 테마를 적용합니다.
  • Intune의 신뢰할 수 있는 인증서를 사용하여 온-프레미스 엔드포인트에 대한 신뢰 체인을 보장합니다.

앱 참여 기능 기본 사항

AppPolicy 인터페이스에는 특정 작업이 허용되는지 여부를 앱에 알려주는 많은 메서드가 포함되어 있습니다.

대부분의 앱 참여 기능에는 다음이 포함됩니다.

  • 앱 코드에서 작업이 허용되는지 검사할 적절한 위치를 식별합니다.
  • 현재 구성된 정책에 따라 작업이 허용되는지 검사하는 메서드를 호출 AppPolicy 합니다.
  • 결과에 따라 작업 완료를 허용하거나 작업이 차단되었을 때 앱 동작을 수정합니다.

instance를 검색 AppPolicy 하려면 다음과 같은 getPolicy(final Context context)getPolicyForIdentityOID(final String oid)MAMPolicyManager 메서드 중 하나를 사용합니다.

AppPolicy의 정보 메서드

모든 AppPolicy 메서드가 앱 참여 기능과 연결되어 있는 것은 아닙니다. 일부 메서드는 정보 제공용이며, 해당 정책이 SDK에 의해 자동으로 적용되더라도 현재 구성되어 있는 정책에 대한 앱 데이터를 제공합니다. 이러한 메서드는 특정 정책이 구성될 때 앱이 사용자 지정 사용자 환경을 제공할 수 있는 기회를 제공하기 위해 존재합니다.

예: 스크린샷이 차단되는지 확인

사용자가 스크린샷을 찍을 수 있게 해주는 컨트롤이 앱에 있는 경우 앱 보호 정책에서 스크린샷을 차단하는 경우 해당 컨트롤을 사용하지 않도록 설정하거나 숨기는 것이 좋습니다.

앱은 를 호출MAMPolicyManager.getPolicy(currentActivity).getIsScreenCaptureAllowed()하여 검사할 수 있습니다.

앱과 장치 또는 클라우드 저장소 위치 간의 데이터 전송을 제한하는 정책

많은 앱을 사용하면 최종 사용자가 로컬 파일 저장소 또는 클라우드 저장소 서비스에 데이터를 저장하거나 해당 서비스를 열 수 있습니다. IT 관리자는 Intune 앱 SDK를 사용하여 앱에서 데이터를 저장하고 데이터를 열 수 있는 위치를 제한하여 데이터 수신 및 데이터 유출을 방지할 수 있습니다.

참고

앱에서 직접 개인 또는 클라우드 위치에 저장하도록 허용하거나 앱에서 직접 데이터를 열 수 있도록 허용하는 경우 이 Intune 앱 SDK 앱 참여 기능**을 구현하여 IT 관리자가 이러한 저장 및 열기를 차단할 수 있도록 해야 합니다.

장치 또는 클라우드 저장소에 저장

API를 getIsSaveToLocationAllowedForOID 통해 앱은 구성된 정책에 따라 지정된 ID에 대해 특정 위치에 저장이 허용되는지 여부를 알 수 있습니다.

MAMPolicyManager.getPolicy(currentActivity).getIsSaveToLocationAllowedForOID(
SaveLocation service, String oid);

앱이 검사를 getIsSaveToLocationAllowedForOID 구현해야 하는지 여부를 확인하려면 다음 표를 검토하여 앱이 데이터 송신을 지원하는지 확인합니다.

service 매개 변수: SaveLocation 열거형 값 사용 사례 연결된 OID
ONEDRIVE 앱에서 OneDrive에 데이터를 저장하고 있습니다. 클라우드 서비스 인증 및 Microsoft Entra 인증 모두에 사용되는 계정의 OID입니다. 이 계정이 없거나 OID를 알 null수 없는 경우 .
SHAREPOINT 앱에서 SharePoint에 데이터를 저장하고 있습니다. 클라우드 서비스 인증 및 Microsoft Entra 인증 모두에 사용되는 계정의 OID입니다. 이 계정이 없거나 OID를 알 null수 없는 경우 .
BOX 앱에서 Box에 데이터를 저장하고 있습니다. 클라우드 서비스 인증 및 Microsoft Entra 인증 모두에 사용되는 계정의 OID입니다. 이 계정이 없거나 OID를 알 null수 없는 경우 .
LOCAL 앱에서 앱의 개인 저장소가 아닌 장치의 외부 저장소 위치에 데이터를 저장하고 있습니다. 이 스토리지 위치는 클라우드 서비스로 간주되지 않으며 항상 OID 매개 변수와 null 함께 사용해야 합니다.
PHOTO_LIBRARY 앱에서 Android 로컬 사진 저장소에 데이터를 저장하고 있습니다. 로컬 사진 저장소는 클라우드 서비스로 간주되지 않으며 항상 OID 매개 변수와 null 함께 사용해야 합니다.
IMANAGE 앱이 iManage에 데이터를 저장하고 있습니다. 클라우드 서비스 인증 및 Microsoft Entra 인증 모두에 사용되는 계정의 OID입니다. 이 계정이 없거나 OID를 알 null수 없는 경우 .
EGNYTE 앱에서 Egnyte에 데이터를 저장하고 있습니다. 클라우드 서비스 인증 및 Microsoft Entra 인증 모두에 사용되는 계정의 OID입니다. 이 계정이 없거나 OID를 알 null수 없는 경우 .
ACCOUNT_DOCUMENT 앱이 앱 내 계정과 연결된 위치에 데이터를 저장하고 있으며 이 표의 특정 클라우드 위치 중 하나가 아닙니다.

이 위치를 사용하여 다중 ID 앱 내의 계정 간에 데이터를 전달할 수 있는지 여부를 결정합니다.
Microsoft Entra 인증에 사용되는 계정의 OID입니다. 이 계정이 없거나 OID를 알 null수 없는 경우 .
OTHER 앱에서 이 표에 지정되지 않은 위치에 데이터를 저장하고 있으며, 이 위치는 기준에 맞지 않습니다.ACCOUNT_DOCUMENT oid 위치에 대해 평가되지 않으며 여야 합니다 null.

앱 작동에 필요하거나 표시를 위해 임시로 다운로드된 개인 앱 저장소에 저장된 Files 항상 허용됩니다. 검사getIsSaveToLocationAllowedForOID할 필요가 없습니다. Do 검사 SaveLocation.LOCAL 대상

  1. 개인 앱 저장소 외부에 저장된 Files.
  2. 앱 작동에 필요하지 않은 개인 앱 저장소에 다운로드된 Files(예: 사용자가 명시적으로 장치에 다운로드하도록 선택한 경우).

참고

저장 정책을 oid 확인할 때 저장되는 클라우드 서비스와 연결된 계정의 OID여야 합니다(이 계정은 저장되는 문서를 소유하는 계정과 반드시 동일하지는 않음).

로컬 또는 클라우드 저장소 위치에서 데이터 열기

API를 getIsOpenFromLocationAllowedForOID 통해 앱은 구성된 정책에 따라 지정된 ID에 대해 특정 위치에서 열 수 있는지 여부를 알 수 있습니다.

MAMPolicyManager.getPolicy(currentActivity).getIsOpenFromLocationAllowedForOID(
OpenLocation location, String oid);

앱이 검사를 getIsOpenFromLocationAllowedForOID 구현해야 하는지 여부를 확인하려면 다음 표를 검토하여 앱이 데이터 수신을 지원하는지 확인합니다.

location 매개 변수: OpenLocation 열거형 값 사용 사례 연결된 OID
ONEDRIVE_FOR_BUSINESS 앱이 OneDrive의 데이터를 열고 있습니다. 클라우드 서비스 인증 및 Microsoft Entra 인증 모두에 사용되는 계정의 OID입니다. 이 계정이 없거나 OID를 알 null수 없는 경우 .
SHAREPOINT 앱이 SharePoint에서 데이터를 열고 있습니다. 클라우드 서비스 인증 및 Microsoft Entra 인증 모두에 사용되는 계정의 OID입니다. 이 계정이 없거나 OID를 알 null수 없는 경우 .
CAMERA 앱이 장치 카메라의 데이터를 열고 있습니다. null 장치 카메라가 클라우드 서비스가 아니기 때문에 값입니다.
LOCAL 앱에서 앱의 개인 저장소가 아닌 장치의 외부 저장소 위치에서 데이터를 엽니다. 외부 저장소는 클라우드 서비스는 아니지만 소유권을 나타내기 때문에 매개 변수가 oid 필요합니다.

* ID 태그가 지정된 파일의 경우:oid 파일 소유자의 ID여야 합니다.
* ID 태그가 없는 파일의 경우:oid 여야 null합니다.
PHOTO_LIBRARY 앱에서 Android 로컬 사진 저장소의 데이터를 열고 있습니다. 로컬 사진 저장소는 클라우드 서비스로 간주되지 않으며 항상 OID 매개 변수와 null 함께 사용해야 합니다.
ACCOUNT_DOCUMENT 앱이 앱 내 계정과 연결된 위치에서 데이터를 열고 있으며 이 표의 특정 클라우드 위치 중 하나가 아닙니다.

이 위치를 사용하여 다중 ID 앱 내의 계정 간에 데이터를 전달할 수 있는지 여부를 결정합니다.
Microsoft Entra 인증에 사용되는 계정의 OID입니다. 이 계정이 없거나 OID를 알 null수 없는 경우 .
OTHER 앱에서 이 표에 지정되지 않은 위치에서 데이터를 열고 있으며, 이 위치는 기준에 맞지 않습니다.ACCOUNT_DOCUMENT oid 위치에 대해 평가되지 않으며 여야 합니다 null.

참고

열기 정책을 검사할 때 열 oid리는 파일 또는 클라우드 서비스와 연결된 계정의 OID여야 합니다(문서를 여는 계정과 반드시 동일할 필요는 없음).

편의를 위해 SDK는 로컬 저장소의 파일에 대한 매개 변수를 File 사용하는 메서드 AppPolicy.isOpenFromLocalStorageAllowed 를 제공합니다. 정책 적용의 경우 이 메서드는 파일에서 파일 소유자의 oid 구문 분석을 처리한다는 점을 제외하면 호출 AppPolicy.getIsOpenFromLocationAllowedForOID(OpenLocation.LOCAL, oid) 과 기능적으로 동일합니다.File

공유 차단된 대화 상자

SDK는 MAM 정책이 데이터 전송 작업을 차단할 때 사용자에게 알리는 대화 상자를 제공합니다.

API 호출로 getIsSaveToLocationAllowedForOIDgetIsOpenFromLocationAllowedForOID 인해 저장/열기 작업이 차단될 때마다 대화 상자가 사용자에게 표시되어야 합니다. 대화 상자는 일반 메시지를 표시하고 해제되면 호출 Activity 로 돌아갑니다.

대화 상자를 표시하려면 다음 코드를 추가합니다.

MAMUIHelper.showSharingBlockedDialog(currentActivity)

파일 공유 허용

공용 저장소 위치에 저장할 수 없는 경우 앱은 사용자가 파일을 앱 개인 저장소 에 다운로드한 다음 시스템 선택기로 열어 파일을 볼 수 있도록 허용해야 합니다.

알림 내의 콘텐츠 제한 정책

단일 ID 앱의 경우 Intune 앱 SDK의 기본 동작은 앱 보호 정책이 알림을 제한할 때 모든 알림을 차단하려고 시도합니다.

SDK의 기본 동작은 제한됩니다. SDK는 알림에서 관리되는 콘텐츠만 제거하기 위한 "조직 데이터 차단" 값을 자동으로 적용할 수 없습니다. 다중 ID 앱의 경우 SDK는 관리 콘텐츠가 포함된 알림을 확인할 수 없습니다.

앱에서 알림을 표시하고 다중 ID이거나 "조직 데이터 차단" 값을 적용해야 하는 경우 알림을 표시하기 전에 알림과 연결된 계정에 대한 알림 제한 정책을 검사해야 합니다.

정책이 적용되는지 확인하려면 다음을 호출합니다.

NotificationRestriction notificationRestriction =
    MAMPolicyManager.getPolicyForIdentityOID(notificationIdentityOid).getNotificationRestriction();

반환된 NotificationRestriction 열거형에는 다음과 같은 값이 포함됩니다.

NotificationRestriction 열거형 예상된 앱 동작
BLOCKED 앱에는 이 정책과 연결된 계정에 대한 알림이 표시되지 않아야 합니다 . 단일 ID 앱의 경우 Intune 앱 SDK는 모든 알림을 자동으로 차단하므로 추가 코드가 필요하지 않습니다.
BLOCK_ORG_DATA 앱에는 organization 데이터가 포함되지 않은 수정된 알림이 표시되어야 합니다.
UNRESTRICTED 앱에 모든 알림이 표시됩니다.

앱이 제대로 호출 getNotificationRestriction되지 않는 경우 MAM SDK는 단일 ID 앱에 대해서만 알림을 자동으로 제한하기 위해 최선을 다합니다.

이 경우 는 BLOCK_ORG_DATA 다음과 동일 BLOCKED 하게 처리되며 알림이 전혀 표시되지 않습니다.

보다 세부적인 제어를 위해서는 앱 알림의 getNotificationRestriction 값을 검사하고 적절하게 수정합니다.

백업 데이터 보호 정책

Intune 앱 SDK는 Android의 기본 제공 백업 및 복원 기능에 대한 데이터 업로드를 차단할 수 있습니다. Android의 백업 및 복원에 대한 자세한 내용은 Android API 가이드백업 및 복원 변경의 Android S/12에 도입된 변경 사항을 참조하세요.

앱에 대한 자동 백업

Android M부터 Android는 앱의 대상 API에 관계없이 앱용 Google 드라이브에 전체 자동 백업 을 제공합니다.

Intune을 사용하면 특정 Intune 통합 지침과 함께 XML로 사용자 지정 규칙을 정의하는 기능을 포함하여 Android에서 제공하는 모든 Intune 자동 백업 기능을 사용하여 데이터 보호가 적용되도록 할 수 있습니다.

앱의 매니페스트에서 백업 동작 구성

기본적으로 백업 android:allowBackup사용 및 사용 안 함에 설명된 대로 true로 설정됩니다.

앱에 전체 백업 및 복원 기능이 필요하지 않은 경우 false로 설정합니다android:allowBackup. 이 경우 추가 작업이 필요하지 않으며 회사 데이터는 앱 내에 유지됩니다.

앱에 전체 백업 및 복원 기능이 필요한 경우 true로 설정 android:allowBackup 하고 다음 단계를 수행합니다.

  1. 앱에서 자체 사용자 지정BackupAgent을 사용하지 않는 경우 기본 MAMBackupAgent를 사용하여 Intune 정책을 준수하는 자동 전체 백업을 사용하도록 설정합니다. 앱 매니페스트에 다음을 넣습니다.

    <application
    ...
      android:fullBackupOnly="true"
      android:backupAgent="com.microsoft.intune.mam.client.app.backup.MAMDefaultBackupAgent"
      ...>
      </application>
    
  2. 선택 사항. 사용자 지정 BackupAgent, MAMBackupAgent 또는 MAMBackupAgentHelper를 사용해야 합니다. 다음 섹션을 참조하세요. Android M 이상에서 손쉬운 백업을 제공하는 Intune의 MAMDefaultBackupAgent로 전환하는 것이 좋습니다.

  3. 앱이 받을 전체 백업 유형(필터링되지 않음, 필터링됨 또는 없음)을 결정할 때는 특성을 , false또는 앱의 XML 리소스로 true설정합니다android:fullBackupContent.

  4. 그런 다음 의 android:fullBackupContent 값을 메타데이터 태그에 com.microsoft.intune.mam.FullBackupContent , API 31에 추가된 XML 구성 형식을 지원하는 앱의 경우 메타데이터 태그에 com.microsoft.intune.mam.DataExtractionRules 복사해야 합니다.

    • 예제 1: 앱이 제외 없이 전체 백업을 수행하도록 하려면 속성 및 메타데이터 태그를 true로 설정해야 합니다.

      <application
        ...
        android:fullBackupContent="true"
        ...>
      </application>
      ...
      <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:value="true" />
      <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:value="true" />
      
    • 예제 2: 앱에서 사용자 지정 BackupAgent 을 사용하고 전체 Intune 정책 규격 자동 백업을 옵트아웃하도록 하려면 특성 및 메타데이터 태그를 false로 설정해야 합니다.

      <application
        ...
        android:fullBackupContent="false"
        ...>
      </application>
      ...
      <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:value="false" />
      <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:value="false" />
      
    • 예제 3: XML 파일에 정의된 사용자 지정 규칙에 따라 앱에서 전체 백업을 수행하려면 특성 및 메타데이터 태그를 동일한 XML 리소스로 설정합니다.

      <application
        ...
        android:fullBackupContent="@xml/my_full_backup_content_scheme"
        android:dataExtractionRules="@xml/my_data_extraction_rules_scheme"
        ...>
      </application>
      ...
      <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:resource="@xml/my_full_backup_content_scheme" />
      <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:resource="@xml/my_data_extraction_rules_scheme" />
      

키/값 백업

키/값 백업 옵션은 모든 API 8+에서 사용할 수 있으며 Android 백업 서비스에 앱 데이터를 업로드합니다. 앱당 데이터 양은 5MB로 제한됩니다. 키/값 백업을 사용하는 경우 BackupAgentHelper 또는 BackupAgent를 사용해야 합니다.

BackupAgentHelper

BackupAgentHelper는 네이티브 Android 기능과 Intune MAM 통합 측면에서 BackupAgent보다 구현하기 쉽습니다. BackupAgentHelper를 사용하면 개발자가 전체 파일과 공유 기본 설정을 FileBackupHelper (각각)에 SharedPreferencesBackupHelper 등록한 다음 생성 시 BackupAgentHelper에 추가됩니다. Intune MAM에서 BackupAgentHelper를 사용하려면 다음 단계를 따르세요.

  1. 다중 BackupAgentHelperID 백업을 사용하려면 Android 가이드에 따라 BackupAgentHelper 확장을 참조하세요.

  2. 클래스에서 BackupAgentHelper, FileBackupHelper 및 SharedPreferencesBackupHelper에 해당하는 MAM을 확장하도록 합니다.

Android 클래스 MAM 등가
BackupAgentHelper MAMBackupAgentHelper
FileBackupHelper MAMFileBackupHelper
SharedPreferencesBackupHelper MAMSharedPreferencesBackupHelper

이러한 지침을 따르면 다중 ID 백업 및 복원을 성공적으로 수행할 수 있습니다.

BackupAgent

BackupAgent를 사용하면 백업되는 데이터에 대해 훨씬 더 명확하게 설명할 수 있습니다. 구현은 개발자에게 책임이 있으므로 Intune에서 적절한 데이터 보호를 보장하기 위해서는 더 많은 단계가 필요합니다. 대부분의 작업이 개발자의 책임이기 때문에 Intune 통합이 약간 더 복잡합니다.

MAM 통합:

  1. 키/값 백업, 특히 BackupAgent 확장에 대한 Android 가이드를 주의 깊게 읽어 BackupAgent 구현이 Android 지침을 따르는지 확인하세요.

  2. 클래스에서 MAMBackupAgent를 확장하도록 합니다.

다중 ID 백업:

  1. 백업을 시작하기 전에 백업하려는 파일 또는 데이터 버퍼가 IT 관리자가 다중 ID 시나리오에서 백업할 수 있도록 허용했는지 검사합니다. MAMFileProtectionManagerMAMDataProtectionManager에서 사용하여 isBackupAllowed 이 동작을 확인합니다. 파일 또는 데이터 버퍼를 백업할 수 없는 경우 백업에 포함하면 안 됩니다.

  2. 백업 중 어느 시점에 1단계에서 체크 인한 파일의 ID를 백업하려면 데이터를 추출하려는 파일로 호출 backupMAMFileIdentity(BackupDataOutput data, File … files) 해야 합니다. 이 메서드는 자동으로 새 백업 엔터티를 만들고 사용자를 위해 기록합니다.BackupDataOutput 이러한 엔터티는 복원 시 자동으로 사용됩니다.

다중 ID 복원: 데이터 백업 가이드는 애플리케이션의 데이터를 복원하기 위한 일반 알고리즘을 지정하고 BackupAgent 확장 섹션에서 코드 샘플을 제공합니다. 성공적인 다중 ID 복원을 수행하려면 다음 사항에 특히 주의하여 이 코드 샘플에 제공된 일반 구조를 따라야 합니다.

  1. * 루프를 while(data.readNextHeader())사용하여 백업 엔터티를 통과해야 합니다.

  2. 입력한 키onBackup와 일치하지 않으면 호출 data.getKey()data.skipEntityData() 해야 합니다. 이 단계가 없으면 복원이 성공하지 못할 수 있습니다.

  3. * 구문의 while(data.readNextHeader())백업 엔터티를 사용하는 동안 반환하지 마세요. 이 경우 자동으로 쓰는 엔터티가 손실되기 때문입니다.

  • 다음은 data 복원 시 앱이 받는 MAMBackupDataInput 의 로컬 변수 이름입니다.

Custom Screen Capture 제한

앱에 Android Window수준 FLAG_SECURE 제한을 무시하는 맞춤 화면 캡처 기능이 포함된 경우 기능에 대한 전체 액세스를 허용하기 전에 화면 캡처 정책을 검사해야 합니다. 예를 들어 앱에서 사용자 지정 렌더링 엔진을 사용하여 현재 보기를 PNG 파일로 렌더링하는 경우 먼저 검사AppPolicy.getIsScreenCaptureAllowed()해야 합니다.

참고

앱에 사용자 지정 또는 타사 화면 캡처 기능이 포함되어 있지 않으면 화면 캡처를 제한하는 조치가 필요하지 않습니다. 화면 캡처 정책은 모든 MAM 통합 앱 수준에서 Window 자동으로 적용됩니다. OS나 다른 앱이 앱에서 a를 Window 캡처하려는 시도는 필요에 따라 차단됩니다. 예를 들어 사용자가 Android의 기본 제공 스크린샷 또는 화면 녹화 기능을 통해 앱의 화면을 캡처하려고 하면 앱의 참여 없이 캡처가 자동으로 제한됩니다.

앱 보호 CA 지원

앱 기반 CA라고도 하는 앱 보호 CA(조건부 액세스)는 리소스에 대한 액세스를 제한합니다. Intune 앱 보호 정책은 이러한 리소스에 액세스하기 전에 애플리케이션을 관리해야 합니다. Microsoft Entra ID는 조건부 액세스로 보호된 리소스에 액세스할 수 있는 토큰을 부여하기 전에 앱이 Intune 앱 보호 정책에 등록하고 이에 의해 관리되도록 요구하여 이 정책을 적용합니다.

참고

앱 보호 CA를 지원하려면 MSAL(Microsoft 인증 라이브러리) 버전 1.0.0 이상이 필요합니다.

MSAL 위반 처리

앱에서 계정에 대한 토큰을 획득하면 MSAL 라이브러리가 반환 MsalIntuneAppProtectionPolicyRequiredException 하거나 throw하여 앱 보호 정책 관리를 준수하지 않음을 표시할 수 있습니다. 규정 준수를 수정하는 데 사용할 예외에서 더 많은 매개 변수를 추출할 수 있습니다( MAMComplianceManager 참조). 수정이 성공하면 앱에서 MSAL을 통해 토큰 획득을 다시 시도할 수 있습니다.

MAMComplianceManager

MAMComplianceManager 인터페이스는 MSAL에서 정책 요구 오류가 수신될 때 사용됩니다. 여기에는 앱을 준수 상태로 전환하기 위해 호출해야 하는 [remediateCompliance] 메서드가 포함되어 있습니다. 다음과 같이 참조를 가져올 수 있습니다.MAMComplianceManager

MAMComplianceManager mgr = MAMComponents.get(MAMComplianceManager.class);

// make use of mgr

MAMComplianceManager 반환된 instance는 null.

package com.microsoft.intune.mam.policy;

public interface MAMComplianceManager {
    void remediateCompliance(String upn, String aadId, String tenantId, String authority, boolean showUX);
}

remediateCompliance() 메서드는 Microsoft Entra ID가 요청된 토큰을 부여하는 조건을 충족하기 위해 앱을 관리하에 두려고 시도합니다. 처음 4개의 매개 변수는 MSAL AuthenticationCallback.onError() 메서드가 수신하는 예외에서 추출할 수 있습니다. 마지막 매개 변수는 규정 준수 시도 중에 사용자 환경이 나타나는지 여부를 제어하는 부울입니다.

remediateCompliance 이 작업 중에 앱에서 사용자 지정된 환경을 표시할 필요가 없도록 간단한 차단 진행률 대화 상자를 표시합니다. 이 대화 상자는 규정 준수 수정이 진행되는 동안에만 나타납니다. 최종 결과는 표시되지 않습니다. 앱은 규정 준수 수정 시도의 성공 또는 실패를 처리하기 위해 알림에 COMPLIANCE_STATUS 대한 수신기를 등록할 수 있습니다. 자세한 내용은 규정 준수 상태 알림을 참조하세요.

remediateCompliance() 규정 준수 설정의 일환으로 MAM 등록을 시작할 수 있습니다. 등록 알림에 대한 알림 수신기를 등록한 경우 앱에서 등록 알림을 받을 수 있습니다. 등록 MAMServiceAuthenticationCallback 된 앱에는 acquireToken() 등록에 대한 토큰을 가져오기 위해 메서드가 호출됩니다. acquireToken() 앱이 자체 토큰을 획득하기 전에 호출됩니다. 토큰 획득에 성공한 후 앱이 수행하는 모든 부기 또는 계정 만들기 작업은 아직 완료되지 않았을 수 있습니다. 이 경우 콜백은 토큰을 획득할 수 있어야 합니다.

에서 acquireToken()토큰을 반환할 수 없는 경우 규정 준수 수정 시도는 실패합니다.

요청된 리소스에 대해 유효한 토큰을 사용하여 나중에 호출 updateToken 하면 지정된 토큰을 사용하여 규정 준수 수정이 즉시 다시 시작됩니다.

참고

예외가 발생하기 전에 MsalIntuneAppProtectionPolicyRequiredException 사용자가 브로커를 설치하고 장치를 등록하도록 이미 안내되었기 때문에 자동 토큰 획득은 여전히 가능합니다acquireToken(). 이 프로세스를 통해 브로커는 캐시에 유효한 새로 고침 토큰을 갖게 되므로 브로커가 요청된 토큰을 자동으로 획득할 수 있습니다.

메서드에서 AuthenticationCallback.onError() 정책 필수 오류를 수신하고 MAMComplianceManager 를 호출하여 오류를 처리하는 샘플은 다음과 같습니다.

public void onError(@Nullable MsalException exc) {
    if (exc instanceof MsalIntuneAppProtectionPolicyRequiredException) {

        final MsalIntuneAppProtectionPolicyRequiredException policyRequiredException =
            (MsalIntuneAppProtectionPolicyRequiredException) ex;

        final String upn = policyRequiredException.getAccountUpn();
        final String aadId = policyRequiredException.getAccountUserId();
        final String tenantId = policyRequiredException.getTenantId();
        final String authority = policyRequiredException.getAuthorityURL();

        MAMComplianceManager complianceManager = MAMComponents.get(MAMComplianceManager.class);
        complianceManager.remediateCompliance(upn, aadId, tenantId, authority, showUX);
    }
}

규정 준수 상태 알림

앱이 유형의 COMPLIANCE_STATUS알림을 등록하는 경우 시스템은 규정 준수 수정 시도의 최종 상태를 앱에 알리기 위해 a MAMComplianceNotification 를 보냅니다. 등록에 대한 자세한 내용은 SDK의 알림 등록을 참조하세요.

public interface MAMComplianceNotification extends MAMUserNotification {
    MAMCAComplianceStatus getComplianceStatus();
    String getComplianceErrorTitle();
    String getComplianceErrorMessage();
}

getComplianceStatus() 이 메서드는 규정 준수 수정 시도의 결과를 [MAMCAComplianceStatus] 열거형의 값으로 반환합니다.

상태 코드 설명
UNKNOWN 상태를 알 수 없습니다. 이 상태는 예상치 못한 실패 이유를 나타낼 수 있습니다. 자세한 내용은 회사 포털 로그에서 확인할 수 있습니다.
COMPLIANT 규정 준수 수정이 성공했으며 이제 앱이 정책을 준수합니다. MSAL 토큰 획득을 다시 시도해야 합니다.
NOT_COMPLIANT 규정 준수를 수정하려는 시도가 실패했습니다. 앱이 규정을 준수하지 않으므로 오류 조건이 수정될 때까지 MSAL 토큰 획득을 다시 시도해서는 안 됩니다. 여기에는 MAMComplianceNotification 추가 오류 정보가 포함됩니다.
SERVICE_FAILURE Intune 서비스에서 규정 준수 데이터를 검색하는 동안 오류가 발생했습니다. 자세한 내용은 회사 포털 로그에서 확인할 수 있습니다.
NETWORK_FAILURE Intune 서비스에 연결하는 중에 오류가 발생했습니다. 네트워크 연결이 복원되면 앱에서 토큰 획득을 다시 시도해야 합니다.
CLIENT_ERROR 사용자 토큰 누락 또는 오류 등 클라이언트 관련 문제로 인해 규정 준수를 수정하려는 시도가 실패했습니다. 에는 MAMComplianceNotification 더 많은 오류 정보가 포함됩니다.
PENDING 서비스 기관이 시간 제한이 만료되기 전에 상태 응답을 보내지 않아 규정 준수를 수정하려는 시도가 실패합니다. 앱에서 나중에 토큰 획득을 다시 시도해야 합니다.
COMPANY_PORTAL_REQUIRED 규정 준수 수정이 성공하려면 디바이스에 회사 포털을 설치해야 합니다. 이미 설치되어 있는 경우 앱을 다시 시작해야 합니다. 사용자에게 앱을 다시 시작하라는 대화 상자가 표시됩니다.

규정 준수 상태가 MAMCAComplianceStatus.COMPLIANT인 경우 앱은 자체 리소스에 대한 원래 토큰 획득을 다시 시작해야 합니다.

규정 준수 수정 시도가 실패한 경우 and getComplianceErrorMessage() 메서드는 getComplianceErrorTitle() 앱이 선택하는 경우 최종 사용자에게 표시할 수 있는 지역화된 문자열을 반환합니다. 앱에서 대부분의 오류 사례를 resolve 수 없습니다. 일반적으로 계정 생성 또는 로그인에 실패하고 사용자가 나중에 다시 시도할 수 있도록 허용합니다.

오류가 지속되는 경우 회사 포털 로그가 원인을 파악하는 데 도움이 될 수 있습니다. 최종 사용자가 로그를 제출할 수 있습니다. 자세한 내용은 업로드 및 전자 메일 로그를 참조하세요.

다음은 익명 클래스를 사용하여 MAMNotificationReceiver 인터페이스를 구현하는 수신기를 등록하는 예입니다.

final MAMNotificationReceiverRegistry notificationRegistry = MAMComponents.get(MAMNotificationReceiverRegistry.class);
// create a receiver
final MAMNotificationReceiver receiver = new MAMNotificationReceiver() {
    public boolean onReceive(MAMNotification notification) {
        if (notification.getType() == MAMNotificationType.COMPLIANCE_STATUS) {
            MAMComplianceNotification complianceNotification = (MAMComplianceNotification) notification;

            // take appropriate action based on complianceNotification.getComplianceStatus()

            // unregister this receiver if no longer needed
            notificationRegistry.unregisterReceiver(this, MAMNotificationType.COMPLIANCE_STATUS);
        }
        return true;
    }
};
// register the receiver
notificationRegistry.registerReceiver(receiver, MAMNotificationType.COMPLIANCE_STATUS);

참고

알림이 누락될 수 있는 경합 조건을 피하려면 호출 remediateCompliance() 하기 전에 알림 수신기를 등록해야 합니다.

App Protection CA에 대한 지원 선언

앱에서 앱 CA 수정을 처리할 준비가 되면 Microsoft ID에 앱이 앱 CA를 준비했음을 알릴 수 있습니다. MSAL 애플리케이션에서 이 작업을 수행하려면 "protapp"의 클라이언트 기능으로 공용 클라이언트를 빌드합니다.

{
      "client_id" : "[YOUR_CLIENT_ID]",
      "authorization_user_agent" : "DEFAULT",
      "redirect_uri" : "[YOUR_REDIRECT_URI]",
      "multiple_clouds_supported":true,
      "broker_redirect_uri_registered": true,
      "account_mode": "MULTIPLE",
      "client_capabilities": "protapp",
      "authorities" : [
        {
          "type": "AAD",
          "audience": {
            "type": "AzureADandPersonalMicrosoftAccount"
          }
        }
      ]
    }

단계가 완료되면 앱 보호 CA 유효성 검사로 진행합니다.

구현 참고 사항

참고

앱의 메서드는 MAMServiceAuthenticationCallback.acquireToken() 플래그에 forceRefresh 대해 false를 전달해야 합니다.acquireTokenSilentAsync()

AcquireTokenSilentParameters acquireTokenSilentParameters =
        builder.withScopes(Arrays.asList(scopes))
               .forceRefresh(false)
               .build();

acquireTokenSilentAsync(acquireTokenSilentParameters);

참고

수정을 시도하는 동안 사용자 지정 차단 UX를 표시하려면 showUX 매개 변수에 대해 false를 전달해야 합니다.remediateCompliance() 호출하기 전에 remediateCompliance()먼저 UX를 표시하고 알림 수신기를 등록해야 합니다. 이렇게 하면 빠르게 실패할 경우 remediateCompliance() 알림을 놓칠 수 있는 경합 상태를 방지할 수 있습니다. 예를 들어 onCreate() 활동 하위 클래스의 or onMAMCreate() 메서드는 알림 수신기를 등록한 다음 remediateCompliance()호출하기에 이상적인 위치입니다. 에 대한 remediateCompliance() 매개 변수는 의도 추가로 UX에 전달할 수 있습니다. 규정 준수 상태 알림을 받으면 결과를 표시하거나 활동을 완료할 수 있습니다.

참고

remediateCompliance() 계정을 등록하고 등록을 시도합니다. 주 토큰이 확보되면 호출 registerAccountForMAM() 할 필요가 없지만 그렇게 해도 아무런 문제가 없습니다. 반면에 앱이 토큰 획득에 실패하여 사용자 계정을 제거하려는 경우 계정을 제거하고 백그라운드 등록 재시도를 방지하기 위해 호출 unregisterAccountForMAM() 해야 합니다.

SDK에서 알림 등록

Intune 앱 SDK 가이드에서는 앱이 SDK의 알림을 등록해야 할 수 있는 다음과 같은 몇 가지 시나리오에 대해 설명합니다.

이 섹션에서는 SDK가 보낼 수 있는 모든 유형의 알림과 애플리케이션이 알림을 수신하려는 시기 및 이유, 알림 수신기를 구현하는 방법에 대해 설명합니다.

알림 유형

모든 SDK 알림은 MAMNotificationType 열거형을 반환하는 단일 함수getType()가 있는 MAMNotification 인터페이스를 구현합니다.

대부분의 알림은 단일 ID에 특정한 정보를 제공하는 MAMUserNotification 인스턴스입니다. ID의 OID는 함수를 getUserOid() 통해 검색할 수 있으며, ID의 UPN은 다음을 통해 getUserIdentity()검색할 수 있습니다.

MAMEnrollmentNotificationMAMComplianceNotification 추가 확장 MAMUserNotification되며, 여기에는 각각 MAM 서비스에 사용자 또는 장치를 등록하려는 시도에 대한 결과와 App Protection CA에 대한 규정 준수를 수정하려는 시도에 대한 결과가 포함됩니다.

알림 형식 알림 클래스 알림 사유 적용 가능 여부 처리 팁 스레드 정보
COMPLIANCE_STATUS MAMComplianceNotification 규정 준수 수정 시도의 결과를 반환합니다. 앱 보호 CA를 구현하는 앱은 이를 처리해야 합니다. 비결정적
MAM_ENROLLMENT_RESULT MAMEnrollmentNotification 등록 시도의 결과를 반환합니다. 모든 앱이 이를 받습니다. 비결정적
MANAGEMENT_REMOVED MAMUserNotification 앱이 관리되지 않을 상태가 됩니다. 사용하는 MAMDataProtectionManager 앱은 이를 처리해야 합니다. MANAGEMENT_REMOVED를 참조하세요. UI 스레드에서 사용 안 함
REFRESH_APP_CONFIG MAMUserNotification 앱 구성 값이 변경되었을 수 있습니다. 앱 구성을 구현하고 앱 구성 데이터를 캐시하는 앱은 이를 처리해야 합니다. 앱은 캐시된 모든 앱 구성 데이터를 무효화하고 새로 고쳐야 합니다. 비결정적
REFRESH_POLICY MAMUserNotification 앱 보호 정책이 변경되었을 수 있습니다. 앱 보호 정책을 캐시하는 앱은 이를 처리해야 합니다. 앱은 캐시된 앱 보호 정책 데이터를 무효화하고 업데이트해야 합니다. 비결정적
WIPE_USER_DATA MAMUserNotification 초기화가 발생하려고 합니다(*). 을(를) 사용하는 MAMDataProtectionManager 앱은 이 문제를 처리해야 합니다WIPE_USER_AUXILIARY_DATA. 선택적 지우기를 참조하세요. UI 스레드에서 사용 안 함
WIPE_USER_AUXILIARY_DATA MAMUserNotification 초기화가 발생하려고 합니다(*). 다중 ID 앱만 이를 받습니다.
을(를) 사용하는 MAMDataProtectionManager 앱은 이 문제를 처리해야 합니다WIPE_USER_DATA.
선택적 지우기를 참조하세요. UI 스레드에서 사용 안 함
WIPE_COMPLETED MAMUserNotification 초기화가 완료되었습니다. 모든 앱에 대해 선택 사항입니다. 배달 후 WIPE_USER_DATA 또는 WIPE_USER_AUXILIARY_DATA.
앱이 초기화 처리기에서 오류를 보고하는 경우 이 알림이 전송되지 않습니다.
UI 스레드에서 사용 안 함

(*) 초기화는 다음과 같은 여러 가지 이유로 발생할 수 있습니다.

  • unregisterAccountForMAM이라는 앱입니다.
  • IT 관리자가 원격 초기화를 시작했습니다.
  • 관리 필수 조건부 액세스 정책이 충족되지 않았습니다.

경고

앱은 알림과 WIPE_USER_AUXILIARY_DATA 알림 모두 WIPE_USER_DATA 에 등록해서는 안 됩니다.

MANAGEMENT_REMOVED

이 알림은 MANAGEMENT_REMOVED 이전에 정책에서 관리했던 계정이 관리되지 않을 예정임을 앱에 알립니다. 계정을 관리되지 않으면 앱은 더 이상 해당 계정의 암호화된 파일을 읽거나, 암호화된 MAMDataProtectionManager계정의 데이터를 읽거나, 암호화된 클립보드와 상호 작용하거나, 관리되는 앱 생태계에 참여할 수 없습니다.

이렇게 하려면 사용자 데이터를 초기화하거나 사용자를 로그아웃할 필요가 없습니다(초기화가 필요한 경우 알림이 WIPE_USER_DATA 전송됨). 많은 앱이 이 알림을 처리할 필요가 없을 수 있지만, 이 알림을 사용하는 MAMDataProtectionManager 앱은 이 알림을 처리해야 합니다. 자세한 내용은 데이터 버퍼 보호 를 참조하세요.

SDK가 앱의 MANAGEMENT_REMOVED 수신자를 호출할 때 다음과 같습니다.

  • SDK는 앱에 속하는 이전에 암호화된 파일(보호된 데이터 버퍼는 제외)을 이미 해독했습니다. 앱에 직접 속하지 않는 SD 카드의 공용 위치(예: 문서 또는 다운로드 폴더)에 있는 Files 해독되지 않습니다.

  • 수신기 메서드에서 만드는 새 파일이나 보호된 데이터 버퍼(또는 수신기가 시작된 후 실행되는 다른 코드)는 암호화되지 않습니다.

  • 앱에서 여전히 암호화 키에 액세스할 수 있으므로 데이터 버퍼 암호 해독과 같은 작업이 성공합니다.

앱 수신기가 반환된 후에는 더 이상 암호화 키에 액세스할 수 없습니다.

MAMNotificationReceiver 구현

SDK에서 알림을 등록하려면 앱에서 MAMNotificationReceiver 를 만들고 MAMNotificationReceiverRegistry에 등록해야 합니다.

수신기를 등록하려면 수신기를 사용하여 호출 registerReceiver 하고 메서드에서 Application.onCreate 원하는 알림 유형을 지정합니다.

@Override
public void onCreate() {
  super.onCreate();
  MAMComponents.get(MAMNotificationReceiverRegistry.class)
    .registerReceiver(
      new ToastNotificationReceiver(),
      MAMNotificationType.WIPE_USER_DATA);
}

앱의 MAMNotificationReceiver 구현에는 메서드가 포함되어야 합니다.onReceive(MAMNotification notification) 이 메서드는 수신한 각 알림에 대해 개별적으로 호출하며 .를 boolean반환해야 합니다. 일반적으로 이 메서드는 애플리케이션에서 알림에 응답하는 데 오류가 발생하지 않는 한 항상 반환 true해야 합니다.

다른 유형의 Android 수신기와 마찬가지로 애플리케이션은 알림을 유연하게 처리합니다.

  • 고유한 알림 유형에 대해 고유한 MAMNotificationReceiver 구현을 만들 수 있습니다. 이 경우 각 구현 및 각 알림 유형을 별도로 등록해야 합니다.
  • 여러 고유한 알림 유형에 응답하기 위한 논리가 포함된 단일 MAMNotificationReceiver 구현을 사용할 수 있습니다. 이 경우 응답할 수 있는 각 알림 유형에 대해 등록해야 합니다.
  • 각각 동일한 알림 유형에 응답하는 여러 MAMNotificationReceiver 구현을 만들 수 있습니다. 이 경우 둘 다 동일한 알림 유형에 등록해야 합니다.

콜백이 UI 스레드에서 실행되지 않기 때문에 차단 MAMNotificationReceiver.onReceive 해도 안전합니다.

사용자 지정 테마

Intune 앱 SDK에 사용자 지정 테마를 제공할 수 있습니다. 이 사용자 지정 테마는 모든 SDK 화면 및 대화 상자에 적용됩니다. 테마가 제공되지 않으면 기본 SDK 테마가 사용됩니다.

사용자 지정 테마 제공

테마를 제공하려면 메서드에 다음 코드 줄을 추가합니다.Application.onMAMCreate

MAMThemeManager.setAppTheme(R.style.AppTheme);

이 예제에서는 SDK가 적용해야 하는 스타일 테마로 바꿉 R.style.AppTheme 니다.

신뢰할 수 있는 루트 인증서 관리

응용 프로그램에 내부 웹 사이트 및 응용 프로그램에 대한 보안 액세스를 제공하기 위해 온-프레미스 또는 개인 인증 기관에서 발급한 SSL/TLS 인증서가 필요한 경우 Intune 앱 SDK는 API 클래스 MAMTrustedRootCertsManagerMAMCertTrustWebViewClient를 사용하여 인증서 신뢰 관리에 대한 지원을 추가했습니다.

참고

MAMCertTrustWebViewClient 는 Android 10 이상을 지원합니다.

신뢰할 수 있는 루트 인증서 관리는 다음을 지원합니다.

  • SSLContext
  • SSLSocketFactory
  • TrustManager
  • WebView

요구 사항

참고

신뢰할 수 있는 루트 인증서 관리는 Microsoft Tunnel VPN Gateway와 독립적으로 사용할 수 있지만 사용하도록 Microsoft MAM Tunnel 라이선스를 받아야 합니다.

Intune의 신뢰할 수 있는 루트 인증서를 사용하여 트러스트 앵커 설정

신뢰할 수 있는 루트 인증서 관리를 사용하면 앱에서 디바이스의 인증서와 함께 Intune의 신뢰할 수 있는 루트 인증서를 사용할 수 있습니다.

API 클래스 MAMTrustedRootCertsManagerMAMCertTrustWebViewClient는 디바이스의 신뢰할 수 있는 루트 인증서 저장소에 온-프레미스 리소스에 대한 보안 연결을 설정하는 데 필요한 신뢰할 수 있는 루트 인증서가 포함되어 있지 않은 경우 App Configuration 정책을 통해 제공된 Intune신뢰할 수 있는 루트 인증서를 대체 옵션으로 사용합니다. 이러한 방식으로 앱에서 장치 및 Intune 인증서를 모두 사용하여 신뢰할 수 있는 원본과의 보안 연결 및 통신을 확인할 수 있습니다.

네트워크 보안 설정을 강화하기 위해 앱에서 네트워크 보안 구성 XML 파일을 사용할 수 있습니다. 신뢰할 수 있는 루트 인증서 관리는 앱의 네트워크 보안 구성 XML에 다음 기능이 있는지 여부를 확인하여 이러한 추가 보안을 존중합니다.

  • 자체 서명된 인증서와 같은 추가 CA를 사용하는 사용자 지정 트러스트 앵커입니다.
  • 신뢰할 수 있는 CA를 제한하기 위한 도메인별 규칙입니다.
  • 특정 도메인의 인증서에 대한 고정 집합입니다.

참고

Android 네트워크 보안 구성에 대한 자세한 내용은 네트워크 보안 구성을 참조하세요.

이 중 하나라도 트러스트를 확인 중인 도메인에 적용되면 신뢰할 수 있는 루트 인증서 관리는 이 도메인에 대한 사용자 지정 트러스트 검사를 건너뛰고 플랫폼의 기본 트러스트 관리자만 검사를 수행하도록 합니다.

클래스 MAMTrustedRootCertsManager

이 클래스는 다음과 같은 API를 제공합니다.

  • createSSLContextForOID(String oid, String protocol): 지정된 ID 및 지정된 SSL/TLS 프로토콜에 대해 신뢰할 수 있는 루트 인증서를 사용하는 개체를 만듭니다 SSLContext . 이 클래스에서 반환된 SSLContext 개체는 장치와 MAM 서비스에서 결합된 신뢰할 수 있는 루트 인증서를 사용하는 개체로 X509TrustManager 이미 올바르게 초기화되어 있습니다.
  • createSSLSocketFactoryForOID(String oid, String protocol): 지정된 ID 및 지정된 SSL/TLS 프로토콜에 대해 신뢰할 수 있는 루트 인증서를 사용하는 개체를 만듭니다 SSLSocketFactory . 반환 SSLSocketFactory 된 개체는 이 클래스의 동일한 SSLContext 개체에서 참조됩니다.
  • createX509TrustManagersForOID(String oid): 지정된 ID에 대해 디바이스 및 MAM 서비스에서 결합된 신뢰할 수 있는 루트 인증서를 사용하는 개체 배열 X509TrustManager 을 만듭니다.

참고

매개 변수는 oid 응용 프로그램을 실행하는 특정 사용자의 Microsoft Entra 사용자 ID(OID)여야 합니다. 사용자 식별자를 사전에 알 수 없는 경우 값을 null 전달할 수 있으며 MAM은 이러한 API가 호출되는 스레드 또는 프로세스에서 올바른 ID를 검색하려고 시도합니다. MAM에서 ID를 검색하려면 프로세스 또는 스레드에 ID를 올바르게 설정해야 합니다. 프로세스 또는 스레드에서 활성 ID를 설정하는 방법에 대한 자세한 내용은 5단계: 다중 ID를 참조하세요.

참고

매개 변수가 protocol 제공되지 않으면 플랫폼은 지원되는 가장 높은 SSL/TLS 프로토콜을 사용합니다.

다음은 이 클래스를 사용하는 몇 가지 예입니다.

HttpsUrlConnection을 사용하는 예제
// Create an SSL socket factory using supplying the optional parameters identity and protocol
SSLSocketFactory sslSocketFactory = MAMTrustedRootCertsManager.createSSLSocketFactoryForOID(oid, "TLSv1.3");

// Create a URL object for the desired endpoint
URL url = new URL("https://example.com");

// Open a connection using the URL object
HttpsURLConnection httpsURLConnection = (HttpsURLConnection) url.openConnection();

// Set the SSL socket factory for the connection
httpsURLConnection.setSSLSocketFactory(sslSocketFactory);

// Perform any other configuration or operations on the connection as needed
...
OkHttpClient 사용 예제
// Get the TrustManager instances for an identity from the SDK
TrustManager[] trustManagers = MAMTrustedRootCertsManager.createX509TrustManagersForOID(oid);

// Get SSLContext from the platform
SSLContext sslContext = SSLContext.getInstance("TLSv1.3");

// Initialize the SSLContext with the trust managers from the Intune App SDK
sslContext.init(null, trustManagers, null);

// Create an OkHttpClient.Builder object
OkHttpClient.Builder builder = new OkHttpClient.Builder();

// Set the SSLSocketFactory and the trust managers from the SDK
builder.sslSocketFactory(sslContext.socketFactory, trustManagers[0] as X509TrustManager).build();

// Build an OkHttpClient object from the builder
OkHttpClient okHttpClient = builder.build();

// Create a Request object for the desired endpoint
Request request = new Request.Builder().url("https://example.com").build();

// Execute the request using the OkHttpClient object and get a Response object
Response response = okHttpClient.newCall(request).execute();

// Perform any other operations on the response as needed
...

클래스 MAMCertTrustWebViewClient

이 클래스는 Android 클래스 android.webkit.WebViewClient의 사용자 지정 구현을 제공합니다. 클래스는 에서 SSL 오류를 android.net.http.SslError.SSL_UNTRUSTED 처리하는 방법을 제공합니다.WebView

오류를 처리할 때 클래스는 Intune에서 구성하고 MAM 서비스가 제공하는 신뢰할 수 있는 루트 인증서를 사용합니다. 이 접근 방식은 에서 SSL 오류를 생성한 대상 URL에서 호스트의 신뢰성을 확인합니다.WebView 사용자 지정 구현이 SSL 오류를 처리하지 않으면 시스템은 수퍼 클래스에서 상속된 기본 동작을 호출합니다.

이 클래스를 사용하는 경우 instance를 만든 다음 호출 WebView.setWebViewClient(WebViewClient) 하여 instance에 WebView 등록합니다.

다음은 이 클래스를 사용하는 예입니다.

WebView를 사용하는 예제
// Get the MAM implementation of WebViewClient from the Intune App SDK
MAMCertTrustWebViewClient mamCertTrustWebViewClient = new MAMCertTrustWebViewClient();

// Set the MAM WebViewClient from the SDK as the current handler on the instance of WebView
webView.setWebViewClient(mamCertTrustWebViewClient);

// Perform any other operations on WebView
...

중국 App Store 개인정보 보호 규정 준수

일부 중국 앱 스토어에서는 애플리케이션이 디바이스의 다른 앱과 상호 작용하는 작업을 수행하기 전에 사용자에게 개인 정보 보호 동의 대화 상자를 표시하도록 요구합니다. 여기에는 패키지 설치/제거 이벤트를 수신 대기하는 브로드캐스트 수신기 등록이 포함됩니다. MAM SDK는 대부분의 MAM 논리가 있는 회사 포털의 존재를 수신 대기하기 위해 이를 수행합니다.

앱이 이 요구 사항이 있는 중국 앱 스토어를 통해 배포되는 경우 다음 통합을 사용하여 개인 정보 보호 동의를 얻을 때까지 오프라인 시작 작업을 연기합니다.

1. 매니페스트 플래그 추가

앱의 AndroidManifest.xml다음의 메타 데이터에 추가합니다.

<application>
    <meta-data
        android:name="com.microsoft.intune.mam.OfflineStartupDeferredUntilAppSignal"
        android:value="true"/>
</application>

참고

이 플래그는 다른 앱과 상호 작용하기 전에 개인 정보 보호 동의가 필요한 중국 앱 스토어를 통해 배포되는 APK에만 추가해야 합니다. 다른 스토어를 통해 배포되는 APK의 경우 이 플래그를 포함하면 안 됩니다.

2. 개인 정보 보호 대화 후 신호 준비

사용자가 개인 정보 보호 동의 대화 상자를 수락한 후 SDK를 호출하여 오프라인 시작 작업을 진행할 수 있음을 알립니다.

// After user accepts privacy dialog
MAMComponents.get(DeferredStartupManager::class.java)
    .setOfflineStartupReady()

또는 Java에서:

// After user accepts privacy dialog
MAMComponents.get(DeferredStartupManager.class)
    .setOfflineStartupReady();

동작

준비 상태는 앱이 시작될 때마다 유지됩니다. setOfflineStartupReady() 호출되면 후속 실행은 앱 초기화 중에 즉시 수신기를 등록합니다.

참고 사항

  • 메서드는 setOfflineStartupReady() idempotent이며, 여러 번 호출해도 안전합니다.
  • 회사 포털이 이미 설치되어 있는 경우(온라인 모드) 수신기가 필요하지 않으므로 통화 setOfflineStartupReady() 가 효과가 없습니다.
  • 중요: 개인 정보 대화가 수락된 후에는 항상 전화해야 setOfflineStartupReady() 합니다.

종료 조건

자세한 내용은 테스트 용이성을 위해 정책을 변경하여 신속한 테스트를 참조하세요.

제한 사항에서 저장 및 열기 유효성 검사

앱과 장치 또는 클라우드 저장소 위치 간의 데이터 전송을 제한하는 정책을 구현하지 않은 경우 이 섹션을 건너뜁니다.

앱이 클라우드 서비스 또는 로컬 데이터에 데이터를 저장하고 클라우드 서비스 또는 로컬 데이터에서 데이터를 열 수 있는 모든 시나리오를 다시 숙지하세요.

단순성을 위해 이러한 테스트에서는 앱이 앱 내의 단일 위치에서 OneDrive에 데이터를 저장하고 OneDrive에서 여는 기능만 지원한다고 가정합니다. 그러나 앱에서 데이터 저장을 허용하는 모든 위치에 대해 지원되는 모든 저장 위치와 앱에서 데이터 열기를 허용하는 모든 위치에 대해 지원되는 모든 열린 위치 등 모든 조합의 유효성을 검사해야 합니다.

이러한 테스트를 위해서는 앱과 Intune 회사 포털을 설치하고 테스트를 시작하기 전에 관리 계정으로 로그인하세요. 또한 다음 작업도 수행합니다.

  • 관리되는 계정의 정책을 다음과 같이 설정합니다.
    • "다른 앱으로 조직 데이터 보내기"를 "정책 관리 앱"으로 설정.
    • "다른 앱에서 데이터 받기"를 "정책 관리 앱"으로 설정.
시나리오 전제 조건 단계
저장 위치, 완전히 허용됨 "조직 데이터 복사본 저장" 정책이 허용으로 설정됨 - OneDrive에 데이터를 저장할 수 있는 앱 부분으로 이동합니다.
- 앱에 로그인한 동일한 관리 계정을 사용하여 OneDrive에 문서를 저장하려고 시도합니다.
- 저장이 허용되는지 확인합니다.
저장 위치, 제외 - "조직 데이터 복사본 저장" 정책이 차단으로 설정됨
- "사용자가 선택한 서비스에 복사본을 저장할 수 있도록 허용" 정책이 OneDrive 전용으로 설정됨
- OneDrive에 데이터를 저장할 수 있는 앱 부분으로 이동합니다.
- 앱에 로그인한 동일한 관리 계정을 사용하여 OneDrive에 문서를 저장하려고 시도합니다.
- 저장이 허용되는지 확인합니다.
- 앱에서 허용하는 경우 파일을 다른 클라우드 저장 위치에 저장하고 파일이 차단되었는지 확인합니다.
저장 위치, 차단됨 "조직 데이터 복사본 저장" 정책이 차단으로 설정됨 - OneDrive에 데이터를 저장할 수 있는 앱 부분으로 이동합니다.
- 앱에 로그인한 동일한 관리 계정을 사용하여 OneDrive에 문서를 저장하려고 시도합니다.
- 저장이 차단되었는지 확인합니다.
- 앱에서 허용하는 경우 파일을 다른 클라우드 저장 위치에 저장하고 파일이 차단되었는지 확인합니다.
다음에서 열기, 완전히 허용됨 "조직 문서로 데이터 열기" 정책이 허용으로 설정됨 - OneDrive에서 데이터를 열 수 있는 앱 부분으로 이동합니다.
- 앱의 저장소에 로그인한 동일한 관리 계정을 사용하여 OneDrive에서 문서를 열려고 시도합니다.
- 열기가 허용되는지 확인합니다.
open from, exemped - "조직 문서로 데이터 열기" 정책이 차단으로 설정됨
- "사용자가 선택한 서비스의 데이터를 열 수 있도록 허용" 정책이 OneDrive 로만 설정됨
- OneDrive에서 데이터를 열 수 있는 앱 부분으로 이동합니다.
- 앱의 저장소에 로그인한 동일한 관리 계정을 사용하여 OneDrive에서 문서를 열려고 시도합니다.
- 열기가 허용되는지 확인합니다.
- 앱에서 허용하는 경우 다른 클라우드 저장 위치에서 다른 파일을 열고 해당 파일이 차단되었는지 확인합니다.
다음에서 열기, 차단됨 "조직 문서로 데이터 열기" 정책이 차단으로 설정됨 - OneDrive에서 데이터를 열 수 있는 앱 부분으로 이동합니다.
- 앱의 저장소에 로그인한 동일한 관리 계정을 사용하여 OneDrive에서 문서를 열려고 시도합니다.
- 열기가 차단되었는지 확인합니다.
- 앱에서 허용하는 경우 다른 클라우드 저장 위치에서 다른 파일을 열고 해당 파일이 차단되었는지 확인합니다.

알림 제한 유효성 검사

알림 내 콘텐츠 제한 정책을 구현하지 않은 경우 이 섹션을 건너뜁니다.

앱 보호 정책에 관한 한 응용 프로그램에서 세 가지 유형의 알림을 실행할 수 있습니다.

  1. 계정 데이터가 포함되지 않은 알림입니다.
  2. 관리 계정에 속하는 데이터가 포함된 알림입니다.
  3. 관리되지 않는 계정에 속하는 데이터가 포함된 알림입니다.

애플리케이션이 단일 ID인 경우 단독 계정이 관리되지 않는 경우 보호가 적용되지 않으므로 처음 두 계정만 관련이 있습니다.

구성된 서로 다른 정책 값으로 세 가지 유형의 알림을 모두 트리거하여 알림 제한의 유효성을 검사할 수 있습니다.

이러한 테스트를 위해서는 앱과 Intune 회사 포털을 설치하고 테스트를 시작하기 전에 관리 계정으로 로그인하세요. 앱이 다중 ID인 경우 관리되지 않는 계정으로도 앱에 로그인합니다.

시나리오 전제 조건 단계
전체 콘텐츠가 차단됨 "조직 데이터 알림" 정책이 차단으로 설정됨 - 계정 데이터 없이 알림을 실행하도록 앱을 트리거합니다.
- 알림에 콘텐츠가 표시되지 않는지 확인합니다.
- 앱이 관리 계정의 데이터로 알림을 실행하도록 트리거합니다.
- 알림에 콘텐츠가 표시되지 않는지 확인합니다.
- 앱이 관리되지 않는 계정의 데이터로 알림을 실행하도록 트리거합니다.
- 알림에 콘텐츠가 표시되지 않는지 확인합니다.
일부 콘텐츠 차단됨 "조직 데이터 알림" 정책이 조직 데이터 차단으로 설정됨 - 계정 데이터 없이 알림을 실행하도록 앱을 트리거합니다.
- 알림에 전체 콘텐츠가 표시되는지 확인합니다.
- 앱이 관리 계정의 데이터로 알림을 실행하도록 트리거합니다.
- 알림이 관리 계정의 콘텐츠를 수정하는지 확인합니다.
- 앱이 관리되지 않는 계정의 데이터로 알림을 실행하도록 트리거합니다.
- 알림에 전체 콘텐츠가 표시되는지 확인합니다.
차단된 콘텐츠 없음 "조직 데이터 알림" 정책이 허용으로 설정됨 - 계정 데이터 없이 알림을 실행하도록 앱을 트리거합니다.
- 알림에 전체 콘텐츠가 표시되는지 확인합니다.
- 앱이 관리 계정의 데이터로 알림을 실행하도록 트리거합니다.
- 알림에 전체 콘텐츠가 표시되는지 확인합니다.
- 앱이 관리되지 않는 계정의 데이터로 알림을 실행하도록 트리거합니다.
- 알림에 전체 콘텐츠가 표시되는지 확인합니다.

데이터 백업 및 복원 유효성 검사

백업 데이터 보호 정책을 구현하지 않은 경우 이 섹션을 건너뜁니다.

앱에서 백업용으로 구성한 콘텐츠(파일 및 키-값 쌍)를 다시 숙지합니다. 예상되는 콘텐츠만 복원에 포함되는지 확인해야 합니다. 복원에 추가 콘텐츠가 포함되어 데이터 유출이 발생할 수 있습니다.

이러한 테스트를 위해서는 앱과 Intune 회사 포털을 설치하고, 테스트를 시작하기 전에 관리 계정으로 로그인합니다. 앱이 다중 ID인 경우 관리되지 않는 계정으로도 앱에 로그인합니다.

백업을 테스트하기 위해 Android의 공식 지침을 따르세요. 이러한 지침은 자동 백업과 키/값 백업에 서로 다르므로 이를 면밀히 따르십시오.

정책에 대한 사용자 지정 화면 캡처 유효성 검사

Custom Screen Capture Restrictions를 구현하지 않은 경우 이 섹션을 건너뜁니다.

애플리케이션에 Android의 Window-level FLAG_SECURE을 우회하는 기능이 있는 경우 이 기능이 앱 보호 정책 화면 캡처 제한에 의해 차단되었는지 확인합니다.

이러한 테스트를 위해서는 앱과 Intune 회사 포털을 설치하고 테스트를 시작하기 전에 관리 계정으로 로그인하세요.

시나리오 전제 조건 단계
화면 캡처가 차단됨 "화면 캡처 및 Google Assistant" 정책이 차단으로 설정됨 - 사용자 지정 FLAG_SECURE 코드를 사용하는 앱 부분으로 이동합니다.
- 해당 기능을 사용하려고 시도합니다.
- 기능이 차단되었는지 확인합니다.
화면 캡처 허용됨 "화면 캡처 및 Google Assistant" 정책이 허용으로 설정됨 - 사용자 지정 FLAG_SECURE 코드를 사용하는 앱 부분으로 이동합니다.
- 해당 기능을 사용하려고 시도합니다.
- 기능이 허용되는지 확인합니다.

앱 보호 CA 유효성 검사

지원 앱 보호 CA를 구현하지 않은 경우 이 섹션을 건너뜁니다.

앱 보호 정책을 만들고 앱 및 테스트 계정에 할당하는 일반적인 유효성 검사 단계 외에도 앱 보호 조건부 액세스 정책을 만들고 테스트 계정에 할당해야 합니다. 자세한 내용은 Intune을 사용하여 앱 기반 조건부 액세스 정책 설정을 참조하세요.

테스트 단계:

  1. 이 테스트를 시작하기 전에 Microsoft Authenticator 및 Intune 회사 포털을 제거합니다.
  2. 앱을 설치합니다.
  3. 앱 보호 정책 및 앱 기반 CA 정책 모두를 대상으로 하는 테스트 계정으로 앱에 로그인합니다.
  4. 앱이 회사 포털을 설치하라는 메시지를 표시하는지 확인합니다.
  5. 다시 로그인합니다.
  6. 앱을 확인하면 디바이스를 등록하라는 메시지가 표시됩니다. 프롬프트를 따릅니다. 앱에서 여기에서 등록하라는 메시지가 표시되지 않으면 먼저 테스트 장치에서 다른 SDK 지원 앱, 회사 포털 및 Authenticator를 제거했는지 확인합니다. 그래도 메시지가 표시되지 않으면 구현 지침을 다시 확인합니다.
  7. 등록 후 모든 앱 데이터에 액세스할 수 있는지 확인합니다.

알림 수신기 유효성 검사

SDK에서 알림 등록을 구현하지 않은 경우 이 섹션을 건너뜁니다.

유효성 검사 단계는 앱이 등록한 알림 유형에 따라 달라집니다. 모든 유형의 알림에 대해 수신자가 제대로 호출되도록 로깅을 추가합니다.

MAM_ENROLLMENT_RESULT 앱 보호 정책이 대상으로 하는 계정으로 애플리케이션에 로그인하여 트리거할 수 있습니다.

테스트 계정을 대상으로 하는 각각의 App Configuration 정책 및 App Protection 정책을 업데이트 REFRESH_APP_CONFIGREFRESH_POLICY 하고 SDK가 업데이트된 정책을 받을 때까지 기다리면 됩니다.

이 프로세스의 속도를 높이려면 정책 변경을 사용하여 빠르게 테스트를 참조하세요.

Microsoft Intune에서 선택적 초기화를 실행하여 , , WIPE_USER_DATAWIPE_USER_AUXILIARY_DATA, WIPE_COMPLETED 및 알림을 트리거MANAGEMENT_REMOVED할 수 있습니다.

사용자 지정 테마 유효성 검사

사용자 지정 테마를 구현하지 않은 경우 이 섹션을 건너뜁니다.

SDK의 대화 상자에서 색을 검사하여 사용자 지정 테마 지원의 유효성을 검사할 수 있습니다. 검사할 수 있는 가장 간단한 대화 상자는 MAM PIN 화면입니다.

전제 조건:

  • 관리되는 계정의 정책을 다음과 같이 설정합니다.
    • "액세스를 위한 PIN"이 "필수"로 설정되어 있습니다.
  • 앱과 Intune 회사 포털을 설치합니다.

테스트 단계:

  1. 애플리케이션을 실행하고 테스트 계정으로 로그인합니다.
  2. MAM PIN 화면이 표시되고 SDK에 제공한 사용자 지정 테마를 기반으로 테마가 지정되는지 확인합니다.

다음 단계

이 가이드를 순서대로 따르고 이 문서의 앞부분에 나오는 모든 종료 조건을 완료한 경우 이제 앱이 Intune 앱 SDK와 완전히 통합되고 앱 보호 정책을 적용할 수 있습니다. 이전 앱 참여 섹션인 5단계: 다중 ID6단계: App Configuration 중 하나를 건너뛰고 앱에서 이러한 기능을 지원해야 하는지 확실하지 않은 경우 SDK 통합을 위한 주요 결정을 다시 검토하세요.

앱 보호는 이제 앱의 핵심 시나리오입니다. 앱 개발을 계속하면서 이 가이드와 부록 을 계속 참조하세요.