Edited at

Android Enterpriseについて適当に騙る


Android Enterprise とは

Android Enterpriseについて

文字通りAndroidを企業で使う場合のシステムというかモード。かつてはAndroid for Workと言われていた。

幅広くGoogleが謳っているが、ここではAndroid機器の本体のモードと、対応MDMについての話が主。

遠隔管理するにゃほぼ必須と考えた方がいいかも知れない。

使わないと、意外とできることが少なかったり、そもそもAndroid 10で使えないし、そうでなくとも動作が怪しかったり強制的に無効化しやすかったり良いことが無い。詰む。

なお本文中の用語のうち、MDMはEMMと同義と読み替えてください。

個人で遊ぶ方法は後半。


Android Enterprise Recommendedとは

GoogleがAndroid Enterpriseを使うにあたって、特にオススメしている機種やMDMやキャリア。略してAER

なんかそれ用の審査を通らないと取れないらしい。

AERな機種を選ぶ利点としてとりあえず挙げられるのは


  • この記事で語るAEのモードにとりあえず対応。

  • 最低限のスペックを担保(あまり高くはないけども、そのうち見直されるだろう)

  • 一定のアップデートを担保

の3点。

Android Enterprise Recommended の要件


費用について

Android Enterpriseを使うだけなら無料。

しかし、活用するためにはMDMが必要で、MDMがだいたい1台あたり月額いくら方式で有料。

また、独自アプリの配信を用いる場合、配信方法によってはGoogle Play Consoleの申し込みが必要で、$25を一回こっきり払う必要がある。


ざっくりと種類分け

コロコロ変わっているので把握できない。たぶん違っている。

大きく3つのSolution Setsと、+1つの組み合わせの、計4種類をとりあえず考えておけばいいかもしれない。

それぞれMDMの対応が必要。

なお、非Android EnterpriseのMDM管理状態はDevice AdminとかLegacy Modeとか呼ばれるそうな。



  • Work Profile


    • Androidの中に、個人用の環境と仕事用の環境を作る。仕事用プロファイルとも。

    • それぞれ独立しているので、それぞれの環境に個別にアプリを入れることができる。

    • 例えばアプリ一覧の中にChromeのアイコンが2つあり、それぞれの設定が独立しており、仕事用のChromeは管理者が設定を強制してセキュアに使うとか。

    • たぶん主目的はBYODで使うこと。




  • Fully managed device


    • デバイスを丸ごと企業の管理下に置く。かつてはDevice Owner Modeとか言われていたらしい。

    • デバイスすべてがMDMの管理化にあり、制御されることからiOSの監視モードに近いと考える。

    • たぶん一般的に、会社が社員にスマホを貸与する場合に主に使われそうな気がする。

    • 個人的に趣味で遊ぶ分にもイイかもしれない。




  • Dedicated device


    • Android端末で専用機(飲食店の注文用タブレットとか、POSレジとか?)とする用なのか。


    • COSUとも言われていたそうな。

    • iOSのシングルAppモードよりかは柔軟性があるらしい。(複数アプリを設定できる)

    • 子供用に勉強用とかで押し付けるのにアリかもしれない。




  • COMP(Fully managed devices with work profiles)


    • Fully Managed Deviceの上にWork Profileを乗っけたもの。


    • COPEとも言う様子。

    • 会社が貸与した機器の上に個人で使ってもいいよ的領域を区切るようなイメージか。

    • もしくは、よりセキュアな領域を作るような使い方もできそう。




Android Enterpriseに対応する機器

まず、Android 5以上であること。

次にPlay Storeがプリインされていること。

(ストアとか開発者サービスが無くても使えるMDMもあるけれども、Dedicated以外で一般的に遠隔管理で使うのであれば無いと詰む。)

推奨は、Android Enterprise Recommendedの認定を受けていること。

理想はAndroid 9以降のRecommended、せめて8以降。

とりあえず「Android Enterprise Solution Directory」を見るのが早い。

遊ぶだけであればガラホとかKindle Fireとかエミュレータのストア無し版でも動くっぽい。


Android Enterpriseに設定する方法

