アイデンティティとアクセスの管理
GAMESEC01: プレイヤーのアイデンティティとアクセスの管理はどのようにして行いますか? |
---|
ゲームの開発に当たっては、ゲームや関連サービスへのアクセス権をプレイヤーに付与する方法を決定する必要があります。この決定は、プレイヤー獲得と収益化の戦略、プレイヤーエクスペリエンス、その他の要因 (ゲームパブリッシングパートナーから提供されている既存の機能など) の影響を受けます。例えば、ゲームでは、購入を要求し、ユーザープロファイルを作成して支払い方法を各自のアカウントに関連付けることをプレイヤーに義務付ける場合があります。
または、プレイヤーをゲームに導入しやすくするために、ユーザーアカウントを作成しなくてもゲームプレイを開始できるようにして、プレイヤーが初めてゲームを試す可能性を高めようとする場合があります。通常、ゲームには、プレイヤーのアイデンティティとアクセスの管理に関して、さまざまなアプローチから 1 つまたは複数を組み合わせて実装します。
未認証または匿名のアクセス: このアクセスレベルは、プレイヤーが新しいユーザーアカウントを作成したり、ソーシャルネットワークやゲームプラットフォームで各自の ID を関連付けたりする必要がないゲームに利用できます。これは、プレイヤーがゲームを始める最も簡単で迅速な方法であり、特にゲームデベロッパーがモバイルゲームへのプレイヤーの初回の導入を容易にしたい場合に役立ちます。このアクセスシナリオでは、インストールしたゲームの使用状況を確認する場合、ゲームクライアントのプログラミングを通じて、デバイスでのすべてのゲームセッションをまたいでプレイヤーを識別するための一意の識別子を生成し、これをプレイヤーのデバイスに保存します。これにより、経時的な使用状況に関する分析レポートを作成できるようになります。後日、プレイヤーがアカウントを作成することを選択した場合は、その新しいユーザーアカウントを、以前に生成した一意の識別子と関連付けて、統計やゲーム実績などのプレイヤーの使用履歴を新しいプレイヤー ID とリンクさせることができます。プレイヤーが最終的にアカウントの作成やリンクを行わなかった場合、プレイヤーがゲームとやり取りするために使用するデバイスは一意に識別できますが、プレイヤーに関する回復可能な情報は収集および保存されません。したがって、プレイヤーのデバイスが破損すると、そのデバイスに関連付けられていた以前の保存データも失われ、回復できない可能性があります。
ユーザーネームとパスワードによる認証: ゲームでは、ゲームのバックエンド内に保存しているユーザーネームとパスワードを使用して、プレイヤーが各自のユーザーアカウントを作成できる場合があります。この一般的な理由としては、ゲームデベロッパーが協働しているゲームパブリッシャーが既存のプレイヤーアカウントシステムを既に持っていて、これをデベロッパーが統合している場合があります。または、デベロッパーが独自のゲームを発行してプレイヤーエクスペリエンスを簡素化するために、発行するすべてのゲームにアクセスできる単一のユーザーアカウントを作成することをプレイヤーに許可する場合があります。
サードパーティーのソーシャルネットワークやゲームプラットフォームとリンクした認証とアカウント: 通常、オンラインゲームやソーシャル機能を備えたゲームでは、プレイヤーエクスペリエンスを簡素化する方法として、サードパーティーのアイデンティティプロバイダーフェデレーションを提供します。認証のためにユーザーネームとパスワードの組み合わせを作成するようにプレイヤーに要求する代わりに、ID フェデレーションを使用して、ソーシャルネットワークやゲームプラットフォームでサードパーティーアカウントを介して認証することをプレイヤーに許可できます。このログインプロセスにより、サインインと登録が簡単になり、アカウント作成が強制されない便利な方法を通じて、ゲームへのスムーズなアクセスをプレイヤーに提供できます。ゲームデベロッパーは、フェデレーションログインによってプレイヤー検証ワークフローを合理化できます。また、プレイヤーデータをより信頼性の高い方法で管理してパーソナライゼーションを実現できます。プレイヤーがサードパーティーのアイデンティティプロバイダーに既に提供している可能性があるデータを再度プレイヤーに要求する必要はありません。さらに、これらのプラットフォームは、プレイヤーをその友人とリンクするなど、追加のソーシャル機能との統合も提供します。
ゲームにセキュアなアクセスコントロールを組み込むには、以下のベストプラクティスが役立ちます。
GAMESEC_BP01: ゲームバックエンドサービスへのリクエストを認証します。
ゲームバックエンドサービスに送信したリクエストを認証することで、ゲームバックエンドへの望ましくないリクエストを排除する必要があります。
プレイヤーのログイン用に認証サービスを提供し、プレイヤーを正常に認証したら、JSON Web Token (JWT) などの存続期間が短い安全なトークンをゲームクライアントに返す必要があります。これらのトークンには、プレイヤー属性やその他の関連メタデータを含むクレームアサーションを含めることができます。これらのアサーションは、ゲームクライアントからゲームバックエンドに送信される後続のリクエストで使用し、リクエストを認証したり、認証済みのプレイヤーのコンテキストでリクエストを承認したりできます。独自のプレイヤー認証システムを設計して構築し、必要な改善とメンテナンスを継続的に行うか、 Amazon Cognito
ゲームが匿名アクセスをサポートしていて、プレイヤーを認証できない場合は、ゲームバックエンドと統合する際に、クライアント認証アプローチを使用して安全なエクスペリエンスを提供します。ゲームクライアントが AWS サービスを使用している場合、これらのサービスへのリクエストには認証情報を使用して署名する必要があります。未認証のユーザーの認証情報をゲームクライアントに提供するには、AWS SDK を使用して Amazon Cognito ID プール から存続期間が短い認証情報を取得し、これを使用して AWS のサービスへのリクエストに署名できます。これらの認証情報はゲームクライアントから更新できます。ゲームクライアントから AWS SDK と直接統合するだけでなく、カスタム認可をサポートする Amazon API Gateway などのサービスを使用して、独自のゲームバックエンドを構築することもできます。独自のゲームバックエンドサービスを設計することで、カスタムのサーバー側ロジックを使用して、すべてのリクエストを権限を持って制御できます。Amazon GameLift Servers を使用してホストしているゲームのバックエンドサービスを構築する方法の詳細については、「 Design your backend service (バックエンドサービスを設計する)」を参照してください。
GAMESEC_BP02: マルチプレイヤーゲームに参加するためのプレイヤーリクエストは、ゲームバックエンドサービスで検証する必要があります。
通常、マルチプレイヤーゲームでは、プレイヤーが利用可能なセッションのリストから直接オプションを選択してゲームセッションに参加します。または、リクエストを送信してマッチを見つけてもらいます。この場合、該当するゲームセッションを特定して接続情報 (通常は IP アドレスとポート) をプレイヤーのゲームクライアントに提供することは、ゲームデベロッパーの責任となります。実装は、開発するゲームのジャンルによって異なる場合がありますが、いずれにしても、プレイヤーのゲーム参加リクエストをサーバー側で検証するのがセキュリティのベストプラクティスです。
例えば、セッションベースのマルチプレイヤーゲームでは、プレイヤーからのゲームセッションへの参加リクエストは、サーバーへの接続を承認する前に、ゲームバックエンドマッチメイキングサービスを使用してゲームサーバーソフトウェアで検証する必要があります。プレイヤーがゲームセッションへの参加をリクエストすると、ゲームサーバーは、プレイヤーセッション ID やゲームバックエンドのマッチメイキングサービスからゲームクライアントに以前に提供されたサーバー生成チケットなど、リクエストの一意識別子を確認する必要があります。ゲームサーバーへの接続を開始すると、サーバー側のソフトウェアは、この情報を使用してプレイヤーの接続リクエストが有効であることをマッチメイキングサービスと検証し、プレイヤーが参加するスポットが別のプレイヤーのゲームセッションで予約済みでないことを確認します。Amazon GameLift Servers を使用してホストするゲームについては、 Amazon GameLift Servers のドキュメント を参照し、このタイプのサーバー側検証をどのように実装できるかの例をご覧ください。
GAMESEC_BP03: パスワードを必要とするプレイヤーユーザーアカウントでは、強力なセキュリティポリシーを適用する必要があります。
プレイヤーがユーザーアカウントと一緒にパスワードを作成できるゲームの場合は、パスワードが強力なポリシーに準拠することを義務付ける必要があります。例えば、Amazon Cognito ユーザープールでは、ユーザーアカウントの パスワード要件の定義 をサポートしています。
GAMESEC_BP04: プレイヤーが各自のアカウントに多要素認証 (MFA) を設定するためのオプションを提供します。
プレイヤーアカウントは、特にゲーム内の通貨や購入をサポートするゲームで、悪意のある攻撃者に格好のアセットとなります。ゲームデベロッパーのプレイヤーサポートチームに対するプレイヤーアカウントのハッキングやソーシャルエンジニアリングが増えているため、プレイヤーのユーザーアカウントに多要素認証 (MFA) を設定するオプションを提供して、プレイヤーのアカウントのセキュリティを強化することが重要です。
プレイヤーが MFA を使用して各自のアカウントにアクセスすると、E メール、電話番号、または専用の多要素認証モバイルアプリケーションに一時コードが送信されます。正常に認証するには、この一時コードを限られた時間内に入力してログインする必要があります。MFA は、新しいジオロケーションから認証しようとしているアカウント、悪質な行為の可能性があるとしてプレイヤーサポートがフラグを立てたアカウント、さらにはゲームに長期間ログインしていないアカウントに対する保護にも使用できます。例えば、Amazon Cognito ユーザープールでは、ユーザーディレクトリでの 多要素認証の設定 をサポートしています。
GAMESEC02: ゲームコンテンツへの不正アクセスはどのようにして防ぎますか? |
---|
現代のゲームには、ダウンロード可能コンテンツ (DLC) など、大量のコンテンツが含まれています。DLC は、プレイヤーのエンゲージメントとゲームの収益化の重要な一面です。プレイヤーは、新しいキャラクター、レベル、チャレンジが次々と提供されることを期待しており、ゲームデベロッパーはプレイヤーを保持するために、新鮮なコンテンツに対する途切れることのない需要に常に対応する必要があります。コンテンツの多様性とサイズは、ゲームの種類や、ゲームをプレイするデバイスが PC、コンソール、モバイルのいずれであるかによっても大きく異なります。ゲームのコンテンツを不正アクセスから確実に保護することが重要です。
GAMESEC_BP05: ダウンロード可能コンテンツへのアクセスは、承認済みのクライアントとユーザーに限定します。
ゲームコンテンツへのアクセスは、承認済みのアプリケーションとクライアントに限定して許可します。
ダウンロード可能なゲームコンテンツを保存するための費用対効果の高いスケーラブルなオリジンとして Amazon S3 を使用し、パフォーマンスの高いグローバルなコンテンツ配信をプレイヤーに提供するために Amazon CloudFront を使用することを検討します。どちらのサービスにも、保存しているデータへのアクセスを制限するためのメカニズムが組み込まれています。
S3 のコンテンツへのアクセスを許可する必要がある場合、考慮すべきベストプラクティスがいくつかあります。デフォルトでは、S3 バケットを作成した AWS アカウントだけが、バケット内に保存されているオブジェクトにアクセスできます。内部アプリケーションへのアクセスを許可し、Amazon S3 バケットに保存されているコンテンツを管理するには、 Identity and Access Management (IAM) を使用してポリシーを作成し、適切なアクセスを提供します。IAM ロール は、フェデレーティッドユーザー、システム、アプリケーション (Amazon EC2、Lambda などのサービスでホスト)、コンテナベースのアプリケーション (Amazon EKS や Amazon ECS でホスト) に関連付けることができます。例えば、AWS SDK や AWS CLI を使用して、S3 バケット内のゲームコンテンツアセットを公開および管理できます。このユースケースをサポートするために、S3 バケットに対してゲームコンテンツを読み書きするための適切なアクセス権を持つ IAM ロールを作成し、このロールをソフトウェアとスクリプトをホストする EC2 インスタンスに関連付けることができます。
リソースベースのポリシーは、バケットや特定のオブジェクトに対しても定義できます。 S3 バケットポリシー は、S3 バケットに関連付けて、バケットおよびバケット内のオブジェクトへのアクセスを制限したり、他のアカウントからの S3 リソースへのアクセスを許可したりするために使用できます。例えば、複数のチームや別々の開発スタジオが同じゲームコンテンツに取り組んでいて、S3 で一元的にホストしているコンテンツに対する同じアクセスが必要な場合、S3 バケットポリシーを使用して S3 リソースへのクロスアカウントアクセスの許可を定義できます。共有データへのデータアクセスの管理を簡素化するには、 S3 Access Points を使用することを検討してください。各アプリケーションや一連のアプリケーションに固有の名前と許可を持つアクセスポイントを作成することで、簡単に管理できます。Amazon S3 のドキュメントは、 Amazon S3 でのアクセスコントロールに関する追加のベストプラクティスを記載しています。
コンテンツへの短期アクセスを許可する一時的な URL を生成することをお勧めします。Amazon S3 は、 事前署名付き URL の生成をサポートしています。これにより、オブジェクト所有者は他のユーザーとオブジェクトを共有するために、独自のセキュリティ認証情報を使用して事前署名付き URL をバックエンド内に生成し、オブジェクトをダウンロードするための期限付きの許可を付与できます。これにより、アクセスを許可されたエンドユーザーまたはアプリケーションは、アカウントや IAM の許可を持つ必要がなくなり、代わりに事前署名付き URL を使用してコンテンツにアクセスできます。このベストプラクティスは、ダウンロード可能なコンテンツへのアクセスを該当する承認済みプレイヤーに許可したり、期間限定のゲームコンテンツへの一時的なアクセスを付与したりするなど、さまざまなゲームユースケースで一般的に使用できます。事前署名付き URL は、S3 バケットにコンテンツをアップロードするための一時的な許可を付与するためにも使用できます。例えば、クライアントログをアップロードするためのアクセス権をプレイヤーに付与して、プレイヤーサポートチームがプレイヤーサポートケースのトラブルシューティングをできるようにすることができます。 事前署名付き URL の機能を制限するためのベストプラクティスを参照してください。
S3 Block Public Access は一連のセキュリティコントロールであり、S3 のバケットおよびオブジェクトにパブリックアクセス権がないことを確認するために、特定のユーザーが定義した設定をオーバーライドして S3 アクセスポイント、バケット、AWS アカウントのすべてをまたいで一元管理を有効にします。
アプリケーション、ゲームデベロッパー、アーティスト、その他の担当者が、開発や管理の目的で S3 バケット内のコンテンツに直接アクセスする必要がある場合は、コンテンツ配信ネットワークを使用し、インターネット上でプレイヤーや他のユーザーに公開されているコンテンツへのアクセスを提供することをお勧めします。これにより、アクセス頻度が高いコンテンツをキャッシュすることで、ダウンロードのパフォーマンスを高め、コストを削減します。Amazon CloudFront は、コンテンツをグローバルに配信できます。そのために、コンテンツをキャッシュしてプレイヤーの近くに配信するとともに、Amazon S3 などのゲームのダウンロードオリジンに対する負荷を軽減します。
パブリックコンテンツを S3 バケットから直接提供するのではなく、このコンテンツをプライベートに保ち、CloudFront を使用してパブリックに配信することをお勧めします。CloudFront は、プレイヤーがプライベートコンテンツ (有料プレイヤー専用の新しいゲームのダウンロードなど) へのアクセスに 署名付き URL または 署名付き cookie のいずれかを使用することを要求するように設定できます。次に、署名付き URL を作成して認証済みユーザーに配信するアプリケーションか、認証済みユーザーの署名付き cookie を設定する set-cookie ヘッダーを送信するためのアプリケーションを開発します。署名付き URL または署名付き cookie を作成してファイルへのアクセスを制御する場合は、URL の有効期限が切れる最終日時を指定できます。オプションとして、コンテンツへのアクセスに使用できるコンピュータの IP アドレスまたはアドレス範囲を指定することもできます。これは、アクセスを特定のゲーム開発スタジオパートナーまたは請負業者のネットワークに制限する場合に便利です。ファイル別にアクセスを制限する場合や、ユーザーが使用しているクライアントが cookie をサポートしていない場合は、署名付き URL を使用します。複数の制限付きファイルへのアクセスを許可する場合や、現在の URL を変更したくない場合は、署名付き cookie を使用します。署名付き URL は、署名付き cookie よりも優先されます。
GAMESEC_BP06: オリジンへのアクセスは、承認済みのコンテンツ配信ネットワーク (CDN) に制限します。
ユーザーがコンテンツ配信ネットワークを迂回して、Amazon S3 バケットなどのオリジンからコンテンツに直接アクセスするのを防ぐ必要があります。オリジンへのアクセスを承認済みの CDN にのみ制限することが重要です。これにより、オリジンからの不要なコンテンツ提供に伴うデータ転送コストを削減できます。また、オリジンコンテンツへのすべてのパブリックアクセスを同じエントリポイントを通過させることで、セキュリティ体制も向上します。このエントリポイントで、AWS WAF レイヤー 7 フィルタリング、セキュリティ関連の HTTP リクエストパラメータの取り込みと検査、分散型サービス拒否 (DDoS) からの保護など、エッジセキュリティコントロールをデプロイできます。これらのコントロールを S3 オリジンに実装するには、 Amazon CloudFront オリジンアクセスアイデンティティ (OAI) を使用して、S3 オブジェクトに対するすべてのリクエストを CloudFront ディストリビューションから発信させることができます。レイヤー 7 フィルタリングを提供するために、AWS WAF を CloudFront ディストリビューションに関連付けることをお勧めします。ただし、追加の CDN からコンテンツを配信する場合は、オリジンリクエストに 1 つ以上のカスタム HTTP ヘッダーを挿入するように CDN を設定できます。このヘッダーは、AWS WAF によって検査されるため、承認済みの CDN プロバイダーから受信トラフィックが発信されたことを確認できます。このアプローチは、オリジンが Application Load Balancer (ALB) の背後でホストされている場合に、ユーザーが CDN プロバイダーを迂回するのを防ぐためにも役立ちます。ALB は、レイヤー 7 を保護するために AWS WAF に関連付けることができます。AWS WAF は、ALB で検査できるカスタム HTTP ヘッダーを挿入するように設定できます。これにより、ロードバランサーへの着信トラフィックが AWS WAF で最初に処理および検査済みであることを確認できます。
GAMESEC_BP07: 不正アクセスを防ぐために地域制限を実装します。
プレイヤーがコンテンツをリクエストすると、CloudFront はプレイヤーの場所に関係なく、最も近いエッジロケーションからリクエストされたコンテンツを提供します。ただし、コンテンツに対する世界の特定地域のユーザーからのアクセスを制限する必要がある場合もあります。例えば、ゲームのローリングデプロイ戦略に従って国別に段階的にコンテンツをリリースする場合や、国固有のアクセスコントロールに従う必要がある場合があります。地域制限 (または地理的ブロック) を使用すると、CloudFront ディストリビューションを通じて配信しているコンテンツに対する、特定地域のユーザーからのアクセスを禁止できます。CloudFront の地域制限機能を使用すると、ディストリビューションに関連付けられているすべてのファイルへのアクセスを制限したり、国レベルでアクセスを制限したりできます。また、サードパーティーの位置情報サービスを使用して、ディストリビューションに関連付けられているファイルのサブセットへのアクセスを制限したり、国レベルよりも細かい粒度でアクセスを制限したりすることもできます。
CloudFront の地域制限を使用すると、プレイヤーの所在国が、承認された国の許可リストに含まれている場合にのみ、コンテンツへのアクセスをプレイヤーに許可し、禁止された国の拒否リストに含まれている場合はコンテンツへのアクセスを禁止できます。ブロックしている地理的な場所からリクエストを受け取ると、CloudFront は 403 Forbidden HTTP ステータスコードをプレイヤーに返します。
GAMESEC_BP08: デジタル著作権管理 (DRM) ソリューションでコンテンツへのアクセスを制限します。
アクセスコントロールベースのアプローチに加えて、暗号化ベースのアプローチを採用することもできます。この場合は、デジタル著作権管理 (DRM) ソリューションを使用してプライベートコンテンツを暗号化し、復号キーを承認済みのプレイヤーに配布します。DRM ソリューションは、ゲームコンテンツを早期にダウンロードすることをプレイヤーに許可するとしても、所定の時間までコンテンツのアクセスや再生をできないようにする場合にお勧めします。例えば、これは特に PC ゲームで一般的ですが、プレイヤーはゲームを予約注文し、暗号化されたファイルの早期ダウンロードを自動的に開始するようにゲームクライアントを設定します。ゲームが正式にリリースされたときには、ゲームがダウンロード済みで準備が完了しているため、すぐにプレイを開始できます。ゲームのリリース後に、プレイヤーのゲームクライアントは DRM バックエンドソリューションに対して復号キーを要求し、以前にダウンロード済みのファイルを復号してゲームのプレイを開始できます。DRM システムは、承認済みのプレイヤーがダウンロードおよびインストールしたゲームの不正な再配布や改ざんを防止する手段としても有効です。DRM システムは、暗号化キーを交換してプレイヤーに復号キーの取得を許可するために、オリジンと統合する必要があります。商用 DRM システムプロバイダーは、特定の機能を備えた幅広いソリューションを提供し、さまざまなデバイスをサポートしています。