AWS ANS C-01メモ

AWS ANSを更新するためにまとめたものです。あくまで個人的なメモで、構成図などはありません。

# VPC

- IPv6のCIDRブロックを追加で割り当てるとき、追加できるCIDRブロックは/56のみ。なお、IPv6のみでのVPCの使用はできない。
- DHCPオプションセットは更新ができないため、新規作成する必要がある。DNSサーバやNTPサーバのIPアドレスを指定可能。
- 各VPCではDNSサーバとして、Amazon Route 53 Resolver（旧Amazon Provided DNS）がある。DNSクエリを受け付けるエンドポイントは2つ。1つは169.254.169.253、もうひとつはNWアドレスに2を加えたIPアドレス（10.0.0.0/24なら10.0.0.2）。このResolverでVPC内のDNSゾーンとインターネット上のパブリックDNSゾーンの名前解決が可能。DHCPオプションセットで指定している。
- Egress-Onlyインターネットゲートウェイは、IPv6トラフィックでインスタンスからインターネットへアクセスできるが、インターネットからインスタンスへはアクセス不可。
- ゲートウェイ型VPCエンドポイント（S3とDynamoDB）をVPCにアタッチし、ルートテーブルにVPCエンドポイントへのルートを定義することによって、プライベートサブネット内のインスタンスからインターネットを経由しないでDynamoDBやS3にアクセスすることが可能。送信先の指定には、DynamoDBなどの[プレフィックスリスト](https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/working-with-aws-managed-prefix-lists.html)を用いる。特定のS3バケットへのアクセス制限をしたい場合、エンドポイントポリシーで制御が可能。VPC外からの利用は負荷。
- インタフェース型エンドポイント（Private Link）は、実態としてはENIであり、サブネットに配置される。プライベートDNS名が名前解決可能であれば、VPC外からでも利用可能（DX-VGW接続時など）。
- VPCエンドポイントの法則性
インタフェース同士は通信可能：EC2のENI同士
ゲートウェイとインタフェースは通信可能：DX-VGWのオンプレ環境とインターフェイス型
ゲートウェイ同士は通信不可：DX-VGWのオンプレ環境とゲートウェイ型
- Deep Packet Inspection（DPI）を実行するには専用のVPCとサードパーティ製のDPI製品を用意し、VPC Traffic Mirroringを有効化する。VPC Traffic MirroringはVPC内のENIを通るトラフィックを複製し、別ENIやNLB、GWLBへ転送する機能。
    - 単一のVPCなら、ターゲットにNLBを指定する。VXLANを利用。UDP4789を許可。
    - 複数のVPCなら、GWLBとGWLBエンドポイントへ通信。Geneveを利用。UDP6081を許可。
    - 複数のVPCなら、TGWを設定してNWを統合して通信　？？？
- VPC Flow LogsはVPC内のENIとのIPトラフィック情報をキャプチャし、S3やCloudWatch Logs、Amazon Kinesis Data Firehoseへ配信可能。パケットの詳細までは確認できない。
- VPC Network Access AnalyzerでENI間のパスを分析し、意図しないNW構成がないか確認可能。
- VPC Reachability AnalyzerはVPC内の送信元と送信先間の接続をテストするサービス。分析の過程でトラフィックは流れない。ただし、IPv6は非サポート、TGW Connectアタッチメントも非サポート、TGWルートテーブルは2つまでなどの制約あり

# EC2

- 複数のプライベートIPアドレスを使用可能。1つのENIに同じサブネットのCIDR範囲からセカンダリのプライベートIPアドレスを割り当てる。
- インスタンスのメタ情報を取得するには、http://169.254.169.254/latest/meta-data/にアクセスする。リンクローカルアドレスのため、インスタンス内からのみアクセス可能。
- プレイスメントグループ
    - クラスタープレイスメントグループ
    グループ内のEC2同士が物理的に密接して配置され、インスタンス間は広帯域で低遅延となる。すべて同一のAZで稼働している必要あり。
    - スプレッドプレイスメントグループ
    インスタンスは同じリージョン、別AZ（別ラック）に配置される。耐障害性↑↑
    - パーティションプレイスメントグループ
    グループを論理的に区切る。
- EC2はジャンボフレームMTU9001に対応しているが、VPC外と通信するときには絞られてしまうため注意が必要。例えばIGWやVGWとVPN接続する場合、MTU1500に制限されてしまう。ユースケースは、クラスタープレイスメントグループ内でEC2同士の通信。
なお、TGWはMTU8500までサポートしている。

# VPN

- サイト間VPN
TGWもしくはVGWを利用してVPN接続をする。
VGWはVPCごとに作成されるVPNエンドポイント。VPCにアタッチできるVGWは1つのみ。そのため、簡単にデタッチとアタッチができ、通信先VPCの切り替えは容易にできる。VGWの設定にはAS番号のみが必要。
VGWと通信するオンプレ側機器はCGWデバイスで、暗号化通信にはIPプロトコル50（ESP）とUDPポート500（ISAKMP）を利用する。VPNコネクションは2つのトンネルが設定される。
- SSL-VPNを利用したい場合、EC2とソフトウェアVPNが必要となる

# Direct Connect

- マネコンから接続のリクエストが可能。
- BGPでオンプレからAWS、AWSからオンプレへそれぞれ経路情報を広報する。
- オンプレーAWS間ではプライベートAB番号64512が利用される。
- パス属性でASパスは少ない方が優先される。ASパスプリペンドはAWS側からオンプレへの通信を制御。65001 65000 65000とあるもので、多いほうが優先度は下がる（経由するものが多いため）。
- Local Preference（LP）属性は発信側ルータ自身が経路選択する際の優先順位。AWS側でASパスプリペンドで経路を制御できないため、オンプレ（カスタマールータ）側でLP値を設定することにより、経路の優先順位をつける。LP値は高いほうが優先される。200と50とか
- 占有接続は1/10/100Gbpsから選択可。ダイレクトコネクト物理接続を作成することで、LOA-CFAをダウンロード可能になり、これをDC事業者へ提出する。
- ホスト型接続はSub1Gで選択可能。AWS認定パートナーと契約する必要がある。
- カスタマールータに必要なのは、シングモードファイバー、VLAN（802.1Q）、BGP、BFD。
- 仮想インターフェイス（VIF）（DXロケーションにあるもの）
    - パブリックVIF
        - インターネット上のAWSリソースに接続するために利用。S3やEIP付きEC2など。
        - 作成に必要なのは、DXGWかVGWのID、VLAN ID、AS番号、カスタマールータのIP、カスタマールータから広報するIPプレフィックス、MD5認証のキー文字列。
        - Site-to-Site VPNでDX通信を暗号化できる。1.25Gbpsに制限されることに注意。CGWとVGW間でUDPポート500とIPプロトコル50の通信の許可が必要
        - IPSecと併用することでDXを暗号化可能
        - NO_EXPORT BGPコミュニティタグでルーティング情報の広報範囲をRegionかGlobalに制御する。デフォルトは全リージョンに広報のため、限定したい場合はBGPコミュニティタグを利用する。
    - プライベートVIF
        - VPCに接続するために利用。VGWかDXGWのどちらと接続するか選択できる。
        - 作成に必要なのは、DXGWかVGWのID、VLAN ID、AS番号、カスタマールータのIP、MD5認証のキー文字列
        - ジャンボフレームをサポート
    - トランジットVIF
    TGWやDXに接続するために利用。専有接続では1つだけ、ホスト型接続なら1Gbps以上のときに利用できる。
    作成に必要なのは、DXGWかVGWのID、VLAN ID、AS番号、カスタマールータのIP、MD5認証のキー文字列
    Site-to-Site VPN接続を併用することで、プライベートIP VPNを利用できる。
    - BGPコミュニティタグ
        - インバウンド
        7224:9100　ローカルAWSリージョン内に伝搬
        7224:9200　大陸内すべてのAWSリージョンに伝搬
        7224:9300　グローバルに伝搬
        - アウトバウンド
        7224:8100　DXのPoPが関連付けられているリージョンから送信されるルート
        7224:8200　DXのPoPが関連付けられている大陸から送信されるルート
        タグなし
        - プライベートVIFとトランジットVIF
        7224:7100　優先度：低
        7224:7200　優先度：中
        7224:7300　優先度：高
- DXGWの登場でVGWのみの利用は減少。なぜなら、VGWは同一リージョンの1つのVPCにしかアタッチできず、拡張性に乏しいため。DXGWであれば、異なるリージョンの複数のVGWをアタッチすることが可能。VPC（VGW）は10コまでアタッチ可能。ただし、DXGWを介したVPC（VGW）間やオンプレ間での通信はできない。したい場合にはVPCピアリングやTGWインターリージョンピアリングが必要となる。
- MAC Securityはイーサネット通信の暗号化技術、L2のMACフレームを暗号化。
- DXの冗長性（AWS推奨順）
    - シングルコネクション・デュアルロケーション（コスパいい）
    - デュアルコネクション・デュアルロケーション（コスト↑↑）
    - デュアルコネクション・シングルロケーション（耐障害性↓↓）
- DXではEBGPマルチホップ非対応（無効）
- DX接続におけるトラブルシューティング
    - L2（データリンク層）
        - ピアIPアドレスとVLANは正しいか？
        - IPアドレスは物理I/Fではなく、VLANサブインタフェースに設定されているか？
        - ARPテーブルにAWSのMACアドレスは登録されているか？
        - AWS-オンプレ間のNW機器で、802.1Q VLANタグに対してVLANとランキングは有効になっているか？
    - L3/4（NW層／トランスポート層）
        - BGPのローカルAS番号とAmazonのAS番号がDX構成ファイル通りか？
        - BGPのローカルとAmazonのIPアドレスがDX構成ファイル通りか？
        - MD5認証キーが正しく設定されているか？
        - プライベートVIFに100個以上、パブリックVIFに1000個以上のプレフィックスを広報していないか？
        - TCPポート179とエフェメラルポートの通信を許可しているか？
        - BGPピアが互いに1ホップ以上離れていないか？（AWSでマルチホップ無効）
- AWS Direct Connect SiteLinkは、AWS Direct Connectを使用して異なるオンプレミスデータセンター間の通信を可能にする機能。通常、Direct Connect はオンプレミスデータセンターと AWS VPC 間の通信に使用されますが、SiteLink を有効にすることで、AWS Direct Connect ネットワークを介して、データセンター間の通信が可能になる。

# Transit Gateway

- VPCよオンプレを相互接続するためのNW中継ハブ。
- リージョン間のTGW同士を接続するには、ピアリングアタッチメントを作成して接続（リージョン間ピアリング）
- TGWとGWLBの通信でインライン監査が可能。行きと戻りの通信が非対称ルーティングになるのでTGWアタッチメントでアプライアンスモードを有効にして戻りのトラフィックがドロップされないようにする。
- TGW Network Managerでグローバルに存在するTGWやVPN接続、DXを一元管理。ダッシュボードによる視覚化と監視も可能。SD-WANとも統合可能。TGW Route AnalyzerでTGWのルートテーブル内のルートの分析が可能。ただし、SGやNACLの設定妥当性のチェックはできない。
- TGWConnectはTGWとSD-WANなどのサードパーティの仮想アプライアンスの接続を確立する機能。GREをサポートしているが、暗号化にはGRE over IPsecが必要。TCP179。
- TGWとTGW VPN アタッチメントを利用することで、複数VPCを集約し、1つのVPN接続でSite-to-Site VPN接続が可能。

# Route 53

- パブリックホストゾーン
インターネット上に公開されたDNSドメインのレコードを管理。
- プライベートホストゾーン
VPC内に閉じたプライベートNW内のDNSドメインのレコードを管理。利用するには、enableDnsHostnames（AWS提供のDNSサーバ利用の可否）とenableDnsSupport（インスタンスへのパブリックDNS名割り当ての可否）を有効化する必要がある。
- スプリットビューDNS（スプリットホライズンDNS）
同じ名前を持つパブリックホストゾーンとプライベートホストゾーンを作成し、社外と社内で通信を分けることができる。まずプライベートホストゾーンと一致するかを確認するし、一致しなければパブリックホストゾーンで名前解決が行われるため、パブリックDNSリゾルバーに転送される。
- Amazon Route 53 ResolverはVPCにデフォルトで存在するDNSフォワーダー。クライアントからの名前解決要求を適切なDNSへ転送する役割。デフォルトではプライベートホストゾーンで指定するDNSをドメイン名の解決に利用される。以前はAmazon Provided DNSと呼ばれていた。
    - インバウンドエンドポイント
    オンプレからVPCへ入ってくる名前解決で利用。流れとしては、オンプレ→インバウンドエンドポイント→Route 53 Resolver→プライベートホストゾーン。
    - アウトバウンドエンドポイント
    VPCからオンプレへ出ていく名前解決で利用。流れとしては、EC2→Route 53 Resolver→アウトバウンドエンドポイント→オンプレDNSサーバ。
    オンプレ環境のDNSで名前解決を行う場合、どのドメインの名前解決要求をどのDNSに転送するかを予め指定する（条件付き転送ルール）
    - Amazon Route 53 Resolver DNS FirewallはVPCからのアウトバウンド名前解決要求をフィルタリングする。
- DNSSECはDNSスプーフィングや中間車攻撃などのDNSクエリのレスポンスの改ざんからドメインを保護できる機能。下記は必要な手順。予めTTLを小さくしておく。
    - ホストゾーンのDNSSEC署名を有効化　※複数ゾーンで必要ならゾーン数分行う
    - キー署名（KSK）を作成
    KMSで非対称キーをバージニア北部で作成する必要あり。
    - 親ホストゾーンでDSレコードを登録
    - リゾルバでDNSSEC検証の有効化

# ELB

- ALB
    - HTTP/HTTPS通信（80/443）でアプリケーションの負荷分散を行う。gRPCも対応。
    - CognitoやWAFと連携可能。
    - スティッキーセッションあり
    - リスナー／リスナールール
        - ホストヘッダー
        ホスト名（*.example.com）を入力し、合致するホストヘッダーへのリクエストごとにアクションを設定。1つのALBで異なるドメインを宛先に設定できる。
        - パスパターン
        パスパターン（/img/*）を入力し、合致するパスパターンへのリクエストごとにアクションを設定。
        - HTTPヘッダー
        ヘッダーの名前を入力し、1つ以上の比較文字列を入力し、合致するHTTPヘッダー、比較文字列へのリクエストごとにアクションを設定。
        - クエリ文字列
        1つ以上のキーバリューのペアを設定。ペアごとにキーを省略して値のみを指定できる。
    - クライアントIPアドレスを識別するため、HTTPヘッダー（X-Forwarded-For）を使用する。デフォルトで自動追加される。
    - SSL/TLSオフロードにより、インスタンスではなく、ALBで復号を行う。HTTPSリスナーにはX.509 サーバ証明書が必要。なお、ALBで復号せず、暗号化されたトラフィックをエンドツーエンドでターゲットに渡したいなら、ポート443 TCPリスナーを使用する。
- NLB
    - TCP/UDP/TLS通信に対応。
    - 秒間数百万リクエストも対応。
    - NLBのIPアドレスを固定可能。AZごとに1つ。
    - Proxy Protocol ver2を有効化すると、ターゲットのEC2インスタンスにNLBのIPアドレスではなく、クライアントのIPアドレスを伝えることができる。
    - クライアントのIPをIPヘッダに保持可能。TCPとTLSターゲットグループのクライアントIPの保存はデフォルトで無効のため、Preserver client IP Addressesを有効化する。
    - スティッキーセッションは非対応
    - クロスゾーン負荷分散
    - UDP/TCP_UDPならデフォルトで送信元IPアドレスはクライアントのIPアドレスになる。
    - TCP/TLSならデフォルトの送信元IPアドレスはNLBのプライベートIPアドレスになる。クライアントのIPアドレスが必要なら、Proxy Protocolを有効化し、Proxy ProtocolヘッダーからクライアントIPをアドレスを取得する。
- GWLB
    - IP通信に対応
    - IDS/IPSのサードパーティ仮想アプライアンス向けのトラフィックの負荷分散が可能。
    - GWLBエンドポイントを作成し、ルーティングさせる。
    - Geneveでカプセル化、UDP 6081
    - CIDRが重複するVPCでも問題なし
    - スティッキーセッションあり
    新しいTCP/UDPトラフィックを受信すると、5タプル（送信元IP、宛先IP、プロトコル、送信元ポート、宛先ポート）をもとにターゲットグループから正常なアプライアンスを選択し、すべてのトラフィックを同じアプライアンスへ振り分ける。
- ELBの通信暗号化パターン
    - ELBでSSL/TLS認証し（HTTPS）、バックエンドはSSL/TLS認証なし（HTTP）
    - ELBでSSL/TLS認証し（HTTPS）、バックエンドはSSL/TLS認証あり（HTTPS）
    - ELBでSSL/TLS認証をバイパスし（TCP）、バックエンドにはTCPでフォワード、SSL/TLS認証あり（TCP）

クライアントとバックエンドのサーバまで暗号化する場合、2番目か3番目を利用する。基本的には、サーバまでHTTPS通信による暗号化をしたいならNLBのTCPリスナーを選択する。逆に、SSL/TLS終端をELBにオフロードしたいならALBのHTTPリスナーかNLBのTLSリスナーを選択する。

# CloudFront

- 静的動的コンテンツを高速かつ効率的にユーザへ配信可能なCDNサービス。
- HTTP/HTTPS通信をサポート
- WAFやShieldと連携可能
- 署名付きURL
単一コンテンツ、
- 署名付きCookie
複数コンテンツ、
- Geo-restrictionにより、アクセス元の国を制限可能（ホワイト／ブラックリスト）。許可されていない地域からのアクセスはHTTP 403（Forbidden）を返す。
- アクセス制御
    - カスタムヘッダーやIPアドレス制限
    CloudFront側でカスタムヘッダーを設定し、ALBのカスタムルールでHTTPヘッダーをチェックするか、CloudFrontのIPのみ制限する
    - OAI
    S3バケットのアクセスをCloudFrontのみに制限
    - OAC
    OAIの機能＋SSE-KMSやクレデンシャルのローテーション、HTTPメソッドの種類増

# Lambda@Edge

- クライアントから近いリージョンのエッジキャッシュでLambdaを実行可能。
- ユースケースは、ヘッダーの追加や変更、リアルタイム画像変換、レスポンス生成、A/Bテスト、ユーザの認証認可など
- 作成可能なリージョンはバージニア北部のみ

# Global Accelerator

- AWSのグローバルNWを用いたNWサービスで、アプリの可用性とパフォーマンスを改善する。主に動的コンテンツ向けの最適化。静的コンテンツのキャッシュには対応せず。
- アクセラレータには2つの静的IPをアドレスが付与される。
- Anycat IPは複数のホストでIPアドレスを共有できる技術。
- アクセラレータの種類
    - 標準アクセラレータ
    ALB, NLB, EC2のトラフィック分散や可用性を向上させるときに利用
    - カスタムルーティングアクセラレータ
    複数のユーザを特定の宛先に誘導し、特定のターゲットにルーティングさせるときに利用。EC2のみが対応している。
- ユースケースは低レイテンシーが必要とされるゲームなどのアプリやIoTなど
- HTTP/HTTPS, TCP/UDPに対応
- トラフィックダイヤルは、特定のエンドポイントグループ（リージョンやリソース）に送信されるトラフィックの割合を制御する機能。特定のリージョンやエンドポイントに割り当てるトラフィック量を調整可能。

# Config

- AWSリソースの構成情報・変更履歴を保存して評価するサービス。
- 構成情報はスナップショットとして定期的にS3に保存が可能。Configルールに合致しているか評価する。
- ConfigルールにはマネージドルールとLambdaをベースとしたカスタムルールがある。
- Configルールのトリガータイプは設定変更と定期の2パターン。
- Configルールによって定義した状態に準拠しないAWSリソースが見つかった場合、修復アクションを実行する。これはAWS Systems Manager Automationで可能。（例 SGのポート開放）

# NAT Gateway

- IPv6は非対応、代わりにEgress-Only IGWを利用する
- 1分あたり最大55,000件までの同時接続サポートしているが、それを超えるとErrorPortAllocationメトリクスが増加する。これに対処するためには、AZごとにNAT GWを作成し、AZ全体にクライアントを分散させる。コストを抑えるために同じゾーン内のNAT GWを使用するようにルーティングさせる。
- 350秒間のアイドルタイムアウトがあり、350秒以上アイドル状態になると接続がタイムアウトになる。アプリ側でTCPキープアライブの値を350秒未満にする必要がある。

# AWS Network Firewall

- VPCを保護するためのFW機能を提供。トラフィックがFWサブネット内のFWエンドポイントを経由することでフィルタリングができる。
- NAT GWを利用するときは、NATGWとインスタンスの間にFWエンドポイントを配置し、インスタンス→NW FW→NAT GW→IGWという経路にする。
- FirewallサブネットにFirewallエンドポイントを作成し、Network Firewallと通信させる。
- 種類
    - 集中デプロイメントモデルは、中央の1つのVPCにAWS Network Firewallを配置し、他のVPCのトラフィックをそれにルーティングさせる。他のVPCのトラフィックをTGWやVPCエンドポイントで集中VPCにルーティングする必要がある。
    - 分散デプロイメントモデルは、各VPCにAWS Network Firewallを個別にデプロイし、VPCごとにトラフィックを制御。

# AWS Firewall Manager

- AWSにおけるFWである、WAF・Shield・SG・NW FWのポリシーを一元管理する。
- AWS Organizationsと統合されているため、複数アカウントにまたがって管理が可能。
- 管理対象のポリシーのルールはAWS Configを利用してチェックされる。
- 利用条件
    - Organizationsに参加
    - Firewall Manager管理者アカウントを設定
    - AWS Cofigを有効化