GAEでクライアントを制限する方法について

1,785 views
Skip to first unread message

Yamada Kenichi

unread,
Oct 18, 2013, 7:20:20 AM10/18/13
to Google-App-Engine-Japan
みなさん、こんにちは。

今、私が担当しているプロジェクトで、お客様から
「特定のクライアントからしかアクセスできないようにしてほしい」という要望
をもらっています。特定のクライアントは固定IPアドレスだけではないため、IP
アドレスで制限をかけるわけにはいきません。

https://jp.globalsign.com/service/clientcert/pki_lite/
を使ったクライアント制限が次の理由で最有力候補に挙がっています。
・値段が手ごろ
・テスト証明書を無料で発行してくれる

しかしながら、サーバー設定マニュアル
https://jp.globalsign.com/support/clientcert/list.php?cat=server
には、AppEngineの記載がありません。

どなたか、クライアント証明書を用いたAppEngineのアクセス制限の設定方法を
ごぞんじないですか?

また、サーバーへのアクセスはWebアプリだけでなく、AndroidアプリからAPIを
通じてアクセスする要件もあります。

こちらの設定方法も合わせて知りたいです。

要件は
「特定のクライアントからしかアクセスできないようにしてほしい」
なので、クライアント証明書以外の方式でも構いません。

Webからのアクセス、APIアクセス、どちらも「特定のクライアントからしかアク
セスできないようにする」解法をご存知の方はアドバイスをお願いします。

-----------
山田健一

礼敏 吉積

unread,
Nov 7, 2013, 4:37:59 AM11/7/13
to google-app-...@googlegroups.com
吉積と申します。

クライアント証明書をGAEの設定で、というのは無いように思います。
自前で証明書を認証するか、クッキー等を配布して認証する形にするかしか無いのではないかと思います。


2013年10月18日金曜日 20時20分20秒 UTC+9 山田健一:

Yamada Kenichi

unread,
Nov 8, 2013, 11:10:27 PM11/8/13
to google-app-...@googlegroups.com
山田健一です。

>クライアント証明書をGAEの設定で、というのは無いように思います。
ありがとうございます。確かに難しそうですね。

>自前で証明書を認証するか、クッキー等を配布して認証する形にするかしか無いので
>はないかと思います。

自前で証明書を認証するってのは具体的にどうやるんでしょう?
たとえば、クライアント証明書設定済みのブラウザからのリクエストには必ず、
xxxxとかいう文字列が含まれるとかですかね?

吉積礼敏

unread,
Nov 14, 2013, 12:28:02 AM11/14/13
to google-app-engine-japan
クライアント証明書がリクエストの中に入っていると思うので、それを解いて確認することになるので、
相当ハードルが高いと思います。
特定のクライアントと言うことであればクッキーでいいのではないでしょうか?キャッシュ削除で消えてしまいはしますが。

2013年11月9日 13:10 Yamada Kenichi <nonc...@gmail.com>:
> --
> このメールは Google グループのグループ「Google-App-Engine-Japan」の登録者に送られています。
> このグループから退会し、メールの受信を停止するには、google-app-engine...@googlegroups.com にメールを送信します。
> このグループに投稿するには、google-app-...@googlegroups.com にメールを送信してください。
> http://groups.google.com/group/google-app-engine-japan からこのグループにアクセスしてください。
> その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。



--
★★★★★★★★★★★★★★★★★★★★★★★★
※※※ GoogleApps販売・導入サポートをしております ※※※
※※※ ダイブネットもよろしくお願いします!http://www.divenet.jp ※※※

吉積情報株式会社
代表取締役 吉積 礼敏 <ayat...@yoshidumi.co.jp>
携帯:090-1732-1848
住所:〒104-0061 東京都中央区銀座2-14-7 銀座OMビル2F
電話:03-6228-4451
FAX :03-5843-1690
HP :http://www.yoshidumi.com

Yamada Kenichi

unread,
Nov 14, 2013, 8:19:15 AM11/14/13
to google-app-...@googlegroups.com
山田健一です。

いろいろありがとうございます。

>クライアント証明書がリクエストの中に入っていると思うので、それを解いて確認す
>ることになるので、相当ハードルが高いと思います。

