Slide 1

Slide 1 text

ビジネス向けアプリを 開発するときに知っておくべき Android Enterpriseの世界 Yusaku Tanaka (@imsaku) - 2023/09/15, DroidKaigi 2023

Slide 2

Slide 2 text

About Me Yusaku Tanaka (saku, @imsaku) https://twitter.com/imsaku 2

Slide 3

Slide 3 text

● デバイス管理の実例を示すためにGoogle Workspaceを利用します ○ 同等のサービスはGoogle Workspace以外からも提供されています ● 特別な機能の実例を示すためにGoogle製のアプリを利用します ○ これらの機能はGoogle以外のアプリでも利用・実装可能です 本発表について 3

Slide 4

Slide 4 text

アジェンダ ● Android EnterpriseとMDM ● MDMの仕組み ● 特別な機能 4

Slide 5

Slide 5 text

Android Enterpriseと MDM ● Android EnterpriseとMDM ● MDMの仕組み ● 特別な機能 5

Slide 6

Slide 6 text

Android Enterprise 6

Slide 7

Slide 7 text

Android Enterpriseって? Androidプラットフォームのビジネス利用を支えるために、 Googleが主導している取り組みのこと。 > Android Enterprise is a Google-led initiative to enable the use of Android devices and apps in the workplace.* 7 *https://developers.google.com/android/work/overview

Slide 8

Slide 8 text

Android Enterpriseって? ● デバイス管理ソリューションの提供 ● エンタープライズ向けデバイス ● ソリューションを提供するパートナーの認定プログラム ● ビジネス向けのカスタマーサポートなど 8 https://www.android.com/enterprise/

Slide 9

Slide 9 text

● デバイス管理ソリューションの提供 ● エンタープライズ向けデバイス ● ソリューションを提供するパートナーの認定プログラム ● ビジネス向けのカスタマーサポートなど Android Enterpriseって? 9 https://www.android.com/enterprise/

Slide 10

Slide 10 text

Android Enterpriseって? Androidプラットフォームのビジネス利用を支えるために、 Googleが主導している取り組みのこと。 > Android Enterprise is a Google-led initiative to enable the use of Android devices and apps in the workplace.* 10 *https://developers.google.com/android/work/overview

Slide 11

Slide 11 text

Androidのビジネス利用 ● 従業員への業務用デバイスの貸与 ● 私用端末の持ち込み(BYOD, Bring Your Own Device) ● 専用端末(Kiosk) ○ 飲食店の注文端末 ○ 配送・在庫管理のハンドヘルドデバイス 11

Slide 12

Slide 12 text

Androidのビジネス利用 ● 従業員への業務用デバイスの貸与 ● 私用端末の持ち込み(BYOD, Bring Your Own Device) ● 専用端末(Kiosk) ○ 飲食店の注文端末 ○ 配送・在庫管理のハンドヘルドデバイス -> デバイス単体でも実現可能だが、運用に課題が生じることもある 12

Slide 13

Slide 13 text

ビジネス利用における課題の例 13 運用効率 セキュリティ プライバシー セットアップ 紛失による情報漏洩リスク 私物の持ち込み 問い合わせ・トラブル対応 悪意あるアプリの インストール 労働時間の管理 労働時間外の端末利用 *これらは一例で、企業や組織、ユースケースによって多様な課題が生じる

Slide 14

Slide 14 text

デバイス管理(MDM) MDM (Mobile Device Management) 企業や組織におけるモバイルデバイス運用をより効率的かつ安全にするためのサービ スのこと。 EMM(Enterprise Mobility Management)と呼ばれることもある。 Androidに限らず、iOSやWindowsなど他プラットフォームと併せてサポートしている 場合がある。 -> 今回はAndroidに限定した領域を扱う。 14

Slide 15

Slide 15 text

ビジネス利用における課題の例 15 運用効率 セキュリティ プライバシー セットアップ 紛失による情報漏洩リスク 私物の持ち込み 問い合わせ・トラブル対応 悪意あるアプリの インストール 労働時間の管理 労働時間外の端末利用

Slide 16

Slide 16 text

MDMによる課題解決の例 16 運用効率 セキュリティ プライバシー アプリの自動インストール Wi-Fi接続情報の配布 リモートからの デバイス初期化・ロック 仕事用プロファイル 管理コンソール 提供元不明アプリの インストール禁止 Google Playストアの管理 仕事用アプリの 一時的な無効化