基本的には対応したMDMが必要だけど、テスト用の仕組みが設けられている。(後述)

以下の方法からやる。

なお、一般のMDMの場合はMDMと通信しないといけなかったり、アプリをダウンロードさせるためにデータ通信できることが必要。

モバイルデータ通信をやる場合はSIMを刺すだけで通信できるものでないと、途中でAPN設定ができないので詰む。Wi-Fi使うしかない。




MDM Agentを入れる



現在利用中の端末にPlay StoreなどからMDM Agentをインストールし設定を進めるとWork Profileで適用される。





G Suiteアカウントでログインする



管理者が予めG Suiteで設定しておくと、G SuiteアカウントでサインインするとWork Profileで適用されるらしい。初期画面で入れるとFullyらしい。





DPC-identifier



DPCハッシュとか言われる場合もあるらしい。
Androidの初期設定画面(初期化直後の最初の設定ウィザード)中のGoogleアカウント入力画面で、Googleアカウントの代わりにMDMごとに決められた文字列を入力する。

形式は「afw#[文字列]」。例として「afw#setup」とか。それ以降はそれぞれのお作法がある様子。





NFC



Androidの初期設定画面(初期化直後の最初の設定ウィザード)一番最初の画面(ようこそと出ているところ)で、NFCを読ませる。

一般的には別のAndroid端末に専用のアプリを入れて設定をして、そのAndroid端末と設定したいAndroid端末を接触させる。

DPC-identifierの方法と比べて、追加設定を入れられるようになる。

Android 6以上で、もちろんNFC搭載機種でなければならない。

生カードから作ればそれぞれのMDMのものは作れる様子。





QRコード



Androidの初期設定画面(初期化直後の最初の設定ウィザード)一番最初の画面(ようこそと出ているところ)で、画面を7連打するとQR読み込み画面が出てくる。

そこで設定用QRコードを読ませる。QRコードの中身は後述

NFC方式と同様に、DPC-identifierの方法と比べて、追加設定を入れられるようになる。

Android 7以上で対応。なおAndroid 9未満の場合はQRコードリーダーアプリを裏でダウンロードするらしく、Wi-Fiの手動設定かAPNが自動設定できるモバイルデータ通信が必須っぽい。

9以降ならQRコードの中にWi-Fi設定を入れて自動化できる。






Zero-Touch



概要はこちら

iOSのDevice Enrollment Program(DEP)に似る。

Googleのサーバ上でデバイスとMDMを紐づけておくことで、勝手に設定される。

イメージとしては強制的ににNFCやQRが読み取りされて設定が突っ込まれる感じ。

一部機種を除いてAndroid 8以上で、たぶん個人では無理。





【おまけ番外編】adbコマンド経由でdpmコマンド



デバッグモードでコマンドを叩く。

書式は「adb shell dpm set-device-owner "[COMPONENT_NAME]"」

アカウント設定が無い状態で叩かなければならないので、一部キャリアモデル(標準で勝手にアカウントが入っていて消せないもの)は追加作業でpmコマンドで一部プリインパッケージの無効化か削除が必要。

Qiita上にも記事はあるので、それ参照

初期化せずに遊びたい場合や上記の他の手段が取れない(稀にそんな機種が居る)場合に使えなくもない。




ざっくりまとめ

DedicatedとCOMPはFullyに準じると考えればいいのかもしれない。

方式
バージョン
Work Profile
Fully Managed

MDM Agentインストール
たぶん5以降

×

G Suite
たぶん5以降

○?

DPC-Identifier
6以降
×

NFC
6以降
×

QR
7以降
×

Zero-Touch
8以降
×

dpm
たぶん6以降
×


Android Enterpriseを試す、遊ぶ

個人的に利用する場合でメリットがありそうなのが、以下の二点


  • 初期設定時にシステムアプリの挙動を指定できる(Fully Managedの場合)


    • キャリアアプリやGoogleアプリ、3rdパーティーアプリでプリインされているものをアンインストールまたは無効とさせる。

    • 通常状態で無効化できないものも一部無効化される場合もある。

    • キャリアモデル的に潰してしまうとマズいものも潰れる場合があり、その場合にキャリアサービスが使えなくなることがある。



  • 同一のアプリを独立して二つ動かせる(work Profile、COMPで)


    • 一部の機種では元から「デュアルアプリ」や「ツインアプリ」といった機能があるが、仕組みは似たようなもの。