暗号化された文字列をサーバーのキーで復号して、名前を確認するイメージです
かね?


>特定のクライアントと言うことであればクッキーでいいのではないでしょうか?キャ
>ッシュ削除で消えてしまいはしますが。

クッキーは偽造可能と言われているので、お客様がどう反応するか難しいところ
です。

また、配布はどうするんでしょう?

kazuki

unread,
Nov 14, 2013, 7:24:01 PM11/14/13
to google-app-...@googlegroups.com
kazukiです。

Google AcountのOpenIDを使って制限するのではダメでしょうか?

制限したいフォルダにadmin権限を与えてGAEの管理コンソールでユーザ管理をする
または
制限したいフォルダにprofile権限を与えてデータベースでユーザ管理する
のどちらかだと思います。

クライアント制限の要件が人の制限であれば上記で実現できるかと思います。

機器の制限であれば、少々強引ですが、DiCEなどのアプリを使って
設定されているIPアドレスを定期的にシステム登録してIPアドレスによる制限という手もあるかもです。

以上


2013年11月14日木曜日 22時19分15秒 UTC+9 山田健一:

吉積礼敏

unread,
Nov 14, 2013, 9:31:05 PM11/14/13
to google-app-engine-japan
吉積です

すみません。証明書は私もそれ程明るく無いので、ちょっと詳しくは分かりません。
が、それ程単純では無い、というくらいの認識です。

クッキーが偽造可能ってのはどういう意味でしょうか?
普通に暗号化すれば偽造ってのは難しそうに思うのですが。。。。
複製出来るというのはありますけど。

配布は、GoogleAppsのモバイル管理と同様に申請して、承認するという形で、
承認されたらDL出来るという形が良いのではないかと思います。


よろしくお願い致します。

2013年11月15日 9:24 kazuki <tha...@pointa.jp>:

Yamada Kenichi

unread,
Nov 15, 2013, 8:18:55 AM11/15/13
to google-app-...@googlegroups.com
山田健一です。

提案ありがとうございます。

ただし、今回の案件ではお客様の先に、さらにお客様がいるため、OpenID を前
提にするのが難しい状況なのです。

また、IPアドレスも固定IPとは限らないため、同様に採用が難しい状況です。

GAE はいいところたくさんあるのですが、アクセス制限を容易に(幅広く)実現
しようとすると難しいですね。