Slide 17

Slide 17 text

17 https://developers.google.com/android/work/requirements AndroidにおけるMDMの実装や機能セッ トは、Android Enterpriseとして標準化さ れている。 Android EnterpriseとMDM

Slide 18

Slide 18 text

Android Enterprise Recommended サードパーティ製MDMをGoogleが検証するプログラムのこと。 > It’s a shortlist of devices and service providers that meet Google’s strict enterprise requirements.*1 Android Enterprise Recommendedとして認定されたMDMサービスは、Android Enterprise公式のソリューションリストに掲載される*2。 18 *1. https://www.android.com/enterprise/recommended/ *2. https://androidenterprisepartners.withgoogle.com/emm/#!?aer

Slide 19

Slide 19 text

MDMの仕組み ● Android EnterpriseとMDM ● MDMの仕組み ● 特別な機能 19

Slide 20

Slide 20 text

20 ● すでに使用中の端末を用意する ● 設定アプリのアカウントの追加から、 管理対象となっているGoogleアカウ ントにログインする セットアップの例(BYOD)

Slide 21

Slide 21 text

21 管理対象のアカウントでログインすると、仕 事用プロファイルの設定が始まる セットアップの例(BYOD)

Slide 22

Slide 22 text

22 ● IT管理者が定めたポリシーによって、 セットアップ完了前に各種設定が求め られる。 ● ポリシーの例 ○ ロック画面のパスワード強度 ○ 指定アプリの自動インストール セットアップの例(BYOD)

Slide 23

Slide 23 text

23 セットアップが完了すると、 仕事用のアプリが表示されるようになる。 セットアップの例(BYOD)

Slide 24

Slide 24 text

24 セットアップの例(BYOD) $ adb shell pm list users Users: UserInfo{0:my_user_name:123} running UserInfo{10:仕事用プロファイル:234} running

Slide 25

Slide 25 text

セットアップの例(BYOD) 25 https://admin.google.com/

Slide 26

Slide 26 text

26 Digital Wellbeing設定から、 仕事用プロファイルが有効な時間をスケ ジュールできる 仕事プロファイルが無効な時間帯は全て の仕事用アプリが強制終了され、通知や バックグラウンドでの動作をしなくなる BYOD Tips

Slide 27

Slide 27 text

MDMの主な登場人物 ● Androidデバイス / Android OS ● MDMサーバー / Web ● Google Play 27

Slide 28

Slide 28 text

MDMの主な登場人物 ● Androidデバイス / Android OS ● MDMサーバー / Web ● Google Play 28

Slide 29

Slide 29 text

Androidデバイスの主な管理対象と権限 デバイスを 企業が所有している デバイスを 個人が所有している( BYOD) デバイス全体を管理する * デバイス内に仕事用の領域を作成し、 仕事用の領域のみを管理する Device Owner権限 Profile Owner権限 29 *BYODのように個人領域と仕事領域を分ける管理方法も存在する

Slide 30

Slide 30 text

Device Owner / Profile Owner ● MDMを利用するために、デバイス内の特定のアプリに対して付与される管理権 限。 ● これらの権限を持つアプリは、DevicePolicyManagerというシステムサービスか らデバイス管理のための強力なAPIを実行することができる。 30

Slide 31

Slide 31 text

31 https://developer.android.com/reference/android/app/admin /DevicePolicyManager Device Owner/Profile Owner権限を持 つ特定のアプリから実行可能なAPIを提供 するシステムサービス。 デバイス単位の管理機能は基本的に内部 でこのサービスを実行している。 (e.g.: パスワードの要件、端末初期化) DevicePolicyManager

Slide 32

Slide 32 text

32 https://developer.android.com/reference/android/app/admin /DevicePolicyManager Device Owner/Profile Owner権限を 持つ特定のアプリから実行可能なAPIを提 供するシステムサービス。 デバイス単位の管理機能は基本的に内部 でこのサービスを実行している。 (e.g.: パスワードの要件、端末初期化) DevicePolicyManager

Slide 33

Slide 33 text

33 https://play.google.com/store/apps/details?id=com.google.a ndroid.apps.work.clouddpc Device Owner/Profile Owner権限を持 ちデバイス上でMDMクライアントとして振 る舞うアプリのことを Device Policy Controller(DPC) という。 現在のAndroid Enterpise*では、 Android Device Policyというアプリが DPCとして動作する。 特定のアプリ *以前は各MDMサービスがDPCを実装する必要があった https://github.com/googlesamples/android-testdpc