iOSと比べ、キャリアやメーカーのプリインアプリが大量に突っ込まれるAndroid。

SIMフリー版でも買えばええんでないのと思うが、キャリアから安く買えたりする。

標準でインストールされているメーカーやキャリアのアプリの大半がアンインストールまたは無効とされた状態とすることができるので、それらのアプリがうっとうしい人が個人的に使えば少し幸せになれるかもしれない。

あとはプライベートでの二台持ちの代わりになるかもしれない。同時起動は無理かも知んないけど。


どうやって遊ぶのか

Test DPCなるアプリがあり、どうやらGoogleが絡んでいるっぽい。

Work ProfileにするのであればPlay Storeからインストール

Fully Managedを試すのであればそれ以外の方法で。(NFCはアプリをビルドする必要があるので、QRかDPC-Identifier)


QRコードの書式(一部 Zero-TouchのCusom DPCに流用可能)



{

"android.app.extra.PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED": false,
"android.app.extra.PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME":
"com.afwsamples.testdpc/com.afwsamples.testdpc.DeviceAdminReceiver",
"android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION":
"https://testdpc-latest-apk.appspot.com",
"android.app.extra.PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM":
"gJD2YwtOiWJHkSMkkIfLRlj-quNqG1fb6v100QmzM9w=",
"android.app.extra.PROVISIONING_WIFI_SSID": "Wi-Fi SSID",
"android.app.extra.PROVISIONING_WIFI_SECURITY_TYPE": "WPA",
"android.app.extra.PROVISIONING_WIFI_PASSWORD": "password"
}

Wi-Fi設定を入れている場合、そのWiFiに接続できないと先に進まないので、以下Wi-Fi設定を抜いたQRコード

※上記QRのURLではアプリバージョンが古いので、下記Play StoreのURLを用いるか、GitHubにあるAPKのURLに差し替えたほうがいいかもしれない。


NFC方式を使う場合

Play Storeにそれ用のアプリが転がっていたり、MDMメーカーがそれ用のAPKを公開していたり。

nfcpyを使うことでPCに接続したPasoriでカードに書き込んだり、Pasoriにスマホを乗っけてデータを送りこんでプロビジョニングさせる。


NFC用のカードの作り方

■材料

 生カード 適量

  NDEFタグで書き込みできるもの。Amazonとかで「NTAG216」で出てくるカードが無難。ちょっと反応鈍いけど。

  某ゲーム用とかに使われるNTAG215は容量が微妙。Felica Lite-Sとかは容量的に無理。Felica Standardは一次発行ができるならアリかもしんない。やり方わからんし高いけど。

 NDEF書き込み用ソフト(Android以外で良いのが無い)

■作り方

 生カードにデータを書き込む

 mime(typename)は「application/com.android.managedprovisioning」

 データはQRとほぼ同様。JSONではない。

 一部記号のエスケープはバックスラッシュ。だいたい無くても行ける。EXTRATS_BUNDLEの複数項目は「\n」で区切る。

android.app.extra.PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED=false

android.app.extra.PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME=com.afwsamples.testdpc/com.afwsamples.testdpc.DeviceAdminReceiver
android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION=https\://testdpc-latest-apk.appspot.com
android.app.extra.PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM=gJD2YwtOiWJHkSMkkIfLRlj-quNqG1fb6v100QmzM9w=


キーの概要




PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED



システムアプリの挙動を設定。省略時の適用値はFalseっぽい。

Falseにすると消せるアプリはすべてアンインストール、消せなくとも無効化できるアプリはすべて無効化した状態になる。

消したアプリを復活させられるかはアプリ次第。(再インストールの手段があるかどうか)

非表示にしたアプリを再表示できるかはMDM次第。

TestDPCの場合はメニューから。

