管理対象の Android 端末で、利用者が自分で VPN を設定できないようにしてほしい、と頼まれることがある。魅力的な答えは、よく知られた数個のポートを塞ぐファイアウォールルールだ。しかしその答えは、プラットフォームの仕組みとアプリの実際の接続方法を見落としている。

サポートされた制御は、所有する端末またはプロファイルに対する管理上の制限であり、明確な適用範囲、バージョンごとに異なる挙動、そして意図的に設定しなければならない例外がある。

以下の五つの確認を順番に進める。どれも計画を無効にしうるので、成り立たない最初の確認で止まる。

確認 1:VPN がないことの意味を決める

同じ一文の裏に二つの要件が隠れている。一つは、どの利用者も自分で VPN を作れないこと。もう一つは、組織が承認した VPN だけが動けること。どちらも正当で、それぞれ異なる構成、異なるサポートの物語、異なる故障の仕方を生む。

管理コンソールに触る前に、どちらを買うのかを書き出す。全員に一つの承認済みトンネルという意図なら、周囲に禁止を置いた承認済み経路を実装している。トンネルを一切許さないという意図なら、リモートアクセスとトラブルシューティングの経路が変わることも受け入れる必要がある。

ここを間違えると、展開は動いているように見えながら、運用が依存する VPN を静かに切り落とす。たいていは当直の担当者が都合の悪い時間に気づく。

確認 2:実際に持っている権限を確かめる

Android はこの制限を UserManager.DISALLOW_CONFIG_VPN で公開しており、それは UserManager のリファレンス に記載されている。VPN の設定と起動を防ぐものであり、通常のアプリが自分自身や他のアプリに適用できる設定ではない。

適用するのは権限を持つ管理者である。端末全体ならデバイスオーナー、管理プロファイルならプロファイルオーナーで、管理プロファイル内のプロファイルオーナーにも同じ権限がある。EMM がそのどちらとしても動作できないなら、この制御は持っておらず、コンソールでどれだけポリシーを設定しても作ることはできない。

適用範囲は権限と同じくらい重要だ。仕事用プロファイルに適用した制限はそのプロファイルを統制するのであり、同じ端末の個人側ではない。それを利用者のすべての行動への統制と説明するのは不正確で、個人プロファイルに VPN を入れて動くことに気づく最初の人がそれを試すことになる。

確認 3:バージョンごとの挙動を知る

この制限はリリースごとに変わっており、その違いが、現場の端末で展開が実際に何をするかを決める。

プラットフォームの境界文書化された挙動
デバイスオーナーまたはプロファイルオーナーその所有者の権限のもとで制限を適用できる
API 24 以降デバイスまたはプロファイルの所有者が設定した常時接続 VPN は、今もシステムが起動する
API 31 以降制限をオンにすると、利用者がすでに動かしていた VPN が切断される

API 31 の行こそが、展開の途中で人を驚かせる。これらの端末では適用は見た目だけの話ではなく、すでに動いていたトンネルを切断する。静かな設定変更ではなく、目に見える出来事として計画すること。

API 24 の行はあなたを救う。所有者が設定した常時接続 VPN は制限を生き延び、それによって承認済み経路がそもそも利用可能であり続ける。

確認 4:承認済み経路を生かしておく

組織の常時接続 VPN は、制限を適用する前に設定して試験する。適用してからでは遅い。先に適用すると、端末はトンネルと、診断に使うはずの道具を同時に失う。

三つを明示的に確認する。常時接続 VPN が利用者ではなく所有者によって作られていること。適用後にそれらの端末で起動すること。再起動を生き延びること。手動でしか上がらないトンネルは承認済み経路ではない。サポートチケットの待ち行列である。

トンネルが上がっていることに依存しない復旧経路を用意する。管理コンソール、ローカルの管理者経路、帯域外のチャネルのいずれでもよい。うまくいかないのは、ポリシーがたった今無効にした接続を通して壊れたポリシーを直せると思い込むことだ。

確認 5:検証し、それから限界を正直に説明する

実機と実アカウントで試す。利用者が VPN を追加も起動もできないことを確かめ、承認済みトンネルが接続して通信を運ぶことを確かめ、個人プロファイルが文書どおりに振る舞うことを確かめる。この三つの結果が受け入れ基準だ。

そのうえで、何を主張するかに注意する。この制限が統制するのは Android の VPN 機能である。許可された接続のすべてを検査済みプロトコルに変えるものではないし、アプリが明示的なプロキシ経由で自分の要求を送るのを止めるものでもない。UDP 500、UDP 4500 と一つの OpenVPN ポートを塞ぐのは同じ制御ではない。通信は、普通に見える HTTPS を含む多くのトランスポートを通り抜けられるからだ。

要件が VPN 機能より広いなら、アプリ配布ポリシー、アカウント管理、環境に適したネットワーク制限と組み合わせる。そして適用範囲の外に残るものを記録しておく。次の監査で、部分的な制限を完全なものとして繰り返す人が出ないように。

関連記事