Slide 34

Slide 34 text

MDMの主な登場人物 ● Androidデバイス / Android OS ● MDMサーバー / Web ● Google Play 34

Slide 35

Slide 35 text

MDMサーバー ● Google Playが提供しているAndroid Management APIを使用して、MDMの 各機能を実装する。 ● このAPIではデバイスの登録から利用ポリシーの設定、アプリの自動インストールと いったAndroid Enterpriseの標準的な機能が全て提供されている。 35 https://developers.google.com/android/management

Slide 36

Slide 36 text

36 https://admin.google.com/ 一般的にMDMサービスでは、IT管理者向 けの管理コンソールをWebで提供してい る。 これによって、従業員のデバイスの状態を 確認することができる。 MDMサーバー / Web

Slide 37

Slide 37 text

MDMの主な登場人物 ● Androidデバイス / Android OS ● MDMサーバー / Web ● Google Play 37

Slide 38

Slide 38 text

Google Play ● サーバーサイドで利用するAndroid Management APIは、Google Play servicesの一部として提供されている。 ● これによって、Android Enterpriseの機能セット全てをMDMベンダーに対して標 準化して提供することができている。 ● Managed Google Play*1によってインストール可能なアプリを制限したり、プライ ベートなアプリをGoogle Playでホストする*2機能も提供している。 38 *1.https://developers.google.com/android/management/apps#managed_google_pla y_iframe *2. https://developers.google.com/android/management/apps#private-apps

Slide 39

Slide 39 text

特別な機能 ● Android EnterpriseとMDM ● MDMの仕組み ● 特別な機能 39

Slide 40

Slide 40 text

Managed Configurations ● IT管理者がアプリに対してリモートで設定を配布する Connected Apps ● アプリが仕事用プロファイルと個人用プロファイルの間で通信を行う ビジネス向けのアプリが実装可能な特別な機能 40

Slide 41

Slide 41 text

Managed Configurations ● IT管理者がアプリに対してリモートで設定を配布する Connected Apps ● アプリが仕事用プロファイルと個人用プロファイルの間で通信を行う ビジネス向けのアプリが実装可能な特別な機能 41

Slide 42

Slide 42 text

Managed Configurations IT管理者がアプリの設定を変更して各デバイスに反映することができる。 設定値はMDMとデバイスの間をGoogle Play経由でやりとりするため、 アプリは設定値の定義とPlatform APIからの値取得のみで実装できるのが特徴。 42 https://developer.android.com/work/managed-configurations

Slide 43

Slide 43 text

Managed Configurations アプリ ● Managed Configurationsの設定スキーマを定義 ● Managed Configurationsを受け取る処理を実装 ● Google Playでアプリを公開* MDM ● Google Playから提供されるアプリ情報を元に設定UIを表示 ● IT管理者が管理コンソールから設定を作成 43 *厳密にはこの限りではなく、 Google Playがホストするプライベートアプリでも利用可能

Slide 44

Slide 44 text

Managed Configurations Android OS / Google Play ● Google Play servicesがMDMサーバーからの設定変更を受ける*1 ● Android OSのシステム領域に設定値をファイルとして保存*2 ● RestrictionsManagerが設定値の取得をPlatform APIとして提供 44 *1 Android Management API ApplicationPolicy https://developers.google.com/android/management/reference/rest/v1/enterprises.policies#applicationpolicy *2 UserManagerService#writeApplicationRestrictionsLAr() https://cs.android.com/android/platform/superproject/main/+/main:frameworks/base/services/core/java/com/ android/server/pm/UserManagerService.java

Slide 45

Slide 45 text

Managed Configurations アプリ ● Managed Configurationsの設定スキーマを定義 ● 設定値を受け取る処理の実装 ● Google Playでアプリを公開 MDM ● Google Playから設定スキーマを参照 ● 管理コンソールから設定を作成 45

Slide 46

Slide 46 text

Managed Configurations アプリ ● Managed Configurationsの設定スキーマを定義 ● 設定値を受け取る処理の実装 ● Google Playでアプリを公開 MDM ● Google Playから設定スキーマを参照 ● 管理コンソールから設定を作成 46

Slide 47

Slide 47 text

Managed Configurationsの宣言 <<. 47 AndroidManifest.xmlでManaged Configurationsの使用を宣言する

