【セキュリティ】~既存のツールを有効に活用する~
まずは、1つ目の柱であるセキュリティについて。とりわけ、「AWSアカウントをどう保護するか」というテーマにフォーカスして、菊池氏は話し始めた。
「AWSアカウントの安全性を確保するために、適切な管理が必要になるものは数多くあります。例えば、ルートアカウントやAWSのユーザー、ロールなどの権限まわり。アクセスキーやパスワードといった認証情報。『Amazon S3』へのアクセス許可などです」
AWSセキュリティ関連のトラブルで特に多いのが、アクセスキーの漏洩だ。アクセスキーをソースコード内にハードコーディングしたままGitHubにアップしてしまい、その情報を不正利用されてしまう事例は枚挙にいとまがない。あるいはAmazon S3上のファイルがインターネットに上に公開されてしまい、機密データを第三者に閲覧される事例もよく起きている。
これらを防ぐには、クラスメソッド提供のセキュリティ監査サービスである「インサイトウォッチ」が効果的だと菊池氏は語る。
「インサイトウォッチは、AWSのセキュリティ設定が適切に行われているかをチェックしてくれるサービスです。チェック項目は、Center for Internet Security (CIS) ベンチマークという標準に従っているため、厳格にセキュリティを検証できます。このサービスは無償で利用可能です。
他にも、AWSで提供されている『Amazon GuardDuty』というサービスも、セキュリティを高めるのに役立ちます。さまざまなイベントログを分析し、攻撃の前兆となるような挙動を検知してくれるんです」
【信頼性】~すべてのシステムコンポーネントは故障しうると仮定して設計する~
続いて、2つ目の柱である信頼性について。AWS Well-Architected Frameworkでは、「すべてのシステムコンポーネントは故障しうると仮定して設計すべき」であると提言されている。では、障害を未然に防ぎ、かつ障害が発生しても被害を最小限に抑えるには何をすべきなのだろうか。
「まず有効なのは、複数のアベイラビリティゾーンを利用することです。アベイラビリティゾーンとは、特定のリージョンのなかにある複数の独立したロケーションのこと。これらをまたいでシステムを構成することで、信頼性が高くなります。さらにはサービスの稼働状況のモニタリングも重要です。単純なサーバーの死活だけではなく、サービスそのものが正常に動いているかをモニタリングしてください」
さらに、ディザスタリカバリ(システム障害が発生した際に、システムを迅速に復旧するための仕組み)を用意することも、信頼性向上のためには必要だ。構成パターンとしては、大きく4つの方法がある。
1つ目は、「バックアップ&リストア」という方法だ。バックアップファイルのみを別のリージョンに退避しておく考え方である。2つ目は、「パイロットライト」という方法。これは、停止した状態のサーバーを別のリージョンに用意しておき、障害発生時に立ち上げるというものである。
非常時の際に、サービスを迅速に別のリージョンに展開したい場合には、「ウォームスタンバイ」という方法が効果的だ。これは、平常時は最小限のリソースでサーバーを起動しておき、非常時にサーバーをスケールさせるというものである。また、より信頼性を高めるには、常時複数のリージョンを用いてサービスを提供する「マルチサイト」という方法が用いられる。
ただし、耐障害性を高めれば高めれば高めるほど、比例してコストも増大する。システムの費用対効果を考えながらアーキテクチャを選定することが重要だ。