ウェブアプリを保護する方法
インターネット上の通信は、傍受や悪意のある改ざんの対象になる可能性があります。Amazonアプリストアでは、申請するウェブアプリを保護するための対策を講じることをお勧めします。ウェブアプリの安全を確保するには、HTTPSの使用が最適です。
注: このページで言及している開発資料やツールは、Amazonではなく、サードパーティによって提供されています。ツールへのリンクをクリックすると、サードパーティのサイトに移動します。
HTTPSとは
HTTPはインターネット上で安全に通信するためのプロトコルです。クライアント/サーバー間のトラフィックをすべて暗号化することで、電話番号や住所などの細心の注意を要する情報や個人情報の機密性を守ります。また、クライアントが目的のサーバーに確実に接続されるようにします。
HTTPSを使用する理由
HTTPSが構成されていないウェブアプリは、以下の攻撃に対して脆弱になります。
中間者攻撃
エンドユーザーとウェブアプリの間に入り込み、ウェブアプリと偽ってコンテンツを提供します。HTTPSを使用してクライアント/サーバー間の通信の暗号化を強化し、クライアント側で認証を要求する防御策が一般的です。
スニッフィングと傍受
ネットワークのトラフィックを傍受または記録に取ることで、パスワードやユーザーIDなどの個人情報を盗み取ります。安全なHTTPS通信を使用して情報を暗号化することで、これらの手法による個人情報の漏洩を防ぐことができます。
Amazonウェブアプリのセキュリティ
AmazonではすべてのアプリでSSLを使用することを推奨していますが、アプリ内課金を使用または認証を要求するウェブページでは、SSL経由でホストすることを必須としています。
パーミッションのセキュリティ要件
Amazonでは、アプリ内の不正なトランザクションを防止するために、Amazonアプリ内課金(IAP)APIを使用するページの安全性を確保することを要求しています。アプリの安全性を確保するため、IAPトランザクションをトリガーするページと関連するすべてのリソースが、SSL/HTTPSを使用して提供されるようにしてください。これにより、アプリがAmazonアプリ内課金(IAP)APIと通信する際に受ける可能性のある中間者攻撃を防止します。
リンクされたリソース
ユーザーパーミッションを使用するためSSL経由でアプリのページをホストする必要がある場合は、リンクされたリソースもすべてSSL経由でホストすることをお勧めします。
アプリ内課金を使用するアプリを申請する前に、IAPトランザクションをトリガーするページで使用されるサードパーティのコンポーネントの安全性も確保されていることを確認してください。
広告ネットワークなどの一般的なコンポーネントをチェックします。広告ネットワークは安全性が確保されていないiframeを作成する可能性があり、これにより例外がスローされてAmazonアプリ内課金APIが失敗する原因となります。ソーシャルメディアのコントロールも意図せずに安全でないコンテンツを提供する可能性があり、この場合も同様にAmazonアプリ内課金(IAP)APIへのアクセスが制限されます。
アプリ内課金のSSLエラーに対する例外処理
前述のセキュリティ要件を満たしていないページによってIAPの呼び出しがトリガーされると、Amazonフレームワークによってグローバルな例外がスローされます。この例外は、window.onerrorメソッドにハンドラーを指定することでキャッチできます。
window.onerror = function(errorMessage, fileName, lineNumber)
{
alert('Error: ' + errorMessage);
}
また、このエラーは「adb logcat」でも確認できます。
E WebConsole-ERROR: Uncaught WebAppBridgeError: Invalid use of IAP, calling page must be fully secure.
この例外については、エンドユーザーにエラーを通知することでアプリで適切に処理してください。これは実質的に致命的なエラーであるため、Amazonアプリストアに申請する前にIAPトランザクションをテストすることが重要です。
HTTPSを実装する方法
HTTPSを実装すると、一般的に機密性とサーバー認証の両方を確保できます。つまり、次のことを実現します。
- クライアントが目的のサーバーと確実に通信できるようになる。
- クライアント/サーバー間の通信が暗号化され、他者に傍受されることがなくなる。
- クライアント/サーバー側の両方でメッセージが転送中に改変されなかったことが保証される。
Amazon S3でのHTTPSを使用する単純なウェブアプリのデプロイと構成
既存のワイルドカード証明書を使用することで、Amazon S3でHTTPSを簡単に設定できます。以下の手順に従います。
- S3コンソールにログインする。
- アプリのログを記録するバケットを作成する。アプリをホストするバケットと同じリージョンに存在する必要があります。このバケットは複数のアプリで共有できます。
- リージョンを選択し、アプリのコードをホストするバケットを作成する。バケット名は、 AWSのバケットの制約に従って、DNSに準拠している必要があります。
- アプリをホストするバケットの作成中にバケットのログ記録を有効にし、対象のバケットとアプリのプレフィックス(省略可能)を指定する。
- アプリをホストするバケットにウェブアプリのファイルをアップロードする。
- バケットの [Properties] タブを選択し、[Static Website Hosting] で [Enable Website Hosting] をクリックしてインデックスドキュメントを指定し、[Save] をクリックする。
- バケットの [Permissions] タブに移動し、アプリが世界中で読み取り可能で、SSL接続によってのみ提供可能であることを設定したバケットポリシーを追加する。
-
サンプルポリシー:
{ "Version": "2008-10-17", "Statement": [ { "Sid": "PublicReadForGetBucketObjects", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::/*", "Condition": { "Bool": { "aws:SecureTransport": true } } } ] }
- インデックスドキュメントオブジェクトをクリックし、オブジェクトの [Properties] タブからURLをコピーする。
- このURLを使用してウェブアプリを提供する。
主なホスティングプロバイダーにおけるHTTPSのセットアップ
HTTPSをセットアップするための汎用の手順
上記以外のプロバイダーを使用する場合、ウェブアプリにHTTPSを設定する一般的なガイドとして以下の手順を使用してください。
- お使いのDNSプロバイダーでカスタムドメインを作成する。
- SSL証明書を生成するために認証局によって使用される証明書署名要求(CSR)を作成する。
- 認証局で署名されたSSL証明書を取得するか、独自の証明書を作成する。
- ウェブサーバーに新しいSSL証明書をインストールする。
- Apache Tomcatの場合: SSL Configuration HOW-TO(英語)
- Microsoft IISの場合: How to Set Up SSL on IIS 7(英語)
- NGINXの場合: Module ngx_http_ssl_module(英語)