もちろん、kazukiさん提案の OpenID やGoogleアカウントによるアクセス制限な
ら容易なんでしょうけど。。。
>--
>このメールは Google グループのグループ「Google-App-Engine-Japan」の登録者に送
>られています。
>このグループから退会し、メールの受信を停止するには、google-app-engine-japan+
>unsub...@googlegroups.com にメールを送信します。
>このグループに投稿するには、google-app-...@googlegroups.com にメール
>を送信してください。
>[a:http://groups.google.com/group/google-app-engine-japan]http://groups.
>google.com/group/google-app-engine-japan からこのグループにアクセスしてくださ
>い。
>その他のオプションについては、[a:https://groups.google.com/groups/opt_out]
>https://groups.google.com/groups/opt_out にアクセスしてください。

Yamada Kenichi

unread,
Nov 15, 2013, 8:25:36 AM11/15/13
to google-app-...@googlegroups.com
山田健一です。

いろいろありがとうございます。

>クッキーが偽造可能ってのはどういう意味でしょうか?
>普通に暗号化すれば偽造ってのは難しそうに思うのですが。。。。
>複製出来るというのはありますけど。

複製できる→偽物が容易に作れる→偽造できる
という連想で、「クッキーが偽造可能」と思いこんでいたかもしれません。

>
>配布は、GoogleAppsのモバイル管理と同様に申請して、承認するという形で、
>承認されたらDL出来るという形が良いのではないかと思います。

このあたりもう少し詳しく教えていただけるとうれしいです。

「この辺りを見ろ」でも結構です。

問題はクッキーが削除されてしまった時の運用をどうデザインするかでしょうね。

よろしくお願いします。

najeira

unread,
Nov 15, 2013, 9:23:47 PM11/15/13
to google-app-...@googlegroups.com
najeiraです。

確かにクライアント証明書は偽造できないですし、
認証した人がアクセスしてきたことを確認することはできますね。

AppEngineの場合はサーバ設定ではなく、
自分のプログラム中で証明書の検証をすることになると思います。
JavaでもPythonでも、それを処理するためのライブラリは見つかると思います。

実際に作ったことはないので、これ以上の詳しいことは分かりません。


さて、クッキーの話が出ていますが、クッキーはデータをやりとりする手段ですので、
偽装できるかどうかはクッキーの中に何を入れるかによって変わってきます。
使い方によっては、安全に使うことができるものです。

世の中の多くのサービスはメールアドレスとパスワードで認証して、
クッキーを使ってセッションを維持しています。
そしてSSLによって安全性が補強されています。

例えばクッキーのなかに "user=najeira" みたいなデータをいれて
ユーザーを識別するように作ってしまったら、偽造可能です。
これは良くないパターンですが、
クッキー内には推測不可能なセッションIDをいれて、
サーバ側でセッションIDと紐付けてログイン情報を管理するのが
一般的かと思います。

また、特定のクライアントに限定するには、
登録させたい人にメールアドレスを教えてもらって、
そのメールアドレスを管理者側で登録して、
メールアドレスとパスワードでログインしてもらう、
という方法でも実現できるかと思います。




2013年10月18日金曜日 20時20分20秒 UTC+9 山田健一:

Yamada Kenichi

unread,
Nov 16, 2013, 1:08:50 AM11/16/13
to google-app-...@googlegroups.com
山田健一です。

>AppEngineの場合はサーバ設定ではなく、
>自分のプログラム中で証明書の検証をすることになると思います。
>JavaでもPythonでも、それを処理するためのライブラリは見つかると思います。

ライブラリまで思いつきませんでした。
ただ、探し方が悪いのか、見つけることができませんでした。

日本語で検索したらダメですかね?

うーん。難しい。
>[a:https://jp.globalsign.com/service/clientcert/pki_lite/]> https://jp.
>globalsign.com/service/clientcert/pki_lite/
>> を使ったクライアント制限が次の理由で最有力候補に挙がっています。
>> ・値段が手ごろ
>> ・テスト証明書を無料で発行してくれる
>>
>> しかしながら、サーバー設定マニュアル
>[a:https://jp.globalsign.com/support/clientcert/list.php?cat=server]> https:/
>/jp.globalsign.com/support/clientcert/list.php?cat=server
>> には、AppEngineの記載がありません。
>>
>> どなたか、クライアント証明書を用いたAppEngineのアクセス制限の設定方法を
>> ごぞんじないですか?
>>
>> また、サーバーへのアクセスはWebアプリだけでなく、AndroidアプリからAPIを
>> 通じてアクセスする要件もあります。
>>
>> こちらの設定方法も合わせて知りたいです。
>>
>> 要件は
>> 「特定のクライアントからしかアクセスできないようにしてほしい」
>> なので、クライアント証明書以外の方式でも構いません。
>>
>> Webからのアクセス、APIアクセス、どちらも「特定のクライアントからしかアク
>> セスできないようにする」解法をご存知の方はアドバイスをお願いします。
>>
>> -----------
>> 山田健一
>>
>
>

Shinichi Ogawa

unread,
Nov 16, 2013, 1:43:41 AM11/16/13
to google-app-...@googlegroups.com
山田さん

opensocial:oauth:20090825 あたりのライブラリを使って、
下記のような実装(サンプル)になるのかな?と思います。
ですが、GAEとはあまり関係がない話ですので、ここでする話では無いかも。


import net.oauth.*;
import net.oauth.signature.RSA_SHA1;

@SuppressWarnings("deprecation")
static void verifyRequest(HttpServletRequest request) throws
IOException, OAuthException, URISyntaxException {
OAuthServiceProvider provider = new OAuthServiceProvider(null, null, null);
OAuthConsumer consumer = new OAuthConsumer(null, "YOURDOMAIN.com",
null, provider);
consumer.setProperty(RSA_SHA1.X509_CERTIFICATE, CERTIFICATE);
OAuthMessage message = new OAuthMessage(
request.getMethod(), getRequestUrl(request), getRequestParameters(request));
message.validateMessage(new OAuthAccessor(consumer), new
SimpleOAuthValidator());
logger.fine("REQUEST STATUS::OK");
}

final static String CERTIFICATE = "-----BEGIN CERTIFICATE-----\n"
...
...
+ "-----END CERTIFICATE-----";



2013/11/16 Yamada Kenichi <nonc...@gmail.com>:

Yamada Kenichi

unread,
Nov 16, 2013, 5:04:49 AM11/16/13
to google-app-...@googlegroups.com
山田健一です。


確かにGAEでは簡単にできないと言うことから路線がずれていってしまいました
ね。

いただいたサンプルは検討しています。

ありがとうございました。
>> http://groups.google.com/group/google-app-engine-japan からこのグループにア
>> クセスしてください。
>> その他のオプションについては、https://groups.google.com/groups/opt_out にア
>> クセスしてください。
>
>--
>このメールは Google グループのグループ「Google-App-Engine-Japan」の登録者に送
>られています。
>このグループから退会し、メールの受信を停止するには、google-app-engine-japan+
>unsub...@googlegroups.com にメールを送信します。
>このグループに投稿するには、google-app-...@googlegroups.com にメール
>を送信してください。
>http://groups.google.com/group/google-app-engine-japan からこのグループにアク
>セスしてください。
>その他のオプションについては、https://groups.google.com/groups/opt_out にアク
>セスしてください。

吉積礼敏

unread,
Nov 18, 2013, 5:55:50 AM11/18/13
to google-app-engine-japan
吉積です。

一度1,2年前に、クライアント証明書のライブラリ調査はそれなりにやったのですが、
結果的にはホワイトリストに入って無いものが多く、諦めて外で実現した、という経緯があります。。。
無駄足になる可能性が高いと思います。

>配布は、GoogleAppsのモバイル管理と同様に申請して、承認するという形で、
>承認されたらDL出来るという形が良いのではないかと思います。
>
>このあたりもう少し詳しく教えていただけるとうれしいです。

弊社のアプリとかで実施する場合は概ね以下のような流れです。
少しややこしいですが。

1.端末申請用の画面を作成して、端末から申請。
2.この時点で本人(ログイン認証は別途実施)確認と端末の識別(UAとかIPとか)して、
その情報を元に管理者側で承認する。
3.DLのURLか何かを発行して、端末から当該URLからアクセス用のクッキーをダウンロードする
 →その際上記2とUA等が異なる場合は不可(勿論別途認証も掛ける)

という形であれば、
本人がよっぽど悪意を持って技術的に高度なことをやらない限りは難しい
 →現実的にそこまでするメリットが乏しいのでは無いか?
ということは実現出来るかと思います。
(端末を確認・限定する、ということをどのような意味として実現するか、にもよると思いますが。。。実物を見ないとダメとか)

パスワード認証自体を外部にオープンにしたくない(端末認証済のものしか回答しない)、であれば
ワンタイムやBasicパスワードを別途発行するなりを事前にするという事で対応出来るかもしれません。

後はクライアント証明書で無いので、クッキーを誤って削除するというのはそれなりに発生します。

よろしくお願い致します。



2013年11月16日 19:04 Yamada Kenichi <nonc...@gmail.com>:
> このメールは Google グループのグループ「Google-App-Engine-Japan」の登録者に送られています。
> このグループから退会し、メールの受信を停止するには、google-app-engine...@googlegroups.com にメールを送信します。
> このグループに投稿するには、google-app-...@googlegroups.com にメールを送信してください。
> http://groups.google.com/group/google-app-engine-japan からこのグループにアクセスしてください。
> その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。



吉積礼敏

unread,
Nov 18, 2013, 5:58:20 AM11/18/13
to google-app-engine-japan
小川さん

あれ?これってGAE上で証明書の検証出来るライブラリがあるんでしょうか?
以前難しそうって結論になった筈なんですが。。。発行が難しかったのかな。。。。

2013年11月16日 15:43 Shinichi Ogawa <shin1...@gmail.com>:

Shinichi Ogawa

unread,
Nov 18, 2013, 12:05:08 PM11/18/13
to google-app-...@googlegroups.com
吉積さん

先のサンプルコードは、
クライアント側で証明書を使ってOAuth署名をしたリクエストを送信した場合の、
サーバ側の妥当性のチェックを行う処理です。
Open Socialのコンテナ経由のリクエストをサーバ側で検証する際によく使うんじゃないでしょうか。
# その場合はGAE上のアプリから見たクライアント=コンテナ、となりますが。




2013/11/18 吉積礼敏 <ayat...@yoshidumi.com>:

Yamada Kenichi

unread,
Nov 18, 2013, 6:32:37 PM11/18/13
to google-app-...@googlegroups.com
山田健一です。

いろいろありがとうございます。
参考にして考えてみます。

人間系や書類なども視野に入れてみます。

>後はクライアント証明書で無いので、クッキーを誤って削除するというのはそれなり
>に発生します。
このときは再ダウンロードさせればよいですが、人間系を入れると休日に復旧で
きないとか出てくるので、難しいですね。
>>>> http://groups.google.com/group/google-app-engine-japan からこのグループに
>>>> ア
>>>> クセスしてください。
>>>> その他のオプションについては、https://groups.google.com/groups/opt_out
>>>> ア
>>>> クセスしてください。
>>>
>>>--
>>>このメールは Google グループのグループ「Google-App-Engine-Japan」の登録者に
>>>送
>>>られています。
>>>このグループから退会し、メールの受信を停止するには、google-app-engine-japan
>>>+
>>>unsub...@googlegroups.com にメールを送信します。
>>>このグループに投稿するには、google-app-...@googlegroups.com にメー
>>>ル
>>>を送信してください。
>>>http://groups.google.com/group/google-app-engine-japan からこのグループにア
>>>ク
>>>セスしてください。
>>>その他のオプションについては、https://groups.google.com/groups/opt_out にア
>>>ク
>>>セスしてください。
>>
>> --
>> このメールは Google グループのグループ「Google-App-Engine-Japan」の登録者に
>> 送られています。
>> このグループから退会し、メールの受信を停止するには、google-app-engine-japan
>> +unsub...@googlegroups.com にメールを送信します。
>> このグループに投稿するには、google-app-...@googlegroups.com にメー
>> ルを送信してください。
>> http://groups.google.com/group/google-app-engine-japan からこのグループにア
>> クセスしてください。
>> その他のオプションについては、https://groups.google.com/groups/opt_out にア
>> クセスしてください。
>
>
>
>--
>★★★★★★★★★★★★★★★★★★★★★★★★
>※※※ GoogleApps販売・導入サポートをしております ※※※
>※※※ ダイブネットもよろしくお願いします!http://www.divenet.jp ※※※
>
>吉積情報株式会社
>代表取締役 吉積 礼敏 <ayat...@yoshidumi.co.jp>
>携帯:090-1732-1848
>住所:〒104-0061 東京都中央区銀座2-14-7 銀座OMビル2F
>電話:03-6228-4451
>FAX :03-5843-1690
>HP :http://www.yoshidumi.com
>

Yamada Kenichi

unread,
Jun 25, 2014, 7:33:38 PM6/25/14
to google-app-...@googlegroups.com
山田健一です。

プロジェクトに忙殺されて、お礼が遅れて申し訳ありません。

端末制限はクッキーを使用することになり、元気に動いています。

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

>吉積です。
>
>一度1,2年前に、クライアント証明書のライブラリ調査はそれなりにやったのですが、
>結果的にはホワイトリストに入って無いものが多く、諦めて外で実現した、という経
>緯があります。。。
>無駄足になる可能性が高いと思います。
>
>>配布は、GoogleAppsのモバイル管理と同様に申請して、承認するという形で、
>>承認されたらDL出来るという形が良いのではないかと思います。
>>
>>このあたりもう少し詳しく教えていただけるとうれしいです。
>
>弊社のアプリとかで実施する場合は概ね以下のような流れです。
>少しややこしいですが。
>
>1.端末申請用の画面を作成して、端末から申請。
>2.この時点で本人(ログイン認証は別途実施)確認と端末の識別(UAとかIPとか)し
>て、
>その情報を元に管理者側で承認する。
>3.DLのURLか何かを発行して、端末から当該URLからアクセス用のクッキーをダウン
>ロードする
> →その際上記2とUA等が異なる場合は不可(勿論別途認証も掛ける)
>
>という形であれば、
>本人がよっぽど悪意を持って技術的に高度なことをやらない限りは難しい
> →現実的にそこまでするメリットが乏しいのでは無いか?
>ということは実現出来るかと思います。
>(端末を確認・限定する、ということをどのような意味として実現するか、にもよる
>と思いますが。。。実物を見ないとダメとか)
>
>パスワード認証自体を外部にオープンにしたくない(端末認証済のものしか回答しな
>い)、であれば
>ワンタイムやBasicパスワードを別途発行するなりを事前にするという事で対応出来る
>かもしれません。
>
>後はクライアント証明書で無いので、クッキーを誤って削除するというのはそれなり
>に発生します。
>
>>>>>このメールは Google グループのグループ「Google-App-Engine-Japan」の登録者
>>>>>に
>>>>>送
>>>>>られています。
>>>>>このグループから退会し、メールの受信を停止するには、google-app-engine-
>>>>>japan
>>>>>+
>>>>>unsub...@googlegroups.com にメールを送信します。
>>>>>このグループに投稿するには、google-app-...@googlegroups.com
>>>>>メー
>>>>>ル
>>>>>を送信してください。
>>>>>[a:http://groups.google.com/group/google-app-engine-japan]http://groups.
>>>>>google.com/group/google-app-engine-japan からこのグループにアクセスしてく
>>>>>だ
>>>>>さ
>>>>>い。
>>>>>その他のオプションについては、[a:https://groups.google.com/groups/
>>>>>opt_out]
>>>>>https://groups.google.com/groups/opt_out にアクセスしてください。
>>>>
>>>> --
>>>> このメールは Google グループのグループ「Google-App-Engine-Japan」の登録者
>>>> に
>>>> 送られています。
>>>> このグループから退会し、メールの受信を停止するには、google-app-engine-
>>>> japan
>>>> +unsub...@googlegroups.com にメールを送信します。
>>>> このグループに投稿するには、google-app-...@googlegroups.com
>>>> メー
>>>> ルを送信してください。
>>>> http://groups.google.com/group/google-app-engine-japan からこのグループに
>>>> ア
>>>> クセスしてください。
>>>> その他のオプションについては、https://groups.google.com/groups/opt_out
>>>> ア
>>>> クセスしてください。
>>>
>>>--
>>>このメールは Google グループのグループ「Google-App-Engine-Japan」の登録者に
>>>送
>>>られています。
>>>このグループから退会し、メールの受信を停止するには、google-app-engine-japan
>>>+
>>>unsub...@googlegroups.com にメールを送信します。
>>>このグループに投稿するには、google-app-...@googlegroups.com にメー
>>>ル
>>>を送信してください。
>>>http://groups.google.com/group/google-app-engine-japan からこのグループにア
>>>ク
>>>セスしてください。
>>>その他のオプションについては、https://groups.google.com/groups/opt_out にア
>>>ク
>>>セスしてください。
>>
>> --
>> このメールは Google グループのグループ「Google-App-Engine-Japan」の登録者に
>> 送られています。
>> このグループから退会し、メールの受信を停止するには、google-app-engine-japan
>> +unsub...@googlegroups.com にメールを送信します。
>> このグループに投稿するには、google-app-...@googlegroups.com にメー
>> ルを送信してください。
>> http://groups.google.com/group/google-app-engine-japan からこのグループにア
>> クセスしてください。
>> その他のオプションについては、https://groups.google.com/groups/opt_out にア
>> クセスしてください。
>
>
>
>--
>★★★★★★★★★★★★★★★★★★★★★★★★
>※※※ GoogleApps販売・導入サポートをしております ※※※
>※※※ ダイブネットもよろしくお願いします!http://www.divenet.jp ※※※
>
>吉積情報株式会社
>代表取締役 吉積 礼敏 <ayat...@yoshidumi.co.jp>
>携帯:090-1732-1848
>住所:〒104-0061 東京都中央区銀座2-14-7 銀座OMビル2F
>電話:03-6228-4451
>FAX :03-5843-1690
>HP :http://www.yoshidumi.com
>
Reply all
Reply to author
Forward
0 new messages