セキュリティ - Virtual Waiting Room on AWS

セキュリティ

AWS インフラストラクチャでシステムを構築すると、お客様と AWS の間でセキュリティ上の責任が分担されます。この責任共有モデルにより、AWS がホストオペレーティングシステムと仮想化レイヤーからサービスが運用されている施設の物理的なセキュリティに至るまでのコンポーネントを運用、管理、および制御するため、お客様の運用上の負担を軽減するのに役立ちます。AWS セキュリティの詳細については、「AWS クラウドセキュリティ」を参照してください。

Elasticache (Redis OSS) には、プライベート VPC 内のネットワークインターフェイスが割り当てられます。Elasticache (Redis OSS) とやり取りする Lambda 関数にも、VPC 内のネットワークインターフェイスが割り当てられます。他のすべてのリソースは、共有される AWS のネットワークスペースでネットワークに接続できます。他の AWS のサービスとやり取りする VPC インターフェイスを持つ Lambda 関数は、VPC エンドポイントを使用してこれらのサービスに接続します。

JSON Web Token の作成と検証に使用されるパブリックキーとプライベートキーは、デプロイ時に生成され、Secrets Manager に保存されます。Elasticache (Redis OSS) への接続に使用するパスワードも、デプロイ時に生成され、Secrets Manager に保存されます。プライベートキーと Elasticache (Redis OSS) のパスワードには、ソリューションのいずれの API からもアクセスできません。

パブリック API には、必ず CloudFront 経由でアクセスする必要があります。このソリューションでは、API Gateway の API キーが生成されます。これは、CloudFront の x-api-key カスタムヘッダーの値として使用されます。CloudFront がオリジンリクエストを行うときに、このヘッダーが含められます。詳細については、「Amazon CloudFront 開発者ガイド」の「オリジンリクエストにカスタムヘッダーを追加する」を参照してください。

プライベート API は、呼び出し時に AWS IAM 認証をリクエストするように設定されています。このソリューションでは、プライベート API を呼び出すための適切なアクセス許可を持つ、ProtectedAPIGroup という IAM ユーザーグループが作成されます。このグループに追加された IAM ユーザーには、プライベート API を呼び出す権限が付与されます。

ロールで使用される IAM ポリシーと、ソリューションによって作成されたさまざまなリソースにアタッチされるアクセス許可では、必要なタスクの実行に際して必要なアクセス許可のみが付与されます。

S3 バケット、SQS キュー、ソリューションによって生成された SNS トピックなどのリソースにおける保管時および転送中の暗号化については、可能な箇所はすべて有効化されます。

モニタリング

コア API のスタックには、ソリューションの使用中にモニタリングをして問題を検出できるように、CloudWatch アラームがいくつか含まれています。このスタックは、Lambda 関数のエラーとスロットル条件に対するアラームを作成します。1 分間にエラーまたはスロットル条件が発生した場合は、このアラームの状態を OK から ALARM に変更します。

また、このスタックは、各 API Gateway のデプロイに関する 4XX と 5XX のステータスコードのアラームも作成します。1 分間以内に API から 4XX または 5XX のステータスコードが返された場合、アラームの状態は OK から ALARM に変わります。

エラーやスロットルが発生せずに 1 分が経過すると、これらのアラームは OK の状態に戻ります。

IAM ロール

AWS Identity and Access Management (IAM) ロールを使用すると、AWS クラウドのサービスとユーザーに対してアクセスポリシーとアクセス許可をきめ細かく割り当てることができます。このソリューションでは、リージョンのリソースを作成するためのアクセス権をソリューションの AWS Lambda 関数に付与する IAM ロールが作成されます。

Amazon CloudFront

virtual-waiting-room-on-aws.template CloudFormation テンプレートでは、待合室のコアパブリック API とプライベート API を作成すると共に、パブリック API 用に CloudFront ディストリビューションもデプロイされます。CloudFront ではパブリック API からのレスポンスがキャッシュされるため、作業を実行する API Gateway および Lambda 関数の負荷が軽減されます。

このソリューションには、オプションのサンプル待合室のテンプレートも含まれています。このテンプレートでは、Amazon Simple Storage Service (Amazon S3) バケットでホストされる単純なウェブアプリケーションをデプロイできます。レイテンシーを軽減してセキュリティを向上させるために、Amazon CloudFront ディストリビューションはオリジンアクセスアイデンティティ (このソリューションのウェブサイトのバケットコンテンツにパブリックアクセスを提供するための CloudFront ユーザー) を使用してデプロイされます。詳細については、「Amazon CloudFront デベロッパーガイド」の「オリジンアクセス ID を使用して Amazon S3 コンテンツへのアクセスを制限する」を参照してください。

セキュリティグループ

このソリューションで作成される VPC のセキュリティグループは、Elasticache (Redis OSS) へのネットワークトラフィックを制御および分離するように設計されています。Elasticache (Redis OSS) と通信する必要がある Lambda は、Elasticache (Redis OSS) と同じセキュリティグループに配置されます。デプロイが完了し起動したら、セキュリティグループを確認し、必要に応じてアクセスをさらに制限することをお勧めします。