通常と同様のアプリを残しておきたい場合はTrueにする。





PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME



必須値。代わりにPROVISIONING_DEVICE_ADMIN_PACKAGE_NAMEもあるが安定しない。「This constant was deprecated in API level 23.」とあるので、PACKAGE_NAMEではなくCOMPONENT_NAMEを使うほうが良いのだろう。

Android Eterpriseをするのに用いるアプリとコンポーネント名。

調べる場合は一旦Play Storeから入れてWork Profileを適用した後にBugreportを見るのが早い。

またはActivityの中でDEVICE_ADMIN_ENABLEを持っている奴を総当たり。





PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION



ほぼ必須値。プリインされている場合は省略可能。

APKのダウンロード元

一部MDMのAPKは「https://play.google.com/managed/downloadManagingApp?identifier=[DPC-Identifier]」でもDL可能

TestDPCの場合は「https://play.google.com/managed/downloadManagingApp?identifier=testdpc」





PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM



これか「PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM」のどちらかがほぼ必須。プリインされている場合は省略可能。

こちらはAPKのパッケージ署名のチェックサムで、署名証明書のSHA256ハッシュをバイナリ化してURLセーフなBase64符号化したもの。こんな感じ。でもURLセーフでなくても行ける場合がある。なにゆえ。

PACKAGE_CHECKSUMはAPKのSHA256ハッシュを同様に変換したもの

SIGNATURE_CHECKSUMの方がAPKバージョンアップでも原則変わらず、再作成する必要が無いのでお手軽かもしれない。





PROVISIONING_WIFI_SSID



設定時に自動接続するWi-Fiのアクセスポイント名

Android Pi(9)未満ではQRコードリーダーをダウンロードするため、何かしらのデータ通信設定が必要になる。

その際にWi-Fi設定を手動で行ってもモバイルデータ通信を利用しても、QRコード読み取り後はQRコードに指定されたWi-Fi設定で通信しようとする。

接続できなかった場合はプロビジョニングに失敗する。





PROVISIONING_WIFI_SECURITY_TYPE



Wi-Fiの方式指定

「NONE、WEP、WPA、EAP」から指定

EAPの場合はさらに別のオプションが必要。コレとか。WPA2の場合でも「WPA」でいける。





PROVISIONING_WIFI_PASSWORD



Wi-Fiの接続パスワード





他に使うと便利かもしれないもの




PROVISIONING_ADMIN_EXTRAS_BUNDLE



上のQRでは省略しているが、MDMごとの固有設定を記載する項目

ここにMDM固有のキーと値を設定することで、途中の入力を省略させて自動化させることができる場合もある






PROVISIONING_LOCALE



地域と言語の設定、「ja_JP」としておけば一部の機種で楽かも知れない。逆にキャリアモデルだとたまに指定していると落ちる。





PROVISIONING_TIME_ZONE



時刻(タイムゾーン)の設定、「Asia/Tokyo」としておけば一部の機種で楽かも知れない。逆にキャリアモデルだとたまに指定していると落ちる。





PROVISIONING_SKIP_ENCRYPTION



ストレージ暗号化の設定スキップ
原則Android Enterpriseではストレージ暗号化が必須らしく、古い機種(別途暗号化しないとダメなもの)の場合は初期設定中に暗号化をさせられて時間がかかるが、この値をtrueにしておくと後回しにできるっぽい




その他のWi-Fi設定


APがステルスの場合はPROVISIONING_WIFI_HIDDENをTrueに

Wi-Fiがプロキシ経由で出ていく必要がある場合はPROVISIONING_WIFI_PROXY_HOSTPROVISIONING_WIFI_PROXY_PORT、またはPROVISIONING_WIFI_PAC_URLを設定して、ついでに除外が必要ならPROVISIONING_WIFI_PROXY_BYPASSを設定しておく。




TestDPCを用いてQRコード方式でFully Deviceにする場合の画面

機種:L-03K

→ 画面連打 →
→ 画面連打 →
→ Wi-Fi設定


上のQRコードを読ませる

細かい設定はTestDPCアプリで

