LoginSignup
3
3

More than 5 years have passed since last update.

AWS Device Farm でモバイルアプリからバックエンドサーバーに接続

Last updated at Posted at 2015-08-18

Screen Shot 2015-08-18 at 4.01.09 PM.png

バックエンドサーバーに認証は必要か?

現時点で、DeviceFarm のインターネット側の IP アドレスを指定したり限定したり出来ません。また、次項に示す通りいくつかのの IP アドレスが共有利用されます。そのため、バックエンドサーバー側で接続元 IP アドレスで厳密に制限をかけることは難しいです。バックエンドサーバー側を一般公開せずに Device Farm からテストしたいような場合は、ID/PASSWORD など何かしらサーバー側で認証を実施する必要があります。

とはいえ、Device Farm 側の接続元IPを確認してみた

Android および iOS の WebView で任意のサーバーに HTTP アクセスするようなアプリを実装し、Device Farm で数多くのデバイス上で Fuzz テストを実施しました。サーバー側では Apache が動いておりアクセスログを確認できるようにしています。以下がテスト結果です。

access_log_iOS
54.244.50.33 - - [18/Aug/2015:04:52:05 +0000] "GET /?59DC0485-2CC7-44D0-B396-BDA277F0E829 HTTP/1.1" 200 51 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12D508"
54.244.50.33 - - [18/Aug/2015:04:52:11 +0000] "GET /?E1C58958-2237-4FC7-9036-69403DF4ABDC HTTP/1.1" 200 51 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12A365"
54.244.50.33 - - [18/Aug/2015:04:52:14 +0000] "GET /?60EB29D4-4D3A-4A81-AA8D-4054576BAFCD HTTP/1.1" 200 51 "-" "Mozilla/5.0 (iPad; CPU OS 8_0_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12A405"
54.244.50.32 - - [18/Aug/2015:04:52:20 +0000] "GET /?51CDDD6A-3391-4862-973C-CC8C65FE66C7 HTTP/1.1" 200 51 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12A365"
54.244.50.33 - - [18/Aug/2015:04:52:21 +0000] "GET /?552F09A6-A96B-4E58-B869-FD0C374C9BE2 HTTP/1.1" 200 51 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12F70"
54.244.50.33 - - [18/Aug/2015:04:52:22 +0000] "GET /?C08ACF96-19EE-48CC-AF86-0638D2B7D0ED HTTP/1.1" 200 51 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B435"
54.244.50.32 - - [18/Aug/2015:04:52:25 +0000] "GET /?8CC5E9B2-A635-4DD7-B162-5497FF72707D HTTP/1.1" 200 51 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D257"
・・・
access_log_Android
54.244.50.32 - - [18/Aug/2015:06:51:03 +0000] "GET /?d10ef01e-13ff-413a-a24b-bc17a35ec2bd HTTP/1.1" 200 51 "-" "Mozilla/5.0 (Linux; Android 4.4.4; XT1045 Build/KXB21.14-L1.63) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36"
54.244.50.33 - - [18/Aug/2015:06:51:03 +0000] "GET /?67069e75-7d83-4693-bd5b-a83e8df06296 HTTP/1.1" 200 51 "-" "Mozilla/5.0 (Linux; Android 4.4.2; LG-V410 Build/KOT49I.V41010d) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Safari/537.36"
54.244.50.33 - - [18/Aug/2015:06:51:04 +0000] "GET /?81445f8a-3315-4600-ae38-9c959665e0c9 HTTP/1.1" 200 51 "-" "Mozilla/5.0 (Linux; Android 4.4.4; 831C Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36"
54.244.50.33 - - [18/Aug/2015:06:51:08 +0000] "GET /?cf57ad6e-ca93-4e6b-a62d-e676a0470649 HTTP/1.1" 200 51 "-" "Mozilla/5.0 (Linux; Android 4.4.4; SM-N910P Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36"
54.244.50.33 - - [18/Aug/2015:06:51:09 +0000] "GET /?f8078b11-0494-40cf-a5f9-600b853bbc7e HTTP/1.1" 200 51 "-" "Mozilla/5.0 (Linux; Android 4.4.4; SM-N910T Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36"
54.244.50.32 - - [18/Aug/2015:06:51:10 +0000] "GET /?25c9f94b-e74c-494e-a28f-2a51427713f1 HTTP/1.1" 200 51 "-" "Mozilla/5.0 (Linux; Android 5.0.2; Nexus 7 Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Safari/537.36"
54.244.50.33 - - [18/Aug/2015:06:51:11 +0000] "GET /?0f50a65e-0c40-4c95-a0af-96e685aaea62 HTTP/1.1" 200 51 "-" "Mozilla/5.0 (Linux; Android 4.4.2; SCH-I535 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36"
54.244.50.33 - - [18/Aug/2015:06:51:11 +0000] "GET /?748ccfb4-ec34-4f1a-add9-a3895de42de0 HTTP/1.1" 200 51 "-" "Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; SAMSUNG-SGH-I337 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30"
・・・

ということで現時点では、 54.244.50.32 もしくは 54.244.50.33 からインターネットにぬけていることが分かりました。

AWS 公表の IP Range から割り当て可能性がある IP を調べてみる

jq
curl https://ip-ranges.amazonaws.com/ip-ranges.json | jq '.prefixes' | jq 'map(select(.region == "us-west-2" ))'| jq 'map(select(.service == "AMAZON" ))' | jq '.[] | .ip_prefix’
IPs
"50.112.0.0/16"
"52.10.0.0/15"
"52.12.0.0/15"
"52.24.0.0/14"
"52.88.0.0/15"
"52.95.247.0/24"
"52.95.255.112/28"
"54.68.0.0/14"
"54.148.0.0/15"
"54.184.0.0/13"
"54.200.0.0/15"
"54.202.0.0/15"
"54.212.0.0/15"
"54.214.0.0/16"
"54.218.0.0/16"
"54.231.160.0/19"
"54.239.2.0/23"
"54.239.48.0/22"
"54.240.230.0/23"
"54.240.248.0/21"
"54.244.0.0/16"
"54.245.0.0/16"
"176.32.125.0/25"
"205.251.232.0/22"

ひろい・・・
最近、海とか行ってねぇなぁ。
う〜み〜は〜、ひろい〜な〜、お〜きぃ〜な〜。

実際は、レンジをもっと小さな範囲で絞り込むことは可能です。
これにより課題を解決できるようなケースであれば、お近くの SA にお問い合わせください。

Device Farm の内部構造をなんとなく予想できる

IP アドレスが共有されてインターネットにぬけていくのがわかりましたが、これでなんとなくDevice Farm 側のインターネットにぬけるアーキテクチャ(何かしらプロキシ的なものがある)は予想できます。

インターネット側のキャッシュに注意

ちなみに、テストをしていて気づいたのですが、Device Farm のインターネット側にキャッシュが効くようで、バックエンドサーバーまでアクセスが到達できない場合があるようです。今回は UUID を生成して URL に連結して回避しました。

ViewController.swift
var targetURL = "http://52.68.xxx.xxx/?"
var uuid = NSUUID().UUIDString
var url = NSURL(string: targetURL + uuid)
var request = NSURLRequest(URL: url!)
self.webView?.loadRequest(request)
MainActivity.java
String targetURL = "http://52.68.xxx.xxx/?";
String uuid = UUID.randomUUID().toString();
webView.loadUrl(targetURL + uuid);

免責

個人の意見です。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3