ウェブアプリの保護


ウェブアプリの保護

インターネット上の通信は、傍受や悪意のある改ざんの対象になる可能性があります。Amazon開発者プログラムでは、申請するウェブアプリにユーザー保護対策を講じることを推奨しています。ウェブアプリの安全を確保するには、HTTPSの使用が最適です。

: このページで言及している開発資料やツールは、Amazonではなくサードパーティから提供されています。ツールへのリンクをクリックすると、サードパーティのサイトに移動します。

HTTPSとは

HTTPSは、インターネット上で安全に通信するためのプロトコルです。クライアント/サーバー間のトラフィックをすべて暗号化することで、電話番号や住所などの機微な情報や個人情報の機密性を保護します。また、クライアントが目的のサーバーに確実に接続されるようにします。

HTTPSを使用する理由

HTTPSが構成されていないウェブアプリは、以下の攻撃に対して脆弱になります。

中間者攻撃

エンドユーザーとウェブアプリの間に入り込み、ウェブアプリのふりをしてコンテンツを提供します。この攻撃に対する防御策としては、HTTPSを使用してクライアント/サーバー間の通信の暗号化を強化すると同時に、クライアント側で認証を要求する方法が一般的です。

スニッフィングと傍受

ネットワークのトラフィックを傍受したり記録に取ることで、パスワードやユーザーIDなどの個人情報を盗み取ります。安全なHTTPS通信を使用して情報を暗号化することで、これらの手法による個人情報の漏洩を防ぐことができます。

Amazonウェブアプリのセキュリティ

 AmazonではすべてのアプリでSSLを使用することを推奨していますが、アプリ内課金(IAP)を使用したり認証を要求するウェブページでは、さらにSSL経由でホストすることを必須としています。

パーミッションのセキュリティ要件

Amazonでは、アプリ内の不正なトランザクションを防止するために、Amazonアプリ内課金(IAP)APIを使用するページの安全性を確保することを要求しています。アプリの安全性を確保するため、IAPトランザクションをトリガーするページと関連するすべてのリソースが、SSL/HTTPSを使用して提供されるようにしてください。これにより、アプリがAmazon IAP APIと通信する際に受ける可能性のある中間者攻撃を防止します。

リンクされたリソース

ユーザーパーミッションを使用するためSSL経由でアプリのページをホストする必要がある場合は、リンクされたリソースもすべてSSL経由でホストすることをお勧めします。

アプリ内課金(IAP)を使用するアプリを申請する前に、IAPトランザクションをトリガーするページで使用されるサードパーティのコンポーネントの安全性も確保されていることを確認してください。

広告ネットワークなどの一般的なコンポーネントをチェックします。広告ネットワークは安全性が確保されていないiframeを作成する可能性があり、これにより例外がスローされてAmazon IAP 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を使用するための単純なウェブアプリをデプロイ・構成する

既存のワイルドカード証明書を使用することで、HTTPSはAmazon S3で簡単に構成できます。以下の手順に従います。

  • 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証明書をインストールする。