無効化されたシステムアプリの復活は「Enable System Apps」から


Managed Google Playストアとアカウント

管理されたストア。管理者が許可したアプリしか出てこない。

使うためにはManaged Google アカウントかManaged Google Playアカウントが必要。

G SuiteとかCloud Identityで使われるのが前者。

後者はMDMが勝手に作ってくれる。Managed Google Playストアを使うためだけの、それ以外のGoogleサービスはろくに使えないようになっている特殊アカウント。

ストア以外もある程度使いたいけどタダで済ませたいならCloud Identity Freeで前者なのか。


Android Enterpriseは必要なのか

MDMでデバイス管理する場合、今後はこれにしておかないとバージョンアップに伴い遠隔管理機能がどんどん制限されているとかでいろいろと厳しいらしい。

特に企業向けで必要な機能としてはアプリのインストール管理が要件として挙がってくることもあるかもしれないが、Android Enterpriseにしておくことで「提供元不明アプリのインストール禁止」「デバッグモードの禁止」でAPKのインストールを塞いだうえで、管理者が承認したアプリしかインストールできないManaged Google Playを利用することができ、それにより管理者の意図しないアプリのインストールを防ぐことができるようになったり。

Managed Google Playを試すのであれば、Android Management Experienceがいいかも知れない。


Android Management Experience

Android Management Experienceとは、Googleが提供している、Android EnterpriseとManaged Google Playのお試し版。無料で使える。

以下の機能を利用できる。


  • とりあえずWork ProfileとFully managed

  • Managed Google Play



  • ポリシーは以下のみを適用可能


    • 強制でデバッグの無効

    • スクショ禁止の指定

    • コピペ禁止の指定

    • 画面ロックパスワード強制の指定

    • アプリ権限要求の自動化


      • 但し自動許可にすると、自動許可を想定していない一部アプリで詰む。



    • Wi-Fi設定の適用


      • WEPとWPAのパーソナルをいずれかひとつのみ





どんなものかを試す分にはいいが、適用できるポリシーが少なすぎて個人レベルでの実用でも辛い。

家庭向けのペアレントコントロール用に提供元不明アプリインストール禁止と初期化禁止とアプリブラックリストとアカウント追加禁止と遠隔ロック・初期化もできるようになればいいなと妄想。


Android Management ExperienceのQRコード方式を用いる場合の内容

QRでさっくり登録させたい場合はここの内容の応用で可能な様子


AndroidManagementExperience

{

"android.app.extra.PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED": false,
"android.app.extra.PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME":
"com.google.android.apps.work.clouddpc/.receivers.CloudDeviceAdminReceiver",
"android.app.extra.PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM":
"I5YvS0O5hXY46mb01BlRjq4oJJGs2kuUcHvVkAPEXlg",
"android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION":
"https://play.google.com/managed/downloadManagingApp?identifier=setup",
"android.app.extra.PROVISIONING_ADMIN_EXTRAS_BUNDLE":
{
"com.google.android.apps.work.clouddpc.EXTRA_ENROLLMENT_TOKEN":
"【登録コード】"
}
}

PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLEDは好きな方で。でも無効化したものを再有効化する機能は無い様子。

DEVICE_ADMIN_xxxxの類は「Android Device Policy」を用いる。

PROVISIONING_ADMIN_EXTRAS_BUNDLE内でAPKに対して登録コードを指定することで、QRを読ませるだけで登録が完了する。

他のMDMでも、上記パッケージを用いるものなら流用可能。(Intuneとか)

なお、DPC-Identifierは「afw#demo」と指定されるが、「afw#setup」と同一っぽい。


どうでもよい感想とか

MDMを作っている所は極力Recommendedを目指してほしい。

キオスクアプリとかを作っている人はQR方式とかでさくっと実装できるように作ってほしい。adbでdpm set-device-owner打つの面倒くさい。

特に初期設定に必要な値はPROVISIONING_ADMIN_EXTRAS_BUNDLEで指定できるようにして、手作業を極力なくすことを目指してほしい。あまりにも多すぎるとQRやNFCの容量足りなくなるけど。