Slide 48

Slide 48 text

res/xml/app_restrictions.xml 48 https://developer.android.com/work/managed-configurations#define-configuration

Slide 49

Slide 49 text

res/xml/app_restrictions.xml 49 https://developer.android.com/work/managed-configurations#define-configuration

Slide 50

Slide 50 text

res/xml/app_restrictions.xml 50 https://developer.android.com/work/managed-configurations#define-configuration

Slide 51

Slide 51 text

res/xml/app_restrictions.xml 51 https://developer.android.com/work/managed-configurations#define-configuration

Slide 52

Slide 52 text

Managed Configurations アプリ ● Managed Configurationsの設定スキーマを定義 ● 設定値を受け取る処理の実装 ● Google Playでアプリを公開 MDM ● Google Playから設定スキーマを参照 ● 管理コンソールから設定を作成 52

Slide 53

Slide 53 text

設定値を受け取る val manager = activity.getSystemService( Context.RESTRICTIONS_SERVICE) as RestrictionsManager val restrictions = manager.applicationRestrictions <: return val myFeatureEnabled = if (restrictions.containsKey("my_feature_enabled")) { restrictions.getBoolean("my_feature_enabled") } else { defaultValue } doSomething(myFeatureEnabled) 53 https://developer.android.com/reference/android/content/RestrictionsManager

Slide 54

Slide 54 text

設定値を受け取る val manager = activity.getSystemService( Context.RESTRICTIONS_SERVICE) as RestrictionsManager val restrictions = manager.applicationRestrictions <: return val myFeatureEnabled = if (restrictions.containsKey("my_feature_enabled")) { restrictions.getBoolean("my_feature_enabled") } else { defaultValue } doSomething(myFeatureEnabled) 54 https://developer.android.com/reference/android/content/RestrictionsManager

Slide 55

Slide 55 text

設定値を受け取る val manager = activity.getSystemService( Context.RESTRICTIONS_SERVICE) as RestrictionsManager val restrictions = manager.applicationRestrictions <: return val myFeatureEnabled = if (restrictions.containsKey("my_feature_enabled")) { restrictions.getBoolean("my_feature_enabled") } else { defaultValue } doSomething(myFeatureEnabled) 55 https://developer.android.com/reference/android/content/RestrictionsManager

Slide 56

Slide 56 text

設定値を受け取る val manager = activity.getSystemService( Context.RESTRICTIONS_SERVICE) as RestrictionsManager val restrictions = manager.applicationRestrictions <: return val myFeatureEnabled = if (restrictions.containsKey("my_feature_enabled")) { restrictions.getBoolean("my_feature_enabled") } else { defaultValue } doSomething(myFeatureEnabled) 56 https://developer.android.com/reference/android/content/RestrictionsManager

Slide 57

Slide 57 text

設定値を受け取る val manager = activity.getSystemService( Context.RESTRICTIONS_SERVICE) as RestrictionsManager val restrictions = manager.applicationRestrictions <: return val myFeatureEnabled = if (restrictions.containsKey("my_feature_enabled")) { restrictions.getBoolean("my_feature_enabled") } else { defaultValue } doSomething(myFeatureEnabled) 57 https://developer.android.com/reference/android/content/RestrictionsManager

Slide 58

Slide 58 text

val restrictionsFilter = IntentFilter(Intent.ACTION_APPLICATION_RESTRICTIONS_CHANGED) val restrictionsReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { ここでRestrictionsManagerからの設定値の取得などを行う } } registerReceiver(restrictionsReceiver, restrictionsFilter) 58

Slide 59

Slide 59 text

59 https://chromeenterprise.google/policies Chrome for Android ChromeにはEnterprise向けに利用ポリ シーを配布する機能がある。 そのAndroid向け実装にManaged Configurationsが使われている。 Managed Configurations を使用したアプリの例

Slide 60

Slide 60 text

Managed Configurationsに対応している場合 60

Slide 61

Slide 61 text

Managed Configurationsに対応している場合 61

Slide 62

Slide 62 text

Managed Configurationsに対応していない場合 62

Slide 63

Slide 63 text

Managed Configurationsの設定 63

Slide 64

Slide 64 text

Managed Configurationsの設定 64

Slide 65

Slide 65 text

Managed Configurationsの設定 65

Slide 66

Slide 66 text

Managed Configurationsの設定 66 https://chromeenterprise .google/policies

Slide 67

Slide 67 text

Managed Configurationsの設定 67

Slide 68

Slide 68 text

Managed Configurationsの設定 68

Slide 69

Slide 69 text

Managed Configurationsの設定 69

Slide 70

Slide 70 text

70 [ { "toplevel_name": "sample" }, { "name": "DroidKaigi", "url": "droidkaigi.jp" } ] Chrome for Android への反映

Slide 71

Slide 71 text

Managed Configurations ● IT管理者がアプリに対してリモートで設定を配布する Connected Apps ● アプリが仕事用プロファイルと個人用プロファイルの間で通信を行う ビジネス向けのアプリが実装可能な特別な機能 71

Slide 72

Slide 72 text

仕事用プロファイルで管理されたデバイスにおいて、 個人用と仕事用両方にインストールされたアプリが領域間を通信できる機能。 アプリが個人用プロファイルと仕事用プロファイルの間を通信できるようになった状態を シングルプロファイルモードという。 *2023/08時点ではアーリーアクセスのプログラムのため、 実装や公開手順などの詳細は公式のドキュメントを参照してください。 https://developers.google.com/android/work/connected-apps Connected Apps 72

Slide 73

Slide 73 text

73 Googleカレンダー Connected Appsに対応したアプリは、 設定>アプリ>特別なアプリアクセス からシ ングルプロファイルモードをONにすること ができる。 Connected Apps を使用したアプリの例

Slide 74

Slide 74 text

Connected Appsの許可 74

Slide 75

Slide 75 text

75 Googleカレンダー Googleカレンダーでシングルプロファイル モードを有効にすると、 個人用のカレンダーと仕事用のカレンダー を同時に表示することができる。 シングルプロファイルモード Googleカレンダー

Slide 76

Slide 76 text

76 Googleカレンダー Googleカレンダーでシングルプロファイル モードを有効にすると、 個人用のカレンダーと仕事用のカレンダー を同時に表示することができる。 シングルプロファイルモード Googleカレンダー

Slide 77

Slide 77 text

77 アプリがプロファイル間で通信できるように なるため、仕事用のアプリが個人のアプリ データにアクセスできてしまう。 Connected Apps の注意点

Slide 78

Slide 78 text

Managed Configurations ● IT管理者がアプリに対してリモートで設定を変更する Connected Apps ● アプリが仕事用プロファイルと個人用プロファイルの間で通信を行う ビジネス向けのアプリが実装可能な特別な機能 78

Slide 79

Slide 79 text

まとめ 79

Slide 80

Slide 80 text

● MDMはデバイスを効率的かつ安全に運用するためのサービス ● Android EnterpriseとしてMDMの機能が標準化されている ○ サーバーサイド:Android Management API ○ クライアント:Android Device Policy(DPC), Device Policy Manager ● MDMを提供するためにGoogle Playが重要な役割を果たしている ○ 自動インストールのようなGoogle Playストアのビジネス向け機能の提供 ○ サーバーとクライアントの連携 まとめ 1/2 80

Slide 81

Slide 81 text

● Managed Configurations や Connected Appsによって特殊なユースケース へ対応することができる ● Managed Configurations ○ IT管理者がアプリの設定をリモートで配布できる機能 ○ アプリ側の実装のみで対応が可能 ● Connected Apps ○ 仕事用プロファイルと個人用プロファイルの間をアプリが通信できる機能 ○ アーリーアクセスプログラムのため、実装方法や公開手順には注意が必要 まとめ 2/2 81

Slide 82

Slide 82 text

● https://www.android.com/enterprise/management ● https://developers.google.com/android/work/requirements ● https://androidenterprisepartners.withgoogle.com/glossary/emm ● https://developers.google.com/android/management ● https://developer.android.com/work/managed-configurations ● https://developer.android.com/reference/android/content/RestrictionsManager ● https://developer.android.com/reference/android/app/admin/DevicePolicyManager ● https://source.android.com/docs/devices/admin/managed-profiles ● https://github.com/googlesamples/android-testdpc ● https://developers.google.com/android/work/terminology Appendix 82

Slide 83

Slide 83 text

ありがとうございました 83

Slide 84

Slide 84 text

ビジネス向けアプリを 開発するときに知っておくべき Android Enterpriseの世界 Yusaku Tanaka (@imsaku) - 2023/09/15, DroidKaigi 2023