今回はアプリケーションのインフラストラクチャに関するサービスのセキュリティについてまとめてみます。本当は図にしたかったのですが、LibreOffice Impressが絶望的に使いづらかったので諦めましたw(ケチってMS Officeを買ってない。)
Amazon Route 53
DNSサービスだが、以下のように状況に応じたルーティングが可能。セキュリティの観点では特定地位からのアクセスを拒否したりシステムの可用性を上げたりすることができる。
- シンプルルーティング:1つの値を返す。
- フェイルオーバールーティング:ヘルスチェック失敗時に別の値を返す。
- 複数値回答ルーティング:複数の値を返す。ヘルスチェックで正常なもののみを返すようにもできる。
- 位置情報ルーティング:リクエスト元の地域(大陸や国、州)に応じて値を返す。
- レイテンシーに基づくルーティング:レイテンシーが最小となるような値を返す。
- 加重ルーティング:解決先ごとに振り分けの割合を指定できる。カナリアリリースに使える。
IPアドレスへの変換の他、EC2やELBなどのサービスへのルーティング設定も可能。また、VPCと紐付けてVPC内の名前解決にも使える。Amazon Route 53 Traffic Flowでルーティングの状況を確認可能。
AWS WAF
Webアプリケーションのファイヤーウォール。送信元や宛先のIPアドレスやポート番号で通信の許可を判断する他、リクエストの内容を見て攻撃を検知することも可能。保護の対象はCloudFront、ALB、API Gateway、AppSync。以下のルールを設定することにより攻撃の検知を行う。
- マネージドルール
- AWS Marketplaceで購入できるものと、AWSが提供するものがある。
- ユーザー定義ルール
- 以下の種類のルールを作成できる。
- IP制限
- レートベースルール(同一IPアドレスからの接続数を制限する)
- 特定の脆弱性に関するルール(SQLインジェクション、クロスサイトスクリプティングなど)
- 悪意のあるリクエストを判別するルール(リクエストサイズや特定の文字列から判別)
- 以下の種類のルールを作成できる。
AWS Shield
DDoS攻撃からシステムを守るためのサービス。インターネットに面した全てのAWSサービスを自動かつ無料で保護するAWS Shield Standardと、以下の追加オプションがある有料のAWS Shield Advancedの2種類がある。
- 特定のサービス(EC2、ELB、CloudFront、Global Accelerator、Route 53)へのアノマリー型検知
- DRT(AWS DDosレスポンスチーム)の24時間365日のサポート
- DDos攻撃によって発生した追加料金(オートスケールなど)の補償
- DDos対策のためのAWS WAFの追加料金なしでの利用
Amazon CloudFront
Contents Delivery Network(CDN)。様々な場所に展開されており、コンテンツ(オリジン)をキャッシュしておくことによってユーザーからのリクエストに高速でレスポンスできるようにする他、オリジンを保護する効果もある。
オリジンがELBやEC2の場合、それらのURLが分かると直接アクセスできてしまうので、WAFを導入して特定のカスタムヘッダがある場合のみ通すようにすると安全。
オリジンがS3の場合、特定のCloudFrontからのみ読み取り可能とする設定(OAI:Origin Access Identityで識別する)を行えばアクセスを限定できる。限定的に特定のファイルへ直接アクセスさせた時は署名付きURLや署名付きCookieを利用する。
Amazon API Gateway
APIを作成・公開できるサービス。ステートレスなREST APIとHTTP API(簡易版REST APIのようなものらしい)、ステートフルなWebSocket APIをサポートしている。
CognitoやLambdaオーソライザーによる認証などのセキュリティ機能がある。ログ出力も行えるがデフォルトでは無効なので設定が必要。
Elastic Load Balancing (ELB)
ロードバランサー。最近Gateway Load Balancer(GWLB)が追加されて4種類になっているが、他の3種類とは用途が異なるので別物と考えた方が良さそう。
トラフィックの分散によるアプリケーションの可用性の向上や、SSL/TSLターミネーションやELBとターゲット間の通信の暗号化によるセキュリティ機能もある。
- Application Load Balancer (ALB)
- レイヤー7(アプリケーション層)で動作し、HTTPとHTTPSをサポート。パスベースやホストベースのルーティング、HTTPヘッダーベースやメソッドベースなどといった高度なルーティングが可能。
- Network Load Balancer (NLB)
- レイヤー4(トランスポート層)で動作し、TCPとUDPをサポート。秒間数百万件のリクエストを処理可能。静的IPアドレスが割り当てられるので固定IPアドレスでサービス公開できる。セキュリティグループをできず、リクエストの振り分けのみを行うような形となり、クライアントとターゲットが直接通信しているように見える。
- Classic Load Balancer (CLB)
- 最初に登場したLB。レイヤー7とレイヤー4で動作し、VPCでも使えるがEC2-Classicで使うことを想定されている。VPCではALBかNLBを推奨。
- Gateway Load Balancer (GWLB)
- レイヤー3(ネットワーク層)で動作し、IPをサポートする模様。サードパーティのセキュリティ製品などと連携するために使い、セキュリティ製品側にGWLB、アプリケーション側にGWLBE(GWLB Endpoint)を設置することによって全ての通信がセキュリティ製品に流れるようにできる。(従来は色んな要素を組み合わせて実現しなければならなくて大変だったみたい。)
Amazon Virtual Private Cloud (VPC)
AWSクラウドのプライベートな仮想ネットワーク環境。任意のプライベートIPアドレス範囲で作成でき、サブネットを作ることができる。
内部からインターネットに出るにはインターネットゲートウェイ(IGW)を通る必要があり、IGWへのルーティングが設定されたサブネットはパブリックサブネット、他はプライベートサブネットと呼ばれる。
パブリックサブネットにあり、かつElastic IPアドレス(EIP。グローバルIPアドレス)が割り当てられたEC2インスタンスはインターネットと通信でき、それ以外のインスタンスがインターネットにアクセスするにはNATゲートウェイやNATインスタンスが必要(EIPを持っていて、プライベートなインスタンスの代わりにインターネットへアクセスする)。
VPC同士で通信するにはVPCピアリングを利用する。VPCピアリングで接続されたVPCでは同一ネットワークのように通信を行えるが、IPアドレス帯が被ってはいけない。2つのVPC間の通信のみを通すので、通信したいVPCの数だけ作成する必要がある(AとB、BとCが接続されていても、AとCは通信不可。AとCを接続すれば可能)。
Amazon VPC Security Group
インスタンスなどに割り当てることができるファイヤーウォールみたいなもの。特定のIPアドレスやポート番号の他にSecurity Groupとの通信も制御できる。許可する送信または受信のルールを設定し、それ以外は自動で拒否される。また、送信か受信を設定すると、その戻りの通信は設定しなくてもSecurity Groupを通過できる(ステートフルインスペクション)。
Network Access Control List (Network ACL)
サブネット間の通信を制御するもの。Security Groupとやや役割が被り、許可と拒否の両方の設定が必要だったり往路と復路の両方の通信を設定しなければならなかったりする。
AWS Firewall Manager
AWSにおけるファイヤーウォールであるWAF、Shield Advanced、Security Groupのポリシーを一元管理できるサービス。新規作成したリソースに各ルールを自動適用したり、AWS Configを利用してルールの適用状況や設定内容をチェックしたりできる。また、AWS Organizationsと統合されていて複数アカウントにまたがった管理も可能。
AWS Artifact
監査レポートと個別契約を確認できるサービス。全社はAWS Artifact Reports、後者はAWS Artifact Agreements。