Well-Architected Framework 「セキュリティ」の設計原則
セキュリティの設計原則は以下の7つ
・強力なアイデンティティ基盤を実装する
最小権限の原則を実装し、AWSリソースの使用に適切な認証をする。
最小権限の原則とは、ユーザーやプログラムが作業を完遂するために必要な最低限の権限で操作を行うこと
・トレーサビリティを実現する
システムに対してリアルタイムでの監視、通知、監査を行うことにより、問題が発生した場合に素早く対応できる
・全レイヤーでセキュリティを適用する
一部の機能に対して重点的にセキュリティを実装するのではなく、仮想サーバー、ネットワーク、ロードバランシング、アプリケーション、コードなど、利用するすべてのレイヤーに渡ってセキュリティを実装する。
・セキュリティのベストプラクティスを自動化する
セキュリティの仕組みをソフトウェアベースで自動化することによって、安全にシステム化を迅速にしつつコスト効果を高くする。
・転送中および保管中のデータを保護する
データの機密性レベルに応じた、暗号化、トークン分割、アクセスコントロールなどを適用する
・データに人の手を入れない
データへの直接アクセスや手動作業を減らすことで、機密性の高いデータの消失など人為的ミスのリスクを軽減する
・セキュリティイベントに備える
システムの要件に合わせたインシデント発生後のプロセス(検出、調査、復旧)とインシデント管理の方針を決めて、セキュリティイベントに備える
Amazon EFSのデフォルトで有効になっているもの
・自動バックアップ
・保管されているデータの暗号化
Amazon EFS(Elastic File System)は以下の特徴をもつ、フルマネージド型のストレージサービス
・容量無制限
EFSではデータ量に伴い自動的にスケーリング(拡張・縮小)が行われるため、利用開始にあたり事前に容量を確保する必要がない。保存したデータ量に応じて課金が発生する
・可用性
EFSはリージョン内の複数のAZにまたがってサービスを提供しているため、単独AZの障害にも影響を受けない
またデフォルトでAWS Backupを使ったバックアップが有効になっている
・堅牢性
EFSはデフォルトで保管時のデータの暗号化が有効になっている。
また、EFSのファイルシステムマウント時にTLS(Transport Layer Security:セキュアな通信を行うプロトコル)を使うこともできるので、転送データを安全に扱える。
セキュリティグループの特徴
・拒否ルールは設定できない
セキュリティグループは、VPC上でネットワークアクセスをインスタンスごとに制御するファイアウォール
設定は許可ルールのみ指定し、拒否ルールは指定できない
デフォルトの設定では、すべてのインバウンド通信(外部から内部への通信)を拒否、すべてのアウトバウンド通信(内部から外部への通信)を許可しているので、インスタンスへのインバウンド通信には許可ルールを設定する必要がある
セキュリティグループは通信状態を管理する「ステートフル」なファイアウォール
インバウンドまたはアウトバウンドで許可されている通信に関連する後続の通信(リクエストに対応するレスポンスなど)は、明示的に許可設定をしなくても通信が許可される
セキュリティグループとネットワークACLは、どちらもネットワークアクセスを制御するファイアウォールだが、以下の違いがある
セキュリティグループ
・ルールの単位
インスタンス単位
・設定方法
許可ルールのみ設定する
・ステートフル/ステートレス
ステートフル
・ルールの適用方法
すべてのルールを適用する
ネットワークACL
・ルールの単位
サブネット単位
・設定方法
許可ルールと拒否ルールを設定する
・ステートフル/ステートレス
ステートレス
・ルールの適用方法
指定した番号順にルールを適用する
インスタンスファミリー種類
インスタンスファミリーは、インスタンスタイプの用途別の分類
インスタンスファミリーの分類は、汎用、コンピューティング最適化、メモリ最適化、高速コンピューティング、ストレージ最適化に用途が分かれている
M(汎用)
リソースのバランスが取れたインスタンスファミリー
特定のリソースに負荷が偏っていない、多くの環境に適している
T(汎用CPUバースト機能)
リソースのバランスが取れたインスタンスファミリー
CPU処理のバーストが可能(一時的に制限以上にCPU処理を実行可能)なので、
アイドル時間の多い小中規模のデータベースサーバーや開発環境に適している
C(コンピューティング最適化)
高性能なCPUを提供するインスタンスファミリー
負荷の高いバッチ処理があるサーバーや、アクセス頻度の高いWebサーバーなど
コンピューティング負荷の高い環境に適している
R、X(メモリ最適化)
大容量のメモリを提供するインスタンスファミリー
リアルタイムでのビックデータ解析を処理するサーバーや、アクセス頻度の高い
データベースサーバなど、大量のメモリを使用する環境に適している
P、G、F(高速コンピューティング)
高性能なGPUを提供するインスタンスファミリー
機械学習推論や3Dグラフィックスを大量に処理するサーバーなど、高速演算が
求められる環境に適している
I、D、H(ストレージ最適化)
高性能なローカルストレージを提供するインスタンスファミリー
高いディスクスループットや、大容量のローカルストレージが求められる環境に適している
RedShift Spectrum
Redshift Spectrum
S3上のデータをRedshiftの外部テーブルとして参照できるようにした機能
S3のデータを一旦Redshiftへ取り込んでからアクセエスを行うよりも高速にアクセスできる
Egress-Onlyインターネットゲートウェイ
Egress-Onlyインターネットゲートウェイは、NATゲートウェイとインターネットゲートウェイの特徴を併せ持つIPv6専用の機能
インターネットからVPCへ(Ingress)の接続開始要求は通さず、VPCからインターネットへ(Engress)の接続開始要求を通す
VPCでIPv6 CIDRブロックを割り当てる際には、Amazon保有もしくはユーザーが保有するアドレスレンジから割り当てますが、このアドレスはインターネットから到達可能な「グローバルユニキャストアドレス」というものになる
そのため、IPv6 CIDRブロックを持つパブリックサブネット内のリソースは、無条件にインターネットからアクセス可能になってしまう。しかし、NATゲートウェイはIPv6には対応しないため、IPv6アドレスを利用するリソースを保護する目的では使えない。プライベートサブネットからインターネットへのIPv6通信を可能にするには、Egress-Onlyインターネットゲートウェイを利用する
Egress-Onlyインターネットゲートウェイを利用するには、VPCにEgress-Onlyインターネットゲートウェイを作成し、プライベートサブネットのルートテーブルに、送信先が「::/0(デフォルトルート)」、ターゲットが「Egress-OnlyインターネットゲートウェイID」となるルートを追加する。
静的なファイル群をWebコンテンツとして公開したい(通信を暗号化して)
・Amazon S3の静的webサイトホスティングとAmazon CloudFrontを利用する
AWSのサーバーレスサービスを利用して静的ファイルのWebコンテンツを公開するには、S3の静的Webサイトホスティングを利用するのが最も容易
しかし、S3の静的Webサイトホスティングで発行されるURLはHTTPのみで、HTTPS(暗号化通信)はサポートされない。
暗号化通信を可能にするには、CloudFrontで静的webホスティングのURLをオリジンサーバーに設定し、使用するプロトコルに「HTTPS」を選択する
またCloudFrontでは、AWS Certificate Manager(サーバー証明書を管理するサービス)から発行したサーバー証明書をインポートすることで、URLに独自ドメイン名を使用することも可能
Route 53
Amazon Route 53は、AWSが提供するDNS(Domain Name System)運用サービス
Route 53は非常に高い可用性と信頼性を備えており稼働率100%が保証されている
Route53の機能
・権威DNSサーバー
・ドメイン名の購入
・ドメイン名の登録、管理
ルーティングポリシー
権威DNSサーバーにDNSレコードを登録する時、1つのドメイン名に対して複数のIPアドレスを設定できる。
ルーティングポリシーとは、DNSクエリのドメイン名に対応するIPアドレスの中から回答するIPアドレスを決める方針のこと
Route53のルーティングポリシーには以下の7種類がある
・シンプルルーティングポリシー
ドメイン名に紐づいた単一リソースのIPアドレスを回答する
・加重ルーティングポリシー
複数のIPアドレスに対して設定された重みづけに従ってIPアドレスを回答する
・レイテンシールーティングポリシー
遅延(レイテンシー)が最も小さいリージョンにあるリソースのIPアドレスを回答する
基本的にクライアントから最も近いリージョンにあるリソースが選ばれるが、リソースまでの経路に遅延が発生している場合は、他の遅延が少ないリージョンにあるリソースが選ばれる
・位置情報ルーティングポリシー
クライアントの位置情報に基づいて、回答するIPアドレスを決めます。
例えば、クライアントの位置情報から、クライアントの使用言語にあったコンテンツがあるリソースのIPアドレスを回答する
・地理的近接性ルーティングポリシー
クライアントの位置情報を元に、クライアントと地理的に近いリージョンにあるリソースのIPアドレスを回答する
・複数値回答ルーティングポリシー
複数のリソースに対してヘルスチェックを行い、最大八個の正常なリソースの中からランダムに分散してIPアドレスを回答する。
・フェイルオーバールーティングポリシー
通常時にアクセスさせたいリソースをプライマリに設定し、プライマリに障害が発生した場合にアクセスさせたいリソースをセカンダリに設定する。通常時はプライマリに設定したリソースのIPアドレスを回答するが、プライマリのリソースにヘルスチェックで以上が発生した場合は、セカンダリに設定したリソースのIPアドレスを回答する。このようにサービスを提供するリソースがプライマリからセカンダリへ自動的に切り替わる仕組みを「フェイルオーバー」という
例えば、Webサービスを公開するEC2インスタンスのIPアドレスをプライマリに設定し、S3の静的Webサイトホスティングのソーリーページ(ユーザーへメンテナンス中であることを伝えるためのページ)のURLをセカンダリに設定することで、EC2インスタンスに障害が発生した場合は設定したソーリーページを表示させることができる。
シンプルルーティングポリシー以外は、複数のルーティングポリシーを組み合わせることができる。
例えば、フェイルオーバールーティングポリシーを適用して複数のプライマリとセカンダリのリソースを設定した上で、プライマリのリソースにレイテンシールーティングポリシーを適用する。
そうすれば通常時はプライマリリソースの中から遅延の少ないリソースのIPアドレスを回答し、プライマリリソースの異常時はセカンダリリソースのIPアドレスを回答する
Route53にはこのような複数のルーティングポリシーを設定できる「トラフィックフロー」という機能があります。
トラフィックフローはルーティングポリシーの関係をツリー状に表示させ、複雑な設定を視覚的にわかりやすくする。
ElasticCacheのデータベースエンジン
Amazon ElasticCacheにはKVS(Key-Value Store:Key-Value型のデータストア)型のデータベースエンジン「Memcached」と「Redis」が用意されており、データベースを構築する際に選択することができる。
※Key-Value型
保存するデータ(value)とそれを特定するためのキー(key)がペアになった構成のデータセットのこと
・Memcached
高パフォーマンスを提供する
データの永続保持やレプリケーション機能はないためシンプルなキャッシュとしての利用に向いている
・Redis
高パフォーマンス+高可用性、機密性を提供する
自動フェイルオーバー(障害発生時の切り替え)やバックアップ・リストア、データ暗号化などを備えている。
コンテンツごとのCLBのコスト削減方法
・複数のCLBを1台のALBに置き換える
ALBではCLBで実現できなかった、パスベースのルーティングに対応している
ALBではコンテンツごとにELBを用意する必要がなくなるので、5台のCLBを1台のALBに置き換えることによりコスト削減が可能。5台のCLBで分散していた分の負荷が1台のALBに集中することになるが、ELBにはリクエスト数の増減に応じて自身が自動的にスケーリングする機能がある。ELBへの負荷が増大しても自動的に自信をスケールアウトして対応するので、サービスのパフォーマンスを落とすことなくコスト削減できる。
プライベートサブネット内のEC2インスタンスから、プライベートネットワーク経由でAmazon DynamoDBのデータアクセスをするための機能
・VPCエンドポイント
S3やDynamoDBなどインターネットから直接利用できるVPC外のAWSサービスへアクセスは、VPC内のAWSリソースからインターネットゲートウェイを経由して通信する。「VPCエンドポイント」は、セキュリティ上の制約でインターネットとの通信が制限されているプライベートサブネット内のAWSリソースから、インターネットゲートウェイを経由せずにVPC外のAWSサービスへアクセス可能にする機能
VPCエンドポイントにはゲートウェイ型とAWS PrivateLink(インターフェイス型)があり、ゲートウェイ型はS3とDynamoDBで利用できる。DynamoDBはゲートウェイ型飲み利用できるが、S3はゲートウェイ型と PrivateLinkの両方で利用できる。
Well-Architected Frameworkの「パフォーマンス効率」
パフォーマンス効率の設計原則は以下の5つ
・高度な技術を誰でも使えるようにする
高度な技術の知識とサービスをクラウドが提供することにより、オンプレミスでは実装が難しい技術であっても容易に利用できる。
・数分でグローバルに展開する
世界各地にある複数のAWSリージョン経由で、世界中から低遅延でサービスへアクセスできる
・サーバーレスアーキテクチャを使用する
サーバーの運用や管理を意識することなくサービスを展開できる。
・より頻繁に実験する
異なるタイプのサーバーやストレージ、設定を使用した比較テストをより頻繁に実施する。
・システムに対する精通の程度を考慮する
クラウドサービスの技術を理解し、実現したいシステムを最適な技術で実装する。
Amazon Kinesis
Amazon Kinesisはストリーミングデータをリアルタイムで収集・処理するサービス
ストリーミングデータとは継続的に生成されるデータのことをいう
例えば、スマートフォンアプリなどでユーザーが生成するログや、証券取引所の株取引情報、SNSやオンラインゲームのデータなどが該当する。Kinesisではこのようなストリーミングデータを収集し、サンプリングや分析などの処理を通して、リアルタイムなトレンド情報をユーザーへフィードバックしたり、企業の経営戦略などにつなげることができる。
Kinesisで解析可能なストリーミングデータには動画データも含まれる。Kinesisが提供するサービス「 Kinesis Video Streams」では、Webカメラや防犯システムなど複数のデバイスから取得した動画データの再生・解析・加工を行える
ホストゾーンについて
Route 53ではゾーン情報を「ホストゾーン」で管理する
管理対象となるドメイン名がホストゾーンの名前となる。
ホストゾーンは管理するドメインの範囲によって2種類に分かれている
・パブリックホストゾーン
インターネットなどVPC外に公開されたドメインのDNSレコードを管理する
・プライベートホストゾーン
VPC内に公開されたドメインのDNSレコードを管理する
Amazon FSx
Amazon FSx For Windowsファイルサーバーは、SMBプロトコルを介してWindows Server(OS)上に構成されたファイルシステムを提供するフルマネージドのストレージサービス
※SMBプロトコル
主にWindowsコンピュータ間において、ファイル共有やプリンタ共有に使用されるプロトコル
Amazon EFS(Elastic File System)がLinuxベースの共有ファイルシステムであるのに対して、FSx For WindowsファイルサーバーはWindowsベースの共有ファイルシステムを共有する
プレイスメントグループ
複数のEC2インスタンスをグループ化し、インスタンス間で低遅延な通信を可能にする機能
例えば「クラスタープレイスメントグループ」では、グループ内のEC2インスタンスは単一AZ内の物理的に近い距離に配置されるため、通信の遅延が起こりにくく高速な通信が可能
クラスタープレイスメントグループが所属するAZに何らかの障害が発生した場合はサービスが利用不能になってしまうため、可用性を犠牲にしてでもEC2インスタンス間の通信遅延を極力無くしたい場合に利用する
クラウド
AWSなどのクラウドコンピューティング(クラウド)は「インターネット越しに、必要なリソースにアクセスして使用する」環境のこと
クラウドサービスのメリット
・固定費の削減
必要なリソースを必要なだけ購入すればよい(従量課金制)ため、将来の需要予測をもとにハイスペックな機器や設備を事前に用意する必要がない
そのため、リース代金や償却費などが不要になる
・コストメリット
多数の顧客に対応可能な機器を調達するため、クラウドサービス側は調達に関するコストメリットを得ることができる。
そのコスト削減効果がユーザーの利用料に反映され、より低価格でクラウドサービスを使用できるようになっている
・需要変化に対応
クラウドサービスは数分程度でリソースを用意できるため、急激な需要変化が起きてもスケールアップ/ダウン(リソースの処理能力の増減)やスケールアウト/イン(リソースの多重度の増減)で対応できる
・対応速度の向上
リソースが数分で用意できることを活かして、開発や検証に必要な実環境と同様の環境をすぐに用意することができる。
そのため、ユーザはリソースの調達に関する時間や費用を抑えることができ、また不要になった検証環境をすぐに破棄することでもコスト削減に効果がある
・運用、保守に関する費用の削減
設備を購入、管理する必要がないため、ラッキングや電力管理といった作業や、機器故障の対応が不要になる
・グローバル化
クラウドサービスはインターネット経由で利用できるため、世界展開も容易になる。
また、クラウドサービスは複数の地域(リージョン)で展開されているため、アプリケーションを複数のリージョンに展開することで世界各地域からのアクセスに低遅延で応答できるようにできる。
Auroraにおけるエンドポイント
Auroraにおいて、データベースインスタンスへの接続は「エンドポイント(接続先)」によって制御される。
エンドポイントには以下のようなものがある
・クラスターエンドポイント
用途
更新・参照・データベースの定義変更など、データベースへの全てのアクセスを行う
接続先
プライマリインスタンス
・読み取りエンドポイント(リーターエンドポイント)
用途
参照のみを行う
接続先
レプリカインスタンス
・インスタンスエンドポイント
用途
インスタンスへの直接アクセスを行う。
接続先のインスタンスによって可能な操作が異なる
・プライマリインスタンスへ接続した場合:更新やデータベースの操作等
・レプリカインスタンスへ接続した場合:参照(特定のインスタンスへ接続したい場合に利用)
Amazon EFSを利用するにあたって、最もセキュアな設定
・EFS上のファイルに対して暗号化を有効にする
・EFSをマウントする際にはTLSを有効にする
Amazon EFSはNFS(Network File System)プロトコルをサポートするファイルストレージサービス
NFSとはネットワーク上にある複数のコンピュータからストレージを共有できるプロトコル
EFSはNFSに対応したAWSサービスおよびオンプレミス(自社運用)のシステムから利用できる
EFSは堅牢性に優れており、デフォルトで保管時のデータの暗号化が有効になっている。
また、EFSのファイルシステムマウント時にTLS(Transport Layer Security:セキュアな通信を行うプロトコル)を使うこともできるので、転送データを安全に扱える。
CloudFrontのディストリビューションとは
Amazon CloudFrontを使用するには、初めに「ディストリビューション」を作成する。
ディストリビューションではオリジンサーバーやキャッシュなど、コンテンツを配信するために必要な各種設定をする。
CloudFrontのOAIとは
OAI(Origin Access Identity)は、S3バケット内のコンテンツへのアクセスをCloudFront経由でのアクセスに限定し、クライアントからS3バケットへ直接アクセスされないようにする機能
クライアントからオリジンコンテンツへの直接アクセスを制限することにより、オリジンサーバーのデータを保護できる。
AWS Transit Gateway
AWS Transit Gatewayは、複数のVPCや複数のオンプレミスネットワークを相互に接続するハブ機能を持つサービス
VPCピアリングはVPCを1対1で接続するサービスに対し、Transit Gatewayは複数のVPC同士を1つのハブで相互に接続できるので、ネットワーク経路を簡素化できる。
ALBと連携して不審なアクセスを防ぐアーキテクト例
・ALBにAWS WAFを割り当てて、Web ACLで該当のIPアドレスを拒否する条件を追加する
・EC2インスタンスがあるサブネットのネットワークACLで、該当のIPアドレスの拒否ルールを追加する
AWS WAF(Web Application Firewall)は、脆弱性を突く攻撃(クロスサイトスクリプティングやSQLインジェクションなど)から、Webアプリケーションを保護するサービス。「Web ACL」というアクセスコントロールリストで、IPアドレス、HTTPヘッダー、HTTP本文、URI文字列などに対してフィルタリングの条件を設定できる。
AWS WAFは、Amazon CloudFront、Application Load Balancer、Amazon API Gateway、AWS AppSyncに割り当てて利用する。
ネットワークACLはVPC上でネットワークアクセスをサブネットごとに制御するファイアウォール
IPアドレスをもとに許可ルールと拒否ルールの両方を設定可能
ルールはユーザーが付与したルール番号の順番に評価され、ルール間で矛盾がある場合は小さい数字のルールが適用される。デフォルトの設定ではインバウンド通信(外部から内部への通信)、アウトバウンド通信(内部から外部への通信)共に全ての通信が許可されている。
CloudWatch
CloudWatchが監視する様々なリソースの情報を「メトリクス」と呼ばれる
インスタンスのCPU使用率やディスクの使用状況(読み取り・書き込みの量)など、あらかじめ定義されているメトリクスを標準メトリクスと呼ぶ。標準メトリクスはサービスごとに提供されており、CloudWatchのダッシュボードから確認することができる。
CloudWatchではこれらのメトリクスに対してアラームとアクションを設定できる。例えば「EC2インスタンスのCPU使用率が80%超えた時」というアラームに対して「管理者あてにメール通知」というアクションを設定すると、条件を満たした時にアクションが実行される。なお、メール通知はSNS(Simple Notification Service)というメッセージングサービスと連携して実現する。
EC2インスタンスについては、メール通知だけではなく、インスタンスの再起動・停止・終了・復旧というアクションも用意されている。例えば、必要な処理が完了したらインスタンスを停止・終了することでコストを削減できる。また、復旧アクションを選択すると、ハードウェア異常が発生した際に自動的に新たなインスタンスで復旧する。
AWS Organizations
複数のAWSアカウントをまとめて管理する機能に「AWS Organizations」がある。
AWS Organizaitionsでは、管理するAWSアカウントに対して権限を設定したり、管理するAWSアカウントへの請求情報をひとまとめにすることができる
AWS Direct Connect(DX)
AWS Direct Connect(DX)はオンプレミスなどのユーザー環境からAWSへ、専用回線を使ってセキュアに接続するサービス
インターネット回線ではなく専用回線を敷設して使用するので、安定した高速なネットワークで接続できる。
Direct Connectのプライベート接続はDirect Connectエンドポイントと仮想プライベートゲートウェイ(VGW:Virtual Private Gateway)を1対1で接続するので、通常は1つのVPCにしか接続できない。
Direct Connectエンドポイントから複数のVPCに接続したい場合は「Direct Connectゲートウェイ」を利用する。
Direct ConnectゲートウェイはDirect Connectエンドポイントと仮想プライベートゲートウェイの間に配置されて、世界中の各リージョンにある複数のVPCへ接続できるようになる。なお、VPCは他のAWSアカウントのものであっても接続できる。
RDSで35日を超えてスナップショットを保持したい場合
・AWS Backupでバックアッププランを作成する
・手動でスナップショットを取得する
手動で取得したスナップショットには保持期間の上限がない
・自動バックアップで取得したスナップショットをS3バケットへ手動でコピー(エクスポート)する
S3バケットへのコピーは、RDSのスナップショット管理画面やAWS CLIなどから行う
Elastic Cacheのセキュリティについて
ElasticCacheのデータエンジン「Redis」は高パフォーマンス+高可用性に加えて機密性を提供する。
Memcachedには機密性に関する設定はない
Redisには、データ暗号化や、SSL/TLSによる通信の暗号化、クライアントをパスワードで認証するRedis認証を行うことができる。これらを利用するには、ElasticCacheのデータベース作成時に「Redis」を選択し、暗号化を有効にする必要がある
なお、セキュリティの各項目はデフォルトでは無効になっている。セキュリティの項目(データの暗号化・復号や認証など)はパフォーマンスに影響を与える可能性があるので、利用する際には考慮が必要
Amazon Simple Queue Service(SQS)のキューからメッセージを取得する方式
・ショートポーリング
・ロングポーリング
※「ポーリング(polling)」
機器などに対して、一定間隔で順番に問い合わせ(データの送信要求など)を行うこと
メッセージを取得する際、ショートポーリングではメッセージがあった場合はメッセージを返し、メッセージがない場合でも即座に「空である」というレスポンスを返す
一方ロングポーリングでは、メッセージがあった場合はメッセージを返す点は同じですが、メッセージがからである場合は設定された時間(最大20秒)を待つ
時間が経過してもメッセージが得られない場合は、「空」というレスポンスが返る
ショートポーリングの場合はSQSに対するAPIコールの数が増えやすく、コストが高くなる場合がある
その場合、ロングポーリングを使用してAPIコール数を抑えることで、コストを削減することができる。
AWSでは、ロングポーリング方式の使用を推奨している
Lambda関数から他のサービスにアクセスする場合のアクセス権限について
Lambda関数には実行ログを出力するために、CloudWatch Logsへのアクセス権限が割り当てられている。
デフォルトではCloudWatch Logs以外へのアクセス権限はないので、Lambda関数から他のAWSサービスへアクセスさせたい場合はアクセス権限の設定が必要
Lambdaの関数のアクセス権限は、他のAWSサービスへのアクセス権限をもつIAMロールによって付与する。
その際、Well-Architected Frameworkの「最小権限の原則」に基づき、コード実行に必要な最低限の権限のみを割り当てることが推奨されている
Amazon ECS(Elastic Container Service)
Amazon ECS(Elastic Container Service)はコンテナを実行、管理するサービス
「コンテナ」とはアプリケーションと実行環境をパッケージ化する仮想化技術の1種
コンテナによる仮想化を用いてアプリケーションを開発・実行するためのソフトウェアに「Docker」がある
Amazon ECSでは、Docker環境で動作するDockerコンテナをサポートしている
なお、ECSのようなコンテナを管理する仕組みを「コンテナオーケストレーション」という
・コンテナイメージ
アプリケーションとその実行環境を、コンテナの雛形としてパッケージ化したものを「コンテナイメージ」という
コンテナを動作させるソフトウェアである「コンテナエンジン」が、コンテナイメージから「コンテナ」を起動する。
コンテナイメージは異なる環境にそのまま持ち込むことができるので、例えばテスト環境から作成したコンテナイメージを本番環境にコピーしてコンテナを起動すれば、同一の環境を構築できる。
【ECSの主要要素】
・クラスター
1つ以上のタスクまたはサービスで構成される論理グループ
クラスターでは、動作するVPCやサブネットなどを設定する。
・タスク
ECSで管理するコンテナの実行単位
タスク内のコンテナは、実行するコンテナイメージ、CPUやメモリのスペック、タスクロールなどを定義した「タスク定義」に基づいて起動される。
なお、タスクロールとはコンテナが他のAWSサービスを利用する際に設定するアクセス権限(IAMロール)のこと
・サービス
クラスター内で必要なタスク数を維持する機能
あるタスクが以上終了して必要なタスク数を下回った場合、サービスが新しいタスクを起動して自動復旧する。
サービスでは、起動するタスクのタスク定義、必要なタスク数、ELBとの連携などを設定する。
【ECSの起動タイプ】
ECSで実行・管理するコンテナは、コンテナを実行する環境によって主に「AWS Fargate」と「EC2起動タイプ」がある
・AWS Fargate(Fargate起動タイプ)
AWS Fargateはコンテナ向けのサーバーレスコンピューティングエンジン
コンテナ実行環境のCPUやメモリのスペック、アクセス権限(IAM)などを設定するだけで、サーバーの環境構築や管理をすることなくコンテナを実行できる。
Fargateの利用料金は、タスクで指定したCPU/メモリに応じて課金される。実行したタスクのリソース使用量に対して料金が発生するので、不定期にタスクが実行されるシステムや、常にタスクが実行可能な状態でなければならないシステムなどに向いている
・EC2起動タイプ
EC2起動タイプはユーザーが管理するEC2インスタンス上でコンテナを実行する。コンテナを実行するEC2インスタンス、ネットワーク、IAMなどを設定すると、ECSがAWS CloudFormationのスタックを作成および実行して、構築したコンテナ実行環境をECSに登録する。EC2起動タイプでは通常のインスタンスと同様に、OSやミドルウェアのアップデート、スケーリングなどのサーバー管理をユーザーで実施する必要がある
EC2起動タイプの利用料金は、指定したEC2インスタンスタイプに応じて課金される。インスタンスの起動時間に対して料金が発生するので、インスタンス起動中に多数のタスクが実行されるシステムなどに向いている
【Amazon ECR(Elastic Container Registry)】
Amazon ECR(Elastic Container Registry)はコンテナイメージを登録・管理するサービス
ECRに登録されたコンテナイメージをECSが参照し、コンテナ(タスク)を起動できる。ECRのようにコンテナイメージを登録・管理する仕組みを「コンテナレジストリ」という
【マイクロサービス】
マイクロサービスとは最小限の機能を持つ独立したサービスのこと
例えば、オンラインショッピングサービスの機能を「商品管理機能」「ユーザー管理機能」「ショッピングカード機能」「決済機能」にわけ、それぞれが自立して動作するのがマイクロサービス。
マイクロサービスのメリットは、ある機能に障害が発生したりアップデートした場合に他の機能への影響を最小限にできること、機能を別のサービスに流用することが容易になるので開発コストの削減につながることが挙げられる
コンテナはマイクロサービスの実現に適している。
一つのサービスを一つのコンテナで実行することで効率的にマイクロサービスを構築できる。
なおマイクロサービスとは反対に、大きな機能を1つに総括したシステムをモノリシックなシステムという
ALBが対応しているルーティング
・ホストベース
ホストベースのルーティングとは、クライアントがリクエストした接続先URLのFQDNに従ってルーティングできる機能のことです。例えば、クライアントの接続先URLが「http://www1.example.com」の場合はWebサーバー1にアクセスさせて、「http://www2.example.com」の場合はWebサーバー2にアクセスさせることができる。
・パスベース
パスベースのルーティングとは、クライアントがリクエストした接続先URLのパスに従ってルーティングできる機能のことです。例えば、クライアントの接続先URLが「http://www.example.com/web1/」の場合はWebサーバー1にアクセスさせて、「http://www.example.com/web2/」の場合はWebサーバー2にアクセスさせることができる。
・URLクエリ文字列
URLクエリ文字列でのルーティングとは、クライアントがリクエストした接続先URLのクエリ文字列に従ってルーティングできる機能のことです。
URLクエリ文字列とは、ブラウザがWebサーバーに送信するデータをURLに表記したもの
URLが「http://www.example.com/web?lang=jp」であれば「?lang=jp」がURLクエリ文字列に該当する
AWS OpsWorks
AWS OpsWorksはインフラ構築を自動で行うサービスの1つ
自動的に構築を行うサービスとしては他に「Elastic Beanstalk」「Cloud Formation」
Elastic Beanstalk
アプリケーションが動作する定番の環境(EC2インスタンス、S3、RDSなど)を自動で構築する
OpsWorks
構成管理ツールであるChef(シェフ)やPuppet(パペット)を用いて設定をコード化し、EC2インスタンスやEBSなどの管理を自動化する
CloudFormation
JSONやYAMLでAWSリソースの設定を定義し、各種AWSサービスの構築や設定を行う
OpsWorksでは例えば、EC2インスタンス上にサーバー用のパッケージをインストールしてデータベースのセットアップを行い、作成したアプリケーションをデプロイ(動作環境への展開)する、といった一連の作業を自動化することができる。また構築後のアップデート対応やパッチ適用も自動的に行うように設定できる
OpsWorksではEC2インスタンス、EBS、Elastic IPやCloudWatchなどのAWSリソースを自動的に構成・管理することができる。
Chef,Puppetはどちらもサーバーの構成管理(パッケージのインストールやアプリケーションの設定など)をコード化し、デプロイや管理を自動で行うことができるOSS(オープンソースソフトウェア)
OpsWorksには以下の利用形態があり、どのツールを使用するかを選択することができる。
・AWS OpsWorks for Chef Automate
・AWS OpsWorks for Puppet Enterprise
・AWS OpsWorks Stacks
●AWS OpsWorks for Chef Automate
構成管理ツールとしてChefのソフトウェアスイート「Chef Automate」を使用する。
Chef AutomateにはChef本体に加えてテストツールや環境の可視化を行うツールなど導入されている。
ChefサーバーとChefの設定を適用するクライアント群のサーバークライアント方式で構成される
Chefの設定ファイル(レシピ、クックブック)やクライアントへの適用状況はサーバーで管理することができる。
すでにレシピやクックブックを持っている場合は連動が可能
●AWS OpsWorks for Puppet Enterprise
「Puppet Enterprise」はインフラおよびアプリケーション管理を行うPuppetを含むソフトウェアスイート
Puppetサーバーを用意し、設定ファイル(マニフェスト)や設定を行う各ノード(クライアント)の管理を行うことができる。
すでにPuppetのマニフェストを持っている場合は連携が可能
●AWS OpsWorks Stacks
Chefをサーバークライアント方式ではなくローカルで使用するサービス
EC2インスタンスにインストールされているChef Soloクライアントを使用し、自分自身のノードのレシピ管理や状態管理を行う
Lambda関数からプライベートサブネットのAmazon RDSテーブルにアクセスする方法
・Lambda関数にVPCアクセスの設定をする
作成したLambda関数はLambda専用のセキュアなVPCに設置される。
このLambda専用のVPCからは、インターネットや、インターネットを経由してパブリックサブネット内のAWSリソースにはアクセスできるが、プライベートサブネット内のAWSリソースにはアクセスできない
Lambda関数からプライベートサブネット内のAWSリソースへアクセスさせたい場合は「VPCアクセス」の設定を行う
VPCアクセスではアクセスしたいAWSリソースのあるVPCやサブネットの選択と、Lambda関数のセキュリティグループを設定する。VPCアクセスを設定するとLambda関数がサブネットごとに接続用のENI(Elastic Network Interface)を作成して、プライベートサブネット内のAWSリソースへアクセスする。
VPCアクセスを設定したLambda関数は、ENIを作成したサブネットへアクセスできるようになる代わりに、インターネットにアクセスできなくなる。
サーバレスでWebアプリケーションを実行する方法
・AWS Lambda
・Amazon API Gateway
AWS Lambda(ラムダ)はサーバーレスでプログラムのコードを実行できるサービス
サーバーレスとはAmazon EC2などのサーバーを必要とせず、リクエスト発生時だけプログラムが実行されるアーキテクチャ
Amazon API GatewayはAWSサービスと連携するAPIの作成や管理ができる機能
API(Application Programing Interface)とは、クライアントからのリクエストをアプリケーションサーバーに送り、アプリケーションサーバーからのレスポンスをクライアントへ返す接続口(インターフェイス)のこと
例えばクライアントからのHTTPリクエストをAPI Gatewayで受信し、それをトリガーとしてLambda関数を実行させ、レスポンスをAPI Gateway経由で返すことができる。
AWS LambdaとAmazon API Gatewayを利用することで完全にサーバーレスでWebアプリケーションを実行できるので、実行環境の構築や運用コストを抑えることができる。
AWS Elastic Beanstalkで実現可能なこと
・OSやWebアプリケーションを常に最新のバージョンに保つ
AWS Elastic Beanstalkはアプリケーションの実行環境を定番の構成で自動構築するサービス
開発者は、用意された環境にアプリケーションをアップロードするだけでデプロイ(実行環境への展開)を行うことができる。
環境が構築された後も、運用管理などはAWSによって行われる。例えばWebアプリケーションやOSへのアップデートは自動で行われるようにし、常に最新のバージョンに保つことができる。
AWS Secrets Manager
AWS Secrets Managerは、データベースなどのにアクセスする際のシークレット(ログイン時の認証情報など)を管理するサービス
アプリケーションなどからAWSリソースへアクセスする際に Sercrets Managerからシークレットを取得することにより、ログイン情報をアプリケーションにハードコーディングしたり平文で入力しておく必要がない。
また、シークレットは定期的に更新(ローテーション)されたりバージョン管理も行われる。
※ハードコーディング
外に出すべき処理や値をソースコードの中に直接埋め込むこと
AWS Key Management Service(KMS)と連携すると、シークレットを保護するためにCDK(カスタマーデータキー)が使用される。ローテーションが行われるたびCDKも新しいものが自動的に生成されるため、高いセキュリティの認証を実現できる。
Route53のルーティングポリシーのうち、ヘルスチェックの設定が必須のもの
・複数値回答ルーティングポリシー
・フェイルオーバールーティングポリシー
Route53における7種類のルーティングポリシーのうち、シンプルルーティングポリシー以外はヘルスチェックが利用できる。
Route53のヘルスチェックは、ドメイン名に対応するリソースが正常に動作しているかを定期的に確認する。
その結果、正常であったリソースのIPアドレスのみDNSクエリの回答とする
複数値回答ルーティングポリシーとフェイルオーバールーティングポリシーはヘルスチェックの結果に基づいて
回答するので、ヘルスチェックの設定が必須
AWS Global Accelerator
AWS Global Acceleratorは、複数のリージョンで展開しているWebアプリケーションなどへのリージョン間の負荷分散が可能。負荷分散先(エンドポイント)はALB、NLB、EC2インスタンス、Elastic IPアドレスを指定できる。
Global Acceleratorは2つの固定パブリックIPアドレスを保有しており、ユーザーはこの固定IPアドレスへアクセスする。エンドポイントが増減してもIPアドレスに影響なくサービスを継続できるため可用性が向上する。
また、Elastic IPアドレスを割り当てられないALBへのアクセスが、Global Acceleratorを利用して固定IPアドレスでアクセス可能になる
Redis版のElasticCacheによるサービスの可用性を上げるためにおこなえる施策
・自動フェイルオーバーを備えたマルチAZを設定する
RedisはMemcachedよりも高機能なデータベースエンジンで、耐障害性の機能として「自動フェイルオーバー」「マルチAZ」を備えている。自動フェイルオーバー機能により、プライマリインスタンスに障害が発生した場合は自動的にレプリカインスタンスがプライマリインスタンスへ昇格する。
またマルチAZではAZ(Availability Zone)を跨いだレプリケーションが可能なため、プライマリインスタンスが存在するAZに障害が発生した場合でも別のAZのレプリカインスタンスを昇格させることにより運用を継続することができる。
※Elastic Cacheにおいて、各ノードは「キャッシュノード」と呼ばれる。キャッシュノードのうち、プライマリノードは更新・参照などを行えるノードで、レプリカノードは参照のみを行えるノード(リードレプリカ)
インターネットからプライベートサブネット上のEC2インスタンスにポート転送するためにVPCに対して必要な作業
・パブリックサブネットにNATインスタンスを作成し、NATインスタンスへのルーティングを設定する。
NATインスタンスは、NATゲートウェイと同じくプライベートサブネットからインスターネットへの通信を可能にするIPv4専用の機能
NATゲートウェイはマネージドサービスなどに対し、NATインスタンスはEC2インスタンスから作成するため、ユーザーが障害対応などの運用管理を実施する必要がある
NATインスタンスは、NATゲートウェイでは利用できないポート転送機能を設定できる。
ここでいうポート転送とは、インターネットから送信された特定のポート番号宛のデータを、プライベートサブネット内にあるインスタンスの別のポートへ転送することをいう
AWS Storage Gateway
AWS Storage Gatewayは、オンプレミス(自社環境)からAWSのストレージサービスへのアクセスを高速かつセキュアに行うことができるサービス。堅牢性・耐久性に優れたS3をファイル共有ストレージとして利用したり、災害対策を目的としたバックアップやアーカイブを行ったり、あまりアクセスされないデータを自社サーバーからAWSへ移動させるなど、さまざまなケースで利用することができる。
なお、頻繁に利用するデータは高速なストレージに保存し、反対に利用頻度の低いデータを安価・低速なストレージに配置することをストレージの階層化という。利用頻度に応じて性能の異なるストレージを使い分けることで、コストとパフォーマンスを両立させることができる。
Storage GatewayそのものはS3やEBSなどのようなストレージではない。
Gateway(規格の異なるネットワーク感を中継して接続する機器)の名が示す通り、オンプレミスとAWSのストレージサービスとの橋渡しする役目を持つサービス
ユーザーはStorage Gatewayを利用することによって、Amazon S3やGlacierなどのストレージサービスをデータの保存先として選択することができる。
Storage Gatewayのゲートウェイタイプ(3つある)
ファイルゲートウェイ(ファイル単位)
NFS、SMBに対応しており、S3をファイル共有ストレージとして使用できる
ボリュームゲートウェイ:キャッシュ型(ボリューム単位)
高頻度アクセスのデータのみをローカルに残してS3上へデータを保存する
ボリュームゲートウェイ:保管型(ボリューム単位)
全てのデータのコピーをローカルに保持しつつS3上へデータを保存する
テープゲートウェイ(仮想テープ単位)
物理テープストレージの代替として使用できる
NATインスタンス
NATインスタンスは、NATゲートウェイと同じくプライベートサブネットからインターネットへの通信を可能にするIPv4専用の機能
NATゲートウェイはマネージドサービスなのに対して、NATインスタンスはEC2インスタンスから作成するため、ユーザーが障害対応などの運用管理を実施する必要がある
NATインスタンスは、NATゲートウェイでは利用できないポート転送機能を設定できたり、VPC外からプライベートサブネット内へ接続する際の踏み台サーバーとして利用できる。
踏み台サーバーとは、例えばインターネットからプライベートサブネット内にあるサーバーの保守をしたい場合に、一旦NATインスタンスへSSH接続した後、NATインスタンスから目的のサーバーへ再度SSH接続をすることで、VPC外からは直接接続できないプライベートサブネット内のサーバーへの接続を可能にするもの
Auto Scalingの「動的スケーリング」
Auto Scalingのスケーリングはリソースの負荷状況やスケジュールに従って自動的に実施させるほか、手動で実施することもできる。
スケーリングの発生条件のうち「動的スケーリング」は、CPUやネットワークなどのパフォーマンスの負荷状況に応じて、自動的にスケールアウト(リソースの増加)/スケールイン(リソースの削減)を実施する
動的スケーリングを利用するには、スケーリングの発生条件となるメトリクスと、スケールアウト/スケールインのアクションを「動的スケーリングポリシー」に設定する
動的スケーリングは、スケーリングの発生条件によって「シンプルスケーリング」「ステップスケーリング」「ターゲット追跡スケーリング」の3つのタイプに分れている。
・シンプルスケーリング
1つのメトリクス(CPU使用率などシステムのパフォーマンスに関するデータ)に対する1つの閾値に基づいて、インスタンスを増減する
例:300秒間の平均CPU使用率が50%を超えたら、インスタンスを1台追加する
・ステップスケーリング
1つのメトリクスに対する複数の閾値に基づいて、インスタンスの増減を段階的に行う
例:300秒間の平均CPU使用率が50%を超えたら、インスタンスを1台追加し、90%を超えたら2台追加する
・ターゲット追跡スケーリング
1つのメトリクスが指定した目標値になるように、インスタンスを増減する。増減するインスタンス数はAWS側で調整する
例:平均CPU使用率を30%に維持する
NATゲートウェイとインターネットゲートウェイ違い
・NATゲートウェイ
プライベートサブネットからインターネットへの通信を可能にする機能
インターネットからサブネット内への通信は拒否する
・インターネットゲートウェイ
インターネットからVPC内のEC2インスタンスへアクセスするには、インターネットゲートウェイをVPCに作成する
インターネットゲートウェイはインターネットとVPC内のAWSリソースを接続する機能
Amazon EFSのパフォーマンスモード
Amazon EFS(Elastic File System)では、ファイルシステムに対する読み取り・書き込み性能(パフォーマンス)をユーザーが調整できる。パフォーマンスの設定には、ファイルシステム作成時にのみ設定する「パフォーマンスモード」と、運用中に変更が可能な「スループットモード」がある。パフォーマンスモードではファイルシステムの基本的な性能を設定できる。
パフォーマンスモードには以下の2つがある
・汎用パフォーマンスモード
一般的な用途向けのモード
・最大I/Oパフォーマンスモード
ビッグデータの解析などの大容量データや、数千台のクライアントの処理向けのモード
なお、運用中にEFSの処理性能を向上させたい場合には「スループットモード」を利用する
スループットモードでは秒間の転送容量(GB/秒)を調整し、一時的な高負荷に対応することができる
スループットモードには以下の2つがある
・バーストスループットモード
ストレージの容量に従ってベースライン性能(基本性能)が設定され、一時的に負荷が高くなった場合はベースライン性能を2倍まで性能向上できる。
・プロビジョンドスループットモード
ユーザーが予約した(provisioned)性能をAWSが保証してスループットを提供する
S3のデータ暗号化
S3のデータ暗号化には「サーバー側の暗号化」と「クライアント側の暗号化」の2種類の方法がある
「サーバー側の暗号化」はデータをS3に保存するときにサーバーで暗号化する方法
サーバー側の暗号化では、データがS3に保存されるタイミングでS3が暗号化を行う。データを取り出す際にもS3がデータを複合して、ユーザーに渡す
「クライアント側の暗号化」はデータをS3に保存する前にクライアント側で暗号化する方法
クライアント側の暗号化では、データをS3へ保存する前にクライアント側で暗号化を行い、暗号化したデータをS3に保存する。データを取り出す際にも、暗号化したデータをS3からダウンロードした後、クライアント側で複合する
Amazon Kinesis
Amazon Kinesisはストリーミングデータをリアルタイムで収集・処理するサービス
ストリーミングデータとは継続的に生成されるデータのことを指す
例えばスマートフォンアプリなどでユーザーが生成するログや、証券取引所の株取引情報、SNSやオンラインゲームのデータなどの継続的に生成されるデータが該当する。 Kinesisではこのようなストリーミングデータを収集し、サンプリングや分析などの処理を通して、リアルタイムなトレンド情報をユーザーへフィードバックしたり、企業の経営戦略などにつなげることができる。なお、ストリーミングデータを処理することを「ストリーム処理」という
また、その他のデータ処理方式に「バッチ処理」がある
バッチ処理はまとまったデータに対して一括で処理を行う方式。バッチ処理は、日次、週次、月次、年次の集計処理のように特定範囲のデータに対して定期的に実行される
多くの企業ではストリーム処理とバッチ処理の両方を用いてシステムを構築し、柔軟なデータ解析を行なっている
●kinesis Data Streams
Kinesis Data Streamsは外部から送信されるストリーミングデータを収集するサービス
センサーなどが生成したストリーミングデータを Kinesis Data Streamsのストリームへ送信し、ストリーム上のデータは分析や機械学習などを行うアプリケーションがリアルタイムに読み出して処理を行う。
なお、収集したデータには保持期間(デフォルトで24時間、最長で1年)がある
なお、 Kinesisではストリーミングデータを生成し送信するデバイスやサービスなどを「プロデューサー」、ストリーミングデータを読み出して処理する側を「コンシューマー」と呼ぶ
Kinesis Data Streamsでは、ストリーミングデータを「データレコード」という単位で処理する。
データレコードには、データそのものに加えて「パーティションキー」「シーケンス番号」が含まれる
・パーティションキー
どのシャードで処理するかを決めるもの。プロデューサー側で設定する
・シーケンス番号
シャードごとに1意の番号。シャード内のデータレコードの順序性が保証される
データレコードは「シャード」に分散され処理される。シャードは、ストリームで処理できるデータの容量を決めるもので、シャードが多いほど並列処理の数が増えてスループットが上がる
●Kinesis Data Firehose
Kinesis Data FirehoseはストリーミングデータをAmazon S3(ストレージ)、Amazon Redshift(データベース)、Amazon Elasticsearch Service(データ分析)などのサービスへ配信する。Kinesis Data Firehoseへ送信されたストリーミングデータは事前に設定されたデータ配信先へ配信される
中継するアプリケーションを独自に実装する必要がない
●Kinesis Data Analytics
Kinesis Data Analyticsは、Kinesis上のストリーミングデータを処理、可視化・分析できるサービス。
処理用のテンプレートが用意されていたり、標準SQLのクエリが発行できたり、JavaやPythonなどのプログラミング言語がサポートされているなど、柔軟に処理を組み合わせることができる。
データをデータベースへ移行することなく処理することで、リアルタイムに結果を得ることができる
●Kinesis Video Streams
カメラやビデオなどの動画(ビデオストリーム)を取り込むサービス
取り込んだ動画データはアプリケーションなどによって解析や加工、再生などを行うことができる。
EBSよりもインスタンスストアの方が高いパフォーマンスを出せる
EBSで最も高性能なボリュームタイプでも64000IOPSですが、インスタンスストアは数百万IOPSを発揮する。
IOPS(Input Output per Second)
1秒間にどれだけI/O(Input/Output:読み取り/書き込み)が行えるかを意味する性能指標
なお、インスタンスストアはEC2インスタンスから利用できる揮発性の(インスタンス稼働中にだけ利用可能な)ブロックストレージ。ホストコンピュータに物理的に割り当てられたディスク上にあり、頻繁に変更される情報の一時的なストレージとして利用できる。
インスタンスストアの特徴
・EC2インスタンスを停止・終了すると、保存したデータは削除される
・無料で利用できる
EC2インスタンスのユーザーデータについて
ユーザーデータは、ユーザーがEC2インスタンス作成時に自動実行させたいコマンドやスクリプト
ユーザーデータは必須の設定項目ではないが、設定したコマンドやスクリプトによってEC2インスタンス作成と同時にOSの設定やミドルウェアのインストールをすることで、インスタンスの作成完了後すぐに必要な環境を構築済みにできる
SQSの遅延キューとメッセージタイマー
メッセージの送信者が送信したメッセージを指定時間経過後に受信させたい場合は、「遅延キュー(Delay Queue)」または「メッセージタイマー(Message Timer)」を使用する
キューに投入されたメッセージは、指定された時間が経過した後に受信可能になる
遅延キューはキュー全体に対して作用し、メッセージタイマーは特定のメッセージに対して作用する
Well-Architected Framework「信頼性」の設計原則
・障害から自動的に復旧する
リアルタイムでのパフォーマンスの監視と、閾値を超過した場合の復旧プロセスを自動化することにより、障害からいち早く復旧できる
・復旧手順をテストする
障害発生と対応する復旧手順のテストをすることにより、実際の障害が発生する前に復旧手順の確認や改善ができる。
・水平方向にスケールしてシステム全体の可用性を高める
1つの大規模なリソースを複数の小規模なリソースに置き換えることにより、単一の障害がシステム全体に与える影響を軽減できる。
・キャパシティーを推測しない
システムの使用率を監視してリソースの追加や削除を自動化することにより、需要に対して常に適切なキャパシティーで運用できる。
・自動化で変更を管理する
AWSリソースの増減やアプリケーションのデプロイ、セキュリティパッチ適用などの変更は自動化して実行し、変更した内容を管理する
AWS VPN(Virtual Private Network)
AWS VPNはオンプレミスなどのユーザー環境からAWSへ、インターネットVPNでセキュアに接続するサービス
AWS VPNではインターネット回線を利用するので、専用回線を敷設するDirect Connectより安価に、かつ短い期間で接続を開始できる
・インターネットVPN
インターネット回線を使って拠点同士を仮想の専用線で接続し、暗号化通信を行う技術のこと
AWS Directory Service
AWS Directory Serviceは、MicrosoftのActive Directory(AD)をAWS上で提供するマネージドサービス
ADはネットワーク上のリソース情報(ユーザアカウントやデバイスなど)を一元管理でき、ユーザーやWindowsサーバーの管理・認証ができる。AWS Directory Serviceも同様の機能を持つのに加え、他のAWSサービスと連携することでAWSサービスへの認証にADを利用できる。
RDSのAuto Scalingについて
・RDSのAuto Scalingは、EC2 Auto Scalingとは異なり、データベースの容量が枯渇した際に行われるスケーリング
増えたストレージ容量は減らす(ストレージを縮小する)ことはできない
キーペアについて
・パブリックキーがAWS上に保管される
キーペアとは、EC2インスタンスに安全に接続するための暗号鍵のペアのこと
AWS上に保管されるパブリックキーと、ユーザーの環境上に保管するプライベートキーの2つの鍵で構成される
1組のキーペアを複数のインスタンスに紐づけて使える。
インスタンスに紐つけたキーペアのパブリックキーと、ユーザが接続時に使用するプライベートキーの組み合わせが一致する場合のみ、インスタンスに接続できる
RDSにおいて、データアクセス時のパフォーマンスを改善するために有効な手段
・データベースのインスタンスクラス(EC2におけるインスタンスタイプと同様)を変更することにより、スケールアップ(拡張)、スケールダウn(縮小)も柔軟に行うことができる。
スケールアップ/ダウンではインスタンスの性能(CPUやメモリなど)が変動するが、性能の良いインスタンスはその分料金もかかる
・負荷分散を行うことをスケールアウト(Scale out)、データベースインスタンスを拡張することをスケールアップ(Scale up)という。いずれも、データベースアクセスのパフォーマンス改善に機能する。
Well-Architected Frameworkの「一般的な設計原則」
・必要なキャパシティーの推測が不要に
・本番規模でシステムをテストする
・自動化によってアーキテクチャでの実験を容易にする
・発展するアーキテクチャが可能に
・データに基づいてアーキテクチャを進化させる
・ゲームデーを利用して改善する
Amazon DynamoDB キャパシティユニット
Amazon DynamoDBでは、テーブルに対する書き込み・読み込みのスループットを「キャパシティユニット」という単位で管理している。
これは1秒間にどれだけ読み込み・書き込みを行うかを予約する設定で、容量が大きいほど料金がかかる
・WCU(Write Capacity Unit)
最大1KBのデータを1秒間に1回の書き込み
・RCU(Read Capacity Unit)
最大4KBのデータを1秒間に1回読み込み(強い整合性を持たない読み込みの場合は2件)
また、Dynamo DBのデータはパーティションという単位で分散して保存される。
パーティション分割によって1カ所にデータを集中させないようにすることで、プロビジョニング(予約)されたスループットを保てるようにする。
従って、プロビジョニングされたキャパシティの量、すなわちキャパシティユニットを増やすと、スループットも大きくなり、パーティションの数が最小限に抑えらえる
Auto Scaling 「終了ポリシー」
Auto Scalingグループでスケールインが発生した時に、どの優先順位でリソースを削除するのかを「終了ポリシー」にて設定できる。リソース数が最も多いAZ内で、以下の中から選択した優先順位でリソースが削除される。
・最も起動時刻が過去のリソース
・最も起動時刻が新しいリソース
・最も作成時刻が過去の起動設定を利用して起動されたリソース
・次の課金タイミングが最も早いリソース
※デフォルトの場合は「最も作成時刻が過去の起動設定を利用して起動されたリソース」が選択される
スケールイン時に特定のリソースが終了されないようにするには、「インスタンスの保護」を有効にする必要がある。
Auto Scalingのヘルスチェックの猶予期間
Auto Scalingのヘルスチェックの猶予期間は、リソースが起動してから初回のヘルスチェックまでの待機時間
ヘルスチェックの猶予期間を設定することで、リソースが起動してアプリケーションなどが立ち上がる前にヘルスチェックが実行されてしまい、ヘルスチェックが異常になってしまうのを防ぐ
ELB経由でクライアントからWebサーバーまでのすべての通信を暗号化する方法
・ELBとターゲットにサーバー証明書を導入する
クライアントとELB間、ELBとターゲット間で別の暗号化通信を行う方法
暗号化接続はELBが終端となり、ELBから別の暗号化接続を確立して通信する
ELB、ターゲットに暗号化・復号による負荷がかかるが、クライアントからターゲットまでの通信全てを暗号化できる
ALB,CLBが対応している
クライアントとWebサーバー間の暗号化通信はHTTPSプロトコルを利用する
・ターゲットにサーバー証明書を導入する
ELBでは暗号化・複合せず、直接クライアントとターゲット間で暗号化通信を行う方法
ターゲットに暗号化・復号による負荷が発生するが、ELBによる暗号化・復号の遅延を発生させずに通信全てを暗号できる。
NLB、CLBが対応している
クライアントとWebサーバー間の暗号化通信にHTTPSプロトコルを利用しつつ、経由するELBはTCPプロトコルを利用することにより、HTTPS通信がELBで暗号化・復号されずに通過する
AWS CloudFormation スタックセット
AWS CloudFormationで作成したテンプレートをもとに、複数のAWSアカウントで、または複数のリージョンでスタックを構築した場合には「スタックセット(Stack Sets)」を利用する。管理者アカウントで作成したテンプレートを利用して、ターゲットアカウント(プロビジョニングを行うアカウント)とプロビジョニングを行うリージョンを指定することで、一度の操作で複数の同じ環境を構築できる
テスト環境を複数構築したい場合や、新たにアカウントを払い出す際に下準備となる操作(IAMやセキュリティグループの設定など)をスタックセットとして作成しておく、といった利用ができる
AWS Key Management Service エンベロープ暗号化
AWS KMSでは「CMK(Customer Master Key:カスタマーマスターキー)」「CDK(Customer Data Key:カスタマーデータキー)」と呼ばれる2種類の鍵を使用してデータの暗号化および復号を行う。
このように二段階で鍵を保護する方式を「エンベロープ暗号化(Envelope Encryption)」という
KMSでは、CMKとCDKという二段階で鍵を管理することによってセキュリティの向上を図っている
「CMK」はCDKを暗号化する際に使用し、「CDK」はデータを暗号化する際に使用する
CDKは通常、暗号化を行う対象のサービスごとに作成する。これにより、1つのCDKが漏洩したとしても他のCDKで暗号化されたサービスへは影響しない。
また、CDKをCMKで暗号化することによって、運用時に頻繁に使用されるCDKを保護する
署名付きURL
署名付きURLは、非公開設定されたオブジェクトに対して有効期限のついたURLを発行することで、AWSアカウントを持っていないユーザーでも一時的にアクセスが可能になる機能
大容量(バルク)取り出し
S3Glacierに保存されているアーカイブは直接ダウンロードできないため、復元リクエストを行い一旦S3バケットに取り出す
データの取り出しには復元リクエストが必要で、データ量に応じた料金がかかる
大容量のデータを取り出す場合は、復元リクエストに大容量(バルク)取り出しオプションを適用すると、標準の取り出しより時間がかかりますが料金が安価になる
RDS パラメータグループ オプショングループ
タイムゾーンや最大接続数、監査ログの有効化など、データベースの設定を変更したい場合、RDSでは「パラメータグループ(クラスターパラメータグループ)」または「オプショングループ」で定義する。
パラメータグループ、オプショングループはDBエンジンごとに作成するパラメータまたはオプションの定義グループで、作成は複数のデータベース(またはデータベースクラスター)へアタッチできる。
データベースを作成するとデフォルトのパラメータグループおよびオプショングループがアタッチされますが、デフォルトのグループは編集ができない
設定変更したい場合は新たにパラメータグループまたはオプショングループを作成し、データベースへアタッチする必要がある
ELBのうち、固定IPアドレスを割り振れるもの
・NLB
ELBのうち固定IPアドレスを割り当てることができるのは「NLB」
NLBをElastic IPアドレス(固定のパブリックIPアドレス)と関連つけることによって、クライアントからNLB配下のサーバーに、NLBに関連つけられたElastic IPアドレスでアクセスできるようになる
サーバーへのアクセスをドメイン名ではなくIPアドレスで行いたい場合や、クライアントのアクセス先をIPアドレスで管理・制限している環